fudge 0.6.1 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/fudge +0 -1
- data/lib/fudge/build.rb +0 -2
- data/lib/fudge/tasks.rb +1 -0
- data/lib/fudge/tasks/cucumber.rb +58 -0
- data/lib/fudge/version.rb +1 -1
- data/spec/lib/fudge/build_spec.rb +13 -15
- data/spec/lib/fudge/cli_spec.rb +29 -30
- data/spec/lib/fudge/description_spec.rb +37 -36
- data/spec/lib/fudge/exceptions_spec.rb +2 -2
- data/spec/lib/fudge/formatters/simple_spec.rb +31 -32
- data/spec/lib/fudge/output_checker_spec.rb +9 -9
- data/spec/lib/fudge/parser_spec.rb +2 -2
- data/spec/lib/fudge/runner_spec.rb +10 -10
- data/spec/lib/fudge/tasks/brakeman_spec.rb +2 -3
- data/spec/lib/fudge/tasks/bundler_spec.rb +4 -5
- data/spec/lib/fudge/tasks/cane_spec.rb +11 -11
- data/spec/lib/fudge/tasks/composite_task_spec.rb +9 -9
- data/spec/lib/fudge/tasks/cucumber_spec.rb +38 -0
- data/spec/lib/fudge/tasks/each_directory_spec.rb +9 -9
- data/spec/lib/fudge/tasks/flay_spec.rb +5 -6
- data/spec/lib/fudge/tasks/flog_spec.rb +9 -9
- data/spec/lib/fudge/tasks/in_directory_spec.rb +3 -3
- data/spec/lib/fudge/tasks/rake_spec.rb +2 -2
- data/spec/lib/fudge/tasks/rspec_spec.rb +12 -13
- data/spec/lib/fudge/tasks/shell_spec.rb +19 -22
- data/spec/lib/fudge/tasks/sub_process_spec.rb +20 -20
- data/spec/lib/fudge/tasks/task_spec.rb +20 -20
- data/spec/lib/fudge/tasks/yard_spec.rb +3 -3
- data/spec/lib/fudge/tasks_spec.rb +4 -4
- data/spec/lib/fudge/with_directory_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/support/dummy_task.rb +1 -1
- metadata +120 -146
- data/lib/fudge/version.rb.orig +0 -8
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d8267a0d4afa0b74d964694a5871e21528b9d2ae
|
4
|
+
data.tar.gz: 2406d80644f4ab0355491eafafb1f4699a48e468
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 449dee87fe9c1b006a198bf5a4ca2e10842085f517fc91185a2c078ccc6814b4210b414dd2e39822f4568d18e1c69db7fa261677b5a942db7e1de03e90c5e796
|
7
|
+
data.tar.gz: 7ecf7d08cfbb75aadd7e388184f2b180632d059594e9e2e710c1c7bdb675e412dd6765853ad8ecb2a78a055007e5cc010e8da5601978d77e380eeafd1e1e8096
|
data/bin/fudge
CHANGED
data/lib/fudge/build.rb
CHANGED
data/lib/fudge/tasks.rb
CHANGED
@@ -0,0 +1,58 @@
|
|
1
|
+
module Fudge
|
2
|
+
module Tasks
|
3
|
+
# Allow use of Cucumber as a task
|
4
|
+
class Cucumber < Shell
|
5
|
+
include Helpers::BundleAware
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def check_for
|
10
|
+
if coverage
|
11
|
+
[check_regex, method(:coverage_checker)]
|
12
|
+
else
|
13
|
+
super
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def check_regex
|
18
|
+
/((\d+\.\d+)%\) covered)/
|
19
|
+
end
|
20
|
+
|
21
|
+
def coverage
|
22
|
+
options[:coverage]
|
23
|
+
end
|
24
|
+
|
25
|
+
# checks if the expected coverage is met
|
26
|
+
def coverage_checker(matches)
|
27
|
+
matches = matches.to_s
|
28
|
+
test_coverage_threshold(matches)
|
29
|
+
end
|
30
|
+
|
31
|
+
# checks the matched string from the console output,
|
32
|
+
# to see if the number for the coverage is greater or
|
33
|
+
# equal than the expected coverage
|
34
|
+
def test_coverage_threshold(matches)
|
35
|
+
if matches.to_f >= coverage
|
36
|
+
true
|
37
|
+
else
|
38
|
+
'Insufficient Coverage.'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def color_options
|
43
|
+
' --color' unless color == false
|
44
|
+
end
|
45
|
+
|
46
|
+
def cmd(options={})
|
47
|
+
self.arguments = 'features/' if (arguments.nil? || arguments.empty?)
|
48
|
+
bundle_cmd("cucumber#{color_options} #{arguments}", options)
|
49
|
+
end
|
50
|
+
|
51
|
+
def color
|
52
|
+
options[:color]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
register Cucumber
|
57
|
+
end
|
58
|
+
end
|
data/lib/fudge/version.rb
CHANGED
@@ -3,20 +3,18 @@ require 'spec_helper'
|
|
3
3
|
describe Fudge::Build do
|
4
4
|
it { is_expected.to be_a Fudge::Tasks::CompositeTask }
|
5
5
|
|
6
|
-
describe
|
7
|
-
|
8
|
-
context "when provided an output" do
|
6
|
+
describe '#run' do
|
7
|
+
context 'when provided an output' do
|
9
8
|
let(:stdout) { StringIO.new }
|
10
9
|
let(:formatter) { Fudge::Formatters::Simple.new(stdout) }
|
11
10
|
|
12
|
-
it
|
13
|
-
subject.run :
|
11
|
+
it 'prints messages to the formatter instead of default' do
|
12
|
+
subject.run formatter: formatter
|
14
13
|
|
15
|
-
expect(stdout.string).
|
16
|
-
expect(stdout.string).to include "Skipping callbacks..."
|
14
|
+
expect(stdout.string).to be_empty
|
17
15
|
end
|
18
16
|
|
19
|
-
context
|
17
|
+
context 'when there are callback hooks' do
|
20
18
|
let(:hook) { double(:Hook) }
|
21
19
|
|
22
20
|
before :each do
|
@@ -24,24 +22,24 @@ describe Fudge::Build do
|
|
24
22
|
subject.success_hooks << hook
|
25
23
|
end
|
26
24
|
|
27
|
-
it
|
28
|
-
expect(hook).to receive(:run).with(:
|
29
|
-
subject.run :
|
25
|
+
it 'passesformatter down to the hook run' do
|
26
|
+
expect(hook).to receive(:run).with(formatter: formatter).and_return(true)
|
27
|
+
subject.run formatter: formatter
|
30
28
|
end
|
31
29
|
end
|
32
30
|
|
33
|
-
context
|
31
|
+
context 'when the `time` flag is set' do
|
34
32
|
before do
|
35
33
|
subject.callbacks = true
|
36
34
|
allow(subject).to receive(:run_callbacks).and_return(true)
|
37
35
|
subject.time = true
|
38
36
|
end
|
39
37
|
|
40
|
-
it
|
38
|
+
it 'should print out the time of the build' do
|
41
39
|
expect(subject).to receive(:message) do |message|
|
42
|
-
expect(message).to match
|
40
|
+
expect(message).to match(/Finished in \d+.\d\d seconds./)
|
43
41
|
end
|
44
|
-
subject.run :
|
42
|
+
subject.run formatter: formatter
|
45
43
|
end
|
46
44
|
end
|
47
45
|
end
|
data/spec/lib/fudge/cli_spec.rb
CHANGED
@@ -5,7 +5,7 @@ class AnotherDummyTask < DummyTask
|
|
5
5
|
:another_dummy
|
6
6
|
end
|
7
7
|
|
8
|
-
def run(
|
8
|
+
def run(_options = {})
|
9
9
|
self.class.ran = true
|
10
10
|
end
|
11
11
|
end
|
@@ -18,7 +18,7 @@ describe Fudge::Cli do
|
|
18
18
|
AnotherDummyTask.ran = false
|
19
19
|
end
|
20
20
|
|
21
|
-
describe
|
21
|
+
describe '.build' do
|
22
22
|
before :each do
|
23
23
|
contents = <<-RUBY
|
24
24
|
build :default do
|
@@ -33,15 +33,15 @@ describe Fudge::Cli do
|
|
33
33
|
allow(File).to receive(:open) { |&block| block.yield file }
|
34
34
|
end
|
35
35
|
|
36
|
-
context
|
37
|
-
it
|
36
|
+
context 'when not given a build name' do
|
37
|
+
it 'runs the default build' do
|
38
38
|
subject.build 'default'
|
39
39
|
expect(DummyTask.ran).to be_truthy
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
context
|
44
|
-
it
|
43
|
+
context 'when given a build name' do
|
44
|
+
it 'runs the only the named build' do
|
45
45
|
subject.build 'other'
|
46
46
|
expect(DummyTask.ran).to be_falsey
|
47
47
|
expect(AnotherDummyTask.ran).to be_truthy
|
@@ -49,13 +49,13 @@ describe Fudge::Cli do
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
describe
|
53
|
-
let
|
54
|
-
let
|
55
|
-
|
52
|
+
describe '.init' do
|
53
|
+
let(:file_state) { { exists: false, content: '' } }
|
54
|
+
let(:override_file_state) do
|
55
|
+
lambda do |exists, content|
|
56
56
|
file_state[:exists] = exists
|
57
57
|
file_state[:content] = content
|
58
|
-
|
58
|
+
end
|
59
59
|
end
|
60
60
|
|
61
61
|
before :each do
|
@@ -74,8 +74,8 @@ describe Fudge::Cli do
|
|
74
74
|
allow(subject).to receive(:shell).and_return(shell)
|
75
75
|
end
|
76
76
|
|
77
|
-
context
|
78
|
-
it
|
77
|
+
context 'when a Fudgefile does not exist in the current directory' do
|
78
|
+
it 'creates a new FudgeFile' do
|
79
79
|
expect(File).not_to be_exists('Fudgefile')
|
80
80
|
|
81
81
|
subject.init
|
@@ -83,7 +83,7 @@ describe Fudge::Cli do
|
|
83
83
|
expect(File).to be_exists('Fudgefile')
|
84
84
|
end
|
85
85
|
|
86
|
-
it
|
86
|
+
it 'writes a default build into the new Fudgefile' do
|
87
87
|
subject.init
|
88
88
|
|
89
89
|
File.open('Fudgefile', 'r') do |f|
|
@@ -91,33 +91,33 @@ describe Fudge::Cli do
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
it
|
94
|
+
it 'outputs a success message' do
|
95
95
|
subject.init
|
96
96
|
expect(@output).to eq 'Fudgefile created.'
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
|
-
context
|
100
|
+
context 'when a Fudgefile already exists in the current directory' do
|
101
101
|
before :each do
|
102
|
-
override_file_state.(true, 'foo')
|
102
|
+
override_file_state.call(true, 'foo')
|
103
103
|
end
|
104
104
|
|
105
|
-
it
|
105
|
+
it 'does not modify the existing Fudgefile' do
|
106
106
|
expect(File).to be_exists('Fudgefile')
|
107
107
|
|
108
108
|
subject.init
|
109
109
|
|
110
|
-
expect(File.open('Fudgefile'
|
110
|
+
expect(File.open('Fudgefile', &:read)).to eql 'foo'
|
111
111
|
end
|
112
112
|
|
113
|
-
it
|
113
|
+
it 'outputs a failure message' do
|
114
114
|
subject.init
|
115
115
|
expect(@output).to eq 'Fudgefile already exists.'
|
116
116
|
end
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
120
|
-
describe
|
120
|
+
describe '.list' do
|
121
121
|
before :each do
|
122
122
|
contents = <<-RUBY
|
123
123
|
build :default do
|
@@ -137,32 +137,31 @@ describe Fudge::Cli do
|
|
137
137
|
allow(subject).to receive(:shell).and_return(shell)
|
138
138
|
end
|
139
139
|
|
140
|
-
context
|
141
|
-
it
|
140
|
+
context 'when not given a filter string' do
|
141
|
+
it 'lists all the defined builds' do
|
142
142
|
subject.list
|
143
143
|
expect(@output).to eql "default\t\nother\tnot the default"
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
147
|
-
context
|
148
|
-
context
|
149
|
-
it
|
147
|
+
context 'when given a filter string' do
|
148
|
+
context 'that matches one or builds' do
|
149
|
+
it 'lists only the builds that match the filter' do
|
150
150
|
subject.list 'oth'
|
151
151
|
expect(@output).to eql "other\tnot the default"
|
152
152
|
end
|
153
153
|
|
154
|
-
it
|
154
|
+
it 'ignores the case of the filter' do
|
155
155
|
subject.list 'OTH'
|
156
156
|
expect(@output).to eql "other\tnot the default"
|
157
157
|
end
|
158
158
|
end
|
159
159
|
|
160
|
-
context
|
161
|
-
it
|
160
|
+
context 'that matches no builds' do
|
161
|
+
it 'outputs nothing' do
|
162
162
|
expect(@output).to eql ''
|
163
163
|
end
|
164
164
|
end
|
165
165
|
end
|
166
166
|
end
|
167
|
-
|
168
167
|
end
|
@@ -8,7 +8,6 @@ describe Fudge::Description do
|
|
8
8
|
let(:build) { subject.builds.values.first }
|
9
9
|
let(:build_tasks) { build.tasks.dup }
|
10
10
|
|
11
|
-
|
12
11
|
def make_build
|
13
12
|
subject.build :default do
|
14
13
|
subject.task :dummy
|
@@ -17,16 +16,16 @@ describe Fudge::Description do
|
|
17
16
|
build.callbacks = callbacks
|
18
17
|
end
|
19
18
|
|
20
|
-
describe
|
19
|
+
describe '#initialize' do
|
21
20
|
let(:input) { 'build :foo do; end' }
|
22
21
|
|
23
|
-
it
|
22
|
+
it 'should add the builds in the given string' do
|
24
23
|
expect(subject.builds[:foo]).to be_a Fudge::Build
|
25
24
|
end
|
26
25
|
end
|
27
26
|
|
28
|
-
describe
|
29
|
-
it
|
27
|
+
describe '#build' do
|
28
|
+
it 'should create a new build and add it to the builds array' do
|
30
29
|
expect(subject.builds).to be_empty
|
31
30
|
|
32
31
|
subject.build :some_branch do
|
@@ -37,8 +36,8 @@ describe Fudge::Description do
|
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
40
|
-
describe
|
41
|
-
it
|
39
|
+
describe '#task' do
|
40
|
+
it 'should add a task to the current scope' do
|
42
41
|
subject.build :default do
|
43
42
|
subject.task :dummy
|
44
43
|
end
|
@@ -47,7 +46,7 @@ describe Fudge::Description do
|
|
47
46
|
expect(build_tasks.first).to be_a DummyTask
|
48
47
|
end
|
49
48
|
|
50
|
-
it
|
49
|
+
it 'should pass arguments to the initializer' do
|
51
50
|
subject.build :default do
|
52
51
|
subject.task :dummy, :foo, :bar
|
53
52
|
end
|
@@ -55,7 +54,7 @@ describe Fudge::Description do
|
|
55
54
|
expect(build_tasks.first.args).to eq([:foo, :bar])
|
56
55
|
end
|
57
56
|
|
58
|
-
it
|
57
|
+
it 'should forward missing methods to task' do
|
59
58
|
subject.build :default do
|
60
59
|
subject.dummy :foo, :bar
|
61
60
|
end
|
@@ -63,11 +62,11 @@ describe Fudge::Description do
|
|
63
62
|
expect(build_tasks.first.args).to eq([:foo, :bar])
|
64
63
|
end
|
65
64
|
|
66
|
-
it
|
65
|
+
it 'should super method_missing if no task found' do
|
67
66
|
expect { subject.no_task :foo, :bar }.to raise_error(NoMethodError)
|
68
67
|
end
|
69
68
|
|
70
|
-
it
|
69
|
+
it 'should add tasks recursively to composite tasks' do
|
71
70
|
subject.build :default do
|
72
71
|
subject.dummy_composite do
|
73
72
|
subject.dummy
|
@@ -78,8 +77,8 @@ describe Fudge::Description do
|
|
78
77
|
end
|
79
78
|
end
|
80
79
|
|
81
|
-
describe
|
82
|
-
it
|
80
|
+
describe '#task_group' do
|
81
|
+
it 'should add a task group and allow it to be used in a build' do
|
83
82
|
subject.task_group :group1 do
|
84
83
|
subject.task :dummy
|
85
84
|
end
|
@@ -92,7 +91,7 @@ describe Fudge::Description do
|
|
92
91
|
expect(DummyTask.ran).to be_truthy
|
93
92
|
end
|
94
93
|
|
95
|
-
it
|
94
|
+
it 'should allow passing arguments to task groups' do
|
96
95
|
subject.task_group :special_group do |which|
|
97
96
|
subject.task which
|
98
97
|
end
|
@@ -105,7 +104,7 @@ describe Fudge::Description do
|
|
105
104
|
expect(DummyTask.ran).to be_truthy
|
106
105
|
end
|
107
106
|
|
108
|
-
it
|
107
|
+
it 'should raise an exception if task group not found' do
|
109
108
|
expect do
|
110
109
|
subject.build :default do
|
111
110
|
subject.task_group :unkown_group
|
@@ -113,14 +112,14 @@ describe Fudge::Description do
|
|
113
112
|
end.to raise_error Fudge::Exceptions::TaskGroupNotFound
|
114
113
|
end
|
115
114
|
|
116
|
-
context
|
115
|
+
context 'grouped tasks' do
|
117
116
|
before :each do
|
118
117
|
subject.task_group :group1 do
|
119
118
|
subject.task :dummy
|
120
119
|
end
|
121
120
|
end
|
122
121
|
|
123
|
-
it
|
122
|
+
it 'allows group task reuse in composite tasks' do
|
124
123
|
subject.build :default do
|
125
124
|
subject.task :dummy_composite do
|
126
125
|
subject.task_group :group1
|
@@ -131,9 +130,9 @@ describe Fudge::Description do
|
|
131
130
|
expect(DummyTask.ran).to be_truthy
|
132
131
|
end
|
133
132
|
|
134
|
-
it
|
133
|
+
it 'supports when options are given' do
|
135
134
|
subject.build :default do
|
136
|
-
subject.task :dummy_composite, :hello, :
|
135
|
+
subject.task :dummy_composite, :hello, foobar: true do
|
137
136
|
subject.task_group :group1
|
138
137
|
end
|
139
138
|
end
|
@@ -146,10 +145,9 @@ describe Fudge::Description do
|
|
146
145
|
expect(DummyTask.ran).to be_truthy
|
147
146
|
end
|
148
147
|
end
|
149
|
-
|
150
148
|
end
|
151
149
|
|
152
|
-
describe
|
150
|
+
describe 'Callback Hooks' do
|
153
151
|
before :each do
|
154
152
|
@ran = []
|
155
153
|
allow_any_instance_of(Fudge::Tasks::Shell).to receive(:run_command) do |cmd|
|
@@ -158,21 +156,21 @@ describe Fudge::Description do
|
|
158
156
|
end
|
159
157
|
end
|
160
158
|
|
161
|
-
describe
|
162
|
-
context
|
159
|
+
describe '#on_success' do
|
160
|
+
context 'when callbacks is set to true' do
|
163
161
|
let(:callbacks) { true }
|
164
162
|
|
165
|
-
it
|
163
|
+
it 'should add success hooks that run after the build is successful' do
|
166
164
|
make_build do
|
167
165
|
subject.on_success { subject.shell 'FOO' }
|
168
166
|
subject.on_success { subject.shell 'BAR' }
|
169
167
|
end
|
170
168
|
|
171
169
|
expect(build.run).to be_truthy
|
172
|
-
expect(@ran).to eq(
|
170
|
+
expect(@ran).to eq(%w(FOO BAR))
|
173
171
|
end
|
174
172
|
|
175
|
-
it
|
173
|
+
it 'fails the build HARD when hooks fail' do
|
176
174
|
make_build do
|
177
175
|
subject.on_success { subject.shell 'fail'; subject.shell 'FOO' }
|
178
176
|
subject.on_success { subject.shell 'BAR' }
|
@@ -183,10 +181,10 @@ describe Fudge::Description do
|
|
183
181
|
end
|
184
182
|
end
|
185
183
|
|
186
|
-
context
|
184
|
+
context 'when callbacks is set to false' do
|
187
185
|
let(:callbacks) { false }
|
188
186
|
|
189
|
-
it
|
187
|
+
it 'should not run the callbacks if the build succeeds' do
|
190
188
|
make_build do
|
191
189
|
subject.on_success { subject.shell 'echo "WOOP"' }
|
192
190
|
end
|
@@ -197,27 +195,30 @@ describe Fudge::Description do
|
|
197
195
|
end
|
198
196
|
end
|
199
197
|
|
200
|
-
describe
|
198
|
+
describe '#on_failure' do
|
201
199
|
before :each do
|
202
200
|
allow_any_instance_of(DummyTask).to receive(:run).and_return(false)
|
203
201
|
end
|
204
202
|
|
205
|
-
context
|
203
|
+
context 'when callbacks is set to true' do
|
206
204
|
let(:callbacks) { true }
|
207
205
|
|
208
|
-
it
|
206
|
+
it 'should add failure hooks that run after the build fails' do
|
209
207
|
make_build do
|
210
208
|
subject.on_failure { subject.shell 'WOOP' }
|
211
209
|
subject.on_failure { subject.shell 'BAR' }
|
212
210
|
end
|
213
211
|
|
214
212
|
expect(build.run).to be_falsey
|
215
|
-
expect(@ran).to eq(
|
213
|
+
expect(@ran).to eq(%w(WOOP BAR))
|
216
214
|
end
|
217
215
|
|
218
|
-
it
|
216
|
+
it 'fails the build HARD when hooks fail' do
|
219
217
|
make_build do
|
220
|
-
subject.on_failure
|
218
|
+
subject.on_failure do
|
219
|
+
subject.shell 'fail'
|
220
|
+
subject.shell 'FOO'
|
221
|
+
end
|
221
222
|
subject.on_failure { subject.shell 'BAR' }
|
222
223
|
end
|
223
224
|
|
@@ -226,10 +227,10 @@ describe Fudge::Description do
|
|
226
227
|
end
|
227
228
|
end
|
228
229
|
|
229
|
-
context
|
230
|
+
context 'when callbacks is set to false' do
|
230
231
|
let(:callbacks) { false }
|
231
232
|
|
232
|
-
it
|
233
|
+
it 'should not run the callbacks if the build fails' do
|
233
234
|
make_build do
|
234
235
|
subject.on_failure { subject.shell 'WOOP' }
|
235
236
|
end
|