Class: Wrest::Components::Mutators::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/wrest/components/mutators/base.rb

Overview

This is a base implementation of a hash mutator that ensures that the mutate method will chain to the next mutator by using a template method.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(next_mutator = nil) ⇒ Base

Returns a new instance of Base.



28
29
30
# File 'lib/wrest/components/mutators/base.rb', line 28

def initialize(next_mutator = nil)
  @next_mutator = next_mutator
end

Instance Attribute Details

#next_mutatorObject (readonly)

Returns the value of attribute next_mutator.



17
18
19
# File 'lib/wrest/components/mutators/base.rb', line 17

def next_mutator
  @next_mutator
end

Class Method Details

.inherited(subklass) ⇒ Object

Registers all subclasses of Mutators::Base in Mutators::REGISTRY making it easy to reference and chain them later.

See Mutators#chain for more information.



24
25
26
# File 'lib/wrest/components/mutators/base.rb', line 24

def self.inherited(subklass)
  Wrest::Components::Mutators::REGISTRY[subklass.name.demodulize.underscore.to_sym] = subklass unless subklass.name.blank?
end

Instance Method Details

#mutate(tuple) ⇒ Object

This is a template method which operates on a tuple (well, pair) from a hash map and guarantees mutator chaining.

Iterating over any hash using each injects each key/value pair from the hash in the form of an array. This method expects of this form as an argument, i.e. an array with the structure [:key, :value]

The implementation of the mutation is achieved by overriding the do_mutate method in a subclass. Note that failing to do so will result in an exception at runtime.



45
46
47
48
# File 'lib/wrest/components/mutators/base.rb', line 45

def mutate(tuple)
  out_tuple = do_mutate(tuple)
  next_mutator ? next_mutator.mutate(out_tuple) : out_tuple
end