cucumber_factory 1.5.0 → 1.6.0

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/README.rdoc CHANGED
@@ -1,62 +1,72 @@
1
- = Cucumber Factory - create ActiveRecord objects without step definitions
2
-
3
- Cucumber Factory allows you to create ActiveRecord objects directly from your {Cucumber}[http://cukes.info/] features. No step definitions required.
4
-
5
- == Installation
6
-
7
- Install the gem:
8
- sudo gem sources -a http://gemcutter.org
9
- sudo gem install cucumber_factory
10
-
11
- Add the following to your <tt>Initializer.run</tt> block in your <tt>environment.rb</tt>:
12
- config.gem 'cucumber_factory', :source => 'http://gemcutter.org'
13
-
14
- Create a step definition stub in <tt>features/step_definitions/factory_steps.rb</tt>, which just says
15
- Cucumber::Factory.add_steps(self)
16
-
17
- == Example
18
-
19
- The following will call {Movie.make}[http://github.com/notahat/machinist], {Factory.create(:movie)}[http://github.com/thoughtbot/factory_girl], Movie.create! or Movie.new, depending on what's available:
20
- Given there is a movie
21
-
22
- To create a new record with attributes set, you can say:
23
- Given there is a movie with the title "Sunshine" and the year "2007"
24
-
25
- The following will also store the created record in <tt>@sunshine</tt>:
26
- Given "Sunshine" is a movie with the title "Sunshine" and the year "2007"
27
-
28
- To set associations you can refer to other records by name:
29
- Given "Before Sunrise" is a movie
30
- And "Before Sunset" is a movie with the prequel "Before Sunrise"
31
-
32
- You can also refer to the last created object of a kind by saying "above":
33
- Given there is a movie with the title "Before Sunrise"
34
- And "Before Sunset" is a movie with the prequel above
35
-
36
- == Factory support
37
-
38
- {Machinist blueprints}[http://github.com/notahat/machinist] and {factory_girl factories}[http://github.com/thoughtbot/factory_girl] will be used when available.
39
-
40
- You can use named Machinist blueprint such as <tt>Movie.blueprint(:comedy)</tt> like this:
41
-
42
- Given a movie (comedy) with the title "Groundhog Day"
43
-
44
- Inherited factory_girl factories are not supported yet.
45
-
46
- == Overriding factory steps
47
-
48
- If you want to override a factory step with your own version, just do so:
49
-
50
- Given /^there is a movie with good actors$/ do
51
- movie = Movie.make
52
- movie.actors << Actor.make(:name => 'Clive Owen')
53
- movie.actors << Actor.make(:name => 'Denzel Washington')
54
- end
55
-
56
- Custom steps will always be preferred over factory steps. Also Cucumber will not raise a warning about ambiguous steps if the only other matching step is a factory step.
57
-
58
- === Credits
59
-
60
- Henning Koch
61
-
62
- {www.makandra.de}[http://www.makandra.de/]
1
+ = Cucumber Factory - create ActiveRecord objects without step definitions
2
+
3
+ Cucumber Factory allows you to create ActiveRecord objects directly from your {Cucumber}[http://cukes.info/] features. No step definitions required.
4
+
5
+ == Example
6
+
7
+ The following will call {Movie.make}[http://github.com/notahat/machinist], {Factory.create(:movie)}[http://github.com/thoughtbot/factory_girl], Movie.create! or Movie.new, depending on what's available:
8
+ Given there is a movie
9
+
10
+ To create a new record with attributes set, you can say:
11
+ Given there is a movie with the title "Sunshine" and the year "2007"
12
+
13
+ The following will also store the created record in <tt>@sunshine</tt>:
14
+ Given "Sunshine" is a movie with the title "Sunshine" and the year "2007"
15
+
16
+ To set associations you can refer to other records by name:
17
+ Given "Before Sunrise" is a movie
18
+ And "Before Sunset" is a movie with the prequel "Before Sunrise"
19
+
20
+ You can also refer to the last created object of a kind by saying "above":
21
+ Given there is a movie with the title "Before Sunrise"
22
+ And "Before Sunset" is a movie with the prequel above
23
+
24
+ == Factory support
25
+
26
+ {Machinist blueprints}[http://github.com/notahat/machinist] and {factory_girl factories}[http://github.com/thoughtbot/factory_girl] will be used when available.
27
+
28
+ You can use named Machinist blueprint such as <tt>Movie.blueprint(:comedy)</tt> like this:
29
+
30
+ Given a movie (comedy) with the title "Groundhog Day"
31
+
32
+ Inherited factory_girl factories are not supported yet.
33
+
34
+ == Overriding factory steps
35
+
36
+ If you want to override a factory step with your own version, just do so:
37
+
38
+ Given /^there is a movie with good actors$/ do
39
+ movie = Movie.make
40
+ movie.actors << Actor.make(:name => 'Clive Owen')
41
+ movie.actors << Actor.make(:name => 'Denzel Washington')
42
+ end
43
+
44
+ Custom steps will always be preferred over factory steps. Also Cucumber will not raise a warning about ambiguous steps if the only other matching step is a factory step.
45
+
46
+ == Installation and setup
47
+
48
+ Cucumber Factory is a gem, which you can install with
49
+ sudo gem install cucumber_factory
50
+
51
+ In Rails 2, add the following to your <tt>environment.rb</tt>:
52
+ config.gem 'cucumber_factory'
53
+
54
+ In Rails 3, add the following to your <tt>Gemfile</tt>:
55
+ gem 'cucumber_factory'
56
+
57
+ Finally, create a file <tt>features/step_definitions/factory_steps.rb</tt>, which just says
58
+ Cucumber::Factory.add_steps(self)
59
+
60
+
61
+ == Rails 3 compatibility
62
+
63
+ We cannot guarantee Rails 3 compatibility at this point, but we will upgrade the gem when Rails 3 is released.
64
+
65
+
66
+ === Credits
67
+
68
+ Henning Koch
69
+
70
+ {makandra.com}[http://makandra.com/]
71
+
72
+ {gem-session.com}[http://gem-session.com/]
data/Rakefile CHANGED
@@ -12,10 +12,10 @@ Spec::Rake::SpecTask.new() do |t|
12
12
  t.spec_files = FileList['spec/**/*_spec.rb']
13
13
  end
14
14
 
15
- desc 'Generate documentation for the aegis plugin.'
15
+ desc 'Generate documentation for the cucumber_factory gem.'
16
16
  Rake::RDocTask.new(:rdoc) do |rdoc|
17
17
  rdoc.rdoc_dir = 'rdoc'
18
- rdoc.title = 'Aegis'
18
+ rdoc.title = 'cucumber_factory'
19
19
  rdoc.options << '--line-numbers' << '--inline-source'
20
20
  rdoc.rdoc_files.include('README')
21
21
  rdoc.rdoc_files.include('lib/**/*.rb')
@@ -32,6 +32,6 @@ begin
32
32
  gemspec.authors = ["Henning Koch"]
33
33
  end
34
34
  rescue LoadError
35
- puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
35
+ puts "Jeweler not available. Install it with: sudo gem install jeweler"
36
36
  end
37
37
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.0
1
+ 1.6.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cucumber_factory}
8
- s.version = "1.5.0"
8
+ s.version = "1.6.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Henning Koch"]
12
- s.date = %q{2010-06-20}
12
+ s.date = %q{2010-08-17}
13
13
  s.description = %q{Cucumber Factory allows you to create ActiveRecord models from your Cucumber features without writing step definitions for each model.}
14
14
  s.email = %q{github@makandra.de}
15
15
  s.extra_rdoc_files = [
@@ -5,10 +5,10 @@ module Cucumber
5
5
  # List of Cucumber step definitions created by #add_steps
6
6
  attr_reader :step_definitions
7
7
 
8
- def add_steps(dsl)
8
+ def add_steps(main)
9
9
  @step_definitions = []
10
10
  steps.each do |step|
11
- @step_definitions << (dsl.instance_eval do
11
+ @step_definitions << (main.instance_eval do
12
12
  Given(step[:pattern], &step[:action])
13
13
  end)
14
14
  end
@@ -57,6 +57,8 @@ module Cucumber
57
57
  else
58
58
  value = world.instance_variable_get(variable_name_from_prose(value))
59
59
  end
60
+ else
61
+ value = world.Transform(value)
60
62
  end
61
63
  attributes[attribute] = value
62
64
  end
data/spec/spec_helper.rb CHANGED
@@ -21,8 +21,11 @@ end
21
21
 
22
22
  def prepare_cucumber_example
23
23
  @step_mother = Cucumber::StepMother.new
24
- @language = @step_mother.load_programming_language('rb')
25
- @dsl = Object.new
26
- @dsl.extend(Cucumber::RbSupport::RbDsl)
27
- Cucumber::Factory.add_steps(@dsl)
24
+ language = @step_mother.load_programming_language('rb')
25
+ scenario = stub('scenario', :language => 'en')
26
+ language.send(:begin_scenario, scenario)
27
+ @world = language.current_world
28
+ @main = Object.new
29
+ @main.extend(Cucumber::RbSupport::RbDsl)
30
+ Cucumber::Factory.add_steps(@main)
28
31
  end
@@ -12,13 +12,13 @@ describe Cucumber::StepMother, 'extended with cucumber_factory' do
12
12
  describe 'step_match' do
13
13
 
14
14
  it "should not raise an ambiguous step error and return the user step if the only other matching step is a factory step" do
15
- user_step = @dsl.Given(/^there is a movie with a funny tone/){}
15
+ user_step = @main.Given(/^there is a movie with a funny tone/){}
16
16
  @step_mother.step_match('there is a movie with a funny tone').should == user_step
17
17
  end
18
18
 
19
19
  it "should still raise an ambiguous step error if more than two non-factory steps match" do
20
- @dsl.Given(/^there is a movie with (.*?) tone/){}
21
- @dsl.Given(/^there is a movie with a funny tone/){}
20
+ @main.Given(/^there is a movie with (.*?) tone/){}
21
+ @main.Given(/^there is a movie with a funny tone/){}
22
22
  expect do
23
23
  @step_mother.step_match('there is a movie with a funny tone')
24
24
  end.to raise_error(Cucumber::Ambiguous)
data/spec/steps_spec.rb CHANGED
@@ -71,6 +71,14 @@ describe 'steps provided by cucumber_factory' do
71
71
  @step_mother.invoke('there is a movie with the title "Sunshine" and the year "2007"')
72
72
  end
73
73
 
74
+ it "should apply Cucumber transforms to attribute values" do
75
+ movie = Movie.new
76
+ Movie.stub(:new => movie)
77
+ @world.should_receive(:Transform).with("value").and_return("transformed value")
78
+ movie.should_receive(:"attributes=").with({ :title => "transformed value" }, false)
79
+ @step_mother.invoke('there is a movie with the title "value"')
80
+ end
81
+
74
82
  it "should create records with attributes containing spaces" do
75
83
  movie = Movie.new
76
84
  Movie.stub(:new => movie)
@@ -94,13 +102,13 @@ describe 'steps provided by cucumber_factory' do
94
102
 
95
103
  it "should set instance variables in the world" do
96
104
  @step_mother.invoke('"Sunshine" is a movie with the title "Sunshine" and the year "2007"')
97
- @language.current_world.instance_variable_get(:'@sunshine').title.should == "Sunshine"
105
+ @world.instance_variable_get(:'@sunshine').title.should == "Sunshine"
98
106
  end
99
107
 
100
108
  it "should understand pointers to instance variables" do
101
109
  @step_mother.invoke('"Before Sunrise" is a movie with the title "Before Sunrise"')
102
110
  @step_mother.invoke('"Before Sunset" is a movie with the title "Before Sunset" and the prequel "Before Sunrise"')
103
- @language.current_world.instance_variable_get(:'@before_sunset').prequel.title.should == "Before Sunrise"
111
+ @world.instance_variable_get(:'@before_sunset').prequel.title.should == "Before Sunrise"
104
112
  end
105
113
 
106
114
  it "should allow to point to a previously created record through 'above'" do
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 5
7
+ - 6
8
8
  - 0
9
- version: 1.5.0
9
+ version: 1.6.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Henning Koch
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-06-20 00:00:00 +02:00
17
+ date: 2010-08-17 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies: []
20
20