Sha256: 286970d03cb7ffbc5d6f5ce09ded40574a2e11484ce06017c99fa68e5cc4ed03

Contents?: true

Size: 1.48 KB

Versions: 1

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.timestamps 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

1 entries across 1 versions & 1 rubygems

Version Path
fun_with_json_api-0.0.14 spec/fixtures/active_record.rb