diff --git a/.rubocop.yml b/.rubocop.yml index 43ccb9f56..e6a1a7e47 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -10,7 +10,7 @@ AllCops: Style/IndentationConsistency: Exclude: - - lib/active_model/serializer/adapter/flatten_json.rb + - lib/active_model/serializer/adapter/attributes.rb - lib/active_model/serializer/adapter/fragment_cache.rb - lib/active_model/serializer/adapter/json.rb - lib/active_model/serializer/adapter/json/fragment_cache.rb @@ -21,7 +21,7 @@ Style/IndentationConsistency: Style/IndentationWidth: Exclude: - - lib/active_model/serializer/adapter/flatten_json.rb + - lib/active_model/serializer/adapter/attributes.rb - lib/active_model/serializer/adapter/fragment_cache.rb - lib/active_model/serializer/adapter/json.rb - lib/active_model/serializer/adapter/json/fragment_cache.rb @@ -32,7 +32,7 @@ Style/IndentationWidth: Style/AccessModifierIndentation: Exclude: - - lib/active_model/serializer/adapter/flatten_json.rb + - lib/active_model/serializer/adapter/attributes.rb - lib/active_model/serializer/adapter/fragment_cache.rb - lib/active_model/serializer/adapter/json.rb - lib/active_model/serializer/adapter/json/fragment_cache.rb diff --git a/README.md b/README.md index 3e17220e3..42f6cd7a4 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ AMS does this through two components: **serializers** and **adapters**. Serializers describe _which_ attributes and relationships should be serialized. Adapters describe _how_ attributes and relationships should be serialized. -By default AMS will use the **Flatten Json Adapter**. But we strongly advise you to use **JsonApi Adapter** that follows 1.0 of the format specified in [jsonapi.org/format](http://jsonapi.org/format). +By default AMS will use the **Attributes Adapter**. But we strongly advise you to use **JsonApi Adapter** that follows 1.0 of the format specified in [jsonapi.org/format](http://jsonapi.org/format). Check how to change the adapter in the sections bellow. # RELEASE CANDIDATE, PLEASE READ @@ -66,7 +66,7 @@ ActiveModel::Serializer.config.adapter = :json_api You won't need to implement an adapter unless you wish to use a new format or media type with AMS. -If you want to have a root key on your responses you should use the Json adapter, instead of the default FlattenJson: +If you want to have a root key on your responses you should use the Json adapter, instead of the default Attributes: ```ruby ActiveModel::Serializer.config.adapter = :json @@ -137,7 +137,7 @@ render json: @post, meta: { total: 10 }, meta_key: "custom_meta" ``` `meta` will only be included in your response if you are using an Adapter that supports `root`, -as JsonAPI and Json adapters, the default adapter (FlattenJson) doesn't have `root`. +as JsonAPI and Json adapters, the default adapter (Attributes) doesn't have `root`. ### Using a serializer without `render` @@ -190,7 +190,7 @@ end ### Built in Adapters -#### FlattenJSON +#### Attributes It's the default adapter, it generates a json response without a root key. Doesn't follow any specifc convention. diff --git a/docs/general/adapters.md b/docs/general/adapters.md index 59d4cbae3..bbc6dfa66 100644 --- a/docs/general/adapters.md +++ b/docs/general/adapters.md @@ -3,11 +3,11 @@ AMS does this through two components: **serializers** and **adapters**. Serializers describe _which_ attributes and relationships should be serialized. Adapters describe _how_ attributes and relationships should be serialized. -You can use one of the built-in adapters (```FlattenJSON``` is the default one) or create one by yourself, but you won't need to implement an adapter unless you wish to use a new format or media type with AMS. +You can use one of the built-in adapters (```Attributes``` is the default one) or create one by yourself, but you won't need to implement an adapter unless you wish to use a new format or media type with AMS. ## Built in Adapters -### FlattenJSON - Default +### Attributes - Default It's the default adapter, it generates a json response without a root key. Doesn't follow any specifc convention. @@ -51,7 +51,7 @@ ActiveModel::Serializer.config.adapter = :json_api ``` If you want to have a root key for each resource in your responses, you should use the Json or -JsonApi adapters instead of the default FlattenJson: +JsonApi adapters instead of the default Attributes: ```ruby ActiveModel::Serializer.config.adapter = :json diff --git a/docs/general/configuration_options.md b/docs/general/configuration_options.md index 2512bf469..8288b3c09 100644 --- a/docs/general/configuration_options.md +++ b/docs/general/configuration_options.md @@ -4,7 +4,7 @@ The following configuration options can be set on `ActiveModel::Serializer.confi ## General -- `adapter`: The [adapter](adapters.md) to use. Possible values: `:flatten_json, :json, :json_api`. Default: `:flatten_json`. +- `adapter`: The [adapter](adapters.md) to use. Possible values: `:attributes, :json, :json_api`. Default: `:attributes`. ## JSON API diff --git a/docs/howto/add_pagination_links.md b/docs/howto/add_pagination_links.md index d9f01e49c..11ce9b9c5 100644 --- a/docs/howto/add_pagination_links.md +++ b/docs/howto/add_pagination_links.md @@ -110,6 +110,6 @@ ex. } ``` -### FlattenJSON adapter +### Attributes adapter This adapter does not allow us to use `meta` key, due to that it is not possible to add pagination links. diff --git a/docs/howto/add_root_key.md b/docs/howto/add_root_key.md index f03388033..51f0f1e1f 100644 --- a/docs/howto/add_root_key.md +++ b/docs/howto/add_root_key.md @@ -1,6 +1,6 @@ # How to add root key -Add the root key to your API is quite simple with AMS. The **Adapter** is what determines the format of your JSON response. The default adapter is the ```FlattenJSON``` which doesn't have the root key, so your response is something similar to: +Add the root key to your API is quite simple with AMS. The **Adapter** is what determines the format of your JSON response. The default adapter is the ```Attributes``` which doesn't have the root key, so your response is something similar to: ```json { diff --git a/lib/active_model/serializer/adapter.rb b/lib/active_model/serializer/adapter.rb index f7ab6e985..4ef0d24d0 100644 --- a/lib/active_model/serializer/adapter.rb +++ b/lib/active_model/serializer/adapter.rb @@ -5,11 +5,11 @@ class Adapter ADAPTER_MAP = {} private_constant :ADAPTER_MAP if defined?(private_constant) extend ActiveSupport::Autoload + autoload :Attributes + autoload :Null autoload :FragmentCache autoload :Json autoload :JsonApi - autoload :Null - autoload :FlattenJson autoload :CachedSerializer def self.create(resource, options = {}) @@ -74,7 +74,8 @@ def lookup(adapter) # @api private def find_by_name(adapter_name) adapter_name = adapter_name.to_s.classify.tr('API', 'Api') - ActiveModel::Serializer::Adapter.const_get(adapter_name.to_sym) or # rubocop:disable Style/AndOr + "ActiveModel::Serializer::Adapter::#{adapter_name}".safe_constantize || + "ActiveModel::Serializer::Adapter::#{adapter_name.pluralize}".safe_constantize or # rubocop:disable Style/AndOr fail UnknownAdapterError end private :find_by_name diff --git a/lib/active_model/serializer/adapter/flatten_json.rb b/lib/active_model/serializer/adapter/attributes.rb similarity index 83% rename from lib/active_model/serializer/adapter/flatten_json.rb rename to lib/active_model/serializer/adapter/attributes.rb index 429818dca..40cf9a316 100644 --- a/lib/active_model/serializer/adapter/flatten_json.rb +++ b/lib/active_model/serializer/adapter/attributes.rb @@ -1,8 +1,8 @@ -class ActiveModel::Serializer::Adapter::FlattenJson < ActiveModel::Serializer::Adapter::Json +class ActiveModel::Serializer::Adapter::Attributes < ActiveModel::Serializer::Adapter def serializable_hash(options = nil) options ||= {} if serializer.respond_to?(:each) - result = serializer.map { |s| FlattenJson.new(s).serializable_hash(options) } + result = serializer.map { |s| Attributes.new(s).serializable_hash(options) } else hash = {} @@ -43,7 +43,7 @@ def fragment_cache(cached_hash, non_cached_hash) private - # no-op: FlattenJson adapter does not include meta data, because it does not support root. + # no-op: Attributes adapter does not include meta data, because it does not support root. def include_meta(json) json end diff --git a/lib/active_model/serializer/adapter/json.rb b/lib/active_model/serializer/adapter/json.rb index b24719366..9b9b9cdce 100644 --- a/lib/active_model/serializer/adapter/json.rb +++ b/lib/active_model/serializer/adapter/json.rb @@ -4,7 +4,7 @@ class ActiveModel::Serializer::Adapter::Json < ActiveModel::Serializer::Adapter def serializable_hash(options = nil) options ||= {} - { root => FlattenJson.new(serializer).serializable_hash(options) } + { root => Attributes.new(serializer).serializable_hash(options) } end private diff --git a/lib/active_model/serializer/configuration.rb b/lib/active_model/serializer/configuration.rb index 102c821e1..19b2df1ea 100644 --- a/lib/active_model/serializer/configuration.rb +++ b/lib/active_model/serializer/configuration.rb @@ -6,7 +6,7 @@ module Configuration included do |base| base.config.array_serializer = ActiveModel::Serializer::ArraySerializer - base.config.adapter = :flatten_json + base.config.adapter = :attributes base.config.jsonapi_resource_type = :plural end end diff --git a/test/adapter_test.rb b/test/adapter_test.rb index 75efac15d..8296fb342 100644 --- a/test/adapter_test.rb +++ b/test/adapter_test.rb @@ -21,7 +21,7 @@ def test_serializer def test_create_adapter adapter = ActiveModel::Serializer::Adapter.create(@serializer) - assert_equal ActiveModel::Serializer::Adapter::FlattenJson, adapter.class + assert_equal ActiveModel::Serializer::Adapter::Attributes, adapter.class end def test_create_adapter_with_override diff --git a/test/serializers/adapter_for_test.rb b/test/serializers/adapter_for_test.rb index ae7c95bb8..17517dd46 100644 --- a/test/serializers/adapter_for_test.rb +++ b/test/serializers/adapter_for_test.rb @@ -7,7 +7,7 @@ def setup @previous_adapter = ActiveModel::Serializer.config.adapter # Eager load adapters ActiveModel::Serializer::Adapter.eager_load! - [:json_api, :flatten_json, :null, :json].each do |adapter_name| + [:json_api, :attributes, :null, :json].each do |adapter_name| ActiveModel::Serializer::Adapter.lookup(adapter_name) end end @@ -18,7 +18,7 @@ def teardown def test_returns_default_adapter adapter = ActiveModel::Serializer.adapter - assert_equal ActiveModel::Serializer::Adapter::FlattenJson, adapter + assert_equal ActiveModel::Serializer::Adapter::Attributes, adapter end def test_overwrite_adapter_with_symbol @@ -68,15 +68,15 @@ def test_adapter_map expected_adapter_map = { 'json'.freeze => ActiveModel::Serializer::Adapter::Json, 'json_api'.freeze => ActiveModel::Serializer::Adapter::JsonApi, - 'flatten_json'.freeze => ActiveModel::Serializer::Adapter::FlattenJson, - 'null'.freeze => ActiveModel::Serializer::Adapter::Null + 'attributes'.freeze => ActiveModel::Serializer::Adapter::Attributes, + 'null'.freeze => ActiveModel::Serializer::Adapter::Null } assert_equal ActiveModel::Serializer::Adapter.adapter_map, expected_adapter_map end def test_adapters assert_equal ActiveModel::Serializer::Adapter.adapters.sort, [ - 'flatten_json'.freeze, + 'attributes'.freeze, 'json'.freeze, 'json_api'.freeze, 'null'.freeze @@ -114,8 +114,8 @@ def test_lookup_adapter_for_unknown_name end def test_adapter - assert_equal ActiveModel::Serializer.config.adapter, :flatten_json - assert_equal ActiveModel::Serializer.adapter, ActiveModel::Serializer::Adapter::FlattenJson + assert_equal ActiveModel::Serializer.config.adapter, :attributes + assert_equal ActiveModel::Serializer.adapter, ActiveModel::Serializer::Adapter::Attributes end def test_register_adapter diff --git a/test/serializers/attribute_test.rb b/test/serializers/attribute_test.rb index c0b2e30bb..5ca7f8428 100644 --- a/test/serializers/attribute_test.rb +++ b/test/serializers/attribute_test.rb @@ -21,7 +21,7 @@ def test_json_serializable_hash def test_attribute_inheritance_with_key inherited_klass = Class.new(AlternateBlogSerializer) blog_serializer = inherited_klass.new(@blog) - adapter = ActiveModel::Serializer::Adapter::FlattenJson.new(blog_serializer) + adapter = ActiveModel::Serializer::Adapter::Attributes.new(blog_serializer) assert_equal({ :id => 1, :title => 'AMS Hints' }, adapter.serializable_hash) end diff --git a/test/serializers/configuration_test.rb b/test/serializers/configuration_test.rb index e623cde97..24e02836d 100644 --- a/test/serializers/configuration_test.rb +++ b/test/serializers/configuration_test.rb @@ -8,7 +8,7 @@ def test_array_serializer end def test_default_adapter - assert_equal :flatten_json, ActiveModel::Serializer.config.adapter + assert_equal :attributes, ActiveModel::Serializer.config.adapter end end end diff --git a/test/serializers/meta_test.rb b/test/serializers/meta_test.rb index 976dc52f0..7c893a590 100644 --- a/test/serializers/meta_test.rb +++ b/test/serializers/meta_test.rb @@ -27,7 +27,7 @@ def test_meta_is_present_with_root end def test_meta_is_not_included_when_root_is_missing - # load_adapter uses FlattenJson Adapter + # load_adapter uses Attributes Adapter adapter = load_adapter(meta: { total: 10 }) expected = { id: 1, @@ -67,8 +67,8 @@ def test_meta_key_is_used_with_json_api def test_meta_is_not_present_on_arrays_without_root serializer = ArraySerializer.new([@blog], meta: { total: 10 }) - # FlattenJSON doesn't have support to root - adapter = ActiveModel::Serializer::Adapter::FlattenJson.new(serializer) + # Attributes doesn't have support to root + adapter = ActiveModel::Serializer::Adapter::Attributes.new(serializer) expected = [{ id: 1, name: 'AMS Hints', @@ -113,7 +113,7 @@ def test_meta_is_present_on_arrays_with_root private def load_adapter(options) - options = options.merge(adapter: :flatten_json, serializer: AlternateBlogSerializer) + options = options.merge(adapter: :attributes, serializer: AlternateBlogSerializer) ActiveModel::SerializableResource.new(@blog, options) end end