Module: Sumaki::Model
- Defined in:
- lib/sumaki/model.rb,
lib/sumaki/model/enum.rb,
lib/sumaki/model/fields.rb,
lib/sumaki/model/fields/type.rb,
lib/sumaki/model/associations.rb,
lib/sumaki/model/fields/type/date.rb,
lib/sumaki/model/fields/reflection.rb,
lib/sumaki/model/fields/type/float.rb,
lib/sumaki/model/fields/type/value.rb,
lib/sumaki/model/fields/type/string.rb,
lib/sumaki/model/fields/type/boolean.rb,
lib/sumaki/model/fields/type/integer.rb,
lib/sumaki/model/fields/type/date_time.rb,
lib/sumaki/model/associations/collection.rb,
lib/sumaki/model/associations/reflection.rb,
lib/sumaki/model/associations/association.rb
Overview
Sumaki
Sumaki is a wrapper for structured data like JSON.
class AnimeList
include Sumaki::Model
repeated :anime
field :name
class Anime
include Sumaki::Model
singular :studio
field :title
class Studio
include Sumaki::Model
field :name
end
end
end
data = {
name: 'Winter 2023',
anime: [
{
title: 'The Vampire Dies in No Time',
studio: {
name: 'MADHOUSE Inc.'
}
},
{
title: '“Ippon” again!',
studio: {
name: 'BAKKEN RECORD'
}
}
]
}
anime_list = AnimeList.new(data)
anime_list.name #=> 'Winter 2023'
anime_list.anime[0].title #=> 'The Vampire Dies in No Time'
anime_list.anime[0].studio.name #=> 'MADHOUSE Inc.'
anime_list.anime[0].object #=> { title: 'The Vampire Dies in No Time', studio: { name: 'MADHOUSE Inc.' } }
Access to fields
By declaring ‘field`, you can access the field.
class Anime
include Sumaki::Model
field :title
field :url
end
anime = Anime.new({ title: "The Vampire Dies in No Time", url: "https://sugushinu-anime.jp/" })
anime.title #=> "The Vampire Dies in No Time"
Access to sub objects
By declaring ‘singular`, you can access the sub object.
class Book
include Sumaki::Model
singular :company
field :title
class Company
include Sumaki::Model
field :name
end
end
data = {
title: "The Ronaldo Chronicles",
company: {
name: 'Autumn Books',
}
}
comic = Book.new(data)
comic.company.name #=> 'Autumn Books'
By declaring ‘repeated`, you can access the repeated sub objects as an Array.
class Company
include Sumaki::Model
repeated :member
field :name
class Member
include Sumaki::Model
field :name
end
end
data = {
name: 'The Ronaldo Vampire Hunter Agency',
member: [
{ name: 'Ronaldo' },
{ name: 'Draluc' },
{ name: 'John' }
]
}
company = Company.new(data)
company.member.size #=> 3
company.member[2].name #=> 'John'
Access to the parent object
Parent object can be referenced from sub object by ‘#parent` method.
class Character
include Sumaki::Model
singular :child
field :name
class Child
include Sumaki::Model
field :name
end
end
data = {
name: 'Draus',
child: {
name: 'Draluc'
}
}
character = Character.new(data)
character.child.name #=> 'Draluc'
character.child.parent.name #=> 'Draus'
Enumerations
By declaring ‘enum`, You can map a field to a specified value.
class Character
include Sumaki::Model
field :name
enum :type, vampire: 1, vampire_hunter: 2, familier: 3, editor: 4
end
data = {
name: 'John',
type: 3
}
character = Character.new(data)
character.type #=> :familier
Defined Under Namespace
Modules: Associations, ClassMethods, Enum, Fields, InstanceMethods Classes: ObjectAccessor
Class Method Summary collapse
Class Method Details
.included(base) ⇒ Object
162 163 164 165 166 167 168 169 |
# File 'lib/sumaki/model.rb', line 162 def self.included(base) base.extend ClassMethods base.include InstanceMethods base.include Fields base.include Associations base.include Enum end |