fudge 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. data/lib/fudge/build.rb +25 -10
  2. data/lib/fudge/cli.rb +1 -0
  3. data/lib/fudge/rspec/matchers.rb +54 -49
  4. data/lib/fudge/runner.rb +1 -0
  5. data/lib/fudge/tasks/composite_task.rb +6 -4
  6. data/lib/fudge/tasks/each_directory.rb +1 -1
  7. data/lib/fudge/tasks/in_directory.rb +1 -1
  8. data/lib/fudge/tasks/shell.rb +1 -1
  9. data/lib/fudge/tasks/task.rb +5 -0
  10. data/lib/fudge/version.rb +1 -1
  11. data/spec/lib/fudge/build_spec.rb +19 -4
  12. data/spec/lib/fudge/cli_spec.rb +16 -16
  13. data/spec/lib/fudge/description_spec.rb +43 -42
  14. data/spec/lib/fudge/exceptions_spec.rb +17 -7
  15. data/spec/lib/fudge/formatters/simple_spec.rb +15 -15
  16. data/spec/lib/fudge/output_checker_spec.rb +2 -2
  17. data/spec/lib/fudge/parser_spec.rb +3 -3
  18. data/spec/lib/fudge/runner_spec.rb +9 -9
  19. data/spec/lib/fudge/tasks/brakeman_spec.rb +7 -7
  20. data/spec/lib/fudge/tasks/bundler_spec.rb +5 -5
  21. data/spec/lib/fudge/tasks/cane_spec.rb +8 -8
  22. data/spec/lib/fudge/tasks/composite_task_spec.rb +16 -15
  23. data/spec/lib/fudge/tasks/each_directory_spec.rb +9 -9
  24. data/spec/lib/fudge/tasks/flay_spec.rb +8 -8
  25. data/spec/lib/fudge/tasks/flog_spec.rb +13 -13
  26. data/spec/lib/fudge/tasks/in_directory_spec.rb +4 -4
  27. data/spec/lib/fudge/tasks/rake_spec.rb +5 -5
  28. data/spec/lib/fudge/tasks/rspec_spec.rb +16 -16
  29. data/spec/lib/fudge/tasks/shell_spec.rb +14 -14
  30. data/spec/lib/fudge/tasks/sub_process_spec.rb +3 -3
  31. data/spec/lib/fudge/tasks/task_spec.rb +1 -1
  32. data/spec/lib/fudge/tasks/yard_spec.rb +10 -10
  33. data/spec/lib/fudge/tasks_spec.rb +4 -4
  34. data/spec/lib/fudge/with_directory_spec.rb +2 -2
  35. metadata +145 -107
  36. checksums.yaml +0 -7
data/lib/fudge/build.rb CHANGED
@@ -6,9 +6,10 @@ module Fudge
6
6
  # @return [String] a brief description of the build; this is
7
7
  # output by the 'list' command
8
8
  attr_accessor :about
9
- attr_accessor :callbacks
9
+ attr_accessor :callbacks, :time
10
10
  attr_reader :success_hooks, :failure_hooks
11
11
  attr_reader :description
12
+ attr_reader :formatter
12
13
 
13
14
  def initialize(*args)
14
15
  @success_hooks = []
@@ -19,26 +20,40 @@ module Fudge
19
20
 
20
21
  # Run task
21
22
  def run(options={})
22
- formatter = options[:formatter] || Fudge::Formatters::Simple.new
23
+ start_time = Time.new
24
+ init_formatter(options)
23
25
  success = super
24
26
  if callbacks
25
- message "Running #{success ? 'success' : 'failure'} callbacks...", formatter
26
- hooks = success ? @success_hooks : @failure_hooks
27
-
28
- hooks.each do |hook|
29
- return false unless hook.run :formatter => formatter
30
- end
27
+ return false unless run_callbacks(success)
31
28
  else
32
- message "Skipping callbacks...", formatter
29
+ message "Skipping callbacks..."
33
30
  end
