Class: CacheCrispies::Attribute

Inherits:
Object
  • Object
show all
Defined in:
lib/cache_crispies/attribute.rb

Overview

Reperesents a single serialized attribute in a serializer. It’s generated by a call to either Base.serialize or Base.merge.

Defined Under Namespace

Classes: InvalidCoercionType

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key, from: nil, with: nil, to: nil, nesting: [], conditions: []) ⇒ Attribute

Initializes a new CacheCrispies::Attribute instance

Parameters:

  • key (Symbol)

    the JSON key for this attribute

  • from (Symbol) (defaults to: nil)

    the method on the model to call to get the value

  • with (CacheCrispies::Base) (defaults to: nil)

    a serializer to use to serialize the

  • to (Class, Symbol) (defaults to: nil)

    the data type to coerce the value into

  • nesting (Array<Symbol>) (defaults to: [])

    the JSON keys this attribute will be nested inside

  • conditions (Array<CacheCrispies::Condition>) (defaults to: [])

    the show_if condition blocks this attribute is nested inside. These will be evaluated for thruthiness and must all be true for this attribute to reneder. argument’s value



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/cache_crispies/attribute.rb', line 23

def initialize(
  key,
  from: nil, with: nil, to: nil, nesting: [], conditions: []
)
  @key = key
  @method_name = from || key || :itself
  @serializer = with
  @coerce_to = to
  @nesting = Array(nesting)
  @conditions = Array(conditions)
end

Instance Attribute Details

#coerce_toObject (readonly)

Returns the value of attribute coerce_to.



35
36
37
# File 'lib/cache_crispies/attribute.rb', line 35

def coerce_to
  @coerce_to
end

#conditionsObject (readonly)

Returns the value of attribute conditions.



35
36
37
# File 'lib/cache_crispies/attribute.rb', line 35

def conditions
  @conditions
end

#keyObject (readonly)

Returns the value of attribute key.



35
36
37
# File 'lib/cache_crispies/attribute.rb', line 35

def key
  @key
end

#method_nameObject (readonly)

Returns the value of attribute method_name.



35
36
37
# File 'lib/cache_crispies/attribute.rb', line 35

def method_name
  @method_name
end

#nestingObject (readonly)

Returns the value of attribute nesting.



35
36
37
# File 'lib/cache_crispies/attribute.rb', line 35

def nesting
  @nesting
end

#serializerObject (readonly)

Returns the value of attribute serializer.



35
36
37
# File 'lib/cache_crispies/attribute.rb', line 35

def serializer
  @serializer
end

Instance Method Details

#value_for(model, options) ⇒ Object

Gets the value of the attribute for the given model and options

Parameters:

  • model (Object)

    typically ActiveRecord::Base, but could be anything

  • options (Hash)

    any optional values from the serializer instance

Returns:

  • the value for the attribute for the given model and options

Raises:



51
52
53
54
55
# File 'lib/cache_crispies/attribute.rb', line 51

def value_for(model, options)
  value = model.public_send(method_name)

  serializer ? serialize(value, options) : coerce(value)
end