polymorpheus 1.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -69,8 +69,8 @@ Now let's review what we've done.
69
69
  * Instead of `imageable_type` and `imageable_id` columns in the pictures table, we've created explicit columns for the `employee_id` and `product_id`
70
70
  * The `add_polymorphic_constraints` call takes care of all of the database constraints you need, without you needing to worry about sql! Specifically it:
71
71
  * Creates foreign key relationships in the database as specified. So in this example, we have specified that the `employee_id` column in the `pictures` table should have a foreign key constraint with the `id` column of the `employees` table.
72
- * Creates appropriate triggers in our database that make sure that exactly on or the other of `employee_id` or `poduct_id` are specified for a given record. An exception will be raised if you try to save a database record that contains both or none of them.
73
- * **Options for migrations**: There are options to add uniqueness constraints, customize the foreign keys generated by Polymorpheus, and specify the name of generated database indexes. For more info on this, [read the wiki entry](https://github.com/wegowise/polymorpheus/wiki/Migration-options).
72
+ * Creates appropriate triggers in our database that make sure that exactly on or the other of `employee_id` or `product_id` are specified for a given record. An exception will be raised if you try to save a database record that contains both or none of them.
73
+ * **Options for migrations**: There are options to customize the foreign keys generated by Polymorpheus and add uniqueness constraints. For more info on this, [read the wiki entry](https://github.com/wegowise/polymorpheus/wiki/Migration-options).
74
74
 
75
75
  ## Model definitions
76
76
 
@@ -55,8 +55,7 @@ module Polymorpheus
55
55
  def remove_polymorphic_constraints(table, columns, options = {})
56
56
  poly_drop_triggers(table, columns.keys.sort)
57
57
  columns.each do |(col, reference)|
58
- ref_table, ref_col = reference.to_s.split('.')
59
- remove_foreign_key table, ref_table
58
+ remove_foreign_key table, :column => col
60
59
  end
61
60
  if options[:unique].present?
62
61
  poly_remove_indexes(table, columns.keys, Array(options[:unique]))
@@ -1,3 +1,3 @@
1
1
  module Polymorpheus
2
- VERSION = '1.0'
2
+ VERSION = '1.1.0'
3
3
  end
data/polymorpheus.gemspec CHANGED
@@ -5,14 +5,20 @@ require File.dirname(__FILE__) + "/lib/polymorpheus/version"
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "polymorpheus"
7
7
  s.version = Polymorpheus::VERSION
8
+
8
9
  s.authors = ["Barun Singh"]
9
10
  s.email = "bsingh@wegowise.com"
10
11
  s.homepage = "http://github.com/wegowise/polymorpheus"
11
12
  s.summary = "Provides a database-friendly method for polymorphic relationships"
12
13
  s.description = "Provides a database-friendly method for polymorphic relationships"
14
+
13
15
  s.required_rubygems_version = ">= 1.3.6"
14
16
  s.files = Dir.glob(%w[{lib,spec}/**/*.rb [A-Z]*.{txt,rdoc,md} *.gemspec]) + %w{Rakefile}
15
17
  s.extra_rdoc_files = ["README.md", "LICENSE.txt"]
16
18
  s.license = 'MIT'
19
+
17
20
  s.add_dependency('foreigner')
21
+ s.add_dependency('activerecord', '>=3.0')
22
+ s.add_development_dependency('rspec-rails')
23
+ s.add_development_dependency('mysql2')
18
24
  end
@@ -5,11 +5,16 @@ require 'foreigner'
5
5
  require 'foreigner/connection_adapters/mysql2_adapter'
6
6
  require 'polymorpheus'
7
7
  require 'polymorpheus/trigger'
8
+ require 'shared_examples'
8
9
 
9
10
  Polymorpheus::Adapter.load!
10
11
 
11
12
  describe Polymorpheus::ConnectionAdapters::MysqlAdapter do
12
13
 
14
+ #######################################################
15
+ # Setup
16
+ #######################################################
17
+
13
18
  before(:all) do
14
19
  class << ActiveRecord::Base.connection
15
20
  include Polymorpheus::SqlLogger
@@ -27,174 +32,80 @@ describe Polymorpheus::ConnectionAdapters::MysqlAdapter do
27
32
  let(:connection) { ActiveRecord::Base.connection }
28
33
  let(:sql) { connection.sql_statements }
29
34
 
35
+ def clean_sql(sql_string)
36
+ sql_string.gsub(/^\n\s*/,'').gsub(/\s*\n\s*$/,'')
37
+ .gsub(/\n\s*/,"\n").gsub(/\s*$/,"")
38
+ end
39
+
30
40
  before do
31
41
  connection.clear_sql_history
32
42
  subject
33
43
  end
34
44
 
35
- shared_examples_for "migration statements" do
36
- describe "#add_polymorphic_constraints" do
37
- before { connection.add_polymorphic_constraints(table, columns, options) }
38
-
39
- specify do
40
- clean_sql(sql.join("\n")).should == clean_sql(full_constraints_sql)
41
- end
42
- end
43
-
44
- describe "#add_polymorphic_triggers" do
45
- before { connection.add_polymorphic_triggers(table, columns.keys) }
46
-
47
- specify do
48
- clean_sql(sql.join("\n")).should == clean_sql(trigger_sql)
49
- end
50
- end
51
- end
45
+ #######################################################
46
+ # Specs
47
+ #######################################################
52
48
 
53
- context "when the table and column names are not too long" do
54
- let(:table) { 'pets' }
55
- let(:columns) { { 'kitty_id' => 'cats.name', 'dog_id' => 'dogs.id' } }
56
- let(:options) { {} }
57
-
58
- let(:trigger_sql) do
59
- %{
60
- DROP TRIGGER IF EXISTS pfki_pets_dogid_kittyid
61
- DROP TRIGGER IF EXISTS pfku_pets_dogid_kittyid
62
- CREATE TRIGGER pfki_pets_dogid_kittyid BEFORE INSERT ON pets
63
- FOR EACH ROW
64
- BEGIN
65
- IF(IF(NEW.dog_id IS NULL, 0, 1) + IF(NEW.kitty_id IS NULL, 0, 1)) <> 1 THEN
66
- SET NEW = 'Error';
67
- END IF;
68
- END
69
- CREATE TRIGGER pfku_pets_dogid_kittyid BEFORE UPDATE ON pets
70
- FOR EACH ROW
71
- BEGIN
72
- IF(IF(NEW.dog_id IS NULL, 0, 1) + IF(NEW.kitty_id IS NULL, 0, 1)) <> 1 THEN
73
- SET NEW = 'Error';
74
- END IF;
75
- END
76
- }
77
- end
49
+ describe "migration statements" do
50
+ context "basic case with no uniqueness constraints" do
51
+ include_context "columns with short names"
52
+ let(:options) { {} }
78
53
 
79
- let(:fkey_sql) do
80
- %{
81
- ALTER TABLE `pets` ADD CONSTRAINT `pets_dog_id_fk` FOREIGN KEY (`dog_id`) REFERENCES `dogs`(id)
82
- ALTER TABLE `pets` ADD CONSTRAINT `pets_kitty_id_fk` FOREIGN KEY (`kitty_id`) REFERENCES `cats`(name)
83
- }
54
+ it_behaves_like "mysql2 migration statements"
84
55
  end
85
56
 
86
- let(:full_constraints_sql) { trigger_sql + fkey_sql }
87
-
88
- it_behaves_like "migration statements"
89
-
90
- context "and we specify a uniqueness constraint as true" do
57
+ context "when uniqueness constraint is specified as true" do
58
+ include_context "columns with short names"
91
59
  let(:options) { { :unique => true } }
92
60
  let(:unique_key_sql) do
93
- %{
94
- CREATE UNIQUE INDEX pfk_pets_dogid ON pets (dog_id)
95
- CREATE UNIQUE INDEX pfk_pets_kittyid ON pets (kitty_id)
96
- }
61
+ %{ CREATE UNIQUE INDEX pfk_pets_dogid ON pets (dog_id)
62
+ CREATE UNIQUE INDEX pfk_pets_kittyid ON pets (kitty_id) }
63
+ end
64
+ let(:remove_indices_sql) do
65
+ %{ DROP INDEX pfk_pets_kittyid ON pets
66
+ DROP INDEX pfk_pets_dogid ON pets }
97
67
  end
98
68
 
99
- let(:full_constraints_sql) { trigger_sql + unique_key_sql + fkey_sql }
100
-
101
- it_behaves_like "migration statements"
69
+ it_behaves_like "mysql2 migration statements"
102
70
  end
103
71
 
104
- context "and we specify a uniqueness constraint as a string" do
72
+ context "specifying uniqueness constraint as a string" do
73
+ include_context "columns with short names"
105
74
  let(:options) { { :unique => 'field1' } }
106
75
  let(:unique_key_sql) do
107
- %{
108
- CREATE UNIQUE INDEX pfk_pets_dogid_field1 ON pets (dog_id, field1)
109
- CREATE UNIQUE INDEX pfk_pets_kittyid_field1 ON pets (kitty_id, field1)
110
- }
76
+ %{ CREATE UNIQUE INDEX pfk_pets_dogid_field1 ON pets (dog_id, field1)
77
+ CREATE UNIQUE INDEX pfk_pets_kittyid_field1 ON pets (kitty_id, field1) }
78
+ end
79
+ let(:remove_indices_sql) do
80
+ %{ DROP INDEX pfk_pets_kittyid_field1 ON pets
81
+ DROP INDEX pfk_pets_dogid_field1 ON pets }
111
82
  end
112
83
 
113
- let(:full_constraints_sql) { trigger_sql + unique_key_sql + fkey_sql }
114
-
115
- it_behaves_like "migration statements"
84
+ it_behaves_like "mysql2 migration statements"
116
85
  end
117
86
 
118
- context "and we specify a uniqueness constraint as an array" do
87
+ context "specifying uniqueness constraint as an array" do
88
+ include_context "columns with short names"
119
89
  let(:options) { { :unique => [:foo, :bar] } }
120
90
  let(:unique_key_sql) do
121
- %{
122
- CREATE UNIQUE INDEX pfk_pets_dogid_foo_bar ON pets (dog_id, foo, bar)
123
- CREATE UNIQUE INDEX pfk_pets_kittyid_foo_bar ON pets (kitty_id, foo, bar)
124
- }
125
- end
126
-
127
- let(:full_constraints_sql) { trigger_sql + unique_key_sql + fkey_sql }
128
-
129
- it_behaves_like "migration statements"
130
- end
131
-
132
- context "and we specify a uniqueness constraint on fields with really long names" do
133
- let(:options) do
134
- { :unique => [:fee_was_a_buddhist_prodigy, :ground_control_to_major_tom] }
91
+ %{ CREATE UNIQUE INDEX pfk_pets_dogid_foo_bar ON pets (dog_id, foo, bar)
92
+ CREATE UNIQUE INDEX pfk_pets_kittyid_foo_bar ON pets (kitty_id, foo, bar) }
135
93
  end
136
- let(:unique_key_sql) do
137
- %{
138
- CREATE UNIQUE INDEX pfk_pets_dogid_feewasabuddhistpr_groundcontroltoma ON pets (dog_id, fee_was_a_buddhist_prodigy, ground_control_to_major_tom)
139
- CREATE UNIQUE INDEX pfk_pets_kittyid_feewasabuddhistpr_groundcontroltoma ON pets (kitty_id, fee_was_a_buddhist_prodigy, ground_control_to_major_tom)
140
- }
94
+ let(:remove_indices_sql) do
95
+ %{ DROP INDEX pfk_pets_kittyid_foo_bar ON pets
96
+ DROP INDEX pfk_pets_dogid_foo_bar ON pets }
141
97
  end
142
98
 
143
- let(:full_constraints_sql) { trigger_sql + unique_key_sql + fkey_sql }
144
-
145
- it_behaves_like "migration statements"
146
- end
147
- end
148
-
149
- context "when the table and column names combined are very long" do
150
- let(:table) { 'bicycles' }
151
- let(:columns) do
152
- { 'im_too_cool_to_vote_and_ill_only_ride_a_fixie' => 'hipster.id',
153
- 'really_im_not_doping_i_just_practice_a_lot' => 'professional.id' }
154
- end
155
- let(:options) { {} }
156
-
157
- let(:trigger_sql) do
158
- %{
159
- DROP TRIGGER IF EXISTS pfki_bicycles_imtoocooltovoteandillonl_reallyimnotdopingijustpr
160
- DROP TRIGGER IF EXISTS pfku_bicycles_imtoocooltovoteandillonl_reallyimnotdopingijustpr
161
- CREATE TRIGGER pfki_bicycles_imtoocooltovoteandillonl_reallyimnotdopingijustpr BEFORE INSERT ON bicycles
162
- FOR EACH ROW
163
- BEGIN
164
- IF(IF(NEW.im_too_cool_to_vote_and_ill_only_ride_a_fixie IS NULL, 0, 1) + IF(NEW.really_im_not_doping_i_just_practice_a_lot IS NULL, 0, 1)) <> 1 THEN
165
- SET NEW = 'Error';
166
- END IF;
167
- END
168
- CREATE TRIGGER pfku_bicycles_imtoocooltovoteandillonl_reallyimnotdopingijustpr BEFORE UPDATE ON bicycles
169
- FOR EACH ROW
170
- BEGIN
171
- IF(IF(NEW.im_too_cool_to_vote_and_ill_only_ride_a_fixie IS NULL, 0, 1) + IF(NEW.really_im_not_doping_i_just_practice_a_lot IS NULL, 0, 1)) <> 1 THEN
172
- SET NEW = 'Error';
173
- END IF;
174
- END
175
- }
99
+ it_behaves_like "mysql2 migration statements"
176
100
  end
177
101
 
178
- let(:fkey_sql) do
179
- %{
180
- ALTER TABLE `bicycles` ADD CONSTRAINT `bicycles_im_too_cool_to_vote_and_ill_only_ride_a_fixie_fk` FOREIGN KEY (`im_too_cool_to_vote_and_ill_only_ride_a_fixie`) REFERENCES `hipster`(id)
181
- ALTER TABLE `bicycles` ADD CONSTRAINT `bicycles_really_im_not_doping_i_just_practice_a_lot_fk` FOREIGN KEY (`really_im_not_doping_i_just_practice_a_lot`) REFERENCES `professional`(id)
182
- }
183
- end
102
+ context "when table and column names combined are very long" do
103
+ include_context "columns with long names"
184
104
 
185
- let(:unique_key_sql) do
186
- %{
187
- CREATE UNIQUE INDEX pfk_blah
188
- }
105
+ it_behaves_like "mysql2 migration statements"
189
106
  end
190
-
191
- let(:full_constraints_sql) { trigger_sql + fkey_sql }
192
-
193
- it_behaves_like "migration statements"
194
107
  end
195
108
 
196
-
197
-
198
109
  describe "#triggers" do
199
110
  let(:trigger1) { stub(Trigger, :name => '1') }
200
111
  let(:trigger2) { stub(Trigger, :name => '2') }
@@ -209,10 +120,4 @@ describe Polymorpheus::ConnectionAdapters::MysqlAdapter do
209
120
  connection.triggers.should == [trigger1, trigger2]
210
121
  end
211
122
  end
212
-
213
-
214
- def clean_sql(sql_string)
215
- sql_string.gsub(/^\n\s*/,'').gsub(/\s*\n\s*$/,'').gsub(/\n\s*/,"\n")
216
- end
217
-
218
123
  end
@@ -0,0 +1,115 @@
1
+ shared_examples_for "mysql2 migration statements" do
2
+ describe "#add_polymorphic_constraints" do
3
+ before { connection.add_polymorphic_constraints(table, columns, options) }
4
+
5
+ specify do
6
+ clean_sql(sql.join("\n")).should == clean_sql(full_constraints_sql)
7
+ end
8
+ end
9
+
10
+ describe "#add_polymorphic_triggers" do
11
+ before { connection.add_polymorphic_triggers(table, columns.keys) }
12
+
13
+ specify do
14
+ clean_sql(sql.join("\n")).should == clean_sql(trigger_sql)
15
+ end
16
+ end
17
+
18
+ describe "#remove_polymorphic_constraints" do
19
+ before { connection.remove_polymorphic_constraints(table, columns, options) }
20
+
21
+ specify do
22
+ clean_sql(sql.join("\n")).should == clean_sql(remove_constraints_sql)
23
+ end
24
+ end
25
+ end
26
+
27
+ shared_context "columns with short names" do
28
+ let(:table) { 'pets' }
29
+ let(:columns) { { 'kitty_id' => 'cats.name', 'dog_id' => 'dogs.id' } }
30
+ let(:trigger_sql) do
31
+ %{
32
+ DROP TRIGGER IF EXISTS pfki_pets_dogid_kittyid
33
+ DROP TRIGGER IF EXISTS pfku_pets_dogid_kittyid
34
+ CREATE TRIGGER pfki_pets_dogid_kittyid BEFORE INSERT ON pets
35
+ FOR EACH ROW
36
+ BEGIN
37
+ IF(IF(NEW.dog_id IS NULL, 0, 1) + IF(NEW.kitty_id IS NULL, 0, 1)) <> 1 THEN
38
+ SET NEW = 'Error';
39
+ END IF;
40
+ END
41
+ CREATE TRIGGER pfku_pets_dogid_kittyid BEFORE UPDATE ON pets
42
+ FOR EACH ROW
43
+ BEGIN
44
+ IF(IF(NEW.dog_id IS NULL, 0, 1) + IF(NEW.kitty_id IS NULL, 0, 1)) <> 1 THEN
45
+ SET NEW = 'Error';
46
+ END IF;
47
+ END
48
+ }
49
+ end
50
+ let(:fkey_sql) do
51
+ %{
52
+ ALTER TABLE `pets` ADD CONSTRAINT `pets_dog_id_fk` FOREIGN KEY (`dog_id`) REFERENCES `dogs`(id)
53
+ ALTER TABLE `pets` ADD CONSTRAINT `pets_kitty_id_fk` FOREIGN KEY (`kitty_id`) REFERENCES `cats`(name)
54
+ }
55
+ end
56
+ let(:unique_key_sql) { '' }
57
+ let(:full_constraints_sql) { trigger_sql + unique_key_sql + fkey_sql }
58
+ let(:remove_indices_sql) { '' }
59
+ let(:remove_constraints_sql) do
60
+ %{
61
+ DROP TRIGGER IF EXISTS pfki_pets_dogid_kittyid
62
+ DROP TRIGGER IF EXISTS pfku_pets_dogid_kittyid
63
+ ALTER TABLE `pets` DROP FOREIGN KEY `pets_kitty_id_fk`
64
+ ALTER TABLE `pets` DROP FOREIGN KEY `pets_dog_id_fk`
65
+ } +
66
+ remove_indices_sql
67
+ end
68
+ end
69
+
70
+ shared_context "columns with long names" do
71
+ let(:table) { 'bicycles' }
72
+ let(:columns) do
73
+ { 'im_too_cool_to_vote_and_ill_only_ride_a_fixie' => 'hipster.id',
74
+ 'really_im_not_doping_i_just_practice_a_lot' => 'professional.id' }
75
+ end
76
+ let(:options) { {} }
77
+
78
+ let(:trigger_sql) do
79
+ %{
80
+ DROP TRIGGER IF EXISTS pfki_bicycles_imtoocooltovoteandillonl_reallyimnotdopingijustpr
81
+ DROP TRIGGER IF EXISTS pfku_bicycles_imtoocooltovoteandillonl_reallyimnotdopingijustpr
82
+ CREATE TRIGGER pfki_bicycles_imtoocooltovoteandillonl_reallyimnotdopingijustpr BEFORE INSERT ON bicycles
83
+ FOR EACH ROW
84
+ BEGIN
85
+ IF(IF(NEW.im_too_cool_to_vote_and_ill_only_ride_a_fixie IS NULL, 0, 1) + IF(NEW.really_im_not_doping_i_just_practice_a_lot IS NULL, 0, 1)) <> 1 THEN
86
+ SET NEW = 'Error';
87
+ END IF;
88
+ END
89
+ CREATE TRIGGER pfku_bicycles_imtoocooltovoteandillonl_reallyimnotdopingijustpr BEFORE UPDATE ON bicycles
90
+ FOR EACH ROW
91
+ BEGIN
92
+ IF(IF(NEW.im_too_cool_to_vote_and_ill_only_ride_a_fixie IS NULL, 0, 1) + IF(NEW.really_im_not_doping_i_just_practice_a_lot IS NULL, 0, 1)) <> 1 THEN
93
+ SET NEW = 'Error';
94
+ END IF;
95
+ END
96
+ }
97
+ end
98
+
99
+ let(:fkey_sql) do
100
+ %{
101
+ ALTER TABLE `bicycles` ADD CONSTRAINT `bicycles_im_too_cool_to_vote_and_ill_only_ride_a_fixie_fk` FOREIGN KEY (`im_too_cool_to_vote_and_ill_only_ride_a_fixie`) REFERENCES `hipster`(id)
102
+ ALTER TABLE `bicycles` ADD CONSTRAINT `bicycles_really_im_not_doping_i_just_practice_a_lot_fk` FOREIGN KEY (`really_im_not_doping_i_just_practice_a_lot`) REFERENCES `professional`(id)
103
+ }
104
+ end
105
+
106
+ let(:full_constraints_sql) { trigger_sql + fkey_sql }
107
+ let(:remove_constraints_sql) do
108
+ %{
109
+ DROP TRIGGER IF EXISTS pfki_bicycles_imtoocooltovoteandillonl_reallyimnotdopingijustpr
110
+ DROP TRIGGER IF EXISTS pfku_bicycles_imtoocooltovoteandillonl_reallyimnotdopingijustpr
111
+ ALTER TABLE `bicycles` DROP FOREIGN KEY `bicycles_im_too_cool_to_vote_and_ill_only_ride_a_fixie_fk`
112
+ ALTER TABLE `bicycles` DROP FOREIGN KEY `bicycles_really_im_not_doping_i_just_practice_a_lot_fk`
113
+ }
114
+ end
115
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polymorpheus
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-21 00:00:00.000000000Z
12
+ date: 2012-10-27 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: foreigner
16
- requirement: &2151832820 !ruby/object:Gem::Requirement
16
+ requirement: &70167733248880 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,40 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2151832820
24
+ version_requirements: *70167733248880
25
+ - !ruby/object:Gem::Dependency
26
+ name: activerecord
27
+ requirement: &70167733248340 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '3.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70167733248340
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec-rails
38
+ requirement: &70167733247920 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70167733247920
47
+ - !ruby/object:Gem::Dependency
48
+ name: mysql2
49
+ requirement: &70167733247460 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70167733247460
25
58
  description: Provides a database-friendly method for polymorphic relationships
26
59
  email: bsingh@wegowise.com
27
60
  executables: []
@@ -42,6 +75,7 @@ files:
42
75
  - spec/interface_spec.rb
43
76
  - spec/mysql2_adapter_spec.rb
44
77
  - spec/schema_dumper_spec.rb
78
+ - spec/shared_examples.rb
45
79
  - spec/spec_helper.rb
46
80
  - spec/sql_logger.rb
47
81
  - spec/trigger_spec.rb
@@ -62,9 +96,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
62
96
  - - ! '>='
63
97
  - !ruby/object:Gem::Version
64
98
  version: '0'
65
- segments:
66
- - 0
67
- hash: 2769054126994398138
68
99
  required_rubygems_version: !ruby/object:Gem::Requirement
69
100
  none: false
70
101
  requirements: