active_cucumber 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 31fc83494b273be00aaa3b52b7d3376a31b86e55
4
+ data.tar.gz: d1ca0c141ab1195f7e2cd8637dc993e2b57cb08b
5
+ SHA512:
6
+ metadata.gz: c3d951e2e1ae6b2f2a401589d9c601bb0de1e470c0ddbbe3f4c516f1caa1d9a398500eac0e29b0dee8c4e0fe17db4b1c1df6c9887cbc5f017a11c6bef48a8d79
7
+ data.tar.gz: 59146c0d3fc96562c18e45a16efbf7bfec5a4e4eb07cbf6fbf9e15bbc0b540f8ec8afd1f8504001cceea96f7e613ed8b633a8c1a53a9e3d7e6476c22483a5d41
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ /.bundle/
data/.rubocop.yml ADDED
@@ -0,0 +1,35 @@
1
+ AllCops:
2
+
3
+ DisplayCopNames: true
4
+
5
+ DisplayStyleGuide: true
6
+
7
+ Include:
8
+ - '**/Rakefile'
9
+
10
+
11
+ Lint/Eval:
12
+ Enabled: false
13
+
14
+
15
+ Metrics/LineLength:
16
+ Max: 100
17
+
18
+
19
+ Style/AccessModifierIndentation:
20
+ EnforcedStyle: outdent
21
+
22
+ Style/Documentation:
23
+ Enabled: false
24
+
25
+ Style/EmptyLines:
26
+ Enabled: false
27
+
28
+ Style/EmptyLinesAroundClassBody:
29
+ Enabled: false
30
+
31
+ Style/EmptyLinesAroundModuleBody:
32
+ EnforcedStyle: empty_lines
33
+
34
+ Style/MethodDefParentheses:
35
+ EnforcedStyle: require_no_parentheses
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mortadella.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,89 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ active_cucumber (0.0.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ activemodel (4.2.4)
10
+ activesupport (= 4.2.4)
11
+ builder (~> 3.1)
12
+ activerecord (4.2.4)
13
+ activemodel (= 4.2.4)
14
+ activesupport (= 4.2.4)
15
+ arel (~> 6.0)
16
+ activesupport (4.2.4)
17
+ i18n (~> 0.7)
18
+ json (~> 1.7, >= 1.7.7)
19
+ minitest (~> 5.1)
20
+ thread_safe (~> 0.3, >= 0.3.4)
21
+ tzinfo (~> 1.1)
22
+ arel (6.0.3)
23
+ ast (2.1.0)
24
+ astrolabe (1.3.1)
25
+ parser (~> 2.2)
26
+ builder (3.2.2)
27
+ cucumber (2.1.0)
28
+ builder (>= 2.1.2)
29
+ cucumber-core (~> 1.3.0)
30
+ diff-lcs (>= 1.1.3)
31
+ gherkin3 (~> 3.1.0)
32
+ multi_json (>= 1.7.5, < 2.0)
33
+ multi_test (>= 0.1.2)
34
+ cucumber-core (1.3.0)
35
+ gherkin3 (~> 3.1.0)
36
+ diff-lcs (1.2.5)
37
+ gherkin3 (3.1.2)
38
+ i18n (0.7.0)
39
+ json (1.8.3)
40
+ minitest (5.8.1)
41
+ mortadella (0.2.1)
42
+ multi_json (1.11.2)
43
+ multi_test (0.1.2)
44
+ parser (2.2.3.0)
45
+ ast (>= 1.1, < 3.0)
46
+ powerpack (0.1.1)
47
+ rainbow (2.0.0)
48
+ rake (10.4.2)
49
+ rspec (3.3.0)
50
+ rspec-core (~> 3.3.0)
51
+ rspec-expectations (~> 3.3.0)
52
+ rspec-mocks (~> 3.3.0)
53
+ rspec-core (3.3.2)
54
+ rspec-support (~> 3.3.0)
55
+ rspec-expectations (3.3.1)
56
+ diff-lcs (>= 1.2.0, < 2.0)
57
+ rspec-support (~> 3.3.0)
58
+ rspec-mocks (3.3.2)
59
+ diff-lcs (>= 1.2.0, < 2.0)
60
+ rspec-support (~> 3.3.0)
61
+ rspec-support (3.3.0)
62
+ rubocop (0.34.2)
63
+ astrolabe (~> 1.3)
64
+ parser (>= 2.2.2.5, < 3.0)
65
+ powerpack (~> 0.1)
66
+ rainbow (>= 1.99.1, < 3.0)
67
+ ruby-progressbar (~> 1.4)
68
+ ruby-progressbar (1.7.5)
69
+ sqlite3 (1.3.11)
70
+ thread_safe (0.3.5)
71
+ tzinfo (1.2.2)
72
+ thread_safe (~> 0.1)
73
+
74
+ PLATFORMS
75
+ ruby
76
+
77
+ DEPENDENCIES
78
+ active_cucumber!
79
+ activerecord
80
+ bundler
81
+ cucumber
82
+ mortadella
83
+ rake
84
+ rspec
85
+ rubocop
86
+ sqlite3
87
+
88
+ BUNDLED WITH
89
+ 1.10.6
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Originate
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,92 @@
1
+ # ActiveCucumber [![Circle CI](https://circleci.com/gh/Originate/active_cucumber.svg?style=shield)](https://circleci.com/gh/Originate/active_cucumber)
2
+
3
+ High-level Cucumber helpers for testing
4
+ [ActiveRecord](http://guides.rubyonrails.org/active_record_basics.html)-based
5
+ database applications using Cucumber tables.
6
+
7
+
8
+ ## Verifying database records
9
+
10
+ ActiveCucumber allows to compare ActiveRecord objects
11
+ against Cucumber tables,
12
+ with the differences visualized intuitively as a Cucumber table diff.
13
+ Only the attributes provided in the table are compared,
14
+ the ones not listed are ignored.
15
+
16
+
17
+ ### diff_one!
18
+
19
+ `ActiveCucumber.diff_one!` compares the given ActiveRecord entry with the given
20
+ _vertical_ Cucumber table.
21
+ These tables have their headers on the left side, and are used to describe
22
+ a single record in greater detail.
23
+
24
+ ```cucumber
25
+ When loading the last Star Trek TNG episode
26
+ Then it returns this episode:
27
+ | SHOW | Star Trek TNG |
28
+ | NAME | All Good Things |
29
+ | YEAR | 1994 |
30
+ ```
31
+
32
+ The `Then` step is easy to implement with ActiveCucumber:
33
+
34
+ ```ruby
35
+ Then /^it returns this episode:$/ do |table|
36
+ # @episode contains one loaded entry
37
+ ActiveCucumber.diff_one! @episode, table
38
+ end
39
+ ```
40
+
41
+
42
+ ### diff_all!
43
+
44
+ `ActiveCucumber.diff_all!` verifies that the given _horizontal_ Cucumber table
45
+ describes all existing database entries of the given class.
46
+ Horizontal Cucumber tables have their headers on top, and define several
47
+ records at once:
48
+
49
+ ```cucumber
50
+ When I run the importer script with parameter "count=3"
51
+ Then the database contains these episodes:
52
+ | SHOW | NAME | YEAR |
53
+ | Star Trek TNG | Encounter at Farpoint | 1987 |
54
+ | Star Trek TNG | The Nth Degree | 1991 |
55
+ | Star Trek TNG | All Good Things | 1994 |
56
+ ```
57
+
58
+ The last step would be implemented as:
59
+
60
+ ```ruby
61
+ Then /^Then the database contains these episodes:$/ do |table|
62
+ ActiveCucumber.diff_all! Episode, table
63
+ end
64
+ ```
65
+
66
+ The Cucumber table should list the entries sorted by `created_at` timestamp.
67
+
68
+
69
+ ### Cucumberators
70
+
71
+ ActiveCucumber converts the database records into a data table
72
+ and matches it against the given Cucumber table.
73
+
74
+ By default, all attributes are converted into a String.
75
+ It is possible to customize this conversion step by creating a
76
+ _Cucumberator_ (short for Cucumber Decorator).
77
+ This class decorates an ActiveRecord instance, and defines converters
78
+ for attribute values into the format used in the Cucumber table.
79
+
80
+ ```ruby
81
+ class EpisodeCucumberator < Cucumberator
82
+
83
+ # In the SHOW column, print the name of the show of the episode truncated
84
+ def value_of_show
85
+ show.name.truncate 10
86
+ end
87
+
88
+ end
89
+ ```
90
+
91
+ ActiveCucumber automatically finds and uses these Cucumberators if this
92
+ naming convention is followed.
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require 'bundler'
2
+ require 'bundler/gem_tasks'
3
+ require 'cucumber'
4
+ require 'cucumber/rake/task'
5
+
6
+ Cucumber::Rake::Task.new :features
7
+ task default: %i(lint features)
8
+
9
+ desc 'Run linter'
10
+ task 'lint' do
11
+ sh 'bundle exec rubocop'
12
+ end
@@ -0,0 +1,26 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'active_cucumber'
6
+ s.version = '0.0.1'
7
+ s.authors = ['Kevin Goslar']
8
+ s.email = ['kevin.goslar@gmail.com']
9
+ s.summary = %s(ActiveRecord tools for Cucumber)
10
+ s.description = %s(Tools to compare ActiveRecord entries with Cucumber tables)
11
+ s.homepage = 'https://github.com/Originate/active_cucumber'
12
+ s.license = 'MIT'
13
+
14
+ s.files = `git ls-files -z`.split("\x0")
15
+ s.test_files = Dir['features/*']
16
+ s.require_paths = ['lib']
17
+
18
+ s.add_development_dependency 'activerecord'
19
+ s.add_development_dependency 'bundler'
20
+ s.add_development_dependency 'cucumber'
21
+ s.add_development_dependency 'mortadella'
22
+ s.add_development_dependency 'rake'
23
+ s.add_development_dependency 'rubocop'
24
+ s.add_development_dependency 'rspec'
25
+ s.add_development_dependency 'sqlite3'
26
+ end
data/circle.yml ADDED
@@ -0,0 +1,16 @@
1
+ database:
2
+ override:
3
+ - echo "Nothing to do here"
4
+
5
+ machine:
6
+ ruby:
7
+ version: 2.2.3
8
+
9
+ notify:
10
+ webhooks:
11
+ - url: https://xrayci.kap.la/webhooks/builds
12
+
13
+ test:
14
+ override:
15
+ - bundle exec rake
16
+
@@ -0,0 +1,71 @@
1
+ Feature: Cucumparer.diff_all!
2
+
3
+ As a Cucumber user
4
+ I want to verify all existing records using a Cucumber table
5
+ So that I can easily and intuitively check the result of my database-facing operations.
6
+
7
+
8
+ Background:
9
+ Given the TV episodes:
10
+ | SHOW | NAME | YEAR |
11
+ | Star Trek TNG | Encounter at Farpoint | 1987 |
12
+ | Star Trek TNG | All Good Things | 1994 |
13
+
14
+
15
+ Scenario: verifying string fields
16
+ When running "ActiveCucumber.diff_all! Episode, table" with this table:
17
+ | NAME |
18
+ | Encounter at Farpoint |
19
+ | All Good Things |
20
+ Then the test passes
21
+
22
+
23
+ Scenario: verifying non-string fields
24
+ When running "ActiveCucumber.diff_all! Episode, table" with this table:
25
+ | YEAR |
26
+ | 1987 |
27
+ | 1994 |
28
+ Then the test passes
29
+
30
+
31
+ Scenario: verifying associated fields through a Cucumberator
32
+ When running "ActiveCucumber.diff_all! Episode, table" with this table:
33
+ | SHOW | NAME |
34
+ | Star Trek TNG | Encounter at Farpoint |
35
+ | Star Trek TNG | All Good Things |
36
+ Then the test passes
37
+
38
+
39
+ Scenario: complete table match
40
+ When running "ActiveCucumber.diff_all! Episode, table" with this table:
41
+ | SHOW | NAME | YEAR |
42
+ | Star Trek TNG | Encounter at Farpoint | 1987 |
43
+ | Star Trek TNG | All Good Things | 1994 |
44
+ Then the test passes
45
+
46
+
47
+ Scenario: missing a record
48
+ When running "ActiveCucumber.diff_all! Episode, table" with this table:
49
+ | SHOW | NAME |
50
+ | Star Trek TNG | Encounter at Farpoint |
51
+ Then the test fails
52
+ And Cucumparer prints the error message "Tables were not identical"
53
+
54
+
55
+ Scenario: an extra record
56
+ When running "ActiveCucumber.diff_all! Episode, table" with this table:
57
+ | SHOW | NAME |
58
+ | Star Trek TNG | Encounter at Farpoint |
59
+ | Star Trek TNG | All Good Things |
60
+ | Star Trek TNG | The Nth Degree |
61
+ Then the test fails
62
+ And Cucumparer prints the error message "Tables were not identical"
63
+
64
+
65
+ Scenario: mismatching data in a table cell
66
+ When running "ActiveCucumber.diff_all! Episode, table" with this table:
67
+ | SHOW | NAME |
68
+ | Star Trek TOS | Encounter at Farpoint |
69
+ | Star Trek TNG | All Good Things |
70
+ Then the test fails
71
+ And Cucumparer prints the error message "Tables were not identical"
@@ -0,0 +1,55 @@
1
+ Feature: Cucumparer.diff_one!
2
+
3
+ As a Cucumber user
4
+ I want to verify a single record using a detailed Cucumber table
5
+ So that I can easily and intuitively check individual database entries.
6
+
7
+
8
+ Background:
9
+ Given the TV episode:
10
+ | SHOW | Star Trek TNG |
11
+ | NAME | All Good Things |
12
+ | YEAR | 1994 |
13
+
14
+
15
+ Scenario: verifying string fields
16
+ When running "ActiveCucumber.diff_one! @episode, table" with this table:
17
+ | NAME | All Good Things |
18
+ Then the test passes
19
+
20
+
21
+ Scenario: verifying non-string fields
22
+ When running "ActiveCucumber.diff_one! @episode, table" with this table:
23
+ | YEAR | 1994 |
24
+ Then the test passes
25
+
26
+
27
+ Scenario: verifying associated fields
28
+ When running "ActiveCucumber.diff_one! @episode, table" with this table:
29
+ | SHOW | Star Trek TNG |
30
+ | NAME | All Good Things |
31
+ Then the test passes
32
+
33
+
34
+ Scenario: complete table match
35
+ When running "ActiveCucumber.diff_one! @episode, table" with this table:
36
+ | SHOW | Star Trek TNG |
37
+ | NAME | All Good Things |
38
+ | YEAR | 1994 |
39
+ Then the test passes
40
+
41
+
42
+ Scenario: providing a non-existing field
43
+ When running "ActiveCucumber.diff_one! @episode, table" with this table:
44
+ | NAME | All Good Things |
45
+ | FOOBAR | 1994 |
46
+ Then the test fails
47
+ And Cucumparer prints the error message "undefined method.*foobar"
48
+
49
+
50
+ Scenario: mismatching data in a table cell
51
+ When running "ActiveCucumber.diff_one! @episode, table" with this table:
52
+ | SHOW | Star Trek TOS |
53
+ | NAME | All Good Things |
54
+ Then the test fails
55
+ And Cucumparer prints the error message "Tables were not identical"
@@ -0,0 +1,44 @@
1
+ Given(/^the TV episode:$/) do |table|
2
+ data = table.rows_hash
3
+ show = Show.find_or_create_by name: data['SHOW']
4
+ @episode = show.episodes.create name: data['NAME'], year: data['YEAR']
5
+ end
6
+
7
+
8
+ Given(/^the TV episodes:$/) do |table|
9
+ table.map_headers! { |header| header.downcase.to_sym }
10
+ table.hashes.each do |row|
11
+ show = Show.find_or_create_by name: row[:show]
12
+ show.episodes.create name: row[:name], year: row[:year]
13
+ end
14
+ end
15
+
16
+
17
+
18
+ # rubocop:disable Lint/UnusedBlockArgument
19
+ Then(/^running "([^"]+)" with this table:$/) do |code, table|
20
+ begin
21
+ @exception = false
22
+ @result = eval code
23
+ rescue StandardError => e
24
+ @exception = true
25
+ @error_message = e.message
26
+ end
27
+ end
28
+ # rubocop:enable Lint/UnusedBlockArgument
29
+
30
+
31
+ Then(/^the test passes$/) do
32
+ p @error_message if @expectation == true
33
+ expect(@exception).to be false
34
+ end
35
+
36
+
37
+ Then(/^the test fails$/) do
38
+ expect(@exception).to be true
39
+ end
40
+
41
+
42
+ Then(/^Cucumparer prints the error message "([^"]*)"$/) do |expected_error|
43
+ expect(@error_message).to match expected_error
44
+ end
@@ -0,0 +1,29 @@
1
+ require 'active_record'
2
+ require 'sqlite3'
3
+ require 'mortadella'
4
+ require 'active_cucumber'
5
+
6
+
7
+ ActiveRecord::Base.establish_connection(
8
+ adapter: 'sqlite3',
9
+ database: ':memory:'
10
+ )
11
+
12
+ ActiveRecord::Schema.define do
13
+ create_table :shows, force: true do |t|
14
+ t.string :name
15
+ t.datetime 'created_at'
16
+ end
17
+
18
+ create_table :episodes, force: true do |t|
19
+ t.belongs_to :show, index: true
20
+ t.string :name
21
+ t.integer :year
22
+ t.datetime 'created_at'
23
+ end
24
+ end
25
+
26
+ Before do
27
+ Show.delete_all
28
+ Episode.delete_all
29
+ end
@@ -0,0 +1,3 @@
1
+ class Episode < ActiveRecord::Base
2
+ belongs_to :show, inverse_of: :episodes, required: true
3
+ end
@@ -0,0 +1,7 @@
1
+ class EpisodeCucumberator < ActiveCucumber::Cucumberator
2
+
3
+ def value_for_show
4
+ show.name
5
+ end
6
+
7
+ end
@@ -0,0 +1,3 @@
1
+ class Show < ActiveRecord::Base
2
+ has_many :episodes, inverse_of: :show
3
+ end
@@ -0,0 +1,54 @@
1
+ module ActiveCucumber
2
+
3
+ # A decorator for ActiveRecord objects that adds methods to
4
+ # format record attributes as they are displayed in Cucumber tables.
5
+ #
6
+ # This class is used by default. You can subclass it to create
7
+ # custom Cucumberators for your ActiveRecord classes.
8
+ class Cucumberator
9
+
10
+ # object - the instance to decorate
11
+ def initialize object
12
+ @object = object
13
+ end
14
+
15
+
16
+ # Returns the Cucumber value for the given attribute key.
17
+ #
18
+ # If a value_for_* method is not defined for the given key,
19
+ # returns the attribute value of the decorated object,
20
+ # converted to a String.
21
+ def value_for key
22
+ method_name = value_method_name key
23
+ if respond_to? method_name
24
+ send(method_name).to_s
25
+ else
26
+ @object.send(normalized_key key).to_s
27
+ end
28
+ end
29
+
30
+
31
+ private
32
+
33
+ def method_missing method_name
34
+ # This is necessary so that a Cucumberator subclass can access
35
+ # attributes of @object as if they were its own.
36
+ @object.send method_name
37
+ end
38
+
39
+
40
+ # Converts the key given in Cucumber format into the format used to
41
+ # access attributes on an ActiveRecord instance.
42
+ def normalized_key key
43
+ key.to_s.downcase.parameterize.underscore
44
+ end
45
+
46
+
47
+ # Returns the name of the value_of_* method for the given key
48
+ def value_method_name key
49
+ "value_for_#{normalized_key key}"
50
+ end
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1,53 @@
1
+ module ActiveCucumber
2
+
3
+ class Cucumparer
4
+
5
+ def initialize clazz, cucumber_table
6
+ @clazz = clazz
7
+ @cucumber_table = cucumber_table
8
+ end
9
+
10
+ # Returns all entries in the database as a horizontal Mortadella table
11
+ def to_horizontal_table
12
+ mortadella = Mortadella::Horizontal.new headers: @cucumber_table.headers
13
+ @clazz.order('created_at ASC').each do |record|
14
+ cucumberator = cucumberator_for record
15
+ mortadella << @cucumber_table.headers.map do |header|
16
+ cucumberator.value_for header
17
+ end
18
+ end
19
+ mortadella.table
20
+ end
21
+
22
+ # Returns the given object as a vertical Mortadella table
23
+ def to_vertical_table object
24
+ mortadella = Mortadella::Vertical.new
25
+ cucumberator = cucumberator_for object
26
+ @cucumber_table.rows_hash.each do |key, _|
27
+ mortadella[key] = cucumberator.value_for key
28
+ end
29
+ mortadella.table
30
+ end
31
+
32
+ private
33
+
34
+ # Returns the Cucumberator subclass to be used by this Cucumparer instance
35
+ def cucumberator_class
36
+ cucumberator_class_name.constantize
37
+ rescue NameError
38
+ Cucumberator
39
+ end
40
+
41
+ # Returns the name of the Cucumberator subclass to be used by this Cucumparer instance.
42
+ def cucumberator_class_name
43
+ "#{@clazz.name}Cucumberator"
44
+ end
45
+
46
+ # Returns the Cucumberator object for the given ActiveRecord instance
47
+ def cucumberator_for object
48
+ cucumberator_class.new object
49
+ end
50
+
51
+ end
52
+
53
+ end
@@ -0,0 +1,22 @@
1
+ require 'active_cucumber/cucumparer'
2
+ require 'active_cucumber/cucumberator'
3
+
4
+ # The main namespace for this gem
5
+ module ActiveCucumber
6
+
7
+ # Verifies that the database table for the given ActiveRecord class
8
+ # matches the given horizontal Cucumber table.
9
+ #
10
+ # Sorts records by creation date.
11
+ def self.diff_all! clazz, cucumber_table
12
+ cucumparer = Cucumparer.new clazz, cucumber_table
13
+ cucumber_table.diff! cucumparer.to_horizontal_table
14
+ end
15
+
16
+ # Verifies that the given object matches the given vertical Cucumber table
17
+ def self.diff_one! object, cucumber_table
18
+ cucumparer = Cucumparer.new object.class, cucumber_table
19
+ cucumber_table.diff! cucumparer.to_vertical_table(object)
20
+ end
21
+
22
+ end
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_cucumber
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kevin Goslar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: cucumber
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mortadella
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sqlite3
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: Tools to compare ActiveRecord entries with Cucumber tables
126
+ email:
127
+ - kevin.goslar@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitignore"
133
+ - ".rubocop.yml"
134
+ - Gemfile
135
+ - Gemfile.lock
136
+ - LICENSE.txt
137
+ - README.md
138
+ - Rakefile
139
+ - active_cucumber.gemspec
140
+ - circle.yml
141
+ - features/cucumparer/diff_all.feature
142
+ - features/cucumparer/diff_one.feature
143
+ - features/step_definitions/steps.rb
144
+ - features/support/env.rb
145
+ - features/support/episode.rb
146
+ - features/support/episode_cucumberator.rb
147
+ - features/support/show.rb
148
+ - lib/active_cucumber.rb
149
+ - lib/active_cucumber/cucumberator.rb
150
+ - lib/active_cucumber/cucumparer.rb
151
+ homepage: https://github.com/Originate/active_cucumber
152
+ licenses:
153
+ - MIT
154
+ metadata: {}
155
+ post_install_message:
156
+ rdoc_options: []
157
+ require_paths:
158
+ - lib
159
+ required_ruby_version: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ requirements: []
170
+ rubyforge_project:
171
+ rubygems_version: 2.4.5.1
172
+ signing_key:
173
+ specification_version: 4
174
+ summary: ActiveRecord tools for Cucumber
175
+ test_files: []