paraduct 1.0.0.beta6 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,7 +9,7 @@ module Paraduct
9
9
  delegate :push, :count, to: :jobs, prefix: true
10
10
 
11
11
  def successful?
12
- @jobs.all?{ |result| result[:successful] }
12
+ @jobs.all? { |result| result[:successful] }
13
13
  end
14
14
 
15
15
  def failure?
@@ -18,14 +18,14 @@ module Paraduct
18
18
 
19
19
  def detail_message
20
20
  all_count = @jobs.count
21
- successful_count = @jobs.select{ |result| result[:successful] }.count
21
+ successful_count = @jobs.count { |result| result[:successful] }
22
22
  failure_count = all_count - successful_count
23
23
 
24
24
  message = "======================================================\n"
25
25
 
26
26
  if successful_count > 0
27
27
  message << "Passed:\n\n"
28
- @jobs.select{ |result| result[:successful] }.each_with_index do |result, i|
28
+ @jobs.select { |result| result[:successful] }.each_with_index do |result, i|
29
29
  message << " #{i + 1}) #{result[:formatted_params]}\n"
30
30
  end
31
31
  message << "\n"
@@ -33,7 +33,7 @@ module Paraduct
33
33
 
34
34
  if failure_count > 0
35
35
  message << "Failures:\n\n"
36
- @jobs.select{ |result| !result[:successful] }.each_with_index do |result, i|
36
+ @jobs.select { |result| !result[:successful] }.each_with_index do |result, i|
37
37
  message << " #{i + 1}) #{result[:formatted_params]}\n"
38
38
  end
39
39
  message << "\n"
@@ -25,9 +25,8 @@ module Paraduct
25
25
  end
26
26
 
27
27
  def self.reject(product_variables, exclude_variables)
28
- product_variables.inject([]) do |rejected_product_variables, variables|
29
- rejected_product_variables << variables unless exclude_variables.any?{ |exclude| partial_match?(variables, exclude) }
30
- rejected_product_variables
28
+ product_variables.each_with_object([]) do |variables, rejected_product_variables|
29
+ rejected_product_variables << variables unless exclude_variables.any? { |exclude| partial_match?(variables, exclude) }
31
30
  end
32
31
  end
33
32
 
@@ -1,3 +1,3 @@
1
1
  module Paraduct
2
- VERSION = "1.0.0.beta6"
2
+ VERSION = "1.0.0".freeze
3
3
  end
@@ -1,15 +1,15 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+ lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'paraduct/version'
4
+ require "paraduct/version"
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "paraduct"
8
8
  spec.version = Paraduct::VERSION
9
9
  spec.authors = ["sue445"]
10
10
  spec.email = ["sue445@sue445.net"]
11
- spec.summary = %q{matrix test runner}
12
- spec.description = %q{Paraduct(parallel + parameterize + product) is matrix test runner}
11
+ spec.summary = "matrix test runner"
12
+ spec.description = "Paraduct(parallel + parameterize + product) is matrix test runner"
13
13
  spec.homepage = "https://github.com/sue445/paraduct"
14
14
  spec.license = "MIT"
15
15
 
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency "bundler", ">= 1.5"
29
29
  spec.add_development_dependency "codeclimate-test-reporter"
30
30
  spec.add_development_dependency "coveralls"
31
+ spec.add_development_dependency "rubocop", "0.37.0"
31
32
  spec.add_development_dependency "pry-byebug"
32
33
  spec.add_development_dependency "rake", "~> 10.0"
33
34
  spec.add_development_dependency "redcarpet"
@@ -1,20 +1,20 @@
1
1
  describe Paraduct::CLI do
2
2
  subject { Paraduct::CLI.start(args) }
3
3
 
4
- let(:args){ [command] }
4
+ let(:args) { [command] }
5
5
 
6
6
  describe "#version" do
7
7
  %w(version --version).each do |_command|
