Sha256: 9c750abeb2bf1f6ab28af3cbdcf807c285156e58f27d4202d3342fa024dcf9a6

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

module Taza

  class Entity
    #Creates a entity, pass in a hash to be methodized and the fixture to look up other fixtures (not entirely happy with this abstraction)
    def initialize(hash,fixture)
      @hash = hash
      @fixture = fixture
      define_methods_for_hash_keys
    end
    
    #This method converts hash keys into methods onto the entity
    def define_methods_for_hash_keys
      @hash.keys.each do |key|
        create_method(key) do
          get_value_for_entry(key)
        end
      end
    end

    #This method will lookup another fixture if a pluralized fixture exists otherwise return the value in the hash
    def get_value_for_entry(key) # :nodoc:
      if @fixture.nil?
        @hash[key]
      elsif @fixture.fixture_exists?(key)
        @fixture.specific_fixture_entities(key.to_sym, @hash[key])
      elsif @fixture.pluralized_fixture_exists?(key)
        @fixture.get_fixture_entity(key.pluralize.to_sym,@hash[key])
      else
        @hash[key]
      end
    end
    alias :[] :get_value_for_entry

    private
    def create_method(name, &block) # :nodoc:
      self.class.send(:define_method, name, &block)
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
taza-0.8.5 lib/taza/entity.rb