fudge 0.6.1 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|