bumps 0.0.1 → 0.0.2
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.
- data/History.txt +6 -0
- data/Manifest.txt +5 -6
- data/README.rdoc +4 -2
- data/Rakefile +3 -2
- data/TODO +11 -8
- data/examples/feature_server +1 -1
- data/features/{steps → support}/env.rb +2 -9
- data/lib/bumps.rb +5 -23
- data/lib/bumps/configuration.rb +2 -1
- data/lib/bumps/cucumber_config.rb +29 -0
- data/lib/bumps/feature.rb +1 -1
- data/lib/bumps/remote_feature.rb +3 -2
- data/lib/bumps_core.rb +22 -0
- data/spec/bumps/cucumber_config_spec.rb +77 -0
- data/spec/bumps/feature_spec.rb +3 -3
- data/spec/bumps/remote_feature_spec.rb +17 -4
- data/spec/bumps_spec.rb +24 -10
- data/spec/spec_helper.rb +1 -2
- data/test_features/requires/support/env.rb +3 -0
- metadata +12 -11
- data/lib/bumps/hook_tasks.rb +0 -25
- data/lib/bumps/pre_feature_load_hook.rb +0 -27
- data/spec/bumps/hook_tasks_spec.rb +0 -98
- data/spec/bumps/pre_feature_load_hook_spec.rb +0 -44
- data/test_features/requires/env.rb +0 -3
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -8,24 +8,23 @@ features/pull_remote_features.feature
|
|
8
8
|
features/push_feature_results.feature
|
9
9
|
features/steps/command_output.rb
|
10
10
|
features/steps/cucumber_run.rb
|
11
|
-
features/steps/env.rb
|
12
11
|
features/steps/feature_report.rb
|
13
12
|
features/steps/feature_server.rb
|
14
13
|
features/steps/helpers/scenario_process.rb
|
14
|
+
features/support/env.rb
|
15
15
|
lib/bumps.rb
|
16
16
|
lib/bumps/configuration.rb
|
17
|
+
lib/bumps/cucumber_config.rb
|
17
18
|
lib/bumps/feature.rb
|
18
|
-
lib/bumps/hook_tasks.rb
|
19
|
-
lib/bumps/pre_feature_load_hook.rb
|
20
19
|
lib/bumps/remote_feature.rb
|
21
20
|
lib/bumps/results_push_formatter.rb
|
21
|
+
lib/bumps_core.rb
|
22
22
|
script/console
|
23
23
|
script/destroy
|
24
24
|
script/generate
|
25
25
|
spec/bumps/configuration_spec.rb
|
26
|
+
spec/bumps/cucumber_config_spec.rb
|
26
27
|
spec/bumps/feature_spec.rb
|
27
|
-
spec/bumps/hook_tasks_spec.rb
|
28
|
-
spec/bumps/pre_feature_load_hook_spec.rb
|
29
28
|
spec/bumps/remote_feature_spec.rb
|
30
29
|
spec/bumps/results_push_formatter_spec.rb
|
31
30
|
spec/bumps_spec.rb
|
@@ -33,4 +32,4 @@ spec/spec.opts
|
|
33
32
|
spec/spec_helper.rb
|
34
33
|
tasks/rspec.rake
|
35
34
|
test_features/remote_content/destroy_dr_thaddeus_venture.feature
|
36
|
-
test_features/requires/env.rb
|
35
|
+
test_features/requires/support/env.rb
|
data/README.rdoc
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
= Bumps
|
2
2
|
|
3
3
|
* http://github.com/brentsnook/bumps
|
4
|
+
* http://groups.google.com/group/bumps-for-cucumber
|
5
|
+
* http://fuglylogic.com/2009/07/20/bumps-remote-features-for-cucumber/
|
4
6
|
|
5
|
-
Bumps
|
7
|
+
Bumps extends {Cucumber}[http://cukes.info] by allowing you to pull feature content and push run results to and from a remote server. This means that your feature files no longer need to live with your steps and other code. This also means that you can publish the results of a Cucumber run to another system.
|
6
8
|
|
7
9
|
See the {wiki}[http://wiki.github.com/brentsnook/bumps] for more details.
|
8
10
|
|
@@ -22,7 +24,7 @@ Grab the code from github:
|
|
22
24
|
|
23
25
|
First, start up a server that meets the {push/pull contract}[http://wiki.github.com/brentsnook/bumps/push-pull-contract].
|
24
26
|
|
25
|
-
Secondly, bung this inside of your
|
27
|
+
Secondly, bung this inside of your <b>support/env.rb</b> (or equivalent, just make sure it is under a directory named <b>support</b> under the feature directory):
|
26
28
|
|
27
29
|
require 'bumps'
|
28
30
|
Bumps.configure { use_server 'http://mycompliantserver.com' }
|
data/Rakefile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
%w[rubygems rake rake/clean fileutils newgem rubigen].each { |f| require f }
|
2
|
-
require File.dirname(__FILE__) + '/lib/
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/lib/bumps_core')
|
3
3
|
|
4
4
|
# Generate all the Rake tasks
|
5
5
|
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
@@ -9,7 +9,7 @@ $hoe = Hoe.new('bumps', Bumps::VERSION) do |p|
|
|
9
9
|
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
10
10
|
p.rubyforge_name = p.name
|
11
11
|
p.extra_deps = [
|
12
|
-
['cucumber', ">=
|
12
|
+
['cucumber', ">= 0.3.99"],
|
13
13
|
['nokogiri','>= 1.1.1'],
|
14
14
|
]
|
15
15
|
p.extra_dev_deps = [
|
@@ -26,4 +26,5 @@ end
|
|
26
26
|
require 'newgem/tasks' # load /tasks/*.rake
|
27
27
|
Dir['tasks/**/*.rake'].each { |t| load t }
|
28
28
|
|
29
|
+
Rake::Task[:default].clear_prerequisites # clear out test-unit
|
29
30
|
task :default => [:spec, :features]
|
data/TODO
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
- tag release
|
2
|
-
- release gem on rubyforge
|
3
1
|
|
4
|
-
|
2
|
+
--- 0.3.96 fix
|
5
3
|
|
4
|
+
- test with different ruby versions
|
6
5
|
|
7
|
-
-
|
6
|
+
- publish gem
|
7
|
+
- add to tools page on Cukes wiki
|
8
|
+
- announce on twitter, Bumps mailing list, Cukes mailing list, Wave list
|
8
9
|
|
9
|
-
-
|
10
|
-
|
11
|
-
- post to cucumber google group (links to blog)
|
10
|
+
- delete fork
|
11
|
+
|
12
12
|
|
13
13
|
--- LATER ---
|
14
14
|
|
@@ -17,4 +17,7 @@
|
|
17
17
|
- can it be more of a synch than a straight clobber??? for speed mainly
|
18
18
|
- extract process control logic out into a new gem
|
19
19
|
- support obtaining details for a single feature ???
|
20
|
-
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
|
data/examples/feature_server
CHANGED
@@ -28,7 +28,7 @@ class PullServlet < HTTPServlet::AbstractServlet
|
|
28
28
|
|
29
29
|
def feature_within file
|
30
30
|
relative_path = file[(@options[0].length)..-1]
|
31
|
-
"<feature name=\"#{relative_path}\"
|
31
|
+
"<feature name=\"#{relative_path}\"><![CDATA[#{IO.read(file)}\n]]></feature>"
|
32
32
|
end
|
33
33
|
|
34
34
|
def features_pattern
|
@@ -1,10 +1,3 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../../lib/bumps"
|
2
|
-
|
3
|
-
gem 'cucumber'
|
4
|
-
require 'cucumber'
|
5
|
-
gem 'rspec'
|
6
|
-
require 'spec'
|
7
|
-
|
8
1
|
module CucumberWorld
|
9
2
|
|
10
3
|
def feature_report_file
|
@@ -32,7 +25,7 @@ module CucumberWorld
|
|
32
25
|
end
|
33
26
|
|
34
27
|
def test_require_file
|
35
|
-
File.expand_path File.join(root, 'test_features', 'requires', 'env.rb')
|
28
|
+
File.expand_path File.join(root, 'test_features', 'requires', 'support', 'env.rb')
|
36
29
|
end
|
37
30
|
|
38
31
|
def test_features_directory
|
@@ -46,7 +39,7 @@ module CucumberWorld
|
|
46
39
|
def each_feature
|
47
40
|
Dir.glob("#{remote_features_directory}/**/*") do |feature_file|
|
48
41
|
content = IO.read(feature_file).strip
|
49
|
-
yield content.first.strip
|
42
|
+
yield content.split("\n").first.strip
|
50
43
|
end
|
51
44
|
end
|
52
45
|
|
data/lib/bumps.rb
CHANGED
@@ -1,25 +1,7 @@
|
|
1
|
-
|
2
|
-
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'bumps_core'))
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
'remote_feature',
|
9
|
-
'feature',
|
10
|
-
'configuration',
|
11
|
-
'results_push_formatter',
|
12
|
-
'hook_tasks',
|
13
|
-
'pre_feature_load_hook'
|
14
|
-
].each {|file| require "bumps/#{file}"}
|
15
|
-
|
16
|
-
module Bumps
|
17
|
-
|
18
|
-
VERSION = '0.0.1'
|
19
|
-
LOWEST_SUPPORTED_CUCUMBER_VERSION = '0.3.11'
|
20
|
-
|
21
|
-
def self.configure &block
|
22
|
-
Configuration.configure(&block)
|
23
|
-
PreFeatureLoadHook.register_on Cucumber::Cli::Main
|
24
|
-
end
|
3
|
+
# Cucumber hook
|
4
|
+
AfterConfiguration do |config|
|
5
|
+
Bumps::CucumberConfig.new(config).process!
|
6
|
+
Bumps::Feature.pull
|
25
7
|
end
|
data/lib/bumps/configuration.rb
CHANGED
@@ -21,7 +21,8 @@ module Bumps
|
|
21
21
|
|
22
22
|
def method_missing method, *args
|
23
23
|
return @config[method] if @config.has_key?(method)
|
24
|
-
|
24
|
+
method_name = method.to_s
|
25
|
+
method_name =~ /=$/ ? @config[method_name.chop.to_sym] = args[0] : super(method, args)
|
25
26
|
end
|
26
27
|
|
27
28
|
def configure &block
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Bumps
|
2
|
+
class CucumberConfig
|
3
|
+
|
4
|
+
def initialize source_config
|
5
|
+
@source_config = source_config
|
6
|
+
end
|
7
|
+
|
8
|
+
def process!
|
9
|
+
validate
|
10
|
+
update_bumps_config
|
11
|
+
register_formatter
|
12
|
+
end
|
13
|
+
|
14
|
+
def validate
|
15
|
+
error_message = 'More than one feature directory/file was specified. ' +
|
16
|
+
'Please only specify a single feature directory when using bumps'
|
17
|
+
raise error_message if @source_config.feature_dirs.size > 1
|
18
|
+
end
|
19
|
+
|
20
|
+
def update_bumps_config
|
21
|
+
Bumps::Configuration.feature_directory = @source_config.feature_dirs.first
|
22
|
+
Bumps::Configuration.output_stream = @source_config.out_stream
|
23
|
+
end
|
24
|
+
|
25
|
+
def register_formatter
|
26
|
+
@source_config.options[:formats] << ['Bumps::ResultsPushFormatter', Bumps::Configuration.output_stream]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/bumps/feature.rb
CHANGED
@@ -35,7 +35,7 @@ module Bumps
|
|
35
35
|
def absolute_path_under directory
|
36
36
|
expanded_directory = File.expand_path directory
|
37
37
|
file_path = File.expand_path(File.join(directory, name))
|
38
|
-
unless file_path
|
38
|
+
unless file_path =~ /^#{expanded_directory}/
|
39
39
|
raise "Could not write feature to path #{file_path}, path is not below #{expanded_directory}"
|
40
40
|
end
|
41
41
|
file_path
|
data/lib/bumps/remote_feature.rb
CHANGED
@@ -5,7 +5,7 @@ require 'open-uri'
|
|
5
5
|
module Bumps
|
6
6
|
|
7
7
|
class RemoteFeature
|
8
|
-
|
8
|
+
|
9
9
|
def self.fetch location
|
10
10
|
parse(open(location){|f| f.read})
|
11
11
|
end
|
@@ -18,6 +18,7 @@ module Bumps
|
|
18
18
|
feature.name = feature_element.attribute('name').to_s
|
19
19
|
feature
|
20
20
|
end
|
21
|
-
end
|
21
|
+
end
|
22
|
+
|
22
23
|
end
|
23
24
|
end
|
data/lib/bumps_core.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'cucumber'
|
6
|
+
|
7
|
+
[
|
8
|
+
'remote_feature',
|
9
|
+
'feature',
|
10
|
+
'configuration',
|
11
|
+
'results_push_formatter',
|
12
|
+
'cucumber_config'
|
13
|
+
].each {|file| require "bumps/#{file}"}
|
14
|
+
|
15
|
+
module Bumps
|
16
|
+
|
17
|
+
VERSION = '0.0.2'
|
18
|
+
|
19
|
+
def self.configure &block
|
20
|
+
Configuration.configure(&block)
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper.rb'
|
2
|
+
|
3
|
+
describe Bumps::CucumberConfig, 'processing' do
|
4
|
+
before do
|
5
|
+
@source_config = mock('source Cucumber config')
|
6
|
+
@config = Bumps::CucumberConfig.new @source_config
|
7
|
+
end
|
8
|
+
|
9
|
+
describe 'processing' do
|
10
|
+
|
11
|
+
it 'should validate cucumber configuration, update Bumps config then register formatter' do
|
12
|
+
@config.should_receive(:validate).ordered
|
13
|
+
@config.should_receive(:update_bumps_config).ordered
|
14
|
+
@config.should_receive(:register_formatter).ordered
|
15
|
+
|
16
|
+
@config.process!
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'validation' do
|
22
|
+
|
23
|
+
it 'should succeed if a single directory is specified' do
|
24
|
+
@source_config.stub!(:feature_dirs).and_return ['one']
|
25
|
+
|
26
|
+
lambda{ @config.validate }.should_not raise_error
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should fail if there is more than one feature directory specified' do
|
30
|
+
@source_config.stub!(:feature_dirs).and_return ['one', 'two']
|
31
|
+
|
32
|
+
lambda{ @config.validate }.should raise_error('More than one feature directory/file was specified. Please only specify a single feature directory when using bumps')
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
describe 'updating Bumps configuration' do
|
38
|
+
|
39
|
+
it 'should use fields from source Cucumber config' do
|
40
|
+
@source_config.stub!(:feature_dirs).and_return ['dir']
|
41
|
+
@source_config.stub!(:out_stream).and_return 'out stream'
|
42
|
+
|
43
|
+
Bumps::Configuration.should_receive(:output_stream=).with 'out stream'
|
44
|
+
Bumps::Configuration.should_receive(:feature_directory=).with 'dir'
|
45
|
+
|
46
|
+
@config.update_bumps_config
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
describe 'registering formatter' do
|
52
|
+
|
53
|
+
before do
|
54
|
+
# law of demeter seems like an even better idea after mocking a chain of three objects
|
55
|
+
@formats = mock 'formats'
|
56
|
+
options = mock 'options'
|
57
|
+
options.stub!(:[]).with(:formats).and_return @formats
|
58
|
+
@source_config.stub!(:options).and_return options
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should add the class name of the push formatter to the cucumber configuration' do
|
62
|
+
@formats.should_receive(:<<).with ['Bumps::ResultsPushFormatter', anything]
|
63
|
+
|
64
|
+
@config.register_formatter
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should use the configured output stream for output' do
|
68
|
+
output_stream = mock 'output stream'
|
69
|
+
Bumps::Configuration.stub!(:output_stream).and_return output_stream
|
70
|
+
|
71
|
+
@formats.should_receive(:<<).with [anything, output_stream]
|
72
|
+
|
73
|
+
@config.register_formatter
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
data/spec/bumps/feature_spec.rb
CHANGED
@@ -14,7 +14,7 @@ describe Bumps::Feature do
|
|
14
14
|
Bumps::Configuration.stub!(:feature_directory).and_return 'feature_directory'
|
15
15
|
Bumps::Configuration.stub!(:pull_url).and_return 'location'
|
16
16
|
|
17
|
-
features = 3.
|
17
|
+
features = (1..3).collect do |index|
|
18
18
|
feature = mock "feature #{index}"
|
19
19
|
feature.should_receive(:write_to).with 'feature_directory'
|
20
20
|
feature
|
@@ -48,7 +48,7 @@ describe Bumps::Feature do
|
|
48
48
|
end
|
49
49
|
|
50
50
|
it 'should display the total number of features retrieved and location they were written to' do
|
51
|
-
features = 3.
|
51
|
+
features = (1..3).collect{|index| mock("feature #{index}").as_null_object}
|
52
52
|
Bumps::RemoteFeature.stub!(:fetch).and_return features
|
53
53
|
Bumps::Configuration.stub!(:feature_directory).and_return 'feature_directory'
|
54
54
|
Bumps::Configuration.stub! :pull_url
|
@@ -82,7 +82,7 @@ describe Bumps::Feature do
|
|
82
82
|
subject.stub!(:name).and_return '../../etc/bashrc'
|
83
83
|
File.stub! :open # just in case
|
84
84
|
|
85
|
-
lambda {subject.absolute_path_under '/stuff/features'}.should raise_error
|
85
|
+
lambda {subject.absolute_path_under '/stuff/features'}.should raise_error('Could not write feature to path /etc/bashrc, path is not below /stuff/features')
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
@@ -23,10 +23,10 @@ describe Bumps::RemoteFeature do
|
|
23
23
|
|
24
24
|
describe 'when parsing' do
|
25
25
|
it 'should extract all features from XML' do
|
26
|
-
features =
|
26
|
+
features = (0..1).collect do |idx|
|
27
27
|
feature = Bumps::Feature.new
|
28
|
-
feature.name = "feature #{
|
29
|
-
feature.content = "I am the content for feature #{
|
28
|
+
feature.name = "feature #{idx}"
|
29
|
+
feature.content = "I am the content for feature #{idx}"
|
30
30
|
feature
|
31
31
|
end
|
32
32
|
|
@@ -65,6 +65,19 @@ XML
|
|
65
65
|
XML
|
66
66
|
subject.parse(xml).should eql([])
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
|
+
it 'should preserve CDATA in feature content' do
|
70
|
+
xml = <<-XML
|
71
|
+
<?xml version="1.0"?>
|
72
|
+
<features>
|
73
|
+
<feature name="feature 0">
|
74
|
+
<![CDATA[content contains <b>CDATA</b> & it should be preserved]]>
|
75
|
+
</feature>
|
76
|
+
</features>
|
77
|
+
XML
|
78
|
+
|
79
|
+
subject.parse(xml).first.content.should match(%r{content contains <b>CDATA</b> & it should be preserved})
|
80
|
+
end
|
81
|
+
|
69
82
|
end
|
70
83
|
end
|
data/spec/bumps_spec.rb
CHANGED
@@ -1,20 +1,34 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
2
|
|
3
|
-
|
3
|
+
# required for test of Cucumber hook
|
4
|
+
def AfterConfiguration &block
|
5
|
+
block.call 'source config'
|
6
|
+
end
|
4
7
|
|
5
|
-
|
6
|
-
Bumps::PreFeatureLoadHook.stub! :register_on
|
8
|
+
describe Bumps do
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
describe 'execution of Cucumber AfterConfiguration hook' do
|
11
|
+
|
12
|
+
it 'should process Cucumber config then perform a feature pull' do
|
13
|
+
Bumps::CucumberConfig.stub!(:new).with('source config').and_return(cukes_config = mock('Cukes config'))
|
14
|
+
cukes_config.should_receive(:process!).ordered
|
15
|
+
Bumps::Feature.should_receive(:pull).ordered
|
16
|
+
|
17
|
+
load File.expand_path(File.dirname(__FILE__) + '/../lib/bumps.rb')
|
18
|
+
end
|
19
|
+
|
12
20
|
end
|
21
|
+
|
22
|
+
describe 'configuration' do
|
23
|
+
|
24
|
+
it 'should configure the new configuration using the given directives' do
|
13
25
|
|
14
|
-
|
15
|
-
|
26
|
+
# how can we specify that it should be passed a reference to a block?
|
27
|
+
Bumps::Configuration.should_receive(:configure)
|
16
28
|
|
17
|
-
|
29
|
+
Bumps.configure {}
|
30
|
+
end
|
31
|
+
|
18
32
|
end
|
19
33
|
|
20
34
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bumps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brent Snook
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-09-03 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.3.
|
23
|
+
version: 0.3.99
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: nokogiri
|
@@ -84,24 +84,23 @@ files:
|
|
84
84
|
- features/push_feature_results.feature
|
85
85
|
- features/steps/command_output.rb
|
86
86
|
- features/steps/cucumber_run.rb
|
87
|
-
- features/steps/env.rb
|
88
87
|
- features/steps/feature_report.rb
|
89
88
|
- features/steps/feature_server.rb
|
90
89
|
- features/steps/helpers/scenario_process.rb
|
90
|
+
- features/support/env.rb
|
91
91
|
- lib/bumps.rb
|
92
92
|
- lib/bumps/configuration.rb
|
93
|
+
- lib/bumps/cucumber_config.rb
|
93
94
|
- lib/bumps/feature.rb
|
94
|
-
- lib/bumps/hook_tasks.rb
|
95
|
-
- lib/bumps/pre_feature_load_hook.rb
|
96
95
|
- lib/bumps/remote_feature.rb
|
97
96
|
- lib/bumps/results_push_formatter.rb
|
97
|
+
- lib/bumps_core.rb
|
98
98
|
- script/console
|
99
99
|
- script/destroy
|
100
100
|
- script/generate
|
101
101
|
- spec/bumps/configuration_spec.rb
|
102
|
+
- spec/bumps/cucumber_config_spec.rb
|
102
103
|
- spec/bumps/feature_spec.rb
|
103
|
-
- spec/bumps/hook_tasks_spec.rb
|
104
|
-
- spec/bumps/pre_feature_load_hook_spec.rb
|
105
104
|
- spec/bumps/remote_feature_spec.rb
|
106
105
|
- spec/bumps/results_push_formatter_spec.rb
|
107
106
|
- spec/bumps_spec.rb
|
@@ -109,9 +108,11 @@ files:
|
|
109
108
|
- spec/spec_helper.rb
|
110
109
|
- tasks/rspec.rake
|
111
110
|
- test_features/remote_content/destroy_dr_thaddeus_venture.feature
|
112
|
-
- test_features/requires/env.rb
|
111
|
+
- test_features/requires/support/env.rb
|
113
112
|
has_rdoc: true
|
114
113
|
homepage: http://github.com/brentsnook/bumps
|
114
|
+
licenses: []
|
115
|
+
|
115
116
|
post_install_message:
|
116
117
|
rdoc_options:
|
117
118
|
- --main
|
@@ -133,9 +134,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
134
|
requirements: []
|
134
135
|
|
135
136
|
rubyforge_project: bumps
|
136
|
-
rubygems_version: 1.3.
|
137
|
+
rubygems_version: 1.3.5
|
137
138
|
signing_key:
|
138
|
-
specification_version:
|
139
|
+
specification_version: 3
|
139
140
|
summary: Remote feature management for Cucumber.
|
140
141
|
test_files: []
|
141
142
|
|
data/lib/bumps/hook_tasks.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
module Bumps::HookTasks
|
2
|
-
|
3
|
-
SetFeatureDirectoryTask = lambda do
|
4
|
-
# nasty? hell yeah. got any better ideas? need access to that protected method...
|
5
|
-
feature_directories = configuration.send :feature_dirs
|
6
|
-
|
7
|
-
error_message = 'More than one feature directory/file was specified. ' +
|
8
|
-
'Please only specify a single feature directory when using bumps'
|
9
|
-
raise error_message if feature_directories.size > 1
|
10
|
-
Bumps::Configuration.feature_directory = feature_directories.first
|
11
|
-
end
|
12
|
-
|
13
|
-
PullFeaturesTask = lambda do
|
14
|
-
Bumps::Feature.pull
|
15
|
-
end
|
16
|
-
|
17
|
-
RegisterPushFormatterTask = lambda do
|
18
|
-
configuration.options[:formats]['Bumps::ResultsPushFormatter'] = Bumps::Configuration.output_stream
|
19
|
-
end
|
20
|
-
|
21
|
-
SetOutputStreamTask = lambda do
|
22
|
-
Bumps::Configuration.output_stream = @out_stream
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Bumps
|
2
|
-
class PreFeatureLoadHook
|
3
|
-
def self.register_on clazz
|
4
|
-
clazz.class_eval do
|
5
|
-
|
6
|
-
alias_method :original_load_plain_text_features, :load_plain_text_features
|
7
|
-
|
8
|
-
def bumps_load_plain_text_features
|
9
|
-
Bumps::PreFeatureLoadHook.tasks.each { |task| instance_eval(&task) }
|
10
|
-
original_load_plain_text_features
|
11
|
-
end
|
12
|
-
|
13
|
-
alias_method :load_plain_text_features, :bumps_load_plain_text_features
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.tasks
|
19
|
-
[
|
20
|
-
HookTasks::SetFeatureDirectoryTask,
|
21
|
-
Bumps::HookTasks::SetOutputStreamTask,
|
22
|
-
HookTasks::PullFeaturesTask,
|
23
|
-
HookTasks::RegisterPushFormatterTask
|
24
|
-
]
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,98 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper.rb'
|
2
|
-
|
3
|
-
class Target
|
4
|
-
|
5
|
-
def out_stream= out
|
6
|
-
@out_stream = out
|
7
|
-
end
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
describe Bumps::HookTasks::SetFeatureDirectoryTask do
|
12
|
-
|
13
|
-
before do
|
14
|
-
@target = Target.new
|
15
|
-
end
|
16
|
-
|
17
|
-
subject {Bumps::HookTasks::SetFeatureDirectoryTask}
|
18
|
-
|
19
|
-
it 'should set directory in the bumps configuration' do
|
20
|
-
cukes_config = mock 'cukes_config'
|
21
|
-
@target.stub!(:configuration).and_return cukes_config
|
22
|
-
cukes_config.stub!(:feature_dirs).and_return ['feature_directory']
|
23
|
-
|
24
|
-
Bumps::Configuration.should_receive(:feature_directory=).with 'feature_directory'
|
25
|
-
|
26
|
-
@target.instance_eval &subject
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should fail if there is more than one feature directory specified' do
|
30
|
-
cukes_config = mock 'cukes_config'
|
31
|
-
@target.stub!(:configuration).and_return cukes_config
|
32
|
-
cukes_config.stub!(:feature_dirs).and_return ['one', 'two']
|
33
|
-
|
34
|
-
lambda{ @target.instance_eval &subject }.should raise_error('More than one feature directory/file was specified. Please only specify a single feature directory when using bumps')
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe Bumps::HookTasks::PullFeaturesTask do
|
39
|
-
|
40
|
-
before do
|
41
|
-
@target = Target.new
|
42
|
-
end
|
43
|
-
|
44
|
-
subject {Bumps::HookTasks::PullFeaturesTask}
|
45
|
-
|
46
|
-
it 'should pull features' do
|
47
|
-
Bumps::Feature.should_receive :pull
|
48
|
-
|
49
|
-
@target.instance_eval &subject
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe Bumps::HookTasks::RegisterPushFormatterTask do
|
54
|
-
|
55
|
-
before do
|
56
|
-
@output_stream = mock 'output stream'
|
57
|
-
@target = Target.new
|
58
|
-
|
59
|
-
# law of demeter seems like an even better idea after mocking a chain of three objects
|
60
|
-
@formats = mock 'formats'
|
61
|
-
options = mock 'options'
|
62
|
-
options.stub!(:[]).with(:formats).and_return @formats
|
63
|
-
@target.stub!(:configuration).and_return mock('cukes_config', :options => options)
|
64
|
-
end
|
65
|
-
|
66
|
-
subject {Bumps::HookTasks::RegisterPushFormatterTask}
|
67
|
-
|
68
|
-
it 'should add the class name of the push formatter to the cucumber configuration' do
|
69
|
-
@formats.should_receive(:[]=).with('Bumps::ResultsPushFormatter', anything)
|
70
|
-
|
71
|
-
@target.instance_eval &subject
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'should use the configured output stream for output' do
|
75
|
-
Bumps::Configuration.stub!(:output_stream).and_return @output_stream
|
76
|
-
|
77
|
-
@formats.should_receive(:[]=).with(anything, @output_stream)
|
78
|
-
|
79
|
-
@target.instance_eval &subject
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
describe Bumps::HookTasks::SetOutputStreamTask do
|
84
|
-
|
85
|
-
before do
|
86
|
-
@out_stream = mock 'out stream'
|
87
|
-
@target = Target.new
|
88
|
-
@target.out_stream = @out_stream
|
89
|
-
end
|
90
|
-
|
91
|
-
subject {Bumps::HookTasks::SetOutputStreamTask}
|
92
|
-
|
93
|
-
it 'should use target class output stream' do
|
94
|
-
Bumps::Configuration.should_receive(:output_stream=).with @out_stream
|
95
|
-
|
96
|
-
@target.instance_eval &subject
|
97
|
-
end
|
98
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper.rb'
|
2
|
-
|
3
|
-
describe Bumps::PreFeatureLoadHook, 'when registered on a class' do
|
4
|
-
|
5
|
-
before do
|
6
|
-
class Clazz
|
7
|
-
def load_plain_text_features;end
|
8
|
-
def configuration;end
|
9
|
-
end
|
10
|
-
|
11
|
-
Bumps::PreFeatureLoadHook.register_on Clazz
|
12
|
-
|
13
|
-
@instance = Clazz.new
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'should run all tasks within the context of that class' do
|
17
|
-
FirstTask = lambda {first_method}
|
18
|
-
SecondTask = lambda {second_method}
|
19
|
-
Bumps::PreFeatureLoadHook.stub!(:tasks).and_return [FirstTask, SecondTask]
|
20
|
-
|
21
|
-
@instance.should_receive :first_method
|
22
|
-
@instance.should_receive :second_method
|
23
|
-
|
24
|
-
@instance.load_plain_text_features
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'should call the original method after running tasks' do
|
28
|
-
Bumps::PreFeatureLoadHook.stub!(:tasks).and_return []
|
29
|
-
|
30
|
-
@instance.should_receive :original_load_plain_text_features
|
31
|
-
|
32
|
-
@instance.load_plain_text_features
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'should complete tasks in correct order' do
|
36
|
-
# how can this be better expressed with an example?
|
37
|
-
Bumps::PreFeatureLoadHook.tasks.should == [
|
38
|
-
Bumps::HookTasks::SetFeatureDirectoryTask,
|
39
|
-
Bumps::HookTasks::SetOutputStreamTask,
|
40
|
-
Bumps::HookTasks::PullFeaturesTask,
|
41
|
-
Bumps::HookTasks::RegisterPushFormatterTask
|
42
|
-
]
|
43
|
-
end
|
44
|
-
end
|