class Surrealist::Serializer
Abstract class to be inherited from
@example Usage
class CatSerializer < Surrealist::Serializer json_schema { { age: Integer, age_group: String } } def age_group age <= 5 ? 'kitten' : 'cat' end end class Cat include Surrealist attr_reader :age surrealize_with CatSerializer def initialize(age) @age = age end end Cat.new(12).surrealize # Checks for schema in CatSerializer (if .surrealize_with is stated) # => '{ "age": 12, "age_group": "cat" }' CatSerializer.new(Cat.new(3)).surrealize # explicit usage of CatSerializer # => '{ "age": 3, "age_group": "kitten" }'
Attributes
context[R]
object[R]
Public Class Methods
method_defined?(method)
click to toggle source
Only lookup for methods defined in Surrealist::Serializer
subclasses
to prevent invoke of Kernel methods
@param [Symbol] method method to be invoked
@return [Boolean]
Calls superclass method
# File lib/surrealist/serializer.rb, line 58 def method_defined?(method) return true if instance_methods(false).include?(method) return false if superclass == Surrealist::Serializer super end
new(object, **context)
click to toggle source
NOTE: context
will work only when using serializer explicitly,
e.g `CatSerializer.new(Cat.new(3), food: CatFood.new)` And then food will be available inside serializer via `context[:food]`
# File lib/surrealist/serializer.rb, line 76 def initialize(object, **context) @object = wrap_hash_into_struct(object) @context = context end
private_method_defined?(method)
click to toggle source
Calls superclass method
# File lib/surrealist/serializer.rb, line 65 def private_method_defined?(method) return true if private_instance_methods(false).include?(method) return false if superclass == Surrealist::Serializer super end
serializer_context(*array)
click to toggle source
Defines instance methods that read values from the context hash.
@param [Array<Symbol>] array
an array of symbols which represent method names
@raise ArgumentError if type of argument is not an array of symbols
# File lib/surrealist/serializer.rb, line 41 def serializer_context(*array) unless array.all? { |i| i.is_a? Symbol } raise ArgumentError, 'Please provide an array of symbols to `.serializer_context`' end array.each { |method| define_method(method) { context[method] } } end
Also aliased as: serializer_contexts
Public Instance Methods
build_schema(**args)
click to toggle source
Passes build_schema
to Surrealist
# File lib/surrealist/serializer.rb, line 91 def build_schema(**args) if Helper.collection?(object) build_collection_schema(args) else Surrealist.build_schema(instance: self, **args) end end
surrealize(**args)
click to toggle source
Checks whether object is a collection or an instance and serializes it
# File lib/surrealist/serializer.rb, line 82 def surrealize(**args) if Helper.collection?(object) Surrealist.surrealize_collection(object, args.merge(context: context)) else Surrealist.surrealize(instance: self, **args) end end
Private Instance Methods
build_collection_schema(**args)
click to toggle source
Maps collection and builds schema for each instance.
# File lib/surrealist/serializer.rb, line 104 def build_collection_schema(**args) object.map { |object| self.class.new(object, context).build_schema(args) } end
method_missing(method, *args, &block)
click to toggle source
Methods not found inside serializer will be invoked on the object
Calls superclass method
# File lib/surrealist/serializer.rb, line 109 def method_missing(method, *args, &block) return super unless object.respond_to?(method) object.public_send(method, *args, &block) end
respond_to_missing?(method, include_private = false)
click to toggle source
Methods not found inside serializer will be invoked on the object
Calls superclass method
# File lib/surrealist/serializer.rb, line 116 def respond_to_missing?(method, include_private = false) object.respond_to?(method) || super end
wrap_hash_into_struct(object)
click to toggle source
# File lib/surrealist/serializer.rb, line 120 def wrap_hash_into_struct(object) object.instance_of?(Hash) ? OpenStruct.new(object) : object end