Sha256: 591b0343dbb7e32ce4a9d82694656cbe4080e2610147c3485769a47529765344
Contents?: true
Size: 1.38 KB
Versions: 1
Compression:
Stored size: 1.38 KB
Contents
module Alba # This module represents how a resource should be serialized. module Serializer def self.included(base) super base.include InstanceMethods base.extend ClassMethods end # Instance methods module InstanceMethods def initialize(resource) @resource = resource @hash = resource.serializable_hash @hash = {key.to_sym => @hash} if key # @hash is either Hash or Array @hash.is_a?(Hash) ? @hash.merge!(metadata.to_h) : @hash << metadata end def serialize Alba.encoder.call(@hash) end private def key opts = self.class._opts || {} case opts[:key] when true @resource.key else opts[:key] end end def metadata metadata = self.class._metadata || {} metadata.transform_values { |block| block.call(@resource.object) } end end # Class methods module ClassMethods attr_reader :_opts, :_metadata def inherited(subclass) super %w[_opts _metadata].each { |name| subclass.instance_variable_set("@#{name}", instance_variable_get("@#{name}")) } end def set(key: false) @_opts ||= {} @_opts[:key] = key end def metadata(name, &block) @_metadata ||= {} @_metadata[name] = block end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
alba-0.9.0 | lib/alba/serializer.rb |