class FastSerializer::JsonModel::Attribute
Attributes
cond[RW]
cond_arity[RW]
cond_method_name[RW]
injected[RW]
method_arity[RW]
method_name[RW]
mixin[RW]
Public Class Methods
new(*)
click to toggle source
Calls superclass method
# File lib/fast_serializer/json_model/attribute.rb, line 14 def initialize(*) super @mixin = nil @method_name = nil @injected = false @cond_method_name = nil @cond = nil @cond = @opts[:if] || @opts[:unless] || @cond init_with_proc if method.is_a?(Proc) init_with_cond if !cond.nil? && cond.is_a?(Proc) end
Public Instance Methods
included?(resource, params, context)
click to toggle source
@param resource [Object] @param params [Hash] @param context [Hash] @return [Boolean]
# File lib/fast_serializer/json_model/attribute.rb, line 61 def included?(resource, params, context) return true if cond.nil? can_execute_on_mixin = injected && !cond_method_name.nil? && !context.nil? res = if can_execute_on_mixin call_method_on_context(context, cond_method_name, cond_arity, resource, params) elsif cond.is_a?(Proc) call_proc_binding_to_context(context, cond, cond_arity, resource, params) else context.public_send(cond) end res = !res unless @opts[:unless].nil? res end
inject(context)
click to toggle source
# File lib/fast_serializer/json_model/attribute.rb, line 32 def inject(context) context.include(mixin) self.injected = true end
injectable?()
click to toggle source
# File lib/fast_serializer/json_model/attribute.rb, line 28 def injectable? !mixin.nil? end
serialize(resource, params, context)
click to toggle source
@param resource [Object] @param params [Hash] @param context [Hash] @return [Object]
# File lib/fast_serializer/json_model/attribute.rb, line 41 def serialize(resource, params, context) can_execute_on_mixin = injected && !method_name.nil? && !context.nil? val = if can_execute_on_mixin call_method_on_context(context, method_name, method_arity, resource, params) elsif method.is_a?(Proc) call_proc_binding_to_context(context, method, method_arity, resource, params) else resource.public_send(method) end val.freeze val end
Private Instance Methods
call_method_on_context(context, method_name, arity, resource, params)
click to toggle source
# File lib/fast_serializer/json_model/attribute.rb, line 116 def call_method_on_context(context, method_name, arity, resource, params) case arity when 0 context.public_send(method_name) when 1 context.public_send(method_name, resource) when 2 context.public_send(method_name, resource, params) end end
call_proc_binding_to_context(context, prc, arity, resource, params)
click to toggle source
# File lib/fast_serializer/json_model/attribute.rb, line 105 def call_proc_binding_to_context(context, prc, arity, resource, params) case arity when 1 context.instance_exec(resource, &prc) when 2 context.instance_exec(resource, params, &prc) when 0 context.instance_exec(&prc) end end
init_with_cond()
click to toggle source
# File lib/fast_serializer/json_model/attribute.rb, line 81 def init_with_cond @cond_method_name = "__#{key}_cond__" @cond_arity = cond.arity.abs @mixin ||= Module.new if RUBY_VERSION <= '2.5.0' @mixin.redefine_method @cond_method_name, &cond else @mixin.define_method @cond_method_name, &cond end end
init_with_proc()
click to toggle source
# File lib/fast_serializer/json_model/attribute.rb, line 93 def init_with_proc @method_name = "__#{key}__" @method_arity = method.arity.abs @mixin = Module.new if RUBY_VERSION <= '2.5.0' @mixin.redefine_method @method_name, &method else @mixin.define_method @method_name, &method end end