Skip to content

Commit 449c1bf

Browse files
Erolshishirmk
authored andcommitted
Allow passing procs with variable arguments when declaring an attribute
1 parent 49193ab commit 449c1bf

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

lib/fast_jsonapi/attribute.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def initialize(key:, method:, options: {})
1111
def serialize(record, serialization_params, output_hash)
1212
if include_attribute?(record, serialization_params)
1313
output_hash[key] = if method.is_a?(Proc)
14-
method.arity == 1 ? method.call(record) : method.call(record, serialization_params)
14+
method.arity.abs == 1 ? method.call(record) : method.call(record, serialization_params)
1515
else
1616
record.public_send(method)
1717
end
@@ -26,4 +26,4 @@ def include_attribute?(record, serialization_params)
2626
end
2727
end
2828
end
29-
end
29+
end

spec/lib/object_serializer_class_methods_spec.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,22 @@
230230
expect(serializable_hash[:data][:attributes][:title_with_year]).to eq "#{movie.name} (#{movie.release_year})"
231231
end
232232
end
233+
234+
context 'with &:proc' do
235+
before do
236+
movie.release_year = 2008
237+
MovieSerializer.attribute :released_in_year, &:release_year
238+
end
239+
240+
after do
241+
MovieSerializer.attributes_to_serialize.delete(:released_in_year)
242+
end
243+
244+
it 'returns correct hash when serializable_hash is called' do
245+
expect(serializable_hash[:data][:attributes][:name]).to eq movie.name
246+
expect(serializable_hash[:data][:attributes][:released_in_year]).to eq movie.release_year
247+
end
248+
end
233249
end
234250

235251
describe '#link' do

0 commit comments

Comments
 (0)