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)


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

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
# 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
  end

  element
end

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

Parameters:

  • names (Array<String>)

Returns:



28
29
30
# File 'lib/factory_trace/structures/collection.rb', line 28

def find_factory_by_names(names)
  factories.find { |factory| (names & factory.names).size > 0 }
end

#find_trait_by_name(name) ⇒ FactoryTrace::Structures::Trait|nil

Parameters:

  • name (String)

Returns:



35
36
37
# File 'lib/factory_trace/structures/collection.rb', line 35

def find_trait_by_name(name)
  traits.find { |trait| name == trait.name }
end

#merge!(collection) ⇒ Object

Merge passed collection into self



50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/factory_trace/structures/collection.rb', line 50

def merge!(collection)
  collection.factories.each do |factory|
    if (persisted = find_factory_by_names(factory.names))
      persisted.merge!(factory)
    else
      add(factory)
    end
  end

  collection.traits.each do |trait|
    add(trait) unless find_trait_by_name(trait.name)
  end
end

#to_hHash

Returns:

  • (Hash)


40
41
42
43
44
45
# File 'lib/factory_trace/structures/collection.rb', line 40

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

#totalInteger

Total number of factories and traits

Returns:

  • (Integer)


67
68
69
# File 'lib/factory_trace/structures/collection.rb', line 67

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