factory_trace 0.1.2 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/exe/factory_trace +14 -0
- data/lib/factory_trace/configuration.rb +13 -1
- data/lib/factory_trace/find_unused.rb +4 -12
- data/lib/factory_trace/readers/trace_reader.rb +36 -0
- data/lib/factory_trace/version.rb +1 -1
- data/lib/factory_trace/{printer.rb → writers/report_writer.rb} +2 -9
- data/lib/factory_trace/writers/trace_writer.rb +11 -0
- data/lib/factory_trace/writers/writer.rb +23 -0
- data/lib/factory_trace.rb +19 -10
- metadata +9 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8910590a0b5aab2a00f31e0aa41cc244161e8c387b47341b0f6c2a96d7e40c8
|
4
|
+
data.tar.gz: e6902745419605702ccc35def7d110b7c18b23b1407af3560b2d2e3f75a43e96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15b006db74f1f06d6b8f5a16dff18158a407ed292e2a90b1859c7c6bd6fc503d1016e14516e2fa2e1081a4d6dd873fff0096e4fd2d98ab39c794e63c986a7bb5
|
7
|
+
data.tar.gz: 69a82579dc197d590f1578e04fcbd818e48c2bf5750d01f86ffb62e77d1fcb6341792dcae76ae0c50bfb8acb48d562fdac1f0caa9b1e6d6a292fc5853d9aae1b
|
data/exe/factory_trace
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift("#{__dir__}/../lib")
|
4
|
+
require 'factory_trace'
|
5
|
+
|
6
|
+
fail "You should pass at least one file with traced information.\nYou can generate it using only_trace mode." if ARGV.empty?
|
7
|
+
|
8
|
+
config = FactoryTrace.configuration
|
9
|
+
data = FactoryTrace::TraceReader.read_from_files(*ARGV)
|
10
|
+
data = FactoryTrace::FindUnused.call(data)
|
11
|
+
code = data.size > 2 ? 1 : 0
|
12
|
+
|
13
|
+
FactoryTrace::ReportWriter.new(config.out, config: config).write(data)
|
14
|
+
exit(code)
|
@@ -1,11 +1,12 @@
|
|
1
1
|
module FactoryTrace
|
2
2
|
class Configuration
|
3
|
-
attr_accessor :path, :enabled, :color
|
3
|
+
attr_accessor :path, :enabled, :color, :mode
|
4
4
|
|
5
5
|
def initialize
|
6
6
|
@enabled = ENV.key?('FB_TRACE') || ENV.key?('FB_TRACE_FILE')
|
7
7
|
@path = ENV['FB_TRACE_FILE']
|
8
8
|
@color = path.nil?
|
9
|
+
@mode = extract_mode(ENV['FB_TRACE']) || :full
|
9
10
|
end
|
10
11
|
|
11
12
|
def out
|
@@ -13,5 +14,16 @@ module FactoryTrace
|
|
13
14
|
|
14
15
|
File.open(path, 'w')
|
15
16
|
end
|
17
|
+
|
18
|
+
def mode?(*args)
|
19
|
+
args.include?(mode)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def extract_mode(value)
|
25
|
+
matcher = value && value.match(/full|trace_only/)
|
26
|
+
matcher && matcher[0].to_sym
|
27
|
+
end
|
16
28
|
end
|
17
29
|
end
|
@@ -1,13 +1,8 @@
|
|
1
1
|
module FactoryTrace
|
2
2
|
class FindUnused
|
3
|
-
|
4
|
-
# @param [Hash<Symbol, Set<Symbol>>]
|
5
|
-
def initialize(data)
|
6
|
-
@initial_data = data
|
7
|
-
end
|
8
|
-
|
3
|
+
# @param [Hash<Symbol, Set<Symbol>>] initial_data
|
9
4
|
# @return [Array<Hash>]
|
10
|
-
def
|
5
|
+
def self.call(initial_data)
|
11
6
|
# This is required to exclude parent traits from +defined_traits+
|
12
7
|
FactoryBot.reload
|
13
8
|
|
@@ -39,9 +34,8 @@ module FactoryTrace
|
|
39
34
|
# Return new structure where each trait is moved to its own factory
|
40
35
|
#
|
41
36
|
# @param [Hash<Symbol, Set<Symbol>>]
|
42
|
-
#
|
43
37
|
# @return [Hash<String, Set<String>>]
|
44
|
-
def prepare(data)
|
38
|
+
def self.prepare(data)
|
45
39
|
# +_traits+ is for global traits
|
46
40
|
output = {'_traits' => Set.new, '_total_used' => count_total(data)}
|
47
41
|
|
@@ -75,10 +69,8 @@ module FactoryTrace
|
|
75
69
|
end
|
76
70
|
|
77
71
|
# @param [Hash<Symbol, Set<Symbol>>]
|
78
|
-
def count_total(data)
|
72
|
+
def self.count_total(data)
|
79
73
|
data.reduce(0) { |result, (_factory, traits)| result + 1 + traits.size }
|
80
74
|
end
|
81
|
-
|
82
|
-
attr_reader :initial_data
|
83
75
|
end
|
84
76
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module FactoryTrace
|
4
|
+
class TraceReader
|
5
|
+
def self.read_from_files(*file_names, config: Configuration.new)
|
6
|
+
file_names.reduce({}) do |hash, file_name|
|
7
|
+
reader = new(File.open(file_name, 'r'), config: config)
|
8
|
+
hash.merge(reader.read) { |_key, v1, v2| v1 | v2 }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(io, config: Configuration.new)
|
13
|
+
@io = io
|
14
|
+
@config = config
|
15
|
+
end
|
16
|
+
|
17
|
+
def read
|
18
|
+
@data ||= {}
|
19
|
+
|
20
|
+
io.each_line do |line|
|
21
|
+
factory, *traits = line.strip.split(',').map(&:to_sym)
|
22
|
+
|
23
|
+
if factory
|
24
|
+
@data[factory] ||= Set.new
|
25
|
+
@data[factory] |= traits
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
@data
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
attr_reader :io, :config
|
35
|
+
end
|
36
|
+
end
|
@@ -1,18 +1,13 @@
|
|
1
1
|
module FactoryTrace
|
2
|
-
class
|
2
|
+
class ReportWriter < Writer
|
3
3
|
COLORS = {
|
4
4
|
blue: "\e[34m",
|
5
5
|
green: "\e[32m",
|
6
6
|
red: "\e[31m"
|
7
7
|
}.freeze
|
8
8
|
|
9
|
-
def initialize(io, config: Configuration.new)
|
10
|
-
@io = io
|
11
|
-
@config = config
|
12
|
-
end
|
13
|
-
|
14
9
|
# @param [Array<Hash>] results
|
15
|
-
def
|
10
|
+
def write(results)
|
16
11
|
total_color = results.size == 2 ? :green : :red
|
17
12
|
|
18
13
|
results.each do |result|
|
@@ -42,7 +37,5 @@ module FactoryTrace
|
|
42
37
|
|
43
38
|
"#{COLORS[color]}#{msg}\e[0m"
|
44
39
|
end
|
45
|
-
|
46
|
-
attr_reader :io, :config
|
47
40
|
end
|
48
41
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module FactoryTrace
|
2
|
+
class Writer
|
3
|
+
def self.factory(io, config: Configuration.new)
|
4
|
+
writer =
|
5
|
+
if config.mode?(:full)
|
6
|
+
ReportWriter
|
7
|
+
elsif config.mode?(:trace_only)
|
8
|
+
TraceWriter
|
9
|
+
end
|
10
|
+
|
11
|
+
writer.new(io, config: config)
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(io, config: Configuration.new)
|
15
|
+
@io = io
|
16
|
+
@config = config
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
attr_reader :io, :config
|
22
|
+
end
|
23
|
+
end
|
data/lib/factory_trace.rb
CHANGED
@@ -5,7 +5,10 @@ require 'factory_trace/configuration'
|
|
5
5
|
require 'factory_trace/version'
|
6
6
|
require 'factory_trace/tracker'
|
7
7
|
require 'factory_trace/find_unused'
|
8
|
-
require 'factory_trace/
|
8
|
+
require 'factory_trace/readers/trace_reader'
|
9
|
+
require 'factory_trace/writers/writer'
|
10
|
+
require 'factory_trace/writers/report_writer'
|
11
|
+
require 'factory_trace/writers/trace_writer'
|
9
12
|
# Integrations
|
10
13
|
require 'integrations/rspec' if defined?(RSpec::Core)
|
11
14
|
|
@@ -20,27 +23,33 @@ module FactoryTrace
|
|
20
23
|
def stop
|
21
24
|
return unless configuration.enabled
|
22
25
|
|
23
|
-
|
24
|
-
|
25
|
-
printer.print(result)
|
26
|
+
writer.write(results)
|
26
27
|
end
|
27
28
|
|
28
29
|
def configure
|
29
30
|
yield(configuration)
|
30
31
|
end
|
31
32
|
|
33
|
+
def configuration
|
34
|
+
@configuration ||= Configuration.new
|
35
|
+
end
|
36
|
+
|
32
37
|
private
|
33
38
|
|
34
|
-
def
|
35
|
-
|
39
|
+
def results
|
40
|
+
if configuration.mode?(:full)
|
41
|
+
FindUnused.call(tracker.storage)
|
42
|
+
elsif configuration.mode?(:trace_only)
|
43
|
+
tracker.storage
|
44
|
+
end
|
36
45
|
end
|
37
46
|
|
38
|
-
def
|
39
|
-
@
|
47
|
+
def tracker
|
48
|
+
@tracker ||= Tracker.new
|
40
49
|
end
|
41
50
|
|
42
|
-
def
|
43
|
-
@
|
51
|
+
def writer
|
52
|
+
@writer ||= Writer.factory(configuration.out, config: configuration)
|
44
53
|
end
|
45
54
|
end
|
46
55
|
end
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: factory_trace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- djezzzl
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
11
|
date: 2019-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
@@ -69,16 +69,21 @@ dependencies:
|
|
69
69
|
description:
|
70
70
|
email:
|
71
71
|
- lawliet.djez@gmail.com
|
72
|
-
executables:
|
72
|
+
executables:
|
73
|
+
- factory_trace
|
73
74
|
extensions: []
|
74
75
|
extra_rdoc_files: []
|
75
76
|
files:
|
77
|
+
- exe/factory_trace
|
76
78
|
- lib/factory_trace.rb
|
77
79
|
- lib/factory_trace/configuration.rb
|
78
80
|
- lib/factory_trace/find_unused.rb
|
79
|
-
- lib/factory_trace/
|
81
|
+
- lib/factory_trace/readers/trace_reader.rb
|
80
82
|
- lib/factory_trace/tracker.rb
|
81
83
|
- lib/factory_trace/version.rb
|
84
|
+
- lib/factory_trace/writers/report_writer.rb
|
85
|
+
- lib/factory_trace/writers/trace_writer.rb
|
86
|
+
- lib/factory_trace/writers/writer.rb
|
82
87
|
- lib/integrations/rspec.rb
|
83
88
|
homepage: https://github.com/djezzzl/factory_trace
|
84
89
|
licenses:
|