31
+ report_time(start_time, time)
34
32
 
35
33
  success
36
34
  end
37
35
 
38
36
  private
39
37
 
40
- def message(message, formatter)
38
+ def message(message)
41
39
  formatter.write { |w| w.info(message) }
42
40
  end
41
+
42
+ def init_formatter(options)
43
+ @formatter = options[:formatter] || Fudge::Formatters::Simple.new
44
+ end
45
+
46
+ def report_time(start_time, time)
47
+ message "Finished in #{"%.2f" % (Time.new - start_time)} seconds." if time
48
+ end
49
+
50
+ def run_callbacks(success)
51
+ message "Running #{success ? 'success' : 'failure'} callbacks..."
52
+ hooks = success ? @success_hooks : @failure_hooks
53
+
54
+ hooks.each do |hook|
55
+ return false unless hook.run :formatter => formatter
56
+ end
57
+ end
43
58
  end
44
59
  end
data/lib/fudge/cli.rb CHANGED
@@ -14,6 +14,7 @@ module Fudge
14
14
  desc "build [BUILD_NAME]",
15
15
  "Run a build with the given name (default: 'default')"
16
16
  method_option :callbacks, :type => :boolean, :default => false
17
+ method_option :time, :type => :boolean, :default => false
17
18
  # Runs the parsed builds
18
19
  # @param [String] build_name the given build to run (default 'default')
19
20
  def build(build_name='default')
@@ -4,68 +4,65 @@ RSpec::Matchers.define :be_registered_as do |key|
4
4
  end
5
5
  end
6
6
 
7
- # Collection of matchers for use in a test environment
8
- module FudgeMatchers
9
- # Run matcher
10
- class Run
11
- attr_reader :args, :expected, :task
7
+ RSpec::Matchers.define :run_command do |*expected|
8
+ match do |actual|
9
+ @args = expected.last.kind_of?(Hash) ? expected.delete_at(-1) : {}
10
+ @commands = expected
11
+ @args[:formatter] ||= Fudge::Formatters::Simple.new
12
12
 
13
- def initialize(expected, args={})
14
- @expected = expected
15
- @args = args
16
- @args[:formatter] ||= Fudge::Formatters::Simple.new
17
- end
18
-
19
- def matches?(task)
20
- @task = task
21
- ran = []
13
+ @ran = []
22
14
 
23
- to_stub =
24
- if task.is_a?(Fudge::Tasks::Shell)
25
- task
26
- else
27
- Fudge::Tasks::Shell.any_instance
28
- end
29
-
30
- to_stub.stub(:run_command) do |cmd, formatter|
15
+ stub = ->(*cmd, formatter) {
31
16
  raise "Run Command requires a formatter" unless formatter
32
- ran.push(cmd)
17
+ @ran.push(*cmd)
33
18
  ['dummy output', true]
34
- end
19
+ }
35
20
 
36
- task.run(args)
37
-
38
- @actual = ran
39
- run_matches?(ran, expected)
21
+ if RSpec::Version::STRING =~ /\A3\.[0-9]+\.[0-9]+/
22
+ if actual.is_a?(Fudge::Tasks::Shell)
23
+ allow(actual).to receive(:run_command, &stub)
24
+ else
25
+ allow_any_instance_of(Fudge::Tasks::Shell).to receive(:run_command, &stub)
26
+ end
27
+ else
28
+ if actual.is_a?(Fudge::Tasks::Shell)
29
+ actual.stub(:run_command, &stub)
30
+ else
31
+ Fudge::Tasks::Shell.any_instance.stub(:run_command, &stub)
32
+ end
40
33
  end
41
34
 
42
- # Failure message
43
- def failure_message_for_should
44
- message = ""
45
- message << "Expected task :#{@task.class.name} "
46
- message << "to run:\n #{@expected}\n"
47
- message << "but it ran:\n #{@actual}"
48
- end
35
+ actual.run(@args)
49
36
 
