cucumber_factory 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
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