active_cucumber 1.0.0 → 1.1.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.
Files changed (48) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +28 -0
  3. data/.rubocop.yml +12 -24
  4. data/.ruby-version +1 -0
  5. data/CHANGELOG.md +73 -0
  6. data/DEVELOPMENT.md +14 -0
  7. data/Gemfile +17 -2
  8. data/Gemfile.lock +132 -110
  9. data/LICENSE.txt +1 -1
  10. data/README.md +63 -76
  11. data/Rakefile +15 -18
  12. data/active_cucumber.gemspec +22 -27
  13. data/cucumber.yml +1 -0
  14. data/documentation/horizontal_diff.png +0 -0
  15. data/documentation/vertical_diff.png +0 -0
  16. data/dprint.json +11 -0
  17. data/features/active_cucumber/attributes_for.feature +2 -12
  18. data/features/active_cucumber/create_many.feature +7 -13
  19. data/features/active_cucumber/create_one.feature +5 -9
  20. data/features/active_cucumber/diff_all/arrays_of_objects.feature +2 -11
  21. data/features/active_cucumber/diff_all/context_values.feature +1 -10
  22. data/features/active_cucumber/diff_all/converting_data.feature +4 -13
  23. data/features/active_cucumber/diff_all/filtering_columns.feature +2 -11
  24. data/features/active_cucumber/diff_all/filtering_rows.feature +2 -13
  25. data/features/active_cucumber/diff_all/mismatching_data.feature +4 -14
  26. data/features/active_cucumber/diff_one.feature +8 -13
  27. data/features/step_definitions/steps.rb +16 -15
  28. data/features/support/director.rb +2 -0
  29. data/features/support/env.rb +23 -25
  30. data/features/support/episode.rb +2 -0
  31. data/features/support/episode_creator.rb +6 -6
  32. data/features/support/episode_cucumberator.rb +2 -2
  33. data/features/support/genre.rb +2 -0
  34. data/features/support/show.rb +2 -0
  35. data/features/support/show_creator.rb +5 -4
  36. data/features/support/show_cucumberator.rb +3 -3
  37. data/features/support/subscription.rb +2 -0
  38. data/features/support/subscription_creator.rb +6 -6
  39. data/features/support/subscription_cucumberator.rb +4 -4
  40. data/lib/active_cucumber/active_record_builder.rb +26 -18
  41. data/lib/active_cucumber/creator.rb +44 -25
  42. data/lib/active_cucumber/cucumberator.rb +17 -15
  43. data/lib/active_cucumber/cucumparer.rb +13 -12
  44. data/lib/active_cucumber.rb +97 -25
  45. metadata +26 -166
  46. data/.coveralls.yml +0 -1
  47. data/circle.yml +0 -16
  48. data/cucumber_lint.yml +0 -13
@@ -1,57 +1,78 @@
1
- require 'factory_girl'
1
+ # frozen_string_literal: true
2
2
 
3
- module ActiveCucumber
3
+ require "factory_bot"
4
4
 
5
+ module ActiveCucumber
5
6
  # Creates ActiveRecord entries with data from given Cucumber tables.
6
7
  class Creator
8
+ include FactoryBot::Syntax::Methods
7
9
 
8
- include FactoryGirl::Syntax::Methods
9
-
10
- def initialize attributes, context
10
+ def initialize(attributes, context)
11
11
  @attributes = attributes
12
12
  context.each do |key, value|
13
13
  instance_variable_set "@#{key}", value
14
14
  end
15
15
  end
16
16
 
17
- # Returns the FactoryGirl version of this Creator's attributes
18
- def factorygirl_attributes
17
+ # Returns the FactoryBot version of this Creator's attributes.
18
+ # rubocop:disable Metrics/MethodLength
19
+ def factorybot_attributes
19
20
  symbolize_attributes!