50
- private
51
- def run_matches?(ran, expected)
52
- if expected.is_a? Regexp
53
- ran.any? {|cmd| cmd =~ expected}
37
+ @commands.all? do |cmd|
38
+ if cmd.is_a? Regexp
39
+ @ran.any? {|ran| ran =~ cmd}
54
40
  else
55
- ran.include? expected
41
+ @ran.include? cmd
56
42
  end
57
43
  end
58
44
  end
59
- end
60
45
 
61
- # Matcher to test a command has been run by the task
62
- def run_command(cmd, options={})
63
- FudgeMatchers::Run.new cmd, options
46
+ format_message = ->(actual) {
47
+ message = ""
48
+ message << "Expected task :#{actual.class.name} "
49
+ message << "to run:\n #{@commands}\n"
50
+ message << "but it ran:\n #{@ran}"
51
+ }
52
+ if RSpec::Version::STRING =~ /\A3\.[0-9]+\.[0-9]+/
53
+ failure_message(&format_message)
54
+ else
55
+ failure_message_for_should(&format_message)
56
+ end
64
57
  end
65
58
 
66
59
  RSpec::Matchers.define :succeed_with_output do |output|
67
60
  match do |subject|
68
- subject.stub(:run_command).and_return([output, true])
61
+ if RSpec::Version::STRING =~ /\A3\.[0-9]+\.[0-9]+/
62
+ allow(subject).to receive(:run_command).and_return([output, true])
63
+ else
64
+ subject.stub(:run_command).and_return([output, true])
65
+ end
69
66
 
70
67
  subject.run
71
68
  end
@@ -76,11 +73,19 @@ shared_examples_for 'bundle aware' do
76
73
  @normal_cmd = subject.send(:cmd)
77
74
  end
78
75
 
79
- it "should prefix the command with bundle exec when bundler is set" do
80
- subject.should run_command("bundle exec #{@normal_cmd}", :bundler => true)
76
+ it "prefixes the command with bundle exec when bundler is set" do
77
+ if RSpec::Version::STRING =~ /\A3\.[0-9]+\.[0-9]+/
78
+ expect(subject).to run_command("bundle exec #{@normal_cmd}", :bundler => true)
79
+ else
80
+ subject.should run_command("bundle exec #{@normal_cmd}", :bundler => true)
81
+ end
81
82
  end
82
83
 
83
- it "should not prefix the command with bundle exec when bundler is not set" do
84
- subject.should run_command(@normal_cmd, :bundler => false)
84
+ it "does not prefix the command with bundle exec when bundler is not set" do
85
+ if RSpec::Version::STRING =~ /\A3\.[0-9]+\.[0-9]+/
86
+ expect(subject).to run_command(@normal_cmd, :bundler => false)
87
+ else
88
+ subject.should run_command(@normal_cmd, :bundler => false)
89
+ end
85
90
  end
86
91
  end
data/lib/fudge/runner.rb CHANGED
@@ -26,6 +26,7 @@ module Fudge
26
26
  # Run the build
27
27
  build = @description.builds[which.to_sym]
28
28
  build.callbacks = options[:callbacks]
29
+ build.time = options[:time]
29
30
  build.run :formatter => options[:formatter]
30
31
  end
31
32
 
@@ -13,7 +13,7 @@ module Fudge
13
13
 
14
14
  # Runs the task (by default running all other tasks in order)
15
15
  def run(options={})
16
- formatter = options[:formatter] || Fudge::Formatters::Simple.new
16
+ formatter = get_formatter(options)
17
17
  tasks.each do |t|
18
18
  apply_directory_settings(t)
19
19
  output_message(t, formatter)
@@ -53,9 +53,11 @@ module Fudge
53
53
  end
54
54
 
55
55
  def output_message(t, formatter)
56
- formatter.write do |w|
57
- w.info("Running task").notice(task_name(t)).notice(args_s(t))
58
- end
56
+ name = task_name(t)
57
+ args = args_s(t)
58
+ formatter.write do |w|
59
+ w.info("Running task").notice(name).notice(args)
60
+ end
59
61
  end
