jsonapi-deserializable/lib/jsonapi/deserializable/resource/dsl.rb
2017-07-14 15:07:02 +02:00

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