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