lib/alba/serializer.rb in alba-0.11.0 vs lib/alba/serializer.rb in alba-0.11.1

- old
+ new

@@ -1,8 +1,12 @@ module Alba # This module represents how a resource should be serialized. module Serializer + # @!parse include InstanceMethods + # @!parse extend ClassMethods + + # @private def self.included(base) super base.class_eval do @_opts = {} unless instance_variable_defined?('@_opts') @_metadata = {} unless instance_variable_defined?('@_metadata') @@ -11,18 +15,22 @@ base.extend ClassMethods end # Instance methods module InstanceMethods + # @param resource [Alba::Resource] 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 + # Use real encoder to actually serialize to JSON + # + # @return [String] JSON string def serialize Alba.encoder.call(@hash) end private @@ -40,20 +48,28 @@ # Class methods module ClassMethods attr_reader :_opts, :_metadata + # @private def inherited(subclass) super %w[_opts _metadata].each { |name| subclass.instance_variable_set("@#{name}", public_send(name).clone) } end + # Set options, currently key only + # + # @param key [Boolean, Symbol] def set(key: false) @_opts[:key] = key end + # Set metadata + # + # @param name [String, Symbol] key for the metadata + # @param block [Block] the content of the metadata def metadata(name, &block) - @_metadata[name] = block + @_metadata[name.to_sym] = block end end end end