factory_trace 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eb1219bf45bfd040c463c2c49694f615bad866afe0042a1036feb02cd2a09d46
4
- data.tar.gz: 326e1995408175cd60bbdf36a0e091b9111b3a3566034d920e42d04bf3eb5baf
3
+ metadata.gz: 33c0207895ffee9e1ce968b396f9acf75a298664e9cd9dd7a8766031c8bfbcb9
4
+ data.tar.gz: 4bb96700eefd658c71639b9423b058a604e8c8ad29cdc96a1569883e62d4c0c3
5
5
  SHA512:
6
- metadata.gz: 18d6d00e731569b979c8158927a8ee42d1177c8ada0da28173d48253d4185fc00aa957f258d06ad6c2b3a55ec581527aeadc176ea2ded9e3f3a5449c88bbf710
7
- data.tar.gz: 1996554340f1aec3c1c997706679dce4ca5d4a43d6bdc3c45e3001d52d5ee26894201960cb5d6b1ae4dc78f93106aff2b43da12aabe91b1195c2b73d09f081e3
6
+ metadata.gz: a590c9294896d635673d8a3f3864fcc09cf3fded38ace341d1d9874f190171809027218ec6331987b26235cd2a855a39a76fe8bfb4b0900453edf74c2a0d35c4
7
+ data.tar.gz: 98237229d930694a1459a4c052d2221c6cf15bb5c85bf76124d9ea81c0c3d98ff620192e1f94b6b1286aad38f7f1d02301a8e9c15cb4abad2025d4767a4a790f
@@ -21,7 +21,8 @@ module FactoryTrace
21
21
  FactoryTrace::Structures::Factory.new(
22
22
  factory.name.to_s,
23
23
  factory.send(:parent).respond_to?(:name) ? factory.send(:parent).name.to_s : nil,
24
- factory.defined_traits.map(&:name).map(&:to_s)
24
+ factory.defined_traits.map(&:name).map(&:to_s),
25
+ factory.names.map(&:to_s) - [factory.name.to_s]
25
26
  )
26
27
  end
27
28
  end
@@ -10,7 +10,7 @@ module FactoryTrace
10
10
  collection = FactoryTrace::Structures::Collection.new
11
11
 
12
12
  trace.each do |factory_name, trait_names|
13
- collection.add(FactoryTrace::Structures::Factory.new(factory_name, nil, trait_names.to_a))
13
+ collection.add(FactoryTrace::Structures::Factory.new(factory_name, nil, trait_names.to_a, []))
14
14
  end
15
15
 
16
16
  collection
@@ -13,8 +13,8 @@ module FactoryTrace
13
13
 
14
14
  output = []
15
15
 
16
- defined.factories.each_value do |factory|
17
- unless used.factories[factory.name]
16
+ defined.factories.each do |factory|
17
+ unless used.find(factory)
18
18
  if used_child_factories[factory.name]
19
19
  output << {code: :used_indirectly, factory_name: factory.name, child_factories_names: used_child_factories[factory.name]}
20
20
  else
@@ -23,14 +23,14 @@ module FactoryTrace
23
23
  end
24
24
 
25
25
  factory.trait_names.each do |trait_name|
26
- unless trait_used?(used, factory.name, trait_name) || trait_used?(used_inherited_traits, factory.name, trait_name)
26
+ unless trait_used?(used, factory, trait_name) || trait_used?(used_inherited_traits, factory, trait_name)
27
27
  output << {code: :unused, factory_name: factory.name, trait_name: trait_name}
28
28
  end
29
29
  end
30
30
  end
31
31
 
32
- defined.traits.each_value do |trait|
33
- unless used_inherited_traits.traits[trait.name]
32
+ defined.traits.each do |trait|
33
+ unless used_inherited_traits.find(trait)
34
34
  output << {code: :unused, trait_name: trait.name}
35
35
  next
36
36
  end
@@ -51,12 +51,13 @@ module FactoryTrace
51
51
  # Checks if factory of the collection contains a trait
52
52
  #
53
53
  # @param [FactoryTrace::Structures::Collection] collection
54
- # @param [String] factory_name
54
+ # @param [FactoryTrace::Structures::Factory] factory
55
55
  # @param [String] trait_name
56
56
  #
57
57
  # @return [Boolean]
58
- def self.trait_used?(collection, factory_name, trait_name)
59
- collection.factories[factory_name] && collection.factories[factory_name].trait_names.include?(trait_name)
58
+ def self.trait_used?(collection, factory, trait_name)
59
+ factory = collection.find(factory)
60
+ factory && factory.trait_names.include?(trait_name)
60
61
  end