8
8
  context "with #{_command}" do
9
- let(:command){ _command }
9
+ let(:command) { _command }
10
10
 
11
- it { expect{ subject }.to output("#{Paraduct::VERSION}\n").to_stdout }
11
+ it { expect { subject }.to output("#{Paraduct::VERSION}\n").to_stdout }
12
12
  end
13
13
  end
14
14
  end
15
15
 
16
16
  describe "#test" do
17
- let(:command){ "test" }
17
+ let(:command) { "test" }
18
18
 
19
19
  include_context :stub_configuration
20
20
  include_context :within_temp_dir
@@ -33,8 +33,8 @@ describe Paraduct::CLI do
33
33
  }
34
34
  end
35
35
 
36
- let(:script){ "./script/build_success.sh" }
37
- let(:after_script){ "./script/build_finish.sh" }
36
+ let(:script) { "./script/build_success.sh" }
37
+ let(:after_script) { "./script/build_finish.sh" }
38
38
  let(:product_variables) do
39
39
  [
40
40
  { "RUBY" => "1.9.3", "DATABASE" => "mysql" },
@@ -52,7 +52,7 @@ describe Paraduct::CLI do
52
52
 
53
53
  it "should call perform_all" do
54
54
  expect(Paraduct::ParallelRunner).to receive(:perform_all).
55
- with(script: script, after_script: after_script, product_variables: product_variables){ test_response }
55
+ with(script: script, after_script: after_script, product_variables: product_variables) { test_response }
56
56
  subject
57
57
  end
58
58
  end
@@ -60,7 +60,7 @@ describe Paraduct::CLI do
60
60
  context "failure test" do
61
61
  let(:config_data) do
62
62
  {
63
- script: %q(exit ${STATUS}),
63
+ script: "exit ${STATUS}",
64
64
  work_dir: "tmp/paraduct_workspace",
65
65
  variables: {
66
66
  "STATUS" => [0, 1],
@@ -73,7 +73,7 @@ describe Paraduct::CLI do
73
73
  end
74
74
 
75
75
  context "with --dry-run" do
76
- let(:args){ [command, "--dry-run"] }
76
+ let(:args) { [command, "--dry-run"] }
77
77
 
78
78
  it "should not call perform_all" do
79
79
  expect(Paraduct::ParallelRunner).not_to receive(:perform_all)
@@ -83,7 +83,7 @@ describe Paraduct::CLI do
83
83
  end
84
84
 
85
85
  describe "#generate" do
86
- let(:command){ "generate" }
86
+ let(:command) { "generate" }
87
87
 
88
88
  include_context :within_temp_dir
89
89
 
@@ -94,7 +94,7 @@ describe Paraduct::CLI do
94
94
 
95
95
  %w(.paraduct.yml .paraduct_rsync_exclude.txt).each do |template_file|
96
96
  describe "whether copy #{template_file}" do
97
- let(:generated_config_file){ temp_dir_path.join(template_file) }
97
+ let(:generated_config_file) { temp_dir_path.join(template_file) }
98
98
 
99
99
  it { expect(generated_config_file).to be_exist }
100
100
  end
@@ -1,19 +1,19 @@
1
1
  describe Paraduct::Configuration do
2
- let(:config){ Paraduct.configuration }
2
+ let(:config) { Paraduct.configuration }
3
3
 
4
4
  before do
5
5
  # use spec/.paraduct.yml
6
- allow_any_instance_of(Paraduct::Configuration).to receive(:root_dir){ spec_dir }
6
+ allow_any_instance_of(Paraduct::Configuration).to receive(:root_dir) { spec_dir }
7
7
  end
8
8
 
9
9
  describe "#variables" do
10
- subject{ config.variables }
10
+ subject { config.variables }
11
11
 
12
12
  it "should get variables in .paraduct.yml" do
13
13
  is_expected.to match(
14
14
  "RUBY" => ["1.9.3", "2.0.0", "2.1.2"],
15
15
  "DATABASE" => ["mysql", "postgresql"],
16
- "RAILS" => ["3.2.0", "4.0.0", "4.1.0"],
16
+ "RAILS" => ["3.2.0", "4.0.0", "4.1.0"]
17
17
  )
18
18
  end
19
19
  end
@@ -1,6 +1,6 @@
1
1
  describe Paraduct::ParallelRunner do
2
2
  describe "#perform_all" do
3
- subject{ Paraduct::ParallelRunner.perform_all(script: script, product_variables: product_variables, after_script: after_script) }
3
+ subject { Paraduct::ParallelRunner.perform_all(script: script, product_variables: product_variables, after_script: after_script) }
4
4
 
5
5
  include_context :within_temp_work_dir
6
6
 
@@ -9,23 +9,23 @@ describe Paraduct::ParallelRunner do
9
9
  # end
10
10
 
11
11
  shared_examples :create_job_directories do
12
- let(:job_dir) { temp_dir_path.join("tmp/paraduct_workspace/#{job_name}") }
13
- let(:copied_file){ job_dir.join("script/build_success.sh") }
12
+ let(:job_dir) { temp_dir_path.join("tmp/paraduct_workspace/#{job_name}") }
13
+ let(:copied_file) { job_dir.join("script/build_success.sh") }
14
14
 
15
15
  it { expect(job_dir).to be_exist }
16
16
  it { expect(copied_file).to be_exist }
17
17
  end
18
18
 
19
19
  shared_examples :dont_create_job_directories do
20
- let(:job_dir) { temp_dir_path.join("tmp/paraduct_workspace/#{job_name}") }
21
- let(:copied_file){ job_dir.join("script/build_success.sh") }
20
+ let(:job_dir) { temp_dir_path.join("tmp/paraduct_workspace/#{job_name}") }
21
+ let(:copied_file) { job_dir.join("script/build_success.sh") }
22
22
 
23
23
  it { expect(job_dir).not_to be_exist }
24
24
  it { expect(copied_file).not_to be_exist }
25
25
  end
26
26
 
27
27
  describe "with script file test" do
28
- let(:script){ "./script/build_success.sh" }
28
+ let(:script) { "./script/build_success.sh" }
29
29
  let(:after_script) { "./script/build_finish.sh" }
30
30
  let(:product_variables) do
31
31
  [
@@ -36,22 +36,22 @@ describe Paraduct::ParallelRunner do
36
36
 
37
37
  its(:jobs) do
38
38
  should include(
39
- job_name: "RUBY_1.9_DATABASE_mysql",
40
- params: { "RUBY" => "1.9", "DATABASE" => "mysql" },
41
- formatted_params: "RUBY=1.9, DATABASE=mysql",
42
- successful: true,
43
- stdout: "RUBY=1.9\nDATABASE=mysql\nFinish: RUBY=1.9, DATABASE=mysql\n"
44
- )
39
+ job_name: "RUBY_1.9_DATABASE_mysql",
40
+ params: { "RUBY" => "1.9", "DATABASE" => "mysql" },
41
+ formatted_params: "RUBY=1.9, DATABASE=mysql",
42
+ successful: true,
43
+ stdout: "RUBY=1.9\nDATABASE=mysql\nFinish: RUBY=1.9, DATABASE=mysql\n"
44
+ )
45
45
  end
46
46
 
47
47
  its(:jobs) do
48
48
  should include(
49
- job_name: "RUBY_2.0_DATABASE_postgresql",
50
- params: { "RUBY" => "2.0", "DATABASE" => "postgresql" },
51
- formatted_params: "RUBY=2.0, DATABASE=postgresql",
52
- successful: true,
53
- stdout: "RUBY=2.0\nDATABASE=postgresql\nFinish: RUBY=2.0, DATABASE=postgresql\n"
54
- )
49
+ job_name: "RUBY_2.0_DATABASE_postgresql",
50
+ params: { "RUBY" => "2.0", "DATABASE" => "postgresql" },
51
+ formatted_params: "RUBY=2.0, DATABASE=postgresql",
52
+ successful: true,
53
+ stdout: "RUBY=2.0\nDATABASE=postgresql\nFinish: RUBY=2.0, DATABASE=postgresql\n"
54
+ )
55
55
  end
56
56
 
57
57
  context "When work_dir is not empty" do
@@ -66,11 +66,11 @@ describe Paraduct::ParallelRunner do
66
66
  end
67
67
 
68
68
  it_behaves_like :create_job_directories do
69
- let(:job_name){ "RUBY_1.9_DATABASE_mysql" }
69
+ let(:job_name) { "RUBY_1.9_DATABASE_mysql" }
70
70
  end
71
71
 
72
72
  it_behaves_like :create_job_directories do
73
- let(:job_name){ "RUBY_2.0_DATABASE_postgresql" }
73
+ let(:job_name) { "RUBY_2.0_DATABASE_postgresql" }
74
74
  end
75
75
  end
76
76
  end
@@ -87,19 +87,19 @@ describe Paraduct::ParallelRunner do
87
87
  end
88
88
 
89
89
  it_behaves_like :dont_create_job_directories do
90
- let(:job_name){ "RUBY_1.9_DATABASE_mysql" }
90
+ let(:job_name) { "RUBY_1.9_DATABASE_mysql" }
91
91
  end
92
92
 
93
93
  it_behaves_like :dont_create_job_directories do
94
- let(:job_name){ "RUBY_2.0_DATABASE_postgresql" }
94
+ let(:job_name) { "RUBY_2.0_DATABASE_postgresql" }
95
95
  end
96
96
  end
97
97
  end
98
98
  end
99
99
 
100
100
  describe "without script file test" do
101
- let(:script){ %q(echo "RUBY=${RUBY} DATABASE=${DATABASE}") }
102
- let(:after_script) { %q(echo "Finish: RUBY=${RUBY}, DATABASE=${DATABASE}") }
101
+ let(:script) { 'echo "RUBY=${RUBY} DATABASE=${DATABASE}"' }
102
+ let(:after_script) { 'echo "Finish: RUBY=${RUBY}, DATABASE=${DATABASE}"' }
103
103
  let(:product_variables) do
104
104
  [
105
105
  { "RUBY" => "1.9", "DATABASE" => "mysql" },
@@ -109,22 +109,22 @@ describe Paraduct::ParallelRunner do
109
109
 
110
110
  its(:jobs) do
111
111
  should include(
112
- job_name: "RUBY_1.9_DATABASE_mysql",
113
- params: { "RUBY" => "1.9", "DATABASE" => "mysql" },
114
- formatted_params: "RUBY=1.9, DATABASE=mysql",
115
- successful: true,
116
- stdout: "RUBY=1.9 DATABASE=mysql\nFinish: RUBY=1.9, DATABASE=mysql\n"
117
- )
112
+ job_name: "RUBY_1.9_DATABASE_mysql",
113
+ params: { "RUBY" => "1.9", "DATABASE" => "mysql" },
114
+ formatted_params: "RUBY=1.9, DATABASE=mysql",
115
+ successful: true,
116
+ stdout: "RUBY=1.9 DATABASE=mysql\nFinish: RUBY=1.9, DATABASE=mysql\n"
117
+ )
118
118
  end
119
119
 
120
120
  its(:jobs) do
121
121
  should include(
122
- job_name: "RUBY_2.0_DATABASE_postgresql",
123
- params: { "RUBY" => "2.0", "DATABASE" => "postgresql" },
124
- formatted_params: "RUBY=2.0, DATABASE=postgresql",
125
- successful: true,
126
- stdout: "RUBY=2.0 DATABASE=postgresql\nFinish: RUBY=2.0, DATABASE=postgresql\n"
127
- )
122
+ job_name: "RUBY_2.0_DATABASE_postgresql",
123
+ params: { "RUBY" => "2.0", "DATABASE" => "postgresql" },
124
+ formatted_params: "RUBY=2.0, DATABASE=postgresql",
125
+ successful: true,
126
+ stdout: "RUBY=2.0 DATABASE=postgresql\nFinish: RUBY=2.0, DATABASE=postgresql\n"
127
+ )
128
128
  end
129
129
 
130
130
  context "When work_dir is not empty" do
@@ -139,11 +139,11 @@ describe Paraduct::ParallelRunner do
139
139
  end
140
140
 
141
141
  it_behaves_like :create_job_directories do
142
- let(:job_name){ "RUBY_1.9_DATABASE_mysql" }
142
+ let(:job_name) { "RUBY_1.9_DATABASE_mysql" }
143
143
  end
144
144
 
145
145
  it_behaves_like :create_job_directories do
146
- let(:job_name){ "RUBY_2.0_DATABASE_postgresql" }
146
+ let(:job_name) { "RUBY_2.0_DATABASE_postgresql" }
147
147
  end
148
148
  end
149
149
  end
@@ -160,11 +160,11 @@ describe Paraduct::ParallelRunner do
160
160
  end
161
161
 
162
162
  it_behaves_like :dont_create_job_directories do
163
- let(:job_name){ "RUBY_1.9_DATABASE_mysql" }
163
+ let(:job_name) { "RUBY_1.9_DATABASE_mysql" }
164
164
  end
165
165
 
166
166
  it_behaves_like :dont_create_job_directories do
167
- let(:job_name){ "RUBY_2.0_DATABASE_postgresql" }
167
+ let(:job_name) { "RUBY_2.0_DATABASE_postgresql" }
168
168
  end
169
169
  end
170
170
  end
@@ -3,22 +3,25 @@ describe Paraduct::Runner do
3
3
  Paraduct::Runner.new(
4
4
  params: params,
5
5
  base_job_dir: base_job_dir,
6
- job_id: job_id,
6
+ job_id: job_id
7
7
  )
8
8
  end
9
9
 
10
10
  include_context "uses temp dir"
11
11
 
12
- let(:base_job_dir){ temp_dir }
12
+ let(:base_job_dir) { temp_dir }
13
13
  let(:params) { {} }
14
14
  let(:job_id) { 1 }
15
15
 
16
16
  describe "#perform" do
17
- subject{ runner.perform(script) }
17
+ subject { runner.perform(script) }
18
18
 
19
19
  let(:script) { "./script/build_success.sh" }
20
20
  let(:params) { { "RUBY" => "1.9", "DATABASE" => "mysql" } }
21
- let(:command){ 'export PARADUCT_JOB_ID="1"; export PARADUCT_JOB_NAME="RUBY_1.9_DATABASE_mysql"; export RUBY="1.9"; export DATABASE="mysql"; ./script/build_success.sh' }
21
+
22
+ # rubocop:disable Metrics/LineLength
23
+ let(:command) { 'export PARADUCT_JOB_ID="1"; export PARADUCT_JOB_NAME="RUBY_1.9_DATABASE_mysql"; export RUBY="1.9"; export DATABASE="mysql"; ./script/build_success.sh' }
24
+ # rubocop:enable Metrics/LineLength
22
25
 
23
26
  context "with mock system" do
24
27
  it "script is call with capitalized variable" do
@@ -31,12 +34,12 @@ describe Paraduct::Runner do
31
34
  include_context :within_spec_dir
32
35
 
33
36
  context "when success" do
34
- it { should match /RUBY=1.9/ }
35
- it { should match /DATABASE=mysql/ }
37
+ it { should match(/RUBY=1.9/) }
38
+ it { should match(/DATABASE=mysql/) }
36
39
  end
37
40
 
38
41
  context "when error in script file" do
39
- let(:script){ "./script/build_error.sh" }
42
+ let(:script) { "./script/build_error.sh" }
40
43
 
41
44
  let(:stdout) do
42
45
  <<-EOS
@@ -45,25 +48,25 @@ DATABASE=mysql
45
48
  EOS
46
49
  end
47
50
 
48
- it { expect{ subject }.to raise_error(Paraduct::Errors::ProcessError, stdout) }
51
+ it { expect { subject }.to raise_error(Paraduct::Errors::ProcessError, stdout) }
49
52
  end
50
53
  end
51
54
 
52
55
  context "with single command" do
53
- let(:script){ 'echo RUBY=${RUBY}' }
56
+ let(:script) { "echo RUBY=${RUBY}" }
54
57
 
55
58
  it { should eq "RUBY=1.9\n" }
56
59
  end
57
60
 
58
61
  context "with multiple commands" do
59
- let(:script){ ['echo RUBY=${RUBY}', 'echo DATABASE=${DATABASE}'] }
62
+ let(:script) { ["echo RUBY=${RUBY}", "echo DATABASE=${DATABASE}"] }
60
63
 
61
64
  it { should eq "RUBY=1.9\nDATABASE=mysql\n" }
62
65
  end
63
66
  end
64
67
 
65
68
  describe "#job_dir" do
66
- subject{ runner.job_dir }
69
+ subject { runner.job_dir }
67
70
 
68
71
  let(:params) { { "RUBY" => "1.9", "DATABASE" => "mysql" } }
69
72
 
@@ -71,15 +74,15 @@ DATABASE=mysql
71
74
  end
72
75
 
73
76
  describe "#formatted_params" do
74
- subject{ runner.formatted_params }
77
+ subject { runner.formatted_params }
75
78
 
76
- let(:params){ { "RUBY" => "1.9", "DATABASE" => "mysql" } }
79
+ let(:params) { { "RUBY" => "1.9", "DATABASE" => "mysql" } }
77
80
 
78
- it{ should eq "RUBY=1.9, DATABASE=mysql" }
81
+ it { should eq "RUBY=1.9, DATABASE=mysql" }
79
82
  end
80
83
 
81
84
  describe "#job_name" do
82
- subject{ runner.job_name }
85
+ subject { runner.job_name }
83
86
 
84
87
  context "basic case" do
85
88
  let(:params) { { "RUBY" => "1.9", "DATABASE" => "mysql" } }
@@ -1,6 +1,6 @@
1
1
  describe Paraduct::SyncUtils do
2
2
  describe "#copy_recursive" do
3
- subject{ Paraduct::SyncUtils.copy_recursive(source_dir, destination_dir) }
3
+ subject { Paraduct::SyncUtils.copy_recursive(source_dir, destination_dir) }
4
4
 
5
5
  include_context :within_temp_dir
6
6
  include_context :stub_configuration
@@ -13,10 +13,10 @@ describe Paraduct::SyncUtils do
13
13
  }
14
14
  end
15
15
 
16
- let(:source_dir) { temp_dir_path }
17
- let(:destination_dir){ temp_dir_path.join("tmp/paraduct_workspace/RUBY_1.9_DATABASE_mysql") }
18
- let(:copied_file) { destination_dir.join("build_success.sh") }
19
- let(:not_copied_file){ destination_dir.join("tmp/paraduct_workspace/dummy.txt") }
16
+ let(:source_dir) { temp_dir_path }
17
+ let(:destination_dir) { temp_dir_path.join("tmp/paraduct_workspace/RUBY_1.9_DATABASE_mysql") }
18
+ let(:copied_file) { destination_dir.join("build_success.sh") }
19
+ let(:not_copied_file) { destination_dir.join("tmp/paraduct_workspace/dummy.txt") }
20
20
 
21
21
  before do
22
22
  # setup