mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16:50 +00:00
83 lines
1.6 KiB
Ruby
83 lines
1.6 KiB
Ruby
require 'singleton'
|
|
|
|
module ActiveModel
|
|
class Serializer
|
|
class Configuration
|
|
class Null
|
|
include Singleton
|
|
|
|
def method_missing(*)
|
|
nil
|
|
end
|
|
|
|
def respond_to?(*)
|
|
true
|
|
end
|
|
end
|
|
|
|
attr_accessor :parent
|
|
|
|
class << self
|
|
def global
|
|
@global ||= new default_options
|
|
end
|
|
|
|
def default_options
|
|
{ embed: :objects }
|
|
end
|
|
end
|
|
|
|
def build(options = {})
|
|
self.class.new options, self
|
|
end
|
|
|
|
def initialize(options = {}, parent = Null.instance)
|
|
@root = read_option options, :root
|
|
@embed = read_option options, :embed
|
|
@embed_in_root = read_option options, :embed_in_root
|
|
@parent = parent
|
|
end
|
|
|
|
def root
|
|
return_first @root, parent.root
|
|
end
|
|
|
|
def embed
|
|
return_first @embed, parent.embed
|
|
end
|
|
|
|
def embed_in_root
|
|
return_first @embed_in_root, parent.embed_in_root
|
|
end
|
|
|
|
# FIXME: Get rid of this mess.
|
|
def embed_objects=(value)
|
|
@embed = :objects if value
|
|
end
|
|
|
|
# FIXME: Get rid of this mess.
|
|
def embed_ids=(value)
|
|
@embed = :ids if value
|
|
end
|
|
|
|
def embed_objects
|
|
[:objects, :object].include? embed
|
|
end
|
|
|
|
def embed_ids
|
|
[:ids, :id].include? embed
|
|
end
|
|
|
|
private
|
|
|
|
def read_option(options, name)
|
|
options[name] || false if options.has_key? name
|
|
end
|
|
|
|
def return_first(*values)
|
|
values.compact.first
|
|
end
|
|
end
|
|
end
|
|
end
|