factory_trace 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
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