20
- @attributes.each do |key, value|
21
- next unless respond_to?(method = method_name(key))
22
- if (result = send method, value) || value.nil?
23
- @attributes[key] = result if @attributes.key? key
21
+ # Capture original keys and values before any transformations
22
+ # to ensure each value_for_* method receives the original value
23
+ original_attributes = @attributes.dup
24
+ keys_to_process = original_attributes.keys
25
+ keys_to_process.each do |key|
26
+ method = method_name(key)
27
+ next unless respond_to?(method)
28
+
29
+ value = original_attributes[key]
30
+ result = send(method, value)
31
+
32
+ # Keep the transformed value if it's truthy or if the original was nil
33
+ # Check if key still exists (value_for_* method may have deleted it)
34
+ if result || value.nil?
35
+ @attributes[key] = result if @attributes.key?(key)
24
36
  else
25
- @attributes.delete key
37
+ @attributes.delete(key)
26
38
  end
27
39
  end
40
+ @attributes
28
41
  end
42
+ # rubocop:enable Metrics/MethodLength
29
43
 
44
+ private
30
45
 
31
- private
32
-
33
- def method_missing method_name, *arguments
46
+ def method_missing(method_name, *, &)
34
47
  # This is necessary so that a Creator subclass can access
35
48
  # methods of @attributes as if they were its own.
36
- @attributes.send method_name, *arguments
49
+ if @attributes.respond_to?(method_name, true)
50
+ @attributes.send(method_name, *, &)
51
+ else
52
+ super
53
+ end
37
54
  end
38
55
 
39
-
40
56
  # Returns the name of the value_for method for the given key
41
- def method_name key
57
+ def method_name(key)
42
58
  "value_for_#{key}"
43
59
  end
44
60
 
45
-
46
- # Converts the key given in Cucumber format into FactoryGirl format
47
- def normalized_key key
61
+ # Converts the key given in Cucumber format into FactoryBot format
62
+ def normalized_key(key)
48
63
  key.downcase.parameterize.underscore.to_sym
49
64
  end
50
65
 
51
- def normalized_value value
52
- value.blank? ? nil : value
66
+ def normalized_value(value)
67
+ return nil if value.nil?
68
+ return nil if value.respond_to?(:blank?) && value.blank?
69
+
70
+ value
53
71
  end
54
72
 
73
+ def respond_to_missing?(method_name, include_private = false)
74
+ @attributes.respond_to?(method_name, include_private) || super
75
+ end
55
76
 
56
77
  # Makes the keys on @attributes be normalized symbols
57
78
  def symbolize_attributes!
@@ -61,7 +82,5 @@ module ActiveCucumber
61
82
  end
62
83
  end
63
84
  end
64
-
65
85
  end
66
-
67
86
  end
@@ -1,57 +1,59 @@
1
- module ActiveCucumber
1
+ # frozen_string_literal: true
2
2
 
3
+ module ActiveCucumber
3
4
  # A decorator for ActiveRecord objects that adds methods to
4
5
  # format record attributes as they are displayed in Cucumber tables.
5
6
  #
6
7
  # This class is used by default. You can subclass it to create
7
8
  # custom Cucumberators for your ActiveRecord classes.
8
9
  class Cucumberator
9
-
10
10
  # object - the instance to decorate
11
- def initialize object, context
11
+ def initialize(object, context)
12
12
  @object = object
13
13
  context.each do |key, value|
14
14
  instance_variable_set "@#{key}", value
15
15
  end
16
16
  end
17
17
 
18
-
19
18
  # Returns the Cucumber value for the given attribute key.
20
19
  #
21
20
  # If a value_for_* method is not defined for the given key,
22
21
  # returns the attribute value of the decorated object,
23
22
  # converted to a String.
24
- def value_for key
23
+ def value_for(key)
25
24
  method_name = value_method_name key
26
25
  if respond_to? method_name
27
26
  send(method_name).to_s
28
27
  else
29
- @object.send(normalized_key key).to_s
28
+ @object.send(normalized_key(key)).to_s
30
29
  end
31
30
  end
32
31
 
32
+ private
33
33
 
34
- private
35
-
36
- def method_missing method_name
34
+ def method_missing(method_name, *, &)
37
35
  # This is necessary so that a Cucumberator subclass can access
38
36
  # attributes of @object as if they were its own.
