knapsack_pro 5.1.1 → 5.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +11 -0
- data/CHANGELOG.md +16 -0
- data/lib/knapsack_pro/client/api/v1/build_distributions.rb +2 -0
- data/lib/knapsack_pro/client/api/v1/queues.rb +2 -0
- data/lib/knapsack_pro/config/env.rb +1 -1
- data/lib/knapsack_pro/mask_string.rb +7 -0
- data/lib/knapsack_pro/repository_adapters/git_adapter.rb +32 -0
- data/lib/knapsack_pro/runners/queue/rspec_runner.rb +10 -0
- data/lib/knapsack_pro/version.rb +1 -1
- data/lib/knapsack_pro.rb +1 -0
- data/lib/tasks/rspec.rake +3 -0
- data/spec/knapsack_pro/client/api/v1/build_distributions_spec.rb +17 -29
- data/spec/knapsack_pro/client/api/v1/queues_spec.rb +21 -46
- data/spec/knapsack_pro/repository_adapters/git_adapter_spec.rb +72 -0
- data/spec/knapsack_pro/runners/queue/rspec_runner_spec.rb +36 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f00531028caf0501edea4bf33df1bd81fe7ec9fbc888875797289f488e51851e
|
4
|
+
data.tar.gz: dbe2e29cdb257ef772348653e40bcccc0ae4d70e8fc0fdd72fd26193784a60b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ac1af3bf5eff25233ddb17294c56d9de6c9ec0d94c6412182a69ce2f4c04082eb705b0f204e42a342486c2001862171503d6726012421b336fe25c851e103c8
|
7
|
+
data.tar.gz: 52d4b68c5793defaf162659597d63afa7461964c78e6b78385ffe21af5cdf529124a15c9d5d96f2ca7216e175daa8b9aa6d2b04698e23c59b2a71b6603b13318
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# To get started with Dependabot version updates, you'll need to specify which
|
2
|
+
# package ecosystems to update and where the package manifests are located.
|
3
|
+
# Please see the documentation for all configuration options:
|
4
|
+
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
5
|
+
|
6
|
+
version: 2
|
7
|
+
updates:
|
8
|
+
- package-ecosystem: "bundler"
|
9
|
+
directory: "/"
|
10
|
+
schedule:
|
11
|
+
interval: "weekly"
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
### 5.2.0
|
4
|
+
|
5
|
+
* Send authors to the API
|
6
|
+
|
7
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/208
|
8
|
+
|
9
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v5.1.2...v5.2.0
|
10
|
+
|
11
|
+
### 5.1.2
|
12
|
+
|
13
|
+
* Fix broken RSpec split by test examples feature when `SPEC_OPTS` is set in Queue Mode. Ignore `SPEC_OPTS` when generating test examples report for slow test files.
|
14
|
+
|
15
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/pull/191
|
16
|
+
|
17
|
+
https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v5.1.1...v5.1.2
|
18
|
+
|
3
19
|
### 5.1.1
|
4
20
|
|
5
21
|
* Use `KNAPSACK_PRO_FIXED_QUEUE_SPLIT=true` as default value in Queue Mode for GitLab CI
|
@@ -16,6 +16,8 @@ module KnapsackPro
|
|
16
16
|
:node_index => args.fetch(:node_index),
|
17
17
|
:ci_build_id => KnapsackPro::Config::Env.ci_node_build_id,
|
18
18
|
:user_seat => KnapsackPro::Config::Env.masked_user_seat,
|
19
|
+
:build_author => KnapsackPro::RepositoryAdapters::GitAdapter.new.build_author,
|
20
|
+
:commit_authors => KnapsackPro::RepositoryAdapters::GitAdapter.new.commit_authors,
|
19
21
|
}
|
20
22
|
|
21
23
|
unless request_hash[:cache_read_attempt]
|
@@ -17,6 +17,8 @@ module KnapsackPro
|
|
17
17
|
:node_index => args.fetch(:node_index),
|
18
18
|
:node_build_id => KnapsackPro::Config::Env.ci_node_build_id,
|
19
19
|
:user_seat => KnapsackPro::Config::Env.masked_user_seat,
|
20
|
+
:build_author => KnapsackPro::RepositoryAdapters::GitAdapter.new.build_author,
|
21
|
+
:commit_authors => KnapsackPro::RepositoryAdapters::GitAdapter.new.commit_authors,
|
20
22
|
}
|
21
23
|
|
22
24
|
if request_hash[:can_initialize_queue] && !request_hash[:attempt_connect_to_queue]
|
@@ -14,8 +14,40 @@ module KnapsackPro
|
|
14
14
|
str_branches.split("\n")
|
15
15
|
end
|
16
16
|
|
17
|
+
def commit_authors
|
18
|
+
authors = git_commit_authors
|
19
|
+
.split("\n")
|
20
|
+
.map { |line| line.strip }
|
21
|
+
.map { |line| line.split("\t") }
|
22
|
+
.map do |commits, author|
|
23
|
+
{ commits: commits.to_i, author: KnapsackPro::MaskString.call(author) }
|
24
|
+
end
|
25
|
+
|
26
|
+
raise if authors.empty?
|
27
|
+
|
28
|
+
authors
|
29
|
+
rescue Exception
|
30
|
+
[]
|
31
|
+
end
|
32
|
+
|
33
|
+
def build_author
|
34
|
+
author = KnapsackPro::MaskString.call(git_build_author.strip)
|
35
|
+
raise if author.empty?
|
36
|
+
author
|
37
|
+
rescue Exception
|
38
|
+
"no git <no.git@example.com>"
|
39
|
+
end
|
40
|
+
|
17
41
|
private
|
18
42
|
|
43
|
+
def git_commit_authors
|
44
|
+
`git fetch --shallow-since "1 month ago" >/dev/null 2>&1 && git shortlog --summary --email --since "one month ago"`
|
45
|
+
end
|
46
|
+
|
47
|
+
def git_build_author
|
48
|
+
`git log --format="%aN <%aE>" -1`
|
49
|
+
end
|
50
|
+
|
19
51
|
def working_dir
|
20
52
|
dir = KnapsackPro::Config::Env.project_dir
|
21
53
|
File.expand_path(dir)
|
@@ -87,6 +87,7 @@ module KnapsackPro
|
|
87
87
|
all_test_file_paths += test_file_paths
|
88
88
|
cli_args = args + test_file_paths
|
89
89
|
|
90
|
+
ensure_spec_opts_have_rspec_queue_summary_formatter
|
90
91
|
options = ::RSpec::Core::ConfigurationOptions.new(cli_args)
|
91
92
|
rspec_runner = ::RSpec::Core::Runner.new(options)
|
92
93
|
|
@@ -113,6 +114,15 @@ module KnapsackPro
|
|
113
114
|
end
|
114
115
|
end
|
115
116
|
|
117
|
+
def self.ensure_spec_opts_have_rspec_queue_summary_formatter
|
118
|
+
spec_opts = ENV['SPEC_OPTS']
|
119
|
+
|
120
|
+
return unless spec_opts
|
121
|
+
return if spec_opts.include?(KnapsackPro::Formatters::RSpecQueueSummaryFormatter.to_s)
|
122
|
+
|
123
|
+
ENV['SPEC_OPTS'] = "#{spec_opts} --format #{KnapsackPro::Formatters::RSpecQueueSummaryFormatter.to_s}"
|
124
|
+
end
|
125
|
+
|
116
126
|
private
|
117
127
|
|
118
128
|
def self.adapter_class
|
data/lib/knapsack_pro/version.rb
CHANGED
data/lib/knapsack_pro.rb
CHANGED
@@ -55,6 +55,7 @@ require_relative 'knapsack_pro/adapters/test_unit_adapter'
|
|
55
55
|
require_relative 'knapsack_pro/adapters/spinach_adapter'
|
56
56
|
require_relative 'knapsack_pro/allocator'
|
57
57
|
require_relative 'knapsack_pro/queue_allocator'
|
58
|
+
require_relative 'knapsack_pro/mask_string'
|
58
59
|
require_relative 'knapsack_pro/test_case_mergers/base_merger'
|
59
60
|
require_relative 'knapsack_pro/test_case_mergers/rspec_merger'
|
60
61
|
require_relative 'knapsack_pro/build_distribution_fetcher'
|
data/lib/tasks/rspec.rake
CHANGED
@@ -7,6 +7,9 @@ namespace :knapsack_pro do
|
|
7
7
|
|
8
8
|
desc "Generate JSON report for test suite based on default test pattern or based on defined pattern with ENV vars"
|
9
9
|
task :rspec_test_example_detector do
|
10
|
+
# ignore the `SPEC_OPTS` options to not affect RSpec execution within this rake task
|
11
|
+
ENV.delete('SPEC_OPTS')
|
12
|
+
|
10
13
|
detector = KnapsackPro::TestCaseDetectors::RSpecTestExampleDetector.new
|
11
14
|
detector.generate_json_report
|
12
15
|
end
|
@@ -8,6 +8,7 @@ describe KnapsackPro::Client::API::V1::BuildDistributions do
|
|
8
8
|
let(:ci_build_id) { double }
|
9
9
|
let(:masked_user_seat) { double }
|
10
10
|
let(:test_files) { double }
|
11
|
+
let(:cache_read_attempt) { [false, true].sample }
|
11
12
|
|
12
13
|
subject do
|
13
14
|
described_class.subset(
|
@@ -31,20 +32,9 @@ describe KnapsackPro::Client::API::V1::BuildDistributions do
|
|
31
32
|
|
32
33
|
it 'does not send test_files among other params' do
|
33
34
|
action = double
|
34
|
-
expect(KnapsackPro::Client::API::Action).to receive(:new).with(
|
35
|
-
|
36
|
-
|
37
|
-
request_hash: {
|
38
|
-
fixed_test_suite_split: fixed_test_suite_split,
|
39
|
-
cache_read_attempt: cache_read_attempt,
|
40
|
-
commit_hash: commit_hash,
|
41
|
-
branch: branch,
|
42
|
-
node_total: node_total,
|
43
|
-
node_index: node_index,
|
44
|
-
ci_build_id: ci_build_id,
|
45
|
-
user_seat: masked_user_seat,
|
46
|
-
}
|
47
|
-
}).and_return(action)
|
35
|
+
expect(KnapsackPro::Client::API::Action).to receive(:new).with(
|
36
|
+
hash_including(request_hash: hash_excluding(:test_files))
|
37
|
+
).and_return(action)
|
48
38
|
expect(subject).to eq action
|
49
39
|
end
|
50
40
|
end
|
@@ -54,24 +44,22 @@ describe KnapsackPro::Client::API::V1::BuildDistributions do
|
|
54
44
|
|
55
45
|
it 'sends test_files among other params' do
|
56
46
|
action = double
|
57
|
-
expect(KnapsackPro::Client::API::Action).to receive(:new).with(
|
58
|
-
|
59
|
-
|
60
|
-
request_hash: {
|
61
|
-
fixed_test_suite_split: fixed_test_suite_split,
|
62
|
-
cache_read_attempt: cache_read_attempt,
|
63
|
-
commit_hash: commit_hash,
|
64
|
-
branch: branch,
|
65
|
-
node_total: node_total,
|
66
|
-
node_index: node_index,
|
67
|
-
ci_build_id: ci_build_id,
|
68
|
-
user_seat: masked_user_seat,
|
69
|
-
test_files: test_files
|
70
|
-
}
|
71
|
-
}).and_return(action)
|
47
|
+
expect(KnapsackPro::Client::API::Action).to receive(:new).with(
|
48
|
+
hash_including(request_hash: hash_including(test_files: test_files))
|
49
|
+
).and_return(action)
|
72
50
|
expect(subject).to eq action
|
73
51
|
end
|
74
52
|
end
|
53
|
+
|
54
|
+
it "sends authors" do
|
55
|
+
action = double
|
56
|
+
|
57
|
+
expect(KnapsackPro::Client::API::Action).to receive(:new).with(
|
58
|
+
hash_including(request_hash: hash_including(:build_author, :commit_authors))
|
59
|
+
).and_return(action)
|
60
|
+
|
61
|
+
expect(subject).to eq action
|
62
|
+
end
|
75
63
|
end
|
76
64
|
|
77
65
|
describe '.last' do
|
@@ -8,6 +8,8 @@ describe KnapsackPro::Client::API::V1::Queues do
|
|
8
8
|
let(:test_files) { double }
|
9
9
|
let(:node_build_id) { double }
|
10
10
|
let(:masked_user_seat) { double }
|
11
|
+
let(:can_initialize_queue) { [false, true].sample }
|
12
|
+
let(:attempt_connect_to_queue) { [false, true].sample }
|
11
13
|
|
12
14
|
subject do
|
13
15
|
described_class.queue(
|
@@ -33,21 +35,9 @@ describe KnapsackPro::Client::API::V1::Queues do
|
|
33
35
|
|
34
36
|
it 'does not send test_files among other params' do
|
35
37
|
action = double
|
36
|
-
expect(KnapsackPro::Client::API::Action).to receive(:new).with(
|
37
|
-
|
38
|
-
|
39
|
-
request_hash: {
|
40
|
-
fixed_queue_split: fixed_queue_split,
|
41
|
-
can_initialize_queue: can_initialize_queue,
|
42
|
-
attempt_connect_to_queue: attempt_connect_to_queue,
|
43
|
-
commit_hash: commit_hash,
|
44
|
-
branch: branch,
|
45
|
-
node_total: node_total,
|
46
|
-
node_index: node_index,
|
47
|
-
node_build_id: node_build_id,
|
48
|
-
user_seat: masked_user_seat,
|
49
|
-
}
|
50
|
-
}).and_return(action)
|
38
|
+
expect(KnapsackPro::Client::API::Action).to receive(:new).with(
|
39
|
+
hash_including(request_hash: hash_excluding(:test_files))
|
40
|
+
).and_return(action)
|
51
41
|
expect(subject).to eq action
|
52
42
|
end
|
53
43
|
end
|
@@ -58,22 +48,9 @@ describe KnapsackPro::Client::API::V1::Queues do
|
|
58
48
|
|
59
49
|
it 'sends test_files among other params' do
|
60
50
|
action = double
|
61
|
-
expect(KnapsackPro::Client::API::Action).to receive(:new).with(
|
62
|
-
|
63
|
-
|
64
|
-
request_hash: {
|
65
|
-
fixed_queue_split: fixed_queue_split,
|
66
|
-
can_initialize_queue: can_initialize_queue,
|
67
|
-
attempt_connect_to_queue: attempt_connect_to_queue,
|
68
|
-
commit_hash: commit_hash,
|
69
|
-
branch: branch,
|
70
|
-
node_total: node_total,
|
71
|
-
node_index: node_index,
|
72
|
-
node_build_id: node_build_id,
|
73
|
-
user_seat: masked_user_seat,
|
74
|
-
test_files: test_files
|
75
|
-
}
|
76
|
-
}).and_return(action)
|
51
|
+
expect(KnapsackPro::Client::API::Action).to receive(:new).with(
|
52
|
+
hash_including(request_hash: hash_including(test_files: test_files))
|
53
|
+
).and_return(action)
|
77
54
|
expect(subject).to eq action
|
78
55
|
end
|
79
56
|
end
|
@@ -84,23 +61,21 @@ describe KnapsackPro::Client::API::V1::Queues do
|
|
84
61
|
|
85
62
|
it 'does not send test_files among other params' do
|
86
63
|
action = double
|
87
|
-
expect(KnapsackPro::Client::API::Action).to receive(:new).with(
|
88
|
-
|
89
|
-
|
90
|
-
request_hash: {
|
91
|
-
fixed_queue_split: fixed_queue_split,
|
92
|
-
can_initialize_queue: can_initialize_queue,
|
93
|
-
attempt_connect_to_queue: attempt_connect_to_queue,
|
94
|
-
commit_hash: commit_hash,
|
95
|
-
branch: branch,
|
96
|
-
node_total: node_total,
|
97
|
-
node_index: node_index,
|
98
|
-
node_build_id: node_build_id,
|
99
|
-
user_seat: masked_user_seat,
|
100
|
-
}
|
101
|
-
}).and_return(action)
|
64
|
+
expect(KnapsackPro::Client::API::Action).to receive(:new).with(
|
65
|
+
hash_including(request_hash: hash_excluding(:test_files))
|
66
|
+
).and_return(action)
|
102
67
|
expect(subject).to eq action
|
103
68
|
end
|
104
69
|
end
|
70
|
+
|
71
|
+
it "sends authors" do
|
72
|
+
action = double
|
73
|
+
|
74
|
+
expect(KnapsackPro::Client::API::Action).to receive(:new).with(
|
75
|
+
hash_including(request_hash: hash_including(:build_author, :commit_authors))
|
76
|
+
).and_return(action)
|
77
|
+
|
78
|
+
expect(subject).to eq action
|
79
|
+
end
|
105
80
|
end
|
106
81
|
end
|
@@ -31,4 +31,76 @@ describe KnapsackPro::RepositoryAdapters::GitAdapter do
|
|
31
31
|
it { expect(subject.include?('master')).to be true }
|
32
32
|
it { expect(subject.include?(circle_branch)).to be true } if ENV['CIRCLECI']
|
33
33
|
end
|
34
|
+
|
35
|
+
describe '#build_author' do
|
36
|
+
it "returns the masked build author" do
|
37
|
+
allow_any_instance_of(KnapsackPro::RepositoryAdapters::GitAdapter).to receive(:git_build_author).and_return(
|
38
|
+
"John Doe <john.doe@example.com>" + "\n"
|
39
|
+
)
|
40
|
+
|
41
|
+
subject = KnapsackPro::RepositoryAdapters::GitAdapter.new
|
42
|
+
|
43
|
+
expect(subject.build_author).to eq 'Jo** Do* <jo**.do*@ex*****.co*>'
|
44
|
+
end
|
45
|
+
|
46
|
+
context "when the command raises an exception" do
|
47
|
+
it "returns the no-git author" do
|
48
|
+
allow_any_instance_of(KnapsackPro::RepositoryAdapters::GitAdapter).to receive(:git_build_author).and_raise(Exception)
|
49
|
+
|
50
|
+
subject = KnapsackPro::RepositoryAdapters::GitAdapter.new
|
51
|
+
|
52
|
+
expect(subject.build_author).to eq "no git <no.git@example.com>"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "when the command returns an empty string" do
|
57
|
+
it "returns the no-git author" do
|
58
|
+
allow_any_instance_of(KnapsackPro::RepositoryAdapters::GitAdapter).to receive(:git_build_author).and_return("")
|
59
|
+
|
60
|
+
subject = KnapsackPro::RepositoryAdapters::GitAdapter.new
|
61
|
+
|
62
|
+
expect(subject.build_author).to eq "no git <no.git@example.com>"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '#commit_authors' do
|
68
|
+
it "returns the masked commit authors" do
|
69
|
+
allow_any_instance_of(KnapsackPro::RepositoryAdapters::GitAdapter).to receive(:git_commit_authors).and_return([
|
70
|
+
" 5\t3v0k4 <riccardo@example.com>\n",
|
71
|
+
" 10\tArtur Nowak <artur@example.com>\n",
|
72
|
+
" 2\tRiccardo <riccardo@example.com>\n",
|
73
|
+
" 3 \tshadre <shadi@example.com>\n",
|
74
|
+
].join(""))
|
75
|
+
|
76
|
+
subject = KnapsackPro::RepositoryAdapters::GitAdapter.new
|
77
|
+
|
78
|
+
expect(subject.commit_authors).to eq([
|
79
|
+
{ commits: 5, author: "3v0*4 <ri******@ex*****.co*>" },
|
80
|
+
{ commits: 10, author: "Ar*** No*** <ar***@ex*****.co*>" },
|
81
|
+
{ commits: 2, author: "Ri****** <ri******@ex*****.co*>" },
|
82
|
+
{ commits: 3, author: "sh**** <sh***@ex*****.co*>" },
|
83
|
+
])
|
84
|
+
end
|
85
|
+
|
86
|
+
context "when the authors command raises an exception" do
|
87
|
+
it "returns []" do
|
88
|
+
allow_any_instance_of(KnapsackPro::RepositoryAdapters::GitAdapter).to receive(:git_commit_authors).and_raise(Exception)
|
89
|
+
|
90
|
+
subject = KnapsackPro::RepositoryAdapters::GitAdapter.new
|
91
|
+
|
92
|
+
expect(subject.commit_authors).to eq []
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context "when the authors command returns an empty string" do
|
97
|
+
it "returns []" do
|
98
|
+
allow_any_instance_of(KnapsackPro::RepositoryAdapters::GitAdapter).to receive(:git_commit_authors).and_return("")
|
99
|
+
|
100
|
+
subject = KnapsackPro::RepositoryAdapters::GitAdapter.new
|
101
|
+
|
102
|
+
expect(subject.commit_authors).to eq []
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
34
106
|
end
|
@@ -212,6 +212,7 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
212
212
|
expect(tracker).to receive(:reset!)
|
213
213
|
expect(tracker).to receive(:set_prerun_tests).with(test_file_paths)
|
214
214
|
|
215
|
+
expect(described_class).to receive(:ensure_spec_opts_have_rspec_queue_summary_formatter)
|
215
216
|
options = double
|
216
217
|
expect(RSpec::Core::ConfigurationOptions).to receive(:new).with([
|
217
218
|
'--no-color',
|
@@ -339,4 +340,39 @@ describe KnapsackPro::Runners::Queue::RSpecRunner do
|
|
339
340
|
end
|
340
341
|
end
|
341
342
|
end
|
343
|
+
|
344
|
+
describe '.ensure_spec_opts_have_rspec_queue_summary_formatter' do
|
345
|
+
subject { described_class.ensure_spec_opts_have_rspec_queue_summary_formatter }
|
346
|
+
|
347
|
+
context 'when `SPEC_OPTS` is set' do
|
348
|
+
context 'when `SPEC_OPTS` has RSpec Queue Summary Formatter' do
|
349
|
+
before do
|
350
|
+
stub_const('ENV', { 'SPEC_OPTS' => '--format json --format KnapsackPro::Formatters::RSpecQueueSummaryFormatter' })
|
351
|
+
end
|
352
|
+
|
353
|
+
it 'does nothing' do
|
354
|
+
subject
|
355
|
+
expect(ENV['SPEC_OPTS']).to eq '--format json --format KnapsackPro::Formatters::RSpecQueueSummaryFormatter'
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
context 'when `SPEC_OPTS` has no RSpec Queue Summary Formatter' do
|
360
|
+
before do
|
361
|
+
stub_const('ENV', { 'SPEC_OPTS' => '--format json' })
|
362
|
+
end
|
363
|
+
|
364
|
+
it 'adds RSpec Queue Summary Formatter to `SPEC_OPTS`' do
|
365
|
+
subject
|
366
|
+
expect(ENV['SPEC_OPTS']).to eq '--format json --format KnapsackPro::Formatters::RSpecQueueSummaryFormatter'
|
367
|
+
end
|
368
|
+
end
|
369
|
+
end
|
370
|
+
|
371
|
+
context 'when `SPEC_OPTS` is not set' do
|
372
|
+
it 'does nothing' do
|
373
|
+
subject
|
374
|
+
expect(ENV['SPEC_OPTS']).to be_nil
|
375
|
+
end
|
376
|
+
end
|
377
|
+
end
|
342
378
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knapsack_pro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ArturT
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -192,6 +192,7 @@ files:
|
|
192
192
|
- ".circleci/config.yml"
|
193
193
|
- ".github/assets/install-button.png"
|
194
194
|
- ".github/assets/knapsack-diamonds.png"
|
195
|
+
- ".github/dependabot.yml"
|
195
196
|
- ".gitignore"
|
196
197
|
- ".rspec"
|
197
198
|
- CHANGELOG.md
|
@@ -244,6 +245,7 @@ files:
|
|
244
245
|
- lib/knapsack_pro/formatters/rspec_queue_summary_formatter.rb
|
245
246
|
- lib/knapsack_pro/hooks/queue.rb
|
246
247
|
- lib/knapsack_pro/logger_wrapper.rb
|
248
|
+
- lib/knapsack_pro/mask_string.rb
|
247
249
|
- lib/knapsack_pro/presenter.rb
|
248
250
|
- lib/knapsack_pro/queue_allocator.rb
|
249
251
|
- lib/knapsack_pro/queue_allocator_builder.rb
|