Class: FixtureReplacement::AttributeBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/fixture_replacement/attribute_builder.rb

Defined Under Namespace

Classes: InvalidKeyError

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(fixture_name, options = {}, &block) ⇒ AttributeBuilder

Returns a new instance of AttributeBuilder.



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/fixture_replacement/attribute_builder.rb', line 29

def initialize(fixture_name, options={}, &block)
  options.symbolize_keys!

  check_valid_keys(options, [:from, :class])

  @fixture_name    = fixture_name.to_sym
  @attributes_proc = block || proc {}
  @from            = options[:from].to_sym if options.has_key?(:from)
  @class           = options[:class]

  self.class.add_instance(self)
end

Instance Attribute Details

#fixture_nameObject (readonly)

Returns the value of attribute fixture_name.



42
43
44
# File 'lib/fixture_replacement/attribute_builder.rb', line 42

def fixture_name
  @fixture_name
end

#fromObject (readonly)

Returns the value of attribute from.



43
44
45
# File 'lib/fixture_replacement/attribute_builder.rb', line 43

def from
  @from
end

Class Method Details

.add_instance(instance) ⇒ Object



16
17
18
# File 'lib/fixture_replacement/attribute_builder.rb', line 16

def add_instance(instance)
  instances << instance
end

.clear_out_instances!Object



20
21
22
# File 'lib/fixture_replacement/attribute_builder.rb', line 20

def clear_out_instances!
  @instances = nil
end

.find_by_fixture_name(arg) ⇒ Object



24
25
26
# File 'lib/fixture_replacement/attribute_builder.rb', line 24

def find_by_fixture_name(arg)
  instances.detect { |instance| instance.fixture_name == arg }
end

.instancesObject



12
13
14
# File 'lib/fixture_replacement/attribute_builder.rb', line 12

def instances
  @instances ||= []
end

.validate_instances!Object



4
5
6
7
8
9
10
# File 'lib/fixture_replacement/attribute_builder.rb', line 4

def validate_instances!
  instances.each do |fixture|
    fixture.validate!
  end

  true
end

Instance Method Details

#active_record_classObject



45
46
47
# File 'lib/fixture_replacement/attribute_builder.rb', line 45

def active_record_class
  @active_record_class ||= find_active_record_class
end

#instantiate(hash_to_merge = {}, instance = active_record_class.new) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/fixture_replacement/attribute_builder.rb', line 49

def instantiate(hash_to_merge = {}, instance = active_record_class.new)
  instance.tap do
    instantiate_parent_fixture(instance)
    call_attribute_body(instance, hash_to_merge)
    add_given_keys(instance, hash_to_merge)
  end
end

#validate!Object



57
58
59
60
61
62
63
64
65
66
67
# File 'lib/fixture_replacement/attribute_builder.rb', line 57

def validate!
  new_instance = instantiate

  unless new_instance.valid?
    errors = "new_#{fixture_name} is not valid! - Errors: "
    errors << new_instance.errors.map do |error|
      "[#{error.attribute}: #{error.message}]"
    end.join(", ")
    raise InvalidInstance, errors
  end
end