60
62
 
61
63
  end
@@ -13,7 +13,7 @@ module Fudge
13
13
 
14
14
  # Run task
15
15
  def run(options={})
16
- formatter = options[:formatter] || Fudge::Formatters::Simple.new
16
+ formatter = get_formatter(options)
17
17
  directories.all? do |dir|
18
18
  skip_directory?(dir) ||
19
19
  WithDirectory.new(dir, formatter).inside do
@@ -11,7 +11,7 @@ module Fudge
11
11
 
12
12
  # Run task
13
13
  def run(options={})
14
- formatter = options[:formatter] || Fudge::Formatters::Simple.new
14
+ formatter = get_formatter(options)
15
15
  WithDirectory.new(@directory, formatter).inside do
16
16
  super
17
17
  end
@@ -12,7 +12,7 @@ module Fudge
12
12
  #
13
13
  # @param [Hash] options Any options to pass to the shell
14
14
  def run(options={})
15
- formatter = options[:formatter] || Fudge::Formatters::Simple.new
15
+ formatter = get_formatter(options)
16
16
  @output, success = run_command(cmd(options), formatter)
17
17
 
18
18
  return false unless success
@@ -22,6 +22,11 @@ module Fudge
22
22
 
23
23
  @args
24
24
  end
25
+
26
+ private
27
+ def get_formatter(options = {})
28
+ options[:formatter] || Fudge::Formatters::Simple.new
29
+ end
25
30
  end
26
31
  end
27
32
  end
data/lib/fudge/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Fudge
2
2
  # Define gem version
3
- VERSION = '0.5.0'
3
+ VERSION = '0.6.0'
4
4
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fudge::Build do
4
- it { should be_a Fudge::Tasks::CompositeTask }
4
+ it { is_expected.to be_a Fudge::Tasks::CompositeTask }
5
5
 
6
6
  describe "#run" do
7
7
 
@@ -12,8 +12,8 @@ describe Fudge::Build do
12
12
  it "prints messages to the formatter instead of default" do
13
13
  subject.run :formatter => formatter
14
14
 
15
- stdout.string.should_not be_empty
16
- stdout.string.should include "Skipping callbacks..."
15
+ expect(stdout.string).not_to be_empty
16
+ expect(stdout.string).to include "Skipping callbacks..."
17
17
  end
18
18
 
19
19
  context "when there are callback hooks" do
@@ -25,7 +25,22 @@ describe Fudge::Build do
25
25
  end
26
26
 
27
27
  it "passesformatter down to the hook run" do
28
- hook.should_receive(:run).with(:formatter =>formatter).and_return(true)
28
+ expect(hook).to receive(:run).with(:formatter =>formatter).and_return(true)
29
+ subject.run :formatter => formatter
30
+ end
31
+ end
32
+
33
+ context "when the `time` flag is set" do
34
+ before do
35
+ subject.callbacks = true
36
+ allow(subject).to receive(:run_callbacks).and_return(true)
37
+ subject.time = true
38
+ end
39
+
40
+ it "should print out the time of the build" do
41
+ expect(subject).to receive(:message) do |message|
42
+ expect(message).to match /Finished in \d+.\d\d seconds./
43
+ end
29
44
  subject.run :formatter => formatter
30
45
  end
31
46
  end
@@ -18,7 +18,7 @@ describe Fudge::Cli do
18
18
  AnotherDummyTask.ran = false
19
19
  end
20
20
 
21
- describe :build do
21
+ describe ".build" do
22
22
  before :each do
23
23
  contents = <<-RUBY
24
24
  build :default do
@@ -30,26 +30,26 @@ describe Fudge::Cli do
30
30
  end
31
31
  RUBY
32
32
  file = double(File, read: contents, path: 'here')
33
- File.stub(:open) { |&block| block.yield file }
33
+ allow(File).to receive(:open) { |&block| block.yield file }
34
34
  end
