From 772b7999c54e5935f2f31d9cf85c785689351f66 Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Sun, 20 Nov 2016 23:25:09 -0600 Subject: [PATCH] Better AMS Model attributes interface --- CHANGELOG.md | 2 ++ README.md | 2 +- docs/ARCHITECTURE.md | 2 +- docs/howto/serialize_poro.md | 2 +- lib/active_model_serializers/model.rb | 4 ++++ test/action_controller/serialization_scope_name_test.rb | 6 +++--- test/active_model_serializers/model_test.rb | 2 +- test/adapter/json_api/relationship_test.rb | 2 +- test/cache_test.rb | 2 +- test/fixtures/poro.rb | 2 +- test/serializers/read_attribute_for_serialization_test.rb | 6 +++--- test/serializers/serialization_test.rb | 4 ++-- 12 files changed, 21 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe24b77e..66289ace 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ Breaking changes: Features: +- [#1982](https://github.com/rails-api/active_model_serializers/pull/1982) Add ActiveModelSerializers::Model.attributes to configure PORO attributes (@bf4). + Fixes: Misc: diff --git a/README.md b/README.md index cfcf8412..300d2e5a 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ class SomeResource < ActiveRecord::Base end # or class SomeResource < ActiveModelSerializers::Model - attr_accessor :title, :body + attributes :title, :body end ``` diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 3d566e5c..02f78295 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -105,7 +105,7 @@ ActiveModelSerializers::Model may be used either as a template, or in production ```ruby class MyModel < ActiveModelSerializers::Model - attr_accessor :id, :name, :level + attributes :id, :name, :level end ``` diff --git a/docs/howto/serialize_poro.md b/docs/howto/serialize_poro.md index 98caed6a..fa9c9bf8 100644 --- a/docs/howto/serialize_poro.md +++ b/docs/howto/serialize_poro.md @@ -25,7 +25,7 @@ Fortunately, ActiveModelSerializers provides a [`ActiveModelSerializers::Model`] ```ruby # my_model.rb class MyModel < ActiveModelSerializers::Model - attr_accessor :id, :name, :level + attributes :id, :name, :level end ``` diff --git a/lib/active_model_serializers/model.rb b/lib/active_model_serializers/model.rb index b9937cb5..2abe3334 100644 --- a/lib/active_model_serializers/model.rb +++ b/lib/active_model_serializers/model.rb @@ -6,6 +6,10 @@ module ActiveModelSerializers include ActiveModel::Model include ActiveModel::Serializers::JSON + def self.attributes(*names) + attr_accessor(*names) + end + attr_reader :attributes, :errors def initialize(attributes = {}) diff --git a/test/action_controller/serialization_scope_name_test.rb b/test/action_controller/serialization_scope_name_test.rb index 62959455..33ac88f4 100644 --- a/test/action_controller/serialization_scope_name_test.rb +++ b/test/action_controller/serialization_scope_name_test.rb @@ -2,16 +2,16 @@ require 'test_helper' module SerializationScopeTesting class User < ActiveModelSerializers::Model - attr_accessor :id, :name, :admin + attributes :id, :name, :admin def admin? admin end end class Comment < ActiveModelSerializers::Model - attr_accessor :id, :body + attributes :id, :body end class Post < ActiveModelSerializers::Model - attr_accessor :id, :title, :body, :comments + attributes :id, :title, :body, :comments end class PostSerializer < ActiveModel::Serializer attributes :id, :title, :body, :comments diff --git a/test/active_model_serializers/model_test.rb b/test/active_model_serializers/model_test.rb index 7bfb2edf..abebb1d2 100644 --- a/test/active_model_serializers/model_test.rb +++ b/test/active_model_serializers/model_test.rb @@ -10,7 +10,7 @@ module ActiveModelSerializers def test_initialization_with_string_keys klass = Class.new(ActiveModelSerializers::Model) do - attr_accessor :key + attributes :key end value = 'value' diff --git a/test/adapter/json_api/relationship_test.rb b/test/adapter/json_api/relationship_test.rb index 45d2ac8e..cfd5be85 100644 --- a/test/adapter/json_api/relationship_test.rb +++ b/test/adapter/json_api/relationship_test.rb @@ -384,7 +384,7 @@ module ActiveModelSerializers def new_model(model_attributes) Class.new(ActiveModelSerializers::Model) do - attr_accessor(*model_attributes.keys) + attributes(*model_attributes.keys) def self.name 'TestModel' diff --git a/test/cache_test.rb b/test/cache_test.rb index c0770cda..44527378 100644 --- a/test/cache_test.rb +++ b/test/cache_test.rb @@ -244,7 +244,7 @@ module ActiveModelSerializers # rubocop:disable Metrics/AbcSize def test_a_serializer_rendered_by_two_adapter_returns_differently_fetch_attributes Object.const_set(:Alert, Class.new(ActiveModelSerializers::Model) do - attr_accessor :id, :status, :resource, :started_at, :ended_at, :updated_at, :created_at + attributes :id, :status, :resource, :started_at, :ended_at, :updated_at, :created_at end) Object.const_set(:UncachedAlertSerializer, Class.new(ActiveModel::Serializer) do attributes :id, :status, :resource, :started_at, :ended_at, :updated_at, :created_at diff --git a/test/fixtures/poro.rb b/test/fixtures/poro.rb index 39d2a938..b7b82dff 100644 --- a/test/fixtures/poro.rb +++ b/test/fixtures/poro.rb @@ -31,7 +31,7 @@ end # model.validate! # => ["cannot be nil"] # model.errors.full_messages # => ["name cannot be nil"] class ModelWithErrors < ::ActiveModelSerializers::Model - attr_accessor :name + attributes :name end class Profile < Model diff --git a/test/serializers/read_attribute_for_serialization_test.rb b/test/serializers/read_attribute_for_serialization_test.rb index 21677e65..02911c0e 100644 --- a/test/serializers/read_attribute_for_serialization_test.rb +++ b/test/serializers/read_attribute_for_serialization_test.rb @@ -5,10 +5,10 @@ module ActiveModel class ReadAttributeForSerializationTest < ActiveSupport::TestCase # https://github.com/rails-api/active_model_serializers/issues/1653 class Parent < ActiveModelSerializers::Model - attr_accessor :id + attributes :id end class Child < Parent - attr_accessor :name + attributes :name end class ParentSerializer < ActiveModel::Serializer attributes :$id @@ -30,7 +30,7 @@ module ActiveModel # https://github.com/rails-api/active_model_serializers/issues/1658 class ErrorResponse < ActiveModelSerializers::Model - attr_accessor :error + attributes :error end class ApplicationSerializer < ActiveModel::Serializer attributes :status diff --git a/test/serializers/serialization_test.rb b/test/serializers/serialization_test.rb index 8ba19f70..3c1884e6 100644 --- a/test/serializers/serialization_test.rb +++ b/test/serializers/serialization_test.rb @@ -2,10 +2,10 @@ module ActiveModel class Serializer class SerializationTest < ActiveSupport::TestCase class Blog < ActiveModelSerializers::Model - attr_accessor :id, :name, :authors + attributes :id, :name, :authors end class Author < ActiveModelSerializers::Model - attr_accessor :id, :name + attributes :id, :name end class BlogSerializer < ActiveModel::Serializer attributes :id