Sha256: f77d00f21bfee4546deac5ce6ce05633a5fa38321d7f8ee2073bf150dfcab354

Contents?: true

Size: 1.48 KB

Versions: 3

Compression:

Stored size: 1.48 KB

Contents

require 'active_record'

ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
ActiveRecord::Schema.define do
  create_table :posts, force: true do |t|
    t.string :title
    t.text :body
    t.references :author
    t.timestamps null: false
  end
  create_table :authors, force: true do |t|
    t.string :name
    t.string :code
    t.timestamps null: false
  end
  create_table :comments, force: true do |t|
    t.text :contents
    t.references :author
    t.references :post
    t.timestamp null: false
  end
end

module ARModels
  class Post < ActiveRecord::Base
    has_many :comments
    belongs_to :author
  end

  class Comment < ActiveRecord::Base
    belongs_to :post
    belongs_to :author
  end

  class Author < ActiveRecord::Base
    has_many :posts
  end

  class PostDeserializer < FunWithJsonApi::Deserializer
    resource_class Post

    attribute :title
    attribute :body

    has_many :comments, -> { CommentDeserializer }
    belongs_to :author, -> { AuthorDeserializer }
  end

  class CommentDeserializer < FunWithJsonApi::Deserializer
    resource_class Comment

    attribute :contents

    belongs_to :author, -> { AuthorDeserializer }
  end

  class AuthorSerializer < ::ActiveModel::Serializer
    type 'person'

    attribute :name

    has_many :posts
  end

  class AuthorDeserializer < FunWithJsonApi::Deserializer
    type 'person'
    id_param :code
    resource_class Author

    attribute :name

    has_many :posts, -> { PostDeserializer }
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
fun_with_json_api-0.0.13 spec/fixtures/active_record.rb
fun_with_json_api-0.0.11.3 spec/fixtures/active_record.rb
fun_with_json_api-0.0.11.2 spec/fixtures/active_record.rb