35
35
 
36
36
  context "when not given a build name" do
37
37
  it "runs the default build" do
38
38
  subject.build 'default'
39
- expect(DummyTask.ran).to be_true
39
+ expect(DummyTask.ran).to be_truthy
40
40
  end
41
41
  end
42
42
 
43
43
  context "when given a build name" do
44
44
  it "runs the only the named build" do
45
45
  subject.build 'other'
46
- expect(DummyTask.ran).to be_false
47
- expect(AnotherDummyTask.ran).to be_true
46
+ expect(DummyTask.ran).to be_falsey
47
+ expect(AnotherDummyTask.ran).to be_truthy
48
48
  end
49
49
  end
50
50
  end
51
51
 
52
- describe :init do
52
+ describe ".init" do
53
53
  let (:file_state) { { exists: false, content: '' } }
54
54
  let (:override_file_state) do
55
55
  ->(exists, content) {
@@ -60,18 +60,18 @@ describe Fudge::Cli do
60
60
 
61
61
  before :each do
62
62
  file = double(File)
63
- file.stub(:<<) { |str| file_state[:content] = str }
64
- file.stub(:read) { file_state[:content] }
65
- File.stub(:open) do |&block|
63
+ allow(file).to receive(:<<) { |str| file_state[:content] = str }
64
+ allow(file).to receive(:read) { file_state[:content] }
65
+ allow(File).to receive(:open) do |&block|
66
66
  file_state[:exists] = true
67
67
  block.yield file
68
68
  end
69
- File.stub(:exists?) { |_| file_state[:exists] }
69
+ allow(File).to receive(:exists?) { |_| file_state[:exists] }
70
70
 
71
71
  @output = ''
72
72
  shell = double('Thor::Shell')
73
- shell.stub(:say) { |what| @output = what }
74
- subject.stub(:shell).and_return(shell)
73
+ allow(shell).to receive(:say) { |what| @output = what }
74
+ allow(subject).to receive(:shell).and_return(shell)
75
75
  end
76
76
 
77
77
  context "when a Fudgefile does not exist in the current directory" do
@@ -117,7 +117,7 @@ describe Fudge::Cli do
117
117
  end
118
118
  end
119
119
 
120
- describe :list do
120
+ describe ".list" do
121
121
  before :each do
122
122
  contents = <<-RUBY
123
123
  build :default do
@@ -129,12 +129,12 @@ describe Fudge::Cli do
129
129
  end
130
130
  RUBY
131
131
  file = double(File, read: contents, path: 'here')
132
- File.stub(:open) { |&block| block.yield file }
132
+ allow(File).to receive(:open) { |&block| block.yield file }
133
133
 
134
134
  @output = ''
135
135
  shell = double('Thor::Shell')
136
- shell.stub(:print_table) { |tab| @output = tab.map { |build, desc| "#{build}\t#{desc}" }.join("\n") }
137
- subject.stub(:shell).and_return(shell)
136
+ allow(shell).to receive(:print_table) { |tab| @output = tab.map { |build, desc| "#{build}\t#{desc}" }.join("\n") }
137
+ allow(subject).to receive(:shell).and_return(shell)
138
138
  end
139
139
 
140
140
  context "when not given a filter string" do
@@ -1,8 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Fudge::Description do
4
+ let(:input) { '' }
5
+ let(:file) { StringIO.new(input).tap { |s| allow(s).to receive(:path).and_return('') } }
6
+ subject { described_class.new(file) }
7
+
4
8
  let(:build) { subject.builds.values.first }
5
- let(:build_tasks) { build.tasks.map }
9
+ let(:build_tasks) { build.tasks.dup }
10
+
6
11
 
7
12
  def make_build
8
13
  subject.build :default do
@@ -12,38 +17,34 @@ describe Fudge::Description do
12
17
  build.callbacks = callbacks
13
18
  end
14
19
 
15
- let(:input) { '' }
16
- let(:file) { StringIO.new(input).tap { |s| s.stub(:path).and_return('') } }
17
- subject { described_class.new file }
18
-
19
- describe :initialize do
20
+ describe "#initialize" do
20
21
  let(:input) { 'build :foo do; end' }
21
22
 
22
23
  it "should add the builds in the given string" do
23
- subject.builds[:foo].should be_a Fudge::Build
24
+ expect(subject.builds[:foo]).to be_a Fudge::Build
24
25
  end
25
26
  end
26
27
 
27
- describe :build do
28
+ describe "#build" do
28
29
  it "should create a new build and add it to the builds array" do
29
- subject.builds.should be_empty
30
+ expect(subject.builds).to be_empty
30
31
 
31
32
  subject.build :some_branch do
32
33
  end
33
34
 
34
- subject.builds.should have(1).item
35
- subject.builds[:some_branch].should be_a Fudge::Build
35
+ expect(subject.builds.size).to eq(1)
36
+ expect(subject.builds[:some_branch]).to be_a Fudge::Build
36
37
  end
37
38
  end
38
39
 
39
- describe :task do
40
+ describe "#task" do
40
41
  it "should add a task to the current scope" do
41
42
  subject.build :default do
42
43
  subject.task :dummy
43
44
  end
44
45
 
45
- build_tasks.should have(1).item
46
- build_tasks.first.should be_a DummyTask
46
+ expect(build_tasks.size).to eq(1)
47
+ expect(build_tasks.first).to be_a DummyTask
47
48
  end
48
49
 
49
50
  it "should pass arguments to the initializer" do
@@ -51,7 +52,7 @@ describe Fudge::Description do
51
52
  subject.task :dummy, :foo, :bar
52
53
  end
53
54
 
54
- build_tasks.first.args.should == [:foo, :bar]
55
+ expect(build_tasks.first.args).to eq([:foo, :bar])
55
56
  end
56
57
 
57
58
  it "should forward missing methods to task" do
@@ -59,7 +60,7 @@ describe Fudge::Description do
59
60
  subject.dummy :foo, :bar
60
61
  end
61
62
 
62
- build_tasks.first.args.should == [:foo, :bar]
63
+ expect(build_tasks.first.args).to eq([:foo, :bar])
63
64
  end
64
65
 
65
66
  it "should super method_missing if no task found" do
@@ -73,11 +74,11 @@ describe Fudge::Description do
73
74
  end
74
75
  end
75
76
 
76
- build_tasks.first.tasks.first.should be_a DummyTask
77
+ expect(build_tasks.first.tasks.first).to be_a DummyTask
77
78
  end
78
79
  end
79
80
 
80
- describe :task_group do
81
+ describe "#task_group" do
81
82
  it "should add a task group and allow it to be used in a build" do
82
83
  subject.task_group :group1 do
83
84
  subject.task :dummy
@@ -88,7 +89,7 @@ describe Fudge::Description do
88
89
  end
89
90
 
90
91
  subject.builds[:default].run
91
- DummyTask.ran.should be_true
92
+ expect(DummyTask.ran).to be_truthy
92
93
  end
93
94
 
94
95
  it "should allow passing arguments to task groups" do
@@ -101,7 +102,7 @@ describe Fudge::Description do
101
102
  end
102
103
 
103
104
  subject.builds[:default].run
104
- DummyTask.ran.should be_true
105
+ expect(DummyTask.ran).to be_truthy
105
106
  end
106
107
 
107
108
  it "should raise an exception if task group not found" do
@@ -127,7 +128,7 @@ describe Fudge::Description do
127
128
  end
128
129
 
129
130
  subject.builds[:default].run
130
- DummyTask.ran.should be_true
131
+ expect(DummyTask.ran).to be_truthy
131
132
  end
132
133
 
133
134
  it "supports when options are given" do
@@ -140,9 +141,9 @@ describe Fudge::Description do
140
141
  subject.builds[:default].run
141
142
 
142
143
  # Check that the options are maintained through the call
143
- build_tasks.first.args.should have(2).items
144
- build_tasks.first.args[1][:foobar].should be_true
145
- DummyTask.ran.should be_true
144
+ expect(build_tasks.first.args.size).to eq(2)
145
+ expect(build_tasks.first.args[1][:foobar]).to be_truthy
146
+ expect(DummyTask.ran).to be_truthy
146
147
  end
147
148
  end
148
149
 
@@ -151,13 +152,13 @@ describe Fudge::Description do
151
152
  describe "Callback Hooks" do
152
153
  before :each do
153
154
  @ran = []
154
- Fudge::Tasks::Shell.any_instance.stub(:run_command) do |cmd|
155
- @ran << cmd
156
- ['', cmd != 'fail']
155
+ allow_any_instance_of(Fudge::Tasks::Shell).to receive(:run_command) do |cmd|
156
+ @ran << cmd.arguments
157
+ ['', cmd.arguments != 'fail']
157
158
  end
158
159
  end
159
160
 
160
- describe :on_success do
161
+ describe "#on_success" do
161
162
  context "when callbacks is set to true" do
162
163
  let(:callbacks) { true }
163
164
 
@@ -167,8 +168,8 @@ describe Fudge::Description do
167
168
  subject.on_success { subject.shell 'BAR' }
168
169
  end
169
170
 
170
- build.run.should be_true
171
- @ran.should == ['FOO', 'BAR']
171
+ expect(build.run).to be_truthy
172
+ expect(@ran).to eq(['FOO', 'BAR'])
172
173
  end
173
174
 
174
175
  it "fails the build HARD when hooks fail" do
@@ -177,8 +178,8 @@ describe Fudge::Description do
177
178
  subject.on_success { subject.shell 'BAR' }
178
179
  end
179
180
 
180
- build.run.should be_false
181
- @ran.should == ['fail']
181
+ expect(build.run).to be_falsey
182
+ expect(@ran).to eq(['fail'])
182
183
  end
183
184
  end
184
185
 
@@ -190,15 +191,15 @@ describe Fudge::Description do
190
191
  subject.on_success { subject.shell 'echo "WOOP"' }
191
192
  end
192
193
 
193
- build.run.should be_true
194
- @ran.should == []
194
+ expect(build.run).to be_truthy
195
+ expect(@ran).to eq([])
195
196
  end
196
197
  end
197
198
  end
198
199
 
199
- describe :on_failure do
200
+ describe "#on_failure" do
200
201
  before :each do
201
- DummyTask.any_instance.stub(:run).and_return(false)
202
+ allow_any_instance_of(DummyTask).to receive(:run).and_return(false)
202
203
  end
203
204
 
204
205
  context "when callbacks is set to true" do
@@ -210,8 +211,8 @@ describe Fudge::Description do
210
211
  subject.on_failure { subject.shell 'BAR' }
211
212
  end
212
213
 
213
- build.run.should be_false
214
- @ran.should == ['WOOP', 'BAR']
214
+ expect(build.run).to be_falsey
215
+ expect(@ran).to eq(['WOOP', 'BAR'])
215
216
  end
216
217
 
217
218
  it "fails the build HARD when hooks fail" do
@@ -220,8 +221,8 @@ describe Fudge::Description do
220
221
  subject.on_failure { subject.shell 'BAR' }
221
222
  end
222
223
 
223
- build.run.should be_false
224
- @ran.should == ['fail']
224
+ expect(build.run).to be_falsey
225
+ expect(@ran).to eq(['fail'])
225
226
  end
226
227
  end
227
228
 
@@ -233,8 +234,8 @@ describe Fudge::Description do
233
234
  subject.on_failure { subject.shell 'WOOP' }
234
235
  end
235
236
 
236
- build.run.should be_false
237
- @ran.should == []
237
+ expect(build.run).to be_falsey
238
+ expect(@ran).to eq([])
238
239
  end
239
240
  end
240
241
  end