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.

Direct Known Subclasses

CamelToSnakeCase, XmlMiniTypeCaster, XmlSimpleTypeCaster

Instance Attribute Summary (collapse)

Class Method Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (Base) initialize(next_mutator = nil)



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

- (Object) next_mutator (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

+ (Object) inherited(subklass)

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

- (Object) mutate(tuple)

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