crystalball 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +4 -1
- data/.rubocop.yml +4 -0
- data/.travis.yml +1 -1
- data/CHANGELOG.md +18 -0
- data/LICENSE +22 -674
- data/README.md +13 -158
- data/crystalball.gemspec +6 -2
- data/docs/img/favicon.ico +0 -0
- data/docs/img/logo.png +0 -0
- data/docs/index.md +44 -0
- data/docs/map_generators.md +149 -0
- data/docs/predictors.md +75 -0
- data/docs/runner.md +24 -0
- data/lib/crystalball.rb +8 -3
- data/lib/crystalball/active_record.rb +4 -0
- data/lib/crystalball/example_group_map.rb +19 -0
- data/lib/crystalball/execution_map.rb +17 -16
- data/lib/crystalball/extensions/git.rb +4 -0
- data/lib/crystalball/extensions/git/base.rb +14 -0
- data/lib/crystalball/extensions/git/lib.rb +18 -0
- data/lib/crystalball/factory_bot.rb +3 -0
- data/lib/crystalball/git_repo.rb +2 -7
- data/lib/crystalball/logging.rb +51 -0
- data/lib/crystalball/map_generator.rb +5 -7
- data/lib/crystalball/map_generator/allocated_objects_strategy.rb +6 -5
- data/lib/crystalball/map_generator/allocated_objects_strategy/object_tracker.rb +1 -0
- data/lib/crystalball/map_generator/base_strategy.rb +5 -4
- data/lib/crystalball/map_generator/configuration.rb +1 -1
- data/lib/crystalball/map_generator/coverage_strategy.rb +6 -5
- data/lib/crystalball/map_generator/described_class_strategy.rb +5 -5
- data/lib/crystalball/map_generator/factory_bot_strategy.rb +59 -0
- data/lib/crystalball/map_generator/factory_bot_strategy/dsl_patch.rb +40 -0
- data/lib/crystalball/map_generator/factory_bot_strategy/dsl_patch/factory_path_fetcher.rb +30 -0
- data/lib/crystalball/map_generator/factory_bot_strategy/factory_gem_loader.rb +27 -0
- data/lib/crystalball/map_generator/factory_bot_strategy/factory_runner_patch.rb +25 -0
- data/lib/crystalball/map_generator/parser_strategy.rb +60 -0
- data/lib/crystalball/map_generator/parser_strategy/processor.rb +129 -0
- data/lib/crystalball/map_generator/strategies_collection.rb +9 -9
- data/lib/crystalball/map_storage/yaml_storage.rb +7 -6
- data/lib/crystalball/prediction.rb +12 -11
- data/lib/crystalball/predictor.rb +7 -5
- data/lib/crystalball/predictor/associated_specs.rb +9 -4
- data/lib/crystalball/predictor/helpers/affected_example_groups_detector.rb +20 -0
- data/lib/crystalball/predictor/helpers/path_formatter.rb +18 -0
- data/lib/crystalball/predictor/modified_execution_paths.rb +11 -5
- data/lib/crystalball/predictor/modified_specs.rb +8 -2
- data/lib/crystalball/predictor/modified_support_specs.rb +39 -0
- data/lib/crystalball/predictor/strategy.rb +16 -0
- data/lib/crystalball/predictor_evaluator.rb +1 -1
- data/lib/crystalball/rails.rb +1 -0
- data/lib/crystalball/rails/helpers/base_schema_parser.rb +51 -0
- data/lib/crystalball/rails/helpers/schema_definition_parser.rb +36 -0
- data/lib/crystalball/rails/helpers/schema_definition_parser/active_record.rb +21 -0
- data/lib/crystalball/rails/helpers/schema_definition_parser/table_content_parser.rb +27 -0
- data/lib/crystalball/rails/map_generator/action_view_strategy.rb +5 -5
- data/lib/crystalball/rails/map_generator/action_view_strategy/patch.rb +1 -1
- data/lib/crystalball/rails/map_generator/i18n_strategy.rb +5 -5
- data/lib/crystalball/rails/map_generator/i18n_strategy/simple_patch.rb +1 -0
- data/lib/crystalball/rails/predictor/modified_schema.rb +81 -0
- data/lib/crystalball/rails/tables_map.rb +53 -0
- data/lib/crystalball/rails/tables_map_generator.rb +84 -0
- data/lib/crystalball/rails/tables_map_generator/configuration.rb +39 -0
- data/lib/crystalball/rspec/filtering.rb +52 -0
- data/lib/crystalball/rspec/prediction_builder.rb +21 -11
- data/lib/crystalball/rspec/prediction_pruning.rb +56 -0
- data/lib/crystalball/rspec/prediction_pruning/examples_pruner.rb +70 -0
- data/lib/crystalball/rspec/runner.rb +39 -27
- data/lib/crystalball/rspec/runner/configuration.rb +24 -14
- data/lib/crystalball/rspec/standard_prediction_builder.rb +17 -0
- data/lib/crystalball/source_diff.rb +12 -2
- data/lib/crystalball/source_diff/file_diff.rb +1 -1
- data/lib/crystalball/source_diff/formatting_checker.rb +50 -0
- data/lib/crystalball/version.rb +1 -1
- data/mkdocs.yml +23 -0
- metadata +102 -7
- data/lib/crystalball/case_map.rb +0 -19
- data/lib/crystalball/simple_predictor.rb +0 -18
@@ -1,28 +1,30 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'crystalball/
|
3
|
+
require 'crystalball/rspec/standard_prediction_builder'
|
4
4
|
|
5
5
|
module Crystalball
|
6
6
|
module RSpec
|
7
7
|
class Runner
|
8
8
|
# Class for storing local runner configuration
|
9
9
|
class Configuration
|
10
|
-
def initialize(config = {})
|
10
|
+
def initialize(config = {}) # rubocop:disable Metrics/MethodLength
|
11
11
|
@values = {
|
12
|
-
'
|
12
|
+
'execution_map_path' => 'tmp/crystalball_data.yml',
|
13
13
|
'map_expiration_period' => 86_400,
|
14
14
|
'repo_path' => Dir.pwd,
|
15
|
-
'predictor_class_name' => 'Crystalball::SimplePredictor',
|
16
15
|
'requires' => [],
|
17
16
|
'diff_from' => 'HEAD',
|
18
17
|
'diff_to' => nil,
|
19
|
-
'runner_class_name' => 'Crystalball::RSpec::Runner'
|
18
|
+
'runner_class_name' => 'Crystalball::RSpec::Runner',
|
19
|
+
'prediction_builder_class_name' => 'Crystalball::RSpec::StandardPredictionBuilder',
|
20
|
+
'log_level' => :info,
|
21
|
+
'log_file' => 'log/crystalball.log'
|
20
22
|
}.merge(config)
|
21
23
|
end
|
22
24
|
|
23
25
|
def to_h
|
24
26
|
dynamic_values = {}
|
25
|
-
(private_methods - Object.private_instance_methods - %i[run_requires values]).each do |method|
|
27
|
+
(private_methods - Object.private_instance_methods - %i[run_requires values raw_value]).each do |method|
|
26
28
|
dynamic_values[method.to_s] = send(method)
|
27
29
|
end
|
28
30
|
|
@@ -30,16 +32,20 @@ module Crystalball
|
|
30
32
|
end
|
31
33
|
|
32
34
|
def [](key)
|
33
|
-
respond_to?(key, true) ? send(key) :
|
35
|
+
respond_to?(key, true) ? send(key) : raw_value(key)
|
34
36
|
end
|
35
37
|
|
36
38
|
private
|
37
39
|
|
38
|
-
def
|
39
|
-
|
40
|
+
def raw_value(key)
|
41
|
+
ENV.fetch("CRYSTALBALL_#{key.to_s.upcase}", values[key])
|
42
|
+
end
|
43
|
+
|
44
|
+
def prediction_builder_class
|
45
|
+
@prediction_builder_class ||= begin
|
40
46
|
run_requires
|
41
47
|
|
42
|
-
Object.const_get(self['
|
48
|
+
Object.const_get(self['prediction_builder_class_name'])
|
43
49
|
end
|
44
50
|
end
|
45
51
|
|
@@ -51,18 +57,22 @@ module Crystalball
|
|
51
57
|
end
|
52
58
|
end
|
53
59
|
|
54
|
-
def
|
55
|
-
@
|
60
|
+
def execution_map_path
|
61
|
+
@execution_map_path ||= Pathname.new(raw_value('execution_map_path'))
|
56
62
|
end
|
57
63
|
|
58
64
|
def repo_path
|
59
|
-
@repo_path ||= Pathname.new(
|
65
|
+
@repo_path ||= Pathname.new(raw_value('repo_path'))
|
66
|
+
end
|
67
|
+
|
68
|
+
def log_file
|
69
|
+
@log_file ||= Pathname.new(raw_value('log_file'))
|
60
70
|
end
|
61
71
|
|
62
72
|
attr_reader :values
|
63
73
|
|
64
74
|
def run_requires
|
65
|
-
self['requires'].each { |f| require f }
|
75
|
+
Array(self['requires']).each { |f| require f }
|
66
76
|
end
|
67
77
|
end
|
68
78
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Crystalball
|
4
|
+
module RSpec
|
5
|
+
# Simple version of predictor
|
6
|
+
class StandardPredictionBuilder < PredictionBuilder
|
7
|
+
private
|
8
|
+
|
9
|
+
def predictor
|
10
|
+
super do |p|
|
11
|
+
p.use Crystalball::Predictor::ModifiedExecutionPaths.new
|
12
|
+
p.use Crystalball::Predictor::ModifiedSpecs.new
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'crystalball/source_diff/file_diff'
|
4
|
+
require 'crystalball/source_diff/formatting_checker'
|
4
5
|
|
5
6
|
module Crystalball
|
6
7
|
# Wrapper class representing Git source diff for given repo
|
@@ -8,7 +9,8 @@ module Crystalball
|
|
8
9
|
include Enumerable
|
9
10
|
extend Forwardable
|
10
11
|
|
11
|
-
delegate %i[stats
|
12
|
+
delegate %i[stats lines from to] => :git_diff
|
13
|
+
alias size count
|
12
14
|
|
13
15
|
# @param [Git::Diff] git_diff raw diff made by ruby-git gem
|
14
16
|
def initialize(git_diff)
|
@@ -25,13 +27,21 @@ module Crystalball
|
|
25
27
|
changeset.none?
|
26
28
|
end
|
27
29
|
|
30
|
+
# @return [Git::Base]
|
31
|
+
def repository
|
32
|
+
@repository ||= git_diff.instance_variable_get(:@base)
|
33
|
+
end
|
34
|
+
|
28
35
|
private
|
29
36
|
|
30
37
|
attr_reader :git_diff
|
31
38
|
|
32
39
|
# TODO: Include untracked to changeset
|
33
40
|
def changeset
|
34
|
-
@changeset ||= git_diff.map
|
41
|
+
@changeset ||= git_diff.map do |diff_file|
|
42
|
+
file_diff = FileDiff.new(diff_file)
|
43
|
+
file_diff unless FormattingChecker.pure_formatting?(file_diff)
|
44
|
+
end.compact
|
35
45
|
end
|
36
46
|
end
|
37
47
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Crystalball
|
4
|
+
class SourceDiff
|
5
|
+
# Determinates if file_diff's patch contains changes for whitespaces or comments only
|
6
|
+
module FormattingChecker
|
7
|
+
class << self
|
8
|
+
# Returns `true` if file_diff's patch contains changes for whitespaces or comments only
|
9
|
+
#
|
10
|
+
# @param [Crystalball::SourceDiff::FileDiff] file_diff
|
11
|
+
# @return [Boolean]
|
12
|
+
def pure_formatting?(file_diff)
|
13
|
+
return false unless stripable_file?(file_diff.path) && file_diff.modified?
|
14
|
+
|
15
|
+
patch = file_diff.patch.to_s.lines
|
16
|
+
|
17
|
+
return true if patch.empty?
|
18
|
+
|
19
|
+
added = collect_patch(patch, '+')
|
20
|
+
removed = collect_patch(patch, '-')
|
21
|
+
|
22
|
+
trim_patch(added) == trim_patch(removed)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
STRIPABLE_FILES = %w[.rb .erb].freeze # TODO: move to config
|
28
|
+
|
29
|
+
def stripable_file?(file_name)
|
30
|
+
STRIPABLE_FILES.include?(Pathname(file_name).extname)
|
31
|
+
end
|
32
|
+
|
33
|
+
def collect_patch(patch, sign)
|
34
|
+
patch.each.with_object([]) do |line, result|
|
35
|
+
next if line.start_with?('+++', '---', '@@') # Skip meta of a patch
|
36
|
+
|
37
|
+
result << line[1..-1] if line.start_with?(sign, ' ')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def trim_patch(patch)
|
42
|
+
patch.map do |line|
|
43
|
+
line = line.gsub(/\s/, '')
|
44
|
+
line.start_with?('#') || line.empty? ? nil : line
|
45
|
+
end.compact
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/crystalball/version.rb
CHANGED
data/mkdocs.yml
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
site_name: Crystalball Manual
|
2
|
+
repo_url: https://github.com/toptal/crystalball
|
3
|
+
edit_uri: edit/master/docs/
|
4
|
+
#google_analytics: ['-', 'auto']
|
5
|
+
theme:
|
6
|
+
name: material
|
7
|
+
logo: img/logo.png
|
8
|
+
favicon: img/favicon.ico
|
9
|
+
palette:
|
10
|
+
primary: indigo
|
11
|
+
accent: pink
|
12
|
+
markdown_extensions:
|
13
|
+
- admonition
|
14
|
+
- codehilite:
|
15
|
+
guess_lang: false
|
16
|
+
- toc:
|
17
|
+
permalink: true
|
18
|
+
copyright: 'Copyright © 2013 - 2018 Toptal'
|
19
|
+
pages:
|
20
|
+
- Home: index.md
|
21
|
+
- "Map Generators": map_generators.md
|
22
|
+
- "Predictors": predictors.md
|
23
|
+
- "Runner": runner.md
|
metadata
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crystalball
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Shutsin
|
8
|
+
- Evgenii Pecherkin
|
9
|
+
- Jaimerson Araujo
|
8
10
|
autorequire:
|
9
11
|
bindir: bin
|
10
12
|
cert_chain: []
|
11
|
-
date: 2018-04
|
13
|
+
date: 2018-10-04 00:00:00.000000000 Z
|
12
14
|
dependencies:
|
13
15
|
- !ruby/object:Gem::Dependency
|
14
16
|
name: git
|
@@ -38,6 +40,20 @@ dependencies:
|
|
38
40
|
- - ">="
|
39
41
|
- !ruby/object:Gem::Version
|
40
42
|
version: '0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: activerecord
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
41
57
|
- !ruby/object:Gem::Dependency
|
42
58
|
name: bundler
|
43
59
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +68,20 @@ dependencies:
|
|
52
68
|
- - "~>"
|
53
69
|
- !ruby/object:Gem::Version
|
54
70
|
version: '1.14'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: factory_bot
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
55
85
|
- !ruby/object:Gem::Dependency
|
56
86
|
name: i18n
|
57
87
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +96,20 @@ dependencies:
|
|
66
96
|
- - ">="
|
67
97
|
- !ruby/object:Gem::Version
|
68
98
|
version: '0'
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: parser
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
type: :development
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
69
113
|
- !ruby/object:Gem::Dependency
|
70
114
|
name: pry
|
71
115
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,14 +172,14 @@ dependencies:
|
|
128
172
|
requirements:
|
129
173
|
- - ">="
|
130
174
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
175
|
+
version: '0.56'
|
132
176
|
type: :development
|
133
177
|
prerelease: false
|
134
178
|
version_requirements: !ruby/object:Gem::Requirement
|
135
179
|
requirements:
|
136
180
|
- - ">="
|
137
181
|
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
182
|
+
version: '0.56'
|
139
183
|
- !ruby/object:Gem::Dependency
|
140
184
|
name: rubocop-rspec
|
141
185
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +208,20 @@ dependencies:
|
|
164
208
|
- - ">="
|
165
209
|
- !ruby/object:Gem::Version
|
166
210
|
version: '0'
|
211
|
+
- !ruby/object:Gem::Dependency
|
212
|
+
name: sqlite3
|
213
|
+
requirement: !ruby/object:Gem::Requirement
|
214
|
+
requirements:
|
215
|
+
- - ">="
|
216
|
+
- !ruby/object:Gem::Version
|
217
|
+
version: '0'
|
218
|
+
type: :development
|
219
|
+
prerelease: false
|
220
|
+
version_requirements: !ruby/object:Gem::Requirement
|
221
|
+
requirements:
|
222
|
+
- - ">="
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
version: '0'
|
167
225
|
- !ruby/object:Gem::Dependency
|
168
226
|
name: yard
|
169
227
|
requirement: !ruby/object:Gem::Requirement
|
@@ -191,6 +249,7 @@ files:
|
|
191
249
|
- ".rspec"
|
192
250
|
- ".rubocop.yml"
|
193
251
|
- ".travis.yml"
|
252
|
+
- CHANGELOG.md
|
194
253
|
- CODE_OF_CONDUCT.md
|
195
254
|
- Gemfile
|
196
255
|
- LICENSE
|
@@ -200,10 +259,22 @@ files:
|
|
200
259
|
- bin/crystalball
|
201
260
|
- bin/setup
|
202
261
|
- crystalball.gemspec
|
262
|
+
- docs/img/favicon.ico
|
263
|
+
- docs/img/logo.png
|
264
|
+
- docs/index.md
|
265
|
+
- docs/map_generators.md
|
266
|
+
- docs/predictors.md
|
267
|
+
- docs/runner.md
|
203
268
|
- lib/crystalball.rb
|
204
|
-
- lib/crystalball/
|
269
|
+
- lib/crystalball/active_record.rb
|
270
|
+
- lib/crystalball/example_group_map.rb
|
205
271
|
- lib/crystalball/execution_map.rb
|
272
|
+
- lib/crystalball/extensions/git.rb
|
273
|
+
- lib/crystalball/extensions/git/base.rb
|
274
|
+
- lib/crystalball/extensions/git/lib.rb
|
275
|
+
- lib/crystalball/factory_bot.rb
|
206
276
|
- lib/crystalball/git_repo.rb
|
277
|
+
- lib/crystalball/logging.rb
|
207
278
|
- lib/crystalball/map_generator.rb
|
208
279
|
- lib/crystalball/map_generator/allocated_objects_strategy.rb
|
209
280
|
- lib/crystalball/map_generator/allocated_objects_strategy/object_tracker.rb
|
@@ -212,30 +283,54 @@ files:
|
|
212
283
|
- lib/crystalball/map_generator/coverage_strategy.rb
|
213
284
|
- lib/crystalball/map_generator/coverage_strategy/execution_detector.rb
|
214
285
|
- lib/crystalball/map_generator/described_class_strategy.rb
|
286
|
+
- lib/crystalball/map_generator/factory_bot_strategy.rb
|
287
|
+
- lib/crystalball/map_generator/factory_bot_strategy/dsl_patch.rb
|
288
|
+
- lib/crystalball/map_generator/factory_bot_strategy/dsl_patch/factory_path_fetcher.rb
|
289
|
+
- lib/crystalball/map_generator/factory_bot_strategy/factory_gem_loader.rb
|
290
|
+
- lib/crystalball/map_generator/factory_bot_strategy/factory_runner_patch.rb
|
215
291
|
- lib/crystalball/map_generator/helpers/path_filter.rb
|
216
292
|
- lib/crystalball/map_generator/object_sources_detector.rb
|
217
293
|
- lib/crystalball/map_generator/object_sources_detector/definition_tracer.rb
|
218
294
|
- lib/crystalball/map_generator/object_sources_detector/hierarchy_fetcher.rb
|
295
|
+
- lib/crystalball/map_generator/parser_strategy.rb
|
296
|
+
- lib/crystalball/map_generator/parser_strategy/processor.rb
|
219
297
|
- lib/crystalball/map_generator/strategies_collection.rb
|
220
298
|
- lib/crystalball/map_storage/yaml_storage.rb
|
221
299
|
- lib/crystalball/prediction.rb
|
222
300
|
- lib/crystalball/predictor.rb
|
223
301
|
- lib/crystalball/predictor/associated_specs.rb
|
302
|
+
- lib/crystalball/predictor/helpers/affected_example_groups_detector.rb
|
303
|
+
- lib/crystalball/predictor/helpers/path_formatter.rb
|
224
304
|
- lib/crystalball/predictor/modified_execution_paths.rb
|
225
305
|
- lib/crystalball/predictor/modified_specs.rb
|
306
|
+
- lib/crystalball/predictor/modified_support_specs.rb
|
307
|
+
- lib/crystalball/predictor/strategy.rb
|
226
308
|
- lib/crystalball/predictor_evaluator.rb
|
227
309
|
- lib/crystalball/rails.rb
|
310
|
+
- lib/crystalball/rails/helpers/base_schema_parser.rb
|
311
|
+
- lib/crystalball/rails/helpers/schema_definition_parser.rb
|
312
|
+
- lib/crystalball/rails/helpers/schema_definition_parser/active_record.rb
|
313
|
+
- lib/crystalball/rails/helpers/schema_definition_parser/table_content_parser.rb
|
228
314
|
- lib/crystalball/rails/map_generator/action_view_strategy.rb
|
229
315
|
- lib/crystalball/rails/map_generator/action_view_strategy/patch.rb
|
230
316
|
- lib/crystalball/rails/map_generator/i18n_strategy.rb
|
231
317
|
- lib/crystalball/rails/map_generator/i18n_strategy/simple_patch.rb
|
318
|
+
- lib/crystalball/rails/predictor/modified_schema.rb
|
319
|
+
- lib/crystalball/rails/tables_map.rb
|
320
|
+
- lib/crystalball/rails/tables_map_generator.rb
|
321
|
+
- lib/crystalball/rails/tables_map_generator/configuration.rb
|
322
|
+
- lib/crystalball/rspec/filtering.rb
|
232
323
|
- lib/crystalball/rspec/prediction_builder.rb
|
324
|
+
- lib/crystalball/rspec/prediction_pruning.rb
|
325
|
+
- lib/crystalball/rspec/prediction_pruning/examples_pruner.rb
|
233
326
|
- lib/crystalball/rspec/runner.rb
|
234
327
|
- lib/crystalball/rspec/runner/configuration.rb
|
235
|
-
- lib/crystalball/
|
328
|
+
- lib/crystalball/rspec/standard_prediction_builder.rb
|
236
329
|
- lib/crystalball/source_diff.rb
|
237
330
|
- lib/crystalball/source_diff/file_diff.rb
|
331
|
+
- lib/crystalball/source_diff/formatting_checker.rb
|
238
332
|
- lib/crystalball/version.rb
|
333
|
+
- mkdocs.yml
|
239
334
|
homepage: https://github.com/toptal/crystalball
|
240
335
|
licenses: []
|
241
336
|
metadata:
|
@@ -256,7 +351,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
256
351
|
version: '0'
|
257
352
|
requirements: []
|
258
353
|
rubyforge_project:
|
259
|
-
rubygems_version: 2.6.14
|
354
|
+
rubygems_version: 2.6.14.1
|
260
355
|
signing_key:
|
261
356
|
specification_version: 4
|
262
357
|
summary: A library for RSpec regression test selection
|