61
62
 
62
63
  # Returns a new collection where traits which were used moved to their owner factory
@@ -68,18 +69,18 @@ module FactoryTrace
68
69
  def self.used_inherited_traits(defined, used)
69
70
  collection = FactoryTrace::Structures::Collection.new
70
71
 
71
- used.factories.each_value do |factory|
72
+ used.factories.each do |factory|
72
73
  factory.trait_names.each do |trait_name|
73
74
  possible_owner_name = factory.name
74
75
 
75
76
  while possible_owner_name
76
- break if defined.factories[possible_owner_name].trait_names.include?(trait_name)
77
- possible_owner_name = defined.factories[possible_owner_name].parent_name
77
+ break if defined.find_factory_by_names(possible_owner_name).trait_names.include?(trait_name)
78
+ possible_owner_name = defined.find_factory_by_names(possible_owner_name).parent_name
78
79
  end
79
80
 
80
81
  if possible_owner_name
81
- factory = collection.factories[possible_owner_name]
82
- factory ||= collection.add(FactoryTrace::Structures::Factory.new(possible_owner_name, nil, []))
82
+ factory = collection.find_factory_by_names(possible_owner_name)
83
+ factory ||= collection.add(FactoryTrace::Structures::Factory.new(possible_owner_name, nil, [], []))
83
84
 
84
85
  factory.trait_names << trait_name unless factory.trait_names.include?(trait_name)
85
86
  else
@@ -102,8 +103,8 @@ module FactoryTrace
102
103
  def self.used_child_factories(defined, used)
103
104
  hash = {}
104
105
 
105
- used.factories.each_value do |factory|
106
- parent_name = defined.factories[factory.name].parent_name
106
+ used.factories.each do |factory|
107
+ parent_name = defined.find(factory).parent_name
107
108
 
108
109
  if parent_name
109
110
  hash[parent_name] ||= []
@@ -45,7 +45,7 @@ module FactoryTrace
45
45
  collection = FactoryTrace::Structures::Collection.new
46
46
 
47
47
  hash['factories'].each do |h|
48
- collection.add(FactoryTrace::Structures::Factory.new(h['name'], h['parent_name'], h['trait_names']))
48
+ collection.add(FactoryTrace::Structures::Factory.new(h['name'], h['parent_name'], h['trait_names'], h['alias_names']))
49
49
  end
50
50
 
51
51
  hash['traits'].each do |h|
@@ -3,9 +3,9 @@ module FactoryTrace
3
3
  class Collection
4
4
  attr_reader :factories, :traits
5
5
 
6
- # @param [Hash<String, FactoryTrace::Structures::Factory>]
7
- # @param [Hash<String, FactoryTrace::Structures::Trait>]
8
- def initialize(factories = {}, traits = {})
6
+ # @param [Array<String, FactoryTrace::Structures::Factory>]
7
+ # @param [Array<String, FactoryTrace::Structures::Trait>]
8
+ def initialize(factories = [], traits = [])
9
9
  @factories = factories
10
10
  @traits = traits
11
11
  end
@@ -15,8 +15,36 @@ module FactoryTrace
15
15
  # @return [FactoryTrace::Structures::Factory, FactoryTrace::Structures::Trait]
16
16
  def add(element)
17
17
  case element
18
- when FactoryTrace::Structures::Factory then store(factories, element)
19
- when FactoryTrace::Structures::Trait then store(traits, element)
18
+ when FactoryTrace::Structures::Factory then factories << element
19
+ when FactoryTrace::Structures::Trait then traits << element
20
+ else
21
+ fail "Unknown element: #{element.inspect}"
22
+ end
23
+
24
+ element
25
+ end
26
+
27
+ # @param [Array<String>] names
28
+ #
29
+ # @return [FactoryTrace::Structures::Factory|nil]
30
+ def find_factory_by_names(*names)
31
+ factories.find { |factory| names.include?(factory.name) || (names & factory.alias_names).size > 0 }
32
+ end
33
+
34
+ # @param [Array<String>] names
35
+ #
36
+ # @return [FactoryTrace::Structures::Trait|nil]
37
+ def find_trait_by_names(*names)
38
+ traits.find { |trait| names.include?(trait.name) }
39
+ end
40
+
41
+ # @param [FactoryTrace::Structures::Factory|FactoryTrace::Structures::Trait]
42
+ #
43
+ # @return [FactoryTrace::Structures::Factory|FactoryTrace::Structures::Trait]
44
+ def find(element)
45
+ case element
46
+ when FactoryTrace::Structures::Factory then find_factory_by_names(element.name, *element.alias_names)
47
+ when FactoryTrace::Structures::Trait then find_trait_by_names(element.name)
20
48
  else
