mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16:50 +00:00
Generate id method on Ruby 1.8.
Because object_id and id went through some flux, it's best to tell 1.8 specifically what we mean. Closes #127.
This commit is contained in:
parent
145b6d499d
commit
c129ae2016
@ -1,5 +1,8 @@
|
|||||||
# unreleased
|
# unreleased
|
||||||
|
|
||||||
|
* On Ruby 1.8, we now generate an `id` method that properly serializes `id`
|
||||||
|
columns. See issue #127 for more.
|
||||||
|
|
||||||
* Add an alias for `scope` method to be the name of the context. By default
|
* Add an alias for `scope` method to be the name of the context. By default
|
||||||
this is `current_user`. The name is automatically set when using
|
this is `current_user`. The name is automatically set when using
|
||||||
`serialization_scope` in the controller.
|
`serialization_scope` in the controller.
|
||||||
|
|||||||
@ -12,9 +12,10 @@ module Rails
|
|||||||
template 'serializer.rb', File.join('app/serializers', class_path, "#{file_name}_serializer.rb")
|
template 'serializer.rb', File.join('app/serializers', class_path, "#{file_name}_serializer.rb")
|
||||||
end
|
end
|
||||||
|
|
||||||
# hook_for :test_framework
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
def generate_id_method
|
||||||
|
RUBY_VERSION =~ /1\.8/
|
||||||
|
end
|
||||||
|
|
||||||
def attributes_names
|
def attributes_names
|
||||||
[:id] + attributes.select { |attr| !attr.reference? }.map { |a| a.name.to_sym }
|
[:id] + attributes.select { |attr| !attr.reference? }.map { |a| a.name.to_sym }
|
||||||
|
|||||||
@ -4,5 +4,16 @@ class <%= class_name %>Serializer < <%= parent_class_name %>
|
|||||||
<% association_names.each do |attribute| -%>
|
<% association_names.each do |attribute| -%>
|
||||||
has_one :<%= attribute %>
|
has_one :<%= attribute %>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
|
<% if generate_id_method %>
|
||||||
|
|
||||||
|
# due to the difference between 1.8 and 1.9 with respect to #id and
|
||||||
|
# #object_id, we reccomend that if you wish to serialize id columns, you
|
||||||
|
# do this. Feel free to remove this if you don't feel that it's appropriate.
|
||||||
|
#
|
||||||
|
# For more: https://github.com/rails-api/active_model_serializers/issues/127
|
||||||
|
def id
|
||||||
|
object.read_attribute_for_serialization(:id)
|
||||||
|
end
|
||||||
|
<% end -%>
|
||||||
end
|
end
|
||||||
<% end -%>
|
<% end -%>
|
||||||
|
|||||||
@ -36,6 +36,18 @@ class SerializerGeneratorTest < Rails::Generators::TestCase
|
|||||||
Object.send :remove_const, :ApplicationSerializer
|
Object.send :remove_const, :ApplicationSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_serializer_gets_id
|
||||||
|
run_generator
|
||||||
|
|
||||||
|
assert_file "app/serializers/account_serializer.rb" do |content|
|
||||||
|
if RUBY_VERSION =~ /1.8/
|
||||||
|
assert_match /def id/, content
|
||||||
|
else
|
||||||
|
assert_no_match /def id/, content
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# def test_uses_namespace_application_serializer_if_one_exists
|
# def test_uses_namespace_application_serializer_if_one_exists
|
||||||
# Object.const_set(:SerializerNamespace, Module.new)
|
# Object.const_set(:SerializerNamespace, Module.new)
|
||||||
# SerializerNamespace.const_set(:ApplicationSerializer, Class.new)
|
# SerializerNamespace.const_set(:ApplicationSerializer, Class.new)
|
||||||
@ -66,6 +78,8 @@ class SerializerGeneratorTest < Rails::Generators::TestCase
|
|||||||
|
|
||||||
def test_with_no_attributes_does_not_add_extra_space
|
def test_with_no_attributes_does_not_add_extra_space
|
||||||
run_generator ["account"]
|
run_generator ["account"]
|
||||||
assert_file "app/serializers/account_serializer.rb", /class AccountSerializer < ActiveModel::Serializer\n attributes :id\nend/
|
assert_file "app/serializers/account_serializer.rb" do |content|
|
||||||
|
assert_no_match /\n\nend/, content
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user