cucumber_factory 1.15.1 → 2.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dea4a8b653f917a949a4948dc68ca3f30afe967714c1a3296e08e17c18d8640f
4
- data.tar.gz: 0bfcb630869f9a610a8123c2c8160df90dd940c8bbc8d65b1cdc88269d765f05
3
+ metadata.gz: 856fe1922e3b069b305e514911da87b4432acc34c89105b46cbf06d6cdd997be
4
+ data.tar.gz: a0f9631996850758343f66f79d96d88a1cf0216c4df464a8132677d462766525
5
5
  SHA512:
6
- metadata.gz: 56201d23d93dd5325c94b8c36cf79c0aa735613a2f998e3efce3b3c9136c90df423195449899cc5ff549af528fa67e92c07587e2c3cceffb7ce1a8067d971153
7
- data.tar.gz: f251f17f0edc4c7ce9f96184c72b515920ca15a44fd3b38ed5509072b718a00663bd7c871edfd7caef643a626df4f56eaaf84839c879c5f767e3452368b37223
6
+ metadata.gz: 31d7825ded3ed0ed9e9c29a490ecbff0028b710cb4f33bddbf1e3846a744444c9ae53a852b37db72284a57f4ef40515e166f8043dbf4d96db5412205a7f3b3c0
7
+ data.tar.gz: 71ede7f9b7ae86335fb3eb1cd27ff9c72bd9ec9fbd958585fe4293443c7b6608b3cd0c21ea994971946ac69091722eb2a27714492d34a5e792583068c412b666
@@ -9,6 +9,8 @@ gemfile:
9
9
  - Gemfile.cucumber-3.0
10
10
  - Gemfile.cucumber-3.1
11
11
 
12
+ dist: trusty
13
+
12
14
  matrix:
13
15
  exclude:
14
16
  - gemfile: Gemfile.cucumber-3.1
@@ -39,7 +41,3 @@ script: bundle exec rake current_rspec
39
41
  sudo: false
40
42
 
41
43
  cache: bundler
42
-
43
- notifications:
44
- email:
45
- - fail@makandra.de
@@ -15,6 +15,24 @@ This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html
15
15
 
16
16
  -
17
17
 
18
+ ## 2.0.0 - 2020-02-10
19
+
20
+ ### Breaking changes
21
+
22
+ - CucumberFactory now raises an `ArgumentError` if some parts of a matched step were not used. For example, while this step was accepted in recent versions, it will now complain with the message `Unable to parse attributes " and the ".`:
23
+ ```
24
+ Given there is a user with the attribute 'foo' and the
25
+ ```
26
+
27
+
28
+ ### Compatible changes
29
+
30
+ - Single quoted attribute values and model names are now supported. Example:
31
+
32
+ ```
33
+ Given 'jack' is a user with the first name 'Jack'
34
+ ```
35
+
18
36
  ## 1.15.1 - 2019-05-30
19
37
 
20
38
  ### Compatible changes
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cucumber_factory (1.15.0)
4
+ cucumber_factory (2.0.0)
5
5
  activerecord
6
6
  activesupport
7
7
  cucumber
@@ -81,4 +81,4 @@ DEPENDENCIES
81
81
  rspec (~> 3.0)
82
82
 
83
83
  BUNDLED WITH
84
- 1.17.1
84
+ 1.17.3
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cucumber_factory (1.15.0)
4
+ cucumber_factory (2.0.0)
5
5
  activerecord
6
6
  activesupport
7
7
  cucumber
@@ -86,4 +86,4 @@ DEPENDENCIES
86
86
  rspec (~> 3.0)
87
87
 
88
88
  BUNDLED WITH
89
- 1.17.1
89
+ 1.17.3
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cucumber_factory (1.15.0)
4
+ cucumber_factory (2.0.0)
5
5
  activerecord
6
6
  activesupport
7
7
  cucumber
@@ -86,4 +86,4 @@ DEPENDENCIES
86
86
  rspec (~> 3.0)
87
87
 
88
88
  BUNDLED WITH
89
- 1.17.1
89
+ 1.17.3
data/README.md CHANGED
@@ -190,8 +190,13 @@ Development
190
190
 
191
191
  There are tests in `spec`. We only accept PRs with tests. To run tests:
192
192
 
