Sha256: fc6a1d09cc62dfc18b8f54b53d25e0688fa42b5faf476adba26433bd5929037c
Contents?: true
Size: 1.6 KB
Versions: 1
Compression:
Stored size: 1.6 KB
Contents
class ActiveSerializer::Serializers::HashSerializer attr_reader :serialized_data def initialize(root_hash, options = {}) @root_hash = root_hash @options = options @serialized_data = {} end def attribute(name, value = nil, &block) if block_given? value = yield elsif !value value = @root_hash[name] end set_value(name, value) end def attributes(*serialized_data, &block) if !serialized_data.last.is_a?(Symbol) source_hash = serialized_data.delete_at(-1) else source_hash = @root_hash end serialized_data.each do |attr_name| set_value(attr_name, source_hash[attr_name]) end end def namespace(name, &block) serializer = self.class.new(@root_hash, @options) serializer.instance_exec(@root_hash, &block) set_value(name, serializer.serialized_data) end def resource(name, source_hash = nil, &block) source_hash ||= @root_hash[name] set_value(name, serialize_resource(source_hash, &block)) end def resources(name, source_hashes = nil, &block) source_hashes ||= @root_hash[name] self.serialized_data[name] = (source_hashes || []).inject([]) do |result, source_hash| data = serialize_resource(source_hash, &block) data.empty? ? result : (result << data) end end protected def serialize_resource(source_hash, &block) return nil unless source_hash serializer = self.class.new(source_hash, @options) serializer.instance_exec(source_hash, &block) serializer.serialized_data end def set_value(name, value) self.serialized_data[name] = value end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
active_serializer-0.1.0 | lib/active_serializer/serializers/hash_serializer.rb |