active_model_serializers/lib/active_model/serializer/dsl.rb
Adrian Mugnolo and Santiago Pastorino 32318f9daf Move ActiveModel::Serializer.embed to DSL
2014-01-13 14:15:08 -02:00

49 lines
1.2 KiB
Ruby

module ActiveModel
class Serializer
class DSL
attr_reader :serializer_class
def initialize(serializer_class)
@serializer_class = serializer_class
end
def attributes(*names)
serializer_class._attributes.concat names
names.each do |name|
serializer_class.send :define_method, name do
object.read_attribute_for_serialization name
end unless serializer_class.method_defined? name
end
end
def has_one(*names)
associate Association::HasOne, *names
end
def has_many(*names)
associate Association::HasMany, *names
end
def embed(type, options = {})
Configuration.global.embed = type
Configuration.global.embed_in_root = true if options[:embed_in_root] || options[:include]
end
private
def associate(klass, *names)
options = names.extract_options!
names.each do |name|
serializer_class.send :define_method, name do
object.send name
end unless serializer_class.method_defined? name
serializer_class._associations[name] = klass.new name, options
end
end
end
end
end