39
- @object.send method_name
37
+ if @object.respond_to?(method_name, true)
38
+ @object.send(method_name, *, &)
39
+ else
40
+ super
41
+ end
40
42
  end
41
43
 
42
-
43
44
  # Converts the key given in Cucumber format into the format used to
44
45
  # access attributes on an ActiveRecord instance.
45
- def normalized_key key
46
+ def normalized_key(key)
46
47
  key.to_s.downcase.parameterize.underscore
47
48
  end
48
49
 
50
+ def respond_to_missing?(method_name, include_private = false)
51
+ @object.respond_to?(method_name, include_private) || super
52
+ end
49
53
 
50
54
  # Returns the name of the value_of_* method for the given key
51
- def value_method_name key
55
+ def value_method_name(key)
52
56
  "value_for_#{normalized_key key}"
53
57
  end
54
-
55
58
  end
56
-
57
59
  end
@@ -1,8 +1,9 @@
1
- module ActiveCucumber
1
+ # frozen_string_literal: true
2
2
 
3
+ module ActiveCucumber
4
+ # provides Mortadella instances of the given database content
3
5
  class Cucumparer
4
-
5
- def initialize database_content, cucumber_table, context
6
+ def initialize(database_content, cucumber_table, context)
6
7
  @database_content = database_content
7
8
  @cucumber_table = cucumber_table
8
9
  @context = context
@@ -10,6 +11,8 @@ module ActiveCucumber
10
11
 
11
12
  # Returns all entries in the database as a horizontal Mortadella table
12
13
  def to_horizontal_table
14
+ raise ArgumentError, "No headers provided in Cucumber table" if @cucumber_table.headers.empty?
15
+
13
16
  mortadella = Mortadella::Horizontal.new headers: @cucumber_table.headers
14
17
  @database_content = @database_content.all if @database_content.respond_to? :all
15
18
  @database_content.each do |record|
@@ -22,34 +25,32 @@ module ActiveCucumber
22
25
  end
23
26
 
24
27
  # Returns the given object as a vertical Mortadella table
25
- def to_vertical_table object
28
+ def to_vertical_table(object)
26
29
  mortadella = Mortadella::Vertical.new
27
30
  cucumberator = cucumberator_for object
28
- @cucumber_table.rows_hash.each do |key, _|
31
+ @cucumber_table.rows_hash.each_key do |key|
29
32
  mortadella[key] = cucumberator.value_for key
30
33
  end
31
34
  mortadella.table
32
35
  end
33
36
 
34
- private
37
+ private
35
38
 
36
- # Returns the Cucumberator subclass to be used by this Cucumparer instance
37
- def cucumberator_class object
39
+ # Returns the Cucumberator subclass to be used by this Cucumparer instance.
40
+ def cucumberator_class(object)
38
41
  cucumberator_class_name(object).constantize
39
42
  rescue NameError
40
43
  Cucumberator
41
44
  end
42
45
 
43
46
  # Returns the name of the Cucumberator subclass to be used by this Cucumparer instance.
44
- def cucumberator_class_name object
47
+ def cucumberator_class_name(object)
45
48
  "#{object.class.name}Cucumberator"
46
49
  end
47
50
 
48
51
  # Returns the Cucumberator object for the given ActiveRecord instance
49
- def cucumberator_for object
52
+ def cucumberator_for(object)
50
53
  cucumberator_class(object).new object, @context
51
54
  end
52
-
53
55
  end
54
-
55
56
  end
@@ -1,61 +1,133 @@
1
- require 'active_cucumber/cucumparer'
2
- require 'active_cucumber/cucumberator'
3
- require 'active_cucumber/active_record_builder'
4
- require 'active_cucumber/creator'
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+ require "active_cucumber/cucumparer"
5
+ require "active_cucumber/cucumberator"
6
+ require "active_cucumber/active_record_builder"
7
+ require "active_cucumber/creator"
5
8
 
6
9
  # The main namespace for this gem
7
10
  module ActiveCucumber
8
-
9
11
  # Returns the attributes to create an instance of the given ActiveRecord class
