class Bluepine::Serializer
user_schema = Attributes.create
(:object) do
string :username string :email
end
user = <any object>
resolver = Resolver.new
(schemas: [user_schema, …]) serializer.serialize(user_schema, user)
Constants
- InvalidPredicate
Public Class Methods
new(resolver = nil)
click to toggle source
# File lib/bluepine/serializer.rb, line 16 def initialize(resolver = nil) @resolver = resolver end
Public Instance Methods
normalize_attribute(attribute, object, options = {})
click to toggle source
Override to make it accepts 3 arguments
Calls superclass method
Bluepine::Attributes::Visitor#normalize_attribute
# File lib/bluepine/serializer.rb, line 21 def normalize_attribute(attribute, object, options = {}) super(attribute, options) end
visit_array(attribute, object, options = {})
click to toggle source
# File lib/bluepine/serializer.rb, line 66 def visit_array(attribute, object, options = {}) as = attribute.of Array(object).map do |item| # item#serialize_as will be used when of: option is not specified. # e.g. ListSerializer.schema has `array :data` # as = attribute.of || (item.serialize_as if item.respond_to?(:serialize_as)) unless as.kind_of?(Symbol) item else visit(as, item, options) end end end
visit_attribute(attribute, object, options = {})
click to toggle source
catch all
# File lib/bluepine/serializer.rb, line 26 def visit_attribute(attribute, object, options = {}) attribute.serialize(attribute.value(object)) end
visit_object(attribute, object, options = {})
click to toggle source
# File lib/bluepine/serializer.rb, line 60 def visit_object(attribute, object, options = {}) visit_object_handler(attribute, object) do |attr, value, attrs| attrs[attr.name] = visit(attr, value, options) end end
visit_schema(attribute, object, options = {})
click to toggle source
# File lib/bluepine/serializer.rb, line 81 def visit_schema(attribute, object, options = {}) attribute = resolver.schema(attribute.of) visit_object(attribute, object, options) end
Private Instance Methods
execute_predicate(predicate, object)
click to toggle source
# File lib/bluepine/serializer.rb, line 114 def execute_predicate(predicate, object) case predicate when Symbol get(object, predicate) when Proc predicate.call(object) else raise InvalidPredicate end end
get(object, name)
click to toggle source
# File lib/bluepine/serializer.rb, line 89 def get(object, name) object.respond_to?(name) ? object.send(name) : object&.fetch(name, nil) end
serializable?(attr, object)
click to toggle source
# File lib/bluepine/serializer.rb, line 104 def serializable?(attr, object) return unless attr.serializable? # check predicate :if and :unless return execute_predicate(attr.if, object) if attr.if return !execute_predicate(attr.unless, object) if attr.unless true end
visit_object_handler(attribute, object) { |attr, value, attrs| ... }
click to toggle source
# File lib/bluepine/serializer.rb, line 93 def visit_object_handler(attribute, object) attribute.attributes.values.each_with_object({}) do |attr, attrs| next unless serializable?(attr, object) # get value for each field value = get(object, attr.method) yield(attr, value, attrs) end end