Class: FactoryTrace::Structures::Collection

Inherits:
Object
  • Object
show all
Defined in:
lib/factory_trace/structures/collection.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(factories = [], traits = []) ⇒ Collection

Returns a new instance of Collection.

Parameters:



8
9
10
11
# File 'lib/factory_trace/structures/collection.rb', line 8

def initialize(factories = [], traits = [])
  @factories = factories
  @traits = traits
end

Instance Attribute Details

#factoriesObject (readonly)

Returns the value of attribute factories.



4
5
6
# File 'lib/factory_trace/structures/collection.rb', line 4

def factories
  @factories
end

#traitsObject (readonly)

Returns the value of attribute traits.



4
5
6
# File 'lib/factory_trace/structures/collection.rb', line 4

def traits
  @traits
end

Instance Method Details

#==(collection) ⇒ Boolean

Returns:

  • (Boolean)


88
89
90
91
92
# File 'lib/factory_trace/structures/collection.rb', line 88

def ==(collection)
  return false unless collection.is_a?(FactoryTrace::Structures::Collection)

  factories == collection.factories && traits == collection.traits
end

#add(element) ⇒ FactoryTrace::Structures::Factory, FactoryTrace::Structures::Trait



16
17
18
19
20
21
22
23
24
25
# File 'lib/factory_trace/structures/collection.rb', line 16

def add(element)
  case element
  when FactoryTrace::Structures::Factory then factories << element
  when FactoryTrace::Structures::Trait then traits << element
  else
    fail "Unknown element: #{element.inspect}"
  end

  element
end

#find(element) ⇒ FactoryTrace::Structures::Factory|FactoryTrace::Structures::Trait



44
45
46
47
48
49
50
51
# File 'lib/factory_trace/structures/collection.rb', line 44

def find(element)
  case element
  when FactoryTrace::Structures::Factory then find_factory_by_names(element.name, *element.alias_names)
  when FactoryTrace::Structures::Trait then find_trait_by_names(element.name)
  else
    fail "Unknown element: #{element.inspect}"
  end
end

#find_factory_by_names(*names) ⇒ FactoryTrace::Structures::Factory|nil

Parameters:

  • names (Array<String>)

Returns:



30
31
32
# File 'lib/factory_trace/structures/collection.rb', line 30

def find_factory_by_names(*names)
  factories.find { |factory| names.include?(factory.name) || (names & factory.alias_names).size > 0 }
end

#find_trait_by_names(*names) ⇒ FactoryTrace::Structures::Trait|nil

Parameters:

  • names (Array<String>)

Returns:



37
38
39
# File 'lib/factory_trace/structures/collection.rb', line 37

def find_trait_by_names(*names)
  traits.find { |trait| names.include?(trait.name) }
end

#merge!(collection) ⇒ FactoryTrace::Structures::Collection

Merge passed collection into self



58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/factory_trace/structures/collection.rb', line 58

def merge!(collection)
  collection.factories.each do |factory|
    if (persisted = find(factory))
      persisted.merge!(factory)
    else
      add(FactoryTrace::Structures::Factory.new(factory.name, factory.parent_name, factory.trait_names, factory.alias_names))
    end
  end

  collection.traits.each do |trait|
    add(FactoryTrace::Structures::Trait.new(trait.name, trait.owner_name)) unless find(trait)
  end
end

#to_hHash

Returns:

  • (Hash)


73
74
75
76
77
78
# File 'lib/factory_trace/structures/collection.rb', line 73

def to_h
  {
    factories: factories.map(&:to_h),
    traits: traits.map(&:to_h)
  }
end

#totalInteger

Total number of factories and traits

Returns:

  • (Integer)


83
84
85
# File 'lib/factory_trace/structures/collection.rb', line 83

def total
  traits.size + factories.size + factories.sum { |factory| factory.trait_names.size }
end