Merge pull request #1982 from bf4/better_ams_model_interface

Better AMS Model attributes interface
This commit is contained in:
Benjamin Fleischer 2016-11-21 09:18:38 -06:00 committed by GitHub
commit 93bbc59e14
12 changed files with 21 additions and 15 deletions

View File

@ -6,6 +6,8 @@ Breaking changes:
Features: Features:
- [#1982](https://github.com/rails-api/active_model_serializers/pull/1982) Add ActiveModelSerializers::Model.attributes to configure PORO attributes (@bf4).
Fixes: Fixes:
Misc: Misc:

View File

@ -110,7 +110,7 @@ class SomeResource < ActiveRecord::Base
end end
# or # or
class SomeResource < ActiveModelSerializers::Model class SomeResource < ActiveModelSerializers::Model
attr_accessor :title, :body attributes :title, :body
end end
``` ```

View File

@ -105,7 +105,7 @@ ActiveModelSerializers::Model may be used either as a template, or in production
```ruby ```ruby
class MyModel < ActiveModelSerializers::Model class MyModel < ActiveModelSerializers::Model
attr_accessor :id, :name, :level attributes :id, :name, :level
end end
``` ```

View File

@ -25,7 +25,7 @@ Fortunately, ActiveModelSerializers provides a [`ActiveModelSerializers::Model`]
```ruby ```ruby
# my_model.rb # my_model.rb
class MyModel < ActiveModelSerializers::Model class MyModel < ActiveModelSerializers::Model
attr_accessor :id, :name, :level attributes :id, :name, :level
end end
``` ```

View File

@ -6,6 +6,10 @@ module ActiveModelSerializers
include ActiveModel::Model include ActiveModel::Model
include ActiveModel::Serializers::JSON include ActiveModel::Serializers::JSON
def self.attributes(*names)
attr_accessor(*names)
end
attr_reader :attributes, :errors attr_reader :attributes, :errors
def initialize(attributes = {}) def initialize(attributes = {})

View File

@ -2,16 +2,16 @@ require 'test_helper'
module SerializationScopeTesting module SerializationScopeTesting
class User < ActiveModelSerializers::Model class User < ActiveModelSerializers::Model
attr_accessor :id, :name, :admin attributes :id, :name, :admin
def admin? def admin?
admin admin
end end
end end
class Comment < ActiveModelSerializers::Model class Comment < ActiveModelSerializers::Model
attr_accessor :id, :body attributes :id, :body
end end
class Post < ActiveModelSerializers::Model class Post < ActiveModelSerializers::Model
attr_accessor :id, :title, :body, :comments attributes :id, :title, :body, :comments
end end
class PostSerializer < ActiveModel::Serializer class PostSerializer < ActiveModel::Serializer
attributes :id, :title, :body, :comments attributes :id, :title, :body, :comments

View File

@ -10,7 +10,7 @@ module ActiveModelSerializers
def test_initialization_with_string_keys def test_initialization_with_string_keys
klass = Class.new(ActiveModelSerializers::Model) do klass = Class.new(ActiveModelSerializers::Model) do
attr_accessor :key attributes :key
end end
value = 'value' value = 'value'

View File

@ -384,7 +384,7 @@ module ActiveModelSerializers
def new_model(model_attributes) def new_model(model_attributes)
Class.new(ActiveModelSerializers::Model) do Class.new(ActiveModelSerializers::Model) do
attr_accessor(*model_attributes.keys) attributes(*model_attributes.keys)
def self.name def self.name
'TestModel' 'TestModel'

View File

@ -244,7 +244,7 @@ module ActiveModelSerializers
# rubocop:disable Metrics/AbcSize # rubocop:disable Metrics/AbcSize
def test_a_serializer_rendered_by_two_adapter_returns_differently_fetch_attributes def test_a_serializer_rendered_by_two_adapter_returns_differently_fetch_attributes
Object.const_set(:Alert, Class.new(ActiveModelSerializers::Model) do 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) end)
Object.const_set(:UncachedAlertSerializer, Class.new(ActiveModel::Serializer) do Object.const_set(:UncachedAlertSerializer, Class.new(ActiveModel::Serializer) do
attributes :id, :status, :resource, :started_at, :ended_at, :updated_at, :created_at attributes :id, :status, :resource, :started_at, :ended_at, :updated_at, :created_at

View File

@ -31,7 +31,7 @@ end
# model.validate! # => ["cannot be nil"] # model.validate! # => ["cannot be nil"]
# model.errors.full_messages # => ["name cannot be nil"] # model.errors.full_messages # => ["name cannot be nil"]
class ModelWithErrors < ::ActiveModelSerializers::Model class ModelWithErrors < ::ActiveModelSerializers::Model
attr_accessor :name attributes :name
end end
class Profile < Model class Profile < Model

View File

@ -5,10 +5,10 @@ module ActiveModel
class ReadAttributeForSerializationTest < ActiveSupport::TestCase class ReadAttributeForSerializationTest < ActiveSupport::TestCase
# https://github.com/rails-api/active_model_serializers/issues/1653 # https://github.com/rails-api/active_model_serializers/issues/1653
class Parent < ActiveModelSerializers::Model class Parent < ActiveModelSerializers::Model
attr_accessor :id attributes :id
end end
class Child < Parent class Child < Parent
attr_accessor :name attributes :name
end end
class ParentSerializer < ActiveModel::Serializer class ParentSerializer < ActiveModel::Serializer
attributes :$id attributes :$id
@ -30,7 +30,7 @@ module ActiveModel
# https://github.com/rails-api/active_model_serializers/issues/1658 # https://github.com/rails-api/active_model_serializers/issues/1658
class ErrorResponse < ActiveModelSerializers::Model class ErrorResponse < ActiveModelSerializers::Model
attr_accessor :error attributes :error
end end
class ApplicationSerializer < ActiveModel::Serializer class ApplicationSerializer < ActiveModel::Serializer
attributes :status attributes :status

View File

@ -2,10 +2,10 @@ module ActiveModel
class Serializer class Serializer
class SerializationTest < ActiveSupport::TestCase class SerializationTest < ActiveSupport::TestCase
class Blog < ActiveModelSerializers::Model class Blog < ActiveModelSerializers::Model
attr_accessor :id, :name, :authors attributes :id, :name, :authors
end end
class Author < ActiveModelSerializers::Model class Author < ActiveModelSerializers::Model
attr_accessor :id, :name attributes :id, :name
end end
class BlogSerializer < ActiveModel::Serializer class BlogSerializer < ActiveModel::Serializer
attributes :id attributes :id