Module: ArrayFu

Includes:
Initializer
Defined in:
lib/arrayfu/arrayfu.rb,
lib/arrayfu/version.rb,
lib/arrayfu/initializer.rb,
lib/arrayfu/item_constraint.rb,
lib/arrayfu/module_registry.rb,
lib/arrayfu/array_definition.rb,
lib/arrayfu/generate_readers.rb,
lib/arrayfu/generate_writers.rb,
lib/arrayfu/generate_mutators.rb,
lib/arrayfu/generate_visitors.rb,
lib/arrayfu/mutator_definition.rb,
lib/arrayfu/visitor_definition.rb

Overview

Main module that can be mixed in to allow for declaritive array definitions

Defined Under Namespace

Modules: ClassMethods, GenerateMutators, GenerateReaders, GenerateVisitors, GenerateWriters, Initializer, ModuleRegistry Classes: ArrayDefinition, ItemConstraint, MutatorDefinition, VisitorDefinition

Constant Summary collapse

VERSION =
"1.0.0"

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Initializer

#initialize_arrays, #initialize_defaults, #initialize_false, #initialize_hashes

Class Method Details

.included(base) ⇒ Object



6
7
8
# File 'lib/arrayfu/arrayfu.rb', line 6

def self.included(base)
  base.extend ClassMethods 
end

Instance Method Details

#array(name, &block) ⇒ Object

Array definition dsl entry point

Parameters:

name

A name that will be used to initialize a variable on the class that is including this module. It will serve as the backing array for the array definition

&block

A configuration block that will serve to configure an ArrayDefinition

Examples:

  • Define a basic array

    class SomeClass
      include ArrayFu
    
      array :names
    end
    
  • Define a basic array that supports a read accessor

    class SomeClass
      include ArrayFu
    
      array :names { readable }
    end
    
  • Define a basic array that supports a write accessor

    class SomeClass
      include ArrayFu
    
      array :names { writeable }
    end
    
  • Define a basic array that supports both read and write accessors

    class SomeClass
      include ArrayFu
    
      array :names { read_and_write }
    end
    


81
82
83
# File 'lib/arrayfu/arrayfu.rb', line 81

def array(name, &block)
  self.class.array(name, &block)
end

#initialize(*args) ⇒ Object

This method is here to ensure that all of the array definitions are expanded and a variable instance is assigned to the variable name specified by the array If you are mixing in this module and the class has its own constructor definition, make sure you call super to ensure that array initialization occurs correctly as shown:

class SomeClass
  include ArrayFu

  array :names

  def initialize(some_value)
    super
  end
end

If your class does not contain custom constructor logic, no extra code is needed:

class SomeClass
  include ArrayFu

  array :names
end


31
32
33
34
35
36
# File 'lib/arrayfu/arrayfu.rb', line 31

def initialize(*args)
  self.class.each_array_definition do |array_definition|
    initialize_arrays(array_definition.name)
    ArrayFu::ModuleRegistry.configure(self, array_definition)      
  end
end