mirror of
https://github.com/ditkrg/jsonapi-deserializable.git
synced 2026-01-22 22:06:47 +00:00
54 lines
1.5 KiB
Ruby
54 lines
1.5 KiB
Ruby
module JSONAPI
|
|
module Deserializable
|
|
class Resource
|
|
module DSL
|
|
DEFAULT_TYPE_BLOCK = proc { |t| { type: t } }
|
|
DEFAULT_ID_BLOCK = proc { |i| { id: i } }
|
|
DEFAULT_ATTR_BLOCK = proc { |v, k| { k.to_sym => v } }
|
|
DEFAULT_HAS_ONE_BLOCK = proc do |_, i, t, k|
|
|
{ "#{k}_id".to_sym => i, "#{k}_type".to_sym => t }
|
|
end
|
|
DEFAULT_HAS_MANY_BLOCK = proc do |_, i, t, k|
|
|
{ "#{k}_ids".to_sym => i, "#{k}_types".to_sym => t }
|
|
end
|
|
|
|
def type(&block)
|
|
self.type_block = block || DEFAULT_TYPE_BLOCK
|
|
end
|
|
|
|
def id(&block)
|
|
self.id_block = block || DEFAULT_ID_BLOCK
|
|
end
|
|
|
|
def attribute(key, &block)
|
|
attr_blocks[key.to_s] = block || DEFAULT_ATTR_BLOCK
|
|
end
|
|
|
|
def attributes(*keys, &block)
|
|
if keys.empty?
|
|
self.default_attr_block = block || DEFAULT_ATTR_BLOCK
|
|
else
|
|
keys.each { |k| attribute(k, &block) }
|
|
end
|
|
end
|
|
|
|
def has_one(key = nil, &block)
|
|
if key
|
|
has_one_rel_blocks[key.to_s] = block || DEFAULT_HAS_ONE_BLOCK
|
|
else
|
|
self.default_has_one_rel_block = block || DEFAULT_HAS_ONE_BLOCK
|
|
end
|
|
end
|
|
|
|
def has_many(key = nil, &block)
|
|
if key
|
|
has_many_rel_blocks[key.to_s] = block || DEFAULT_HAS_MANY_BLOCK
|
|
else
|
|
self.default_has_many_rel_block = block || DEFAULT_HAS_MANY_BLOCK
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|