21
49
  fail "Unknown element: #{element.inspect}"
22
50
  end
@@ -28,24 +56,24 @@ module FactoryTrace
28
56
  #
29
57
  # @return [FactoryTrace::Structures::Collection]
30
58
  def merge!(collection)
31
- collection.factories.each_value do |factory|
32
- if factories[factory.name]
33
- factories[factory.name].merge!(factory)
59
+ collection.factories.each do |factory|
60
+ if (persisted = find(factory))
61
+ persisted.merge!(factory)
34
62
  else
35
- add(FactoryTrace::Structures::Factory.new(factory.name, factory.parent_name, factory.trait_names))
63
+ add(FactoryTrace::Structures::Factory.new(factory.name, factory.parent_name, factory.trait_names, factory.alias_names))
36
64
  end
37
65
  end
38
66
 
39
- collection.traits.each_value do |trait|
40
- add(FactoryTrace::Structures::Trait.new(trait.name, trait.owner_name)) unless traits[trait.name]
67
+ collection.traits.each do |trait|
68
+ add(FactoryTrace::Structures::Trait.new(trait.name, trait.owner_name)) unless find(trait)
41
69
  end
42
70
  end
43
71
 
44
72
  # @return [Hash]
45
73
  def to_h
46
74
  {
47
- factories: convert(factories),
48
- traits: convert(traits)
75
+ factories: factories.map(&:to_h),
76
+ traits: traits.map(&:to_h)
49
77
  }
50
78
  end
51
79
 
@@ -53,7 +81,7 @@ module FactoryTrace
53
81
  #
54
82
  # @return [Integer]
55
83
  def total
56
- traits.size + factories.size + factories.values.sum { |factory| factory.trait_names.size }
84
+ traits.size + factories.size + factories.sum { |factory| factory.trait_names.size }
57
85
  end
58
86
 
59
87
  # @return [Boolean]
@@ -62,21 +90,6 @@ module FactoryTrace
62
90
 
63
91
  factories == collection.factories && traits == collection.traits
64
92
  end
65
-
66
- private
67
-
68
- # @param [Hash] hash
69
- # @param [FactoryTrace::Structures::Factory, FactoryTrace::Structures::Trait] element
70
- #
71
- # @return [FactoryTrace::Structures::Factory, FactoryTrace::Structures::Trait] element
72
- def store(hash, element)
73
- hash[element.name] = element
74
- end
75
-
76
- # @return [Hash]
77
- def convert(hash)
78
- hash.each_value.map(&:to_h)
79
- end
80
93
  end
81
94
  end
82
95
  end
@@ -1,15 +1,17 @@
1
1
  module FactoryTrace
2
2
  module Structures
3
3
  class Factory
4
- attr_reader :name, :parent_name, :trait_names
4
+ attr_reader :name, :parent_name, :trait_names, :alias_names
5
5
 
6
6
  # @param [String] name
7
7
  # @param [String, nil] parent_name
8
8
  # @param [Array<String>] trait_names
9
- def initialize(name, parent_name, trait_names)
9
+ # @param [Array<String>] alias_names
10
+ def initialize(name, parent_name, trait_names, alias_names)
10
11
  @name = name
11
12
  @parent_name = parent_name
12
13
  @trait_names = trait_names
14
+ @alias_names = alias_names
13
15
  end
14
16
 
15
17
  # @return [Hash<Symbol, String>]
@@ -17,7 +19,8 @@ module FactoryTrace
17
19
  {
18
20
  name: name,
19
21
  parent_name: parent_name,
20
- trait_names: trait_names
22
+ trait_names: trait_names,
23
+ alias_names: alias_names
21
24
  }
22
25
  end
23
26
 
@@ -34,7 +37,10 @@ module FactoryTrace
34
37
  def ==(factory)
35
38
  return false unless factory.is_a?(FactoryTrace::Structures::Factory)
36
39
 
37
- name == factory.name && parent_name == factory.parent_name && trait_names == factory.trait_names
40
+ name == factory.name &&
41
+ parent_name == factory.parent_name &&
42
+ trait_names == factory.trait_names &&
43
+ alias_names == factory.alias_names
38
44
  end
39
45
  end
40
46
  end
@@ -1,3 +1,3 @@
1
1
  module FactoryTrace
2
- VERSION = '0.2.3'
2
+ VERSION = '0.2.4'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_trace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - djezzzl
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-26 00:00:00.000000000 Z
11
+ date: 2019-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: factory_bot