10
- # that matches the given vertical Cucumber table
11
- def self.attributes_for activerecord_class, cucumber_table, context: {}
12
+ # that matches the given vertical Cucumber table.
13
+ #
14
+ # @param activerecord_class [Class] the ActiveRecord class to create attributes for
15
+ # @param cucumber_table [Cucumber::MultilineArgument::DataTable] a vertical Cucumber table
16
+ # @param context [Hash] optional context values to inject into custom Creator classes
17
+ # @return [Hash] FactoryBot-compatible attributes hash
18
+ # @raise [TypeError] if activerecord_class is not an ActiveRecord class
19
+ def self.attributes_for(activerecord_class, cucumber_table, context: {})
20
+ validate_activerecord_class!(activerecord_class)
21
+ validate_context!(context)
12
22
  builder = ActiveRecordBuilder.new activerecord_class, context
13
23
  builder.attributes_for ActiveCucumber.vertical_table(cucumber_table)
14
24
  end
15
25
 
16
-
17
26
  # Creates entries of the given ActiveRecord class
18
- # specified by the given horizontal Cucumber table
19
- def self.create_many activerecord_class, cucumber_table, context: {}
27
+ # specified by the given horizontal Cucumber table.
28
+ #
29
+ # @param activerecord_class [Class] the ActiveRecord class to create records for
30
+ # @param cucumber_table [Cucumber::MultilineArgument::DataTable] a horizontal Cucumber table
31
+ # @param context [Hash] optional context values to inject into custom Creator classes
32
+ # @return [Array<ActiveRecord::Base>] array of created records
33
+ # @raise [TypeError] if activerecord_class is not an ActiveRecord class
34
+ # @raise [ActiveRecord::RecordInvalid] if any record fails validation
35
+ def self.create_many(activerecord_class, cucumber_table, context: {})
36
+ validate_activerecord_class!(activerecord_class)
37
+ validate_context!(context)
20
38
  builder = ActiveRecordBuilder.new activerecord_class, context
21
39
  builder.create_many ActiveCucumber.horizontal_table(cucumber_table)
22
40
  end
23
41
 
24
-
25
42
  # Creates an entry of the given ActiveRecord class
26
- # specified by the given vertical Cucumber table
27
- def self.create_one activerecord_class, cucumber_table, context: {}
43
+ # specified by the given vertical Cucumber table.
44
+ #
45
+ # @param activerecord_class [Class] the ActiveRecord class to create a record for
46
+ # @param cucumber_table [Cucumber::MultilineArgument::DataTable] a vertical Cucumber table
47
+ # @param context [Hash] optional context values to inject into custom Creator classes
48
+ # @return [ActiveRecord::Base] the created record
49
+ # @raise [TypeError] if activerecord_class is not an ActiveRecord class
50
+ # @raise [ActiveRecord::RecordInvalid] if the record fails validation
51
+ def self.create_one(activerecord_class, cucumber_table, context: {})
52
+ validate_activerecord_class!(activerecord_class)
53
+ validate_context!(context)
28
54
  builder = ActiveRecordBuilder.new activerecord_class, context
29
55
  builder.create_record ActiveCucumber.vertical_table(cucumber_table)
30
56
  end
31
57
 
32
-
33
58
  # Verifies that the database table for the given ActiveRecord class
34
59
  # matches the given horizontal Cucumber table.
35
60
  #
36
- # Sorts records by creation date.
37
- def self.diff_all! clazz, cucumber_table, context: {}
61
+ # @param clazz [Class] the ActiveRecord class to compare records from
62
+ # @param cucumber_table [Cucumber::MultilineArgument::DataTable] a horizontal Cucumber table
63
+ # @param context [Hash] optional context values to inject into custom Cucumberator classes
64
+ # @return [void]
65
+ # @raise [Cucumber::MultilineArgument::DataTable::Different] if tables don't match
66
+ # @note Records are sorted by creation date before comparison
67
+ def self.diff_all!(clazz, cucumber_table, context: {})
68
+ validate_activerecord_class_or_collection!(clazz)
69
+ validate_context!(context)
38
70
  cucumparer = Cucumparer.new clazz, cucumber_table, context
39
71
  cucumber_table.diff! cucumparer.to_horizontal_table
40
72
  end
41
73
 
42
-
43
- # Verifies that the given object matches the given vertical Cucumber table
44
- def self.diff_one! object, cucumber_table, context: {}
74
+ # Verifies that the given object matches the given vertical Cucumber table.
75
+ #
76
+ # @param object [ActiveRecord::Base] the ActiveRecord instance to compare
77
+ # @param cucumber_table [Cucumber::MultilineArgument::DataTable] a vertical Cucumber table
78
+ # @param context [Hash] optional context values to inject into custom Cucumberator classes
79
+ # @return [void]
80
+ # @raise [Cucumber::MultilineArgument::DataTable::Different] if tables don't match
81
+ def self.diff_one!(object, cucumber_table, context: {})
82
+ validate_activerecord_instance!(object)
83
+ validate_context!(context)
45
84
  cucumparer = Cucumparer.new object.class, cucumber_table, context
46
85
  cucumber_table.diff! cucumparer.to_vertical_table(object)
47
86
  end
48
87
 
49
-
50
- # Returns the given horizontal Cucumber table in standardized format
51
- def self.horizontal_table table
88
+ # Returns the given horizontal Cucumber table in standardized format.
89
+ #
90
+ # @param table [Cucumber::MultilineArgument::DataTable] a horizontal Cucumber table
91
+ # @return [Array<Hash>] array of hashes where keys are column headers and values are cell values
92
+ def self.horizontal_table(table)
52
93
  table.hashes
53
94
  end
54
95
 
55
-
56
- # Returns the given vertical Cucumber table in standardized format
57
- def self.vertical_table table
96
+ # Returns the given vertical Cucumber table in standardized format.
97
+ #
98
+ # @param table [Cucumber::MultilineArgument::DataTable] a vertical Cucumber table
99
+ # @return [Hash] hash where keys are from first column and values are from second column
100
+ def self.vertical_table(table)
58
101
  table.rows_hash
59
102
  end
60
103
 
104
+ # @api private
105
+ def self.validate_activerecord_class!(klass)
106
+ return if klass.is_a?(Class) && klass < ActiveRecord::Base
107
+
108
+ raise TypeError, "Expected an ActiveRecord class, got #{klass.inspect}"
109
+ end
110
+
111
+ # @api private
112
+ def self.validate_activerecord_class_or_collection!(value)
113
+ # Allow ActiveRecord class, array of instances, or ActiveRecord relation/association
114
+ return if value.is_a?(Class) && value < ActiveRecord::Base
115
+ return if value.is_a?(Array) || value.respond_to?(:all)
116
+
117
+ raise TypeError, "Expected an ActiveRecord class or collection, got #{value.class}"
118
+ end
119
+
120
+ # @api private
121
+ def self.validate_activerecord_instance!(object)
122
+ return if object.is_a?(ActiveRecord::Base)
123
+
124
+ raise TypeError, "Expected an ActiveRecord instance, got #{object.class}"
125
+ end
126
+
127
+ # @api private
128
+ def self.validate_context!(context)
129
+ return if context.is_a?(Hash)
130
+
131
+ raise TypeError, "Expected context to be a Hash, got #{context.class}"
132
+ end
61
133
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_cucumber
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Goslar
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2016-05-10 00:00:00.000000000 Z
10
+ date: 2025-11-04 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activerecord
@@ -16,196 +15,56 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
18
+ version: '6.0'
19
+ type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - ">="
25
24
  - !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: coveralls
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'
25
+ version: '6.0'
55
26
  - !ruby/object:Gem::Dependency
56
27
  name: cucumber
57
28
  requirement: !ruby/object:Gem::Requirement
58
29
  requirements:
59
30
  - - ">="
60
31
  - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
32
+ version: '7.0'
33
+ type: :runtime
63
34
  prerelease: false
64
35
  version_requirements: !ruby/object:Gem::Requirement
65
36
  requirements:
66
37
  - - ">="
67
38
  - !ruby/object:Gem::Version
68
- version: '0'
39
+ version: '7.0'
69
40
  - !ruby/object:Gem::Dependency
70
- name: cucumber_lint
41
+ name: factory_bot
71
42
  requirement: !ruby/object:Gem::Requirement
72
43
  requirements:
73
44
  - - ">="
74
45
  - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
46
+ version: '5.0'
47
+ type: :runtime
77
48
  prerelease: false
78
49
  version_requirements: !ruby/object:Gem::Requirement
79
50
  requirements:
80
51
  - - ">="
81
52
  - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: factory_girl
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: faker
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: kappamaki
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'
53
+ version: '5.0'
125
54
  - !ruby/object:Gem::Dependency
126
55
  name: mortadella
127
56
  requirement: !ruby/object:Gem::Requirement
128
57
  requirements:
129
58
  - - ">="
130
59
  - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
60
+ version: '1.0'
61
+ type: :runtime
133
62
  prerelease: false
134
63
  version_requirements: !ruby/object:Gem::Requirement
135
64
  requirements:
136
65
  - - ">="
137
66
  - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: rake
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: rubocop
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: rspec
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
- - !ruby/object:Gem::Dependency
182
- name: rspec-collection_matchers
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - ">="
186
- - !ruby/object:Gem::Version
187
- version: '0'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- version: '0'
195
- - !ruby/object:Gem::Dependency
196
- name: sqlite3
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - ">="
200
- - !ruby/object:Gem::Version
201
- version: '0'
202
- type: :development
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - ">="
207
- - !ruby/object:Gem::Version
208
- version: '0'
67
+ version: '1.0'
209
68
  description: Tools to compare ActiveRecord entries with Cucumber tables
210
69
  email:
211
70
  - kevin.goslar@gmail.com
@@ -213,19 +72,22 @@ executables: []
213
72
  extensions: []
214
73
  extra_rdoc_files: []
215
74
  files:
216
- - ".coveralls.yml"
75
+ - ".github/workflows/ruby.yml"
217
76
  - ".gitignore"
218
77
  - ".rubocop.yml"
78
+ - ".ruby-version"
79
+ - CHANGELOG.md
80
+ - DEVELOPMENT.md
219
81
  - Gemfile
220
82
  - Gemfile.lock
221
83
  - LICENSE.txt
222
84
  - README.md
223
85
  - Rakefile
224
86
  - active_cucumber.gemspec
225
- - circle.yml
226
- - cucumber_lint.yml
87
+ - cucumber.yml
227
88
  - documentation/horizontal_diff.png
228
89
  - documentation/vertical_diff.png
90
+ - dprint.json
229
91
  - features/active_cucumber/attributes_for.feature
230
92
  - features/active_cucumber/create_many.feature
231
93
  - features/active_cucumber/create_one.feature
@@ -254,11 +116,11 @@ files:
254
116
  - lib/active_cucumber/creator.rb
255
117
  - lib/active_cucumber/cucumberator.rb
256
118
  - lib/active_cucumber/cucumparer.rb
257
- homepage: https://github.com/Originate/active_cucumber
119
+ homepage: https://github.com/kevgo/active_cucumber
258
120
  licenses:
259
121
  - MIT
260
- metadata: {}
261
- post_install_message:
122
+ metadata:
123
+ rubygems_mfa_required: 'true'
262
124
  rdoc_options: []
263
125
  require_paths:
264
126
  - lib
@@ -266,16 +128,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
266
128
  requirements:
267
129
  - - ">="
268
130
  - !ruby/object:Gem::Version
269
- version: '0'
131
+ version: '3.2'
270
132
  required_rubygems_version: !ruby/object:Gem::Requirement
271
133
  requirements:
272
134
  - - ">="
273
135
  - !ruby/object:Gem::Version
274
136
  version: '0'
275
137
  requirements: []
276
- rubyforge_project:
277
- rubygems_version: 2.4.5.1
278
- signing_key:
138
+ rubygems_version: 3.6.2
279
139
  specification_version: 4
280
140
  summary: ActiveRecord tools for Cucumber
281
141
  test_files: []