193
- - Install Ruby 2.5.3
194
- - Create a local MySQL database `cucumber_factory_test`
193
+ - Install the Ruby version stated in `.ruby-version`
194
+ - Create a local MySQL/MariaDB database named `cucumber_factory_test`
195
+ ```
196
+ $ mysql -u root -p
197
+ > create database cucumber_factory_test;
198
+ ```
199
+
195
200
  - Copy `spec/support/database.sample.yml` to `spec/support/database.yml` and enter your local credentials for the test databases
196
201
  - Install development dependencies using `bundle install`
197
202
  - Run tests with the default symlinked Gemfile using `bundle exec rspec` or explicit with `BUNDLE_GEMFILE=Gemfile.cucumber-x.x bundle exec rspec spec`
@@ -6,13 +6,13 @@ module CucumberFactory
6
6
  TEXT_ATTRIBUTES_PATTERN = ' (?:with|and) these attributes:'
7
7
 
8
8
  RECORD_PATTERN = 'there is an? (.+?)( \(.+?\))?'
9
- NAMED_RECORD_PATTERN = '"([^\"]*)" is an? (.+?)( \(.+?\))?'
9
+ NAMED_RECORD_PATTERN = '(?:"([^\"]*)"|\'([^\']*)\') is an? (.+?)( \(.+?\))?'
10
10
 
11
11
  NAMED_RECORDS_VARIABLE = :'@named_cucumber_factory_records'
12
12
 
13
13
  VALUE_INTEGER = /\d+/
14
14
  VALUE_DECIMAL = /[\d\.]+/
15
- VALUE_STRING = /"[^"]*"/
15
+ VALUE_STRING = /"[^"]*"|'[^']*'/
16
16
  VALUE_ARRAY = /\[[^\]]*\]/
17
17
  VALUE_LAST_RECORD = /\babove\b/
18
18
 
@@ -30,7 +30,7 @@ module CucumberFactory
30
30
  NAMED_CREATION_STEP_DESCRIPTOR = {
31
31
  :kind => :Given,
32
32
  :pattern => /^#{NAMED_RECORD_PATTERN}#{ATTRIBUTES_PATTERN}?$/,
33
- :block => lambda { |a1, a2, a3, a4, a5| CucumberFactory::Factory.send(:parse_named_creation, self, a1, a2, a3, a4, a5) }
33
+ :block => lambda { |a1, a2, a3, a4, a5, a6| CucumberFactory::Factory.send(:parse_named_creation, self, a1, a2, a3, a4, a5, a6) }
34
34
  }
35
35
 
36
36
  CREATION_STEP_DESCRIPTOR = {
@@ -42,7 +42,7 @@ module CucumberFactory
42
42
  NAMED_CREATION_STEP_DESCRIPTOR_WITH_TEXT_ATTRIBUTES = {
43
43
  :kind => :Given,
44
44
  :pattern => /^"#{NAMED_RECORD_PATTERN}#{ATTRIBUTES_PATTERN}#{TEXT_ATTRIBUTES_PATTERN}?$/,
45
- :block => lambda { |a1, a2, a3, a4, a5, a6| CucumberFactory::Factory.send(:parse_named_creation, self, a1, a2, a3, a4, a5, a6) },
45
+ :block => lambda { |a1, a2, a3, a4, a5, a6, a7| CucumberFactory::Factory.send(:parse_named_creation, self, a1, a2, a3, a4, a5, a6, a7) },
46
46
  :priority => true
47
47
  }
48
48
 
@@ -93,8 +93,9 @@ module CucumberFactory
93
93
  named_records(world)[name] = record
94
94
  end
95
95
 
96
- def parse_named_creation(world, name, raw_model, raw_variant, raw_attributes, raw_boolean_attributes, raw_multiline_attributes = nil)
96
+ def parse_named_creation(world, double_quote_name, single_quote_name, raw_model, raw_variant, raw_attributes, raw_boolean_attributes, raw_multiline_attributes = nil)
97
97
  record = parse_creation(world, raw_model, raw_variant, raw_attributes, raw_boolean_attributes, raw_multiline_attributes)
98
+ name = [double_quote_name, single_quote_name].compact.first
98
99
  set_named_record(world, name, record)
99
100
  end
100
101
 
@@ -103,11 +104,16 @@ module CucumberFactory
103
104
  model_class = build_strategy.model_class
104
105
  attributes = {}
105
106
  if raw_attributes.try(:strip).present?
106
- raw_attributes.scan(/(?:the |and |with |but |,| )+(.*?) (#{VALUE_SCALAR}|#{VALUE_ARRAY}|#{VALUE_LAST_RECORD})/).each do |fragment|
107
+ raw_attribute_fragment_regex = /(?:the |and |with |but |,| )+(.*?) (#{VALUE_SCALAR}|#{VALUE_ARRAY}|#{VALUE_LAST_RECORD})/
108
+ raw_attributes.scan(raw_attribute_fragment_regex).each do |fragment|
107
109
  attribute = attribute_name_from_prose(fragment[0])
108
110
  value = fragment[1]
109
111
  attributes[attribute] = attribute_value(world, model_class, attribute, value)
110
112
  end
113
+ unused_raw_attributes = raw_attributes.gsub(raw_attribute_fragment_regex, '')
114
+ if unused_raw_attributes.present?
115
+ raise ArgumentError, "Unable to parse attributes #{unused_raw_attributes.inspect}."
116
+ end
111
117
  end
112
118
  if raw_boolean_attributes.try(:strip).present?
113
119
  raw_boolean_attributes.scan(/(?:which|who|that|is| )*(not )?(.+?)(?: and | but |,|$)+/).each do |fragment|
@@ -1,3 +1,3 @@
1
1
  module CucumberFactory
2
- VERSION = '1.15.1'
2
+ VERSION = '2.0.0'
3
3
  end
@@ -434,4 +434,35 @@ tags: ["foo", "bar"]
434
434
  obj.attributes[:tags].should == ['foo', 'bar']
435
435
  end
436
436
 
437
+ it "should allow single quote for attribute values" do
438
+ MachinistModel.should_receive(:make).with({ :attribute => "foo"})
439
+ invoke_cucumber_step("there is a machinist model with the attribute 'foo'")
440
+ end
441
+
442
+ it "should allow mixed single and double quotes for different attribute values" do
443
+ MachinistModel.should_receive(:make).with({ :attribute => "foo", :other_attribute => "bar" })
444
+ invoke_cucumber_step("there is a machinist model with the attribute 'foo' and the other attribute \"bar\"")
445
+ end
446
+
447
+ it "should allow mixed single quotes for model names" do
448
+ invoke_cucumber_step("'Some Prequel' is a movie with the title \"Before Sunrise\"")
449
+ invoke_cucumber_step('there is a movie with the title "Limitless"')
450
+ invoke_cucumber_step('there is a movie with the title \'Before Sunset\' and the prequel "Some Prequel"')
451
+ movie = Movie.find_by_title!('Before Sunset')
452
+ prequel = Movie.find_by_title!('Before Sunrise')
453
+ movie.prequel.should == prequel
454
+ end
455
+
456
+ it 'should not raise an error for a blank instance name' do
457
+ MachinistModel.should_receive(:make).with({ :attribute => 'foo' })
458
+ invoke_cucumber_step("'' is a machinist model with the attribute 'foo'")
459
+ end
460
+
461
+ it 'should warn if there are unused fragments' do
462
+ MachinistModel.should_not_receive(:make)
463
+ lambda { invoke_cucumber_step("there is a machinist model with the attribute NOQUOTES") }.should raise_error(ArgumentError, 'Unable to parse attributes " with the attribute NOQUOTES".')
464
+ lambda { invoke_cucumber_step("there is a machinist model with the attribute 'foo' and the ") }.should raise_error(ArgumentError, 'Unable to parse attributes " and the ".')
465
+ lambda { invoke_cucumber_step("there is a machinist model with the attribute 'foo'. the other_attribute 'bar' and the third attribute 'baz'") }.should raise_error(ArgumentError, 'Unable to parse attributes ".".')
466
+ end
467
+
437
468
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber_factory
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.15.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henning Koch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-30 00:00:00.000000000 Z
11
+ date: 2020-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber
@@ -134,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
134
  - !ruby/object:Gem::Version
135
135
  version: '0'
136
136
  requirements: []
137
- rubygems_version: 3.0.3
137
+ rubygems_version: 3.1.2
138
138
  signing_key:
139
139
  specification_version: 4
140
140
  summary: Create records from Cucumber features without writing step definitions.