updateable_views_inheritance 1.4.5 → 1.4.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8712364c9596c4bf050aeac6f2c6471d180d9a4fccec891b4e1b65e3d80d6d9b
4
- data.tar.gz: 6b5fa6ac3a504c659a22da83717099976848d8e0499282daa6bf276b1b4766bb
3
+ metadata.gz: 661b8ded59885a6e482cac9d0dfec5f9e1ab10050e3944b5f176e543958f8a33
4
+ data.tar.gz: fa8e6f63a74a28f9a09d1574ec6e3ae788df2ebdf3eead5789ef691c40337aed
5
5
  SHA512:
6
- metadata.gz: 735b84529fa5855434e025cf1f22015af66f00d098284f9492b2b06529872478b478732f44b72442e4c30660b7b4a919a4bfe99cda357967a2d00af2fb915716
7
- data.tar.gz: ced8b499fe12b8451f0c8c1caf00aacb2cea83e2858279cf3c126e8241fbf3fc038d80f1256ad817762963ed6701c79bcfc2b5ff15c0abdeaf794ccbfeb35dbc
6
+ metadata.gz: 1aec9cfeeb1aab4761e2efffc73219d7d9db7b605a8575fa470b5491783882415e51afdb8d7d48536242f0df4d2a448e8e3777c00ef9a65ec089001fb3e5a9e3
7
+ data.tar.gz: 46fb1b1a91344c01d55a48f47ef96e02f0d058a7f7781462c22cda18fa7d2a6eaa90f1e8cb94e7c1a03523c6d83d2aa500b43d4a83d011db0549bc65cfa4d9b6
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## 1.4.7 (06 November 2024)
2
+
3
+ Bugfixes:
4
+ - Fix create_child so that it can be used idempotently
5
+ with :skip_creating_child_table.
6
+
7
+ ## 1.4.6 (22 October 2024)
8
+
9
+ Features:
10
+
11
+ - Add option for child primary key.
12
+
13
+ ## 1.4.5 (09 October 2024)
14
+
15
+ Bugfixes:
1
16
  ## 1.4.5 (09 October 2024)
2
17
 
3
18
  Bugfixes:
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # Class Table Inheritance
2
2
 
3
3
  [![Build](https://github.com/tutuf/updateable_views_inheritance/actions/workflows/build.yml/badge.svg)](https://github.com/tutuf/updateable_views_inheritance/actions?query=workflow:build)
4
- [![Coverage](https://app.deepsource.com/gh/tutuf/updateable_views_inheritance.svg/?label=code+coverage&show_trend=true&token=AMfm8-_-qDZoknMh9-8IYp3R)](https://app.deepsource.com/gh/tutuf/updateable_views_inheritance/)
4
+ [![Codecov](https://codecov.io/gh/tutuf/updateable_views_inheritance/graph/badge.svg?token=L8P5LYNNU4)](https://codecov.io/gh/tutuf/updateable_views_inheritance)
5
+ [![DeepSource](https://app.deepsource.com/gh/tutuf/updateable_views_inheritance.svg/?label=active+issues&show_trend=true&token=AMfm8-_-qDZoknMh9-8IYp3R)](https://app.deepsource.com/gh/tutuf/updateable_views_inheritance/)
5
6
 
6
7
  Class Table Inheritance for ActiveRecord using updateable views
7
8
 
@@ -83,8 +84,10 @@ Note that models of children classes must specify table name explicitly.
83
84
 
84
85
  ### Changing Columns in Underlying Tables
85
86
 
87
+ #### In the parent
88
+
86
89
  ```ruby
87
- class RemoveColumnInParentTable < ActiveRecord::Migration
90
+ class ChangeColumnsInParentTable < ActiveRecord::Migration
88
91
  def self.up
89
92
  remove_parent_and_children_views(:locomotives)
90
93
  remove_column(:locomotives, :max_speed)
@@ -94,6 +97,18 @@ class RemoveColumnInParentTable < ActiveRecord::Migration
94
97
  end
95
98
  ```
96
99
 
100
+ #### In a child
101
+
102
+ ```ruby
103
+ class ChangeColumnInChildTable < ActiveRecord::Migration
104
+ def self.up
105
+ drop_view(:steam_locomotives)
106
+ rename_column(:steam_locomotives_data, :coal_consumption, :fuel_consumption)
107
+ create_child_view(:locomotives, :steam_locomotives)
108
+ end
109
+ end
110
+ ```
111
+
97
112
  ### Renaming Underlying Tables
98
113
 
99
114
  ```ruby
@@ -138,6 +153,31 @@ end
138
153
  ```
139
154
  Useful when converting legacy DB schema to use inheritance.
140
155
 
156
+ ### Using view as a child table
157
+
158
+ ```ruby
159
+ execute <<-SQL.squish
160
+ CREATE VIEW punk_locomotives_data AS (
161
+ SELECT steam_locomotives.id,
162
+ steam_locomotives.coal_consumption AS coal,
163
+ NULL AS electro
164
+ FROM steam_locomotives
165
+ UNION ALL
166
+ SELECT electric_locomotives.id,
167
+ NULL AS coal,
168
+ electric_locomotives.electricity_consumption AS electro
169
+ FROM electric_locomotives)
170
+ SQL
171
+ create_child(:punk_locomotives,
172
+ { parent: :locomotives,
173
+ child_table: :punk_locomotives_data,
174
+ child_table_pk: :id,
175
+ skip_creating_child_table: true })
176
+ ```
177
+ Views in PostgreSQL cannot have primary keys, so you have to manually specify it
178
+ when you use. Note that views also cannot have `NOT NULL` constraints, although
179
+ the `NOT NULL` constraint of the underlying table will still be enforced.
180
+
141
181
  ## Compatibility with Single Table Inheritance
142
182
 
143
183
  The approach of this gem is completely independent from Rails built-in Single
@@ -7,11 +7,16 @@ module ActiveRecord #:nodoc:
7
7
  # Use this in migration to create child table and view.
8
8
  # Options:
9
9
  # [:parent]
10
- # parent relation
10
+ # Parent relation
11
11
  # [:table]
12
- # default is <tt>"#{child_view}_data"</tt>
12
+ # Deprecated. Use :child_table instead
13
+ # [:child_table]
14
+ # Default is <tt>"#{child_view}_data"</tt>
15
+ # [:child_table_pk]
16
+ # Handy when :child_table is a view and PK cannot be inferred
17
+ # from the database.
13
18
  # [:skip_creating_child_table]
14
- # use together with :table option
19
+ # When given, :child_table option also must be specified
15
20
  def create_child(child_view, options)
16
21
  raise 'Please call me with a parent, for example: create_child(:steam_locomotives, :parent => :locomotives)' unless options[:parent]
17
22
 
@@ -26,22 +31,23 @@ module ActiveRecord #:nodoc:
26
31
  parent_relation
27
32
  end
28
33
 
29
- child_table = options[:table] || quote_table_name("#{child_view}_data")
34
+ child_table = options[:child_table] || options[:table] || "#{child_view}_data"
35
+ child_table_pk = options[:child_table_pk].to_s if options[:child_table_pk]
30
36
 
31
37
  unless options.key?(:skip_creating_child_table)
32
- unqualified_child_view_name = Utils.extract_schema_qualified_name(child_view).identifier
33
- child_table_pk = "#{unqualified_child_view_name.singularize}_id"
38
+ unqualified_child_view_name = Utils.extract_schema_qualified_name(child_view).identifier
39
+ child_table_pk ||= "#{unqualified_child_view_name.singularize}_id"
34
40
 
35
- create_table(child_table, :id => false) do |t|
36
- t.integer child_table_pk, :null => false
37
- yield t
38
- end
39
- execute "ALTER TABLE #{child_table} ADD PRIMARY KEY (#{child_table_pk})"
40
- execute "ALTER TABLE #{child_table} ADD FOREIGN KEY (#{child_table_pk})
41
- REFERENCES #{parent_table} ON DELETE CASCADE ON UPDATE CASCADE"
41
+ create_table(child_table, id: false) do |t|
42
+ t.integer child_table_pk, null: false
43
+ yield t
44
+ end
45
+ execute "ALTER TABLE #{child_table} ADD PRIMARY KEY (#{child_table_pk})"
46
+ execute "ALTER TABLE #{child_table} ADD FOREIGN KEY (#{child_table_pk})
47
+ REFERENCES #{parent_table} ON DELETE CASCADE ON UPDATE CASCADE"
42
48
  end
43
49
 
44
- create_child_view(parent_relation, child_view, child_table)
50
+ create_child_view(parent_relation, child_view, child_table, child_table_pk)
45
51
  end
46
52
 
47
53
  # Drop child view and table
@@ -54,16 +60,16 @@ module ActiveRecord #:nodoc:
54
60
 
55
61
  # Creates aggregate updateable view of parent and child relations. The convention for naming child tables is
56
62
  # <tt>"#{child_view}_data"</tt>. If you don't follow it, supply +child_table_name+ as third argument.
57
- def create_child_view(parent_table, child_view, child_table=nil)
58
- child_table ||= child_view.to_s + "_data"
63
+ def create_child_view(parent_table, child_view, child_table = nil, child_table_pk = nil)
64
+ child_table ||= "#{child_view}_data"
59
65
 
60
66
  parent_columns = columns(parent_table)
61
67
  child_columns = columns(child_table)
62
68
 
63
- child_column_names = child_columns.collect{|c| c.name}
64
- parent_column_names = parent_columns.collect{|c| c.name}
69
+ child_column_names = child_columns.map(&:name)
70
+ parent_column_names = parent_columns.map(&:name)
65
71
 
66
- child_pk = pk_and_sequence_for(child_table)[0]
72
+ child_pk = child_table_pk || pk_and_sequence_for(child_table)[0]
67
73
  child_column_names.delete(child_pk)
68
74
 
69
75
  parent_pk, parent_pk_seq = pk_and_sequence_for(parent_table)
@@ -106,10 +112,12 @@ module ActiveRecord #:nodoc:
106
112
  res && res.first
107
113
  end
108
114
 
109
- # Returns a relation's primary key and belonging sequence. If +relation+ is a table the result is its PK and sequence.
110
- # When it is a view, PK and sequence of the table at the root of the inheritance chain are returned.
115
+ # Returns a relation's primary key and belonging sequence.
116
+ # If +relation+ is a table the result is its PK and sequence.
117
+ # When it is a view, PK and sequence of the table at the root
118
+ # of the inheritance chain are returned.
111
119
  def pk_and_sequence_for(relation)
112
- result = query(<<-SQL, 'PK')[0]
120
+ result = query(<<-SQL.squish, 'PK')[0]
113
121
  SELECT attr.attname
114
122
  FROM pg_attribute attr,
115
123
  pg_constraint cons
@@ -118,20 +126,18 @@ module ActiveRecord #:nodoc:
118
126
  AND cons.contype = 'p'
119
127
  AND attr.attnum = ANY(cons.conkey)
120
128
  SQL
121
- if result.nil? or result.empty?
129
+ if result.blank? #result.empty?
122
130
  parent = parent_table(relation)
123
131
  pk_and_sequence_for(parent) if parent
124
132
  else
125
133
  # log(result[0], "PK for #{relation}") {}
126
134
  [result[0], query("SELECT pg_get_serial_sequence('#{relation}', '#{result[0]}') ")[0][0]]
127
135
  end
128
- rescue
129
- nil
130
136
  end
131
137
 
132
138
  # Drops a view from the database.
133
139
  def drop_view(name)
134
- execute "DROP VIEW #{name}"
140
+ execute "DROP VIEW #{quote_table_name(name)}"
135
141
  end
136
142
 
137
143
  # Return the list of all views in the schema search path.
@@ -1,3 +1,3 @@
1
1
  module UpdateableViewsInheritance
2
- VERSION = "1.4.5"
2
+ VERSION = "1.4.7"
3
3
  end
@@ -5,15 +5,15 @@ class CreateWithDefaultTable < ActiveRecord::Migration
5
5
  t.column :max_speed, :integer
6
6
  t.column :type, :string
7
7
  end
8
-
9
- create_child(:steam_locomotives, :parent => :locomotives) do |t|
10
- t.decimal :water_consumption, :precision => 6, :scale => 2
11
- t.decimal :coal_consumption, :precision => 6, :scale => 2
8
+
9
+ create_child(:steam_locomotives, parent: :locomotives) do |t|
10
+ t.decimal :water_consumption, precision: 6, scale: 2, null: false
11
+ t.decimal :coal_consumption, precision: 6, scale: 2, null: false
12
12
  end
13
13
  end
14
-
14
+
15
15
  def self.down
16
16
  drop_child :steam_locomotives
17
17
  drop_table :locomotives
18
18
  end
19
- end
19
+ end
@@ -18,10 +18,8 @@ class InstantiationTest < ActiveSupport::TestCase
18
18
  ActiveRecord::FixtureSet.reset_cache
19
19
  end
20
20
 
21
+ # FIXME: flaky test_setting_disable_inheritance_instantiation_does_not_load_child_columns
21
22
  def test_setting_disable_inheritance_instantiation_does_not_load_child_columns
22
- unless Locomotive.first
23
- puts "num locomotives:", @connection.select_one("SELECT count(id) FROM locomotives")
24
- end
25
23
  assert_equal %w[id max_speed name type],
26
24
  Locomotive.first.attributes.keys.sort
27
25
  end
data/test/schema_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require_relative 'test_helper'
2
2
 
3
- class UpdateableViewsInheritanceSchemaTest < ActiveSupport::TestCase
3
+ class SchemaTest < ActiveSupport::TestCase
4
4
  def setup
5
5
  ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/', 5)
6
6
  @connection = ActiveRecord::Base.connection
@@ -31,12 +31,19 @@ class UpdateableViewsInheritanceSchemaTest < ActiveSupport::TestCase
31
31
  end
32
32
  create_child_view :parent_pk_only, :child
33
33
  end
34
+
35
+ def self.down
36
+ drop_child :child
37
+ drop_table :parent_pk_only
38
+ end
34
39
  end
35
40
 
36
41
  def test_parent_table_with_only_one_column
37
42
  ParentTableWithOnlyOneColumn.up
38
43
  assert @connection.views.include?('child')
39
44
  assert_equal %w(id name), @connection.columns(:child).map{|c| c.name}.sort
45
+ ensure
46
+ ParentTableWithOnlyOneColumn.down
40
47
  end
41
48
 
42
49
  class ChildTableWithOnlyOneColumn < ActiveRecord::Migration
@@ -80,6 +87,10 @@ class UpdateableViewsInheritanceSchemaTest < ActiveSupport::TestCase
80
87
  assert RackLocomotive.new.narrow_gauge
81
88
  end
82
89
 
90
+ def test_does_not_preserve_not_null_on_views
91
+ assert SteamLocomotive.columns.find { |c| c.name == 'water_consumption' }.null
92
+ end
93
+
83
94
  class ChangeDefaultValueOfColumn < ActiveRecord::Migration
84
95
  def self.up
85
96
  remove_parent_and_children_views(:rack_locomotives)
@@ -172,6 +183,20 @@ class UpdateableViewsInheritanceSchemaTest < ActiveSupport::TestCase
172
183
  @connection.columns(:electric_locomotives).map{ |c| c.name }.sort
173
184
  end
174
185
 
186
+ class ChangeColumnInChildTable < ActiveRecord::Migration
187
+ def self.up
188
+ drop_view(:steam_locomotives)
189
+ rename_column(:steam_locomotives_data, :coal_consumption, :fuel_consumption)
190
+ create_child_view(:locomotives, :steam_locomotives)
191
+ end
192
+ end
193
+
194
+ def test_change_column_in_child_table
195
+ ChangeColumnInChildTable.up
196
+ assert_equal %w(fuel_consumption id max_speed name type water_consumption),
197
+ @connection.columns(:steam_locomotives).map(&:name).sort
198
+ end
199
+
175
200
  def test_table_exists
176
201
  #TODO: test table_exists? monkey patch
177
202
  end
@@ -245,10 +270,43 @@ class UpdateableViewsInheritanceSchemaTest < ActiveSupport::TestCase
245
270
  t.integer :column
246
271
  end
247
272
  end
273
+ def self.down
274
+ drop_child :table
275
+ end
248
276
  end
249
277
 
250
278
  def test_reserved_words_in_tables_and_columns
251
279
  ReservedSQLWords.up
252
280
  assert @connection.columns(:table).map(&:name).include?("column")
281
+ ensure
282
+ ReservedSQLWords.down
283
+ end
284
+
285
+ class ChildTableIsActuallyView < ActiveRecord::Migration
286
+ def self.up
287
+ execute <<-SQL.squish
288
+ CREATE VIEW punk_locomotives_data AS (
289
+ SELECT steam_locomotives.id,
290
+ steam_locomotives.coal_consumption AS coal,
291
+ NULL AS electro
292
+ FROM steam_locomotives
293
+ UNION ALL
294
+ SELECT electric_locomotives.id,
295
+ NULL AS coal,
296
+ electric_locomotives.electricity_consumption AS electro
297
+ FROM electric_locomotives)
298
+ SQL
299
+ create_child(:punk_locomotives,
300
+ { parent: :locomotives,
301
+ child_table: :punk_locomotives_data,
302
+ child_table_pk: :id,
303
+ skip_creating_child_table: true })
304
+ end
305
+ end
306
+
307
+ def test_child_table_is_view
308
+ ChildTableIsActuallyView.up
309
+ assert_equal @connection.columns(:punk_locomotives).map(&:name).sort,
310
+ %w(coal electro id max_speed name type)
253
311
  end
254
312
  end
@@ -124,18 +124,25 @@ class SingleTableInheritanceAggregateViewTest < ActiveSupport::TestCase
124
124
  end
125
125
  end
126
126
 
127
- def test_single_table_inheritance_view_conflict_columns_with_values
128
- ConflictColumnsWithValues.up
129
- assert_equal %w(coal_consumption id max_speed name type water_consumption electricity_consumption bidirectional narrow_gauge magnetic_field rail_system number_of_engines).sort,
130
- @connection.columns(:all_locomotives).map{ |c| c.name }.sort
131
- assert_equal 'text', @connection.columns(:all_locomotives).detect{|c| c.name == "number_of_engines"}.sql_type
132
- assert_equal 'one', @connection.query("SELECT number_of_engines FROM all_locomotives WHERE id=#{SteamLocomotive.first.id}").first.first
133
- assert_equal '2', @connection.query("SELECT number_of_engines FROM all_locomotives WHERE id=#{ElectricLocomotive.first.id}").first.first
134
- end
135
-
136
- def test_respond_to_missing_attributes
137
- Locomotive.table_name = :all_locomotives
138
- assert !MaglevLocomotive.new.respond_to?(:non_existing_attribute_in_the_hierarchy), "Active Record is gone haywire - responds to attributes that are never defined"
139
- assert !MaglevLocomotive.new.respond_to?(:coal_consumption), "Responds to an attribute not defined in the class' view but in the STI view"
140
- end
127
+ # FIXME: flaky test_single_table_inheritance_view_conflict_columns_with_values
128
+ # def test_single_table_inheritance_view_conflict_columns_with_values
129
+ # ConflictColumnsWithValues.up
130
+ # ::SteamLocomotive.reset_column_information
131
+ # ::ElectricLocomotive.reset_column_information
132
+ # assert_equal %w(coal_consumption id max_speed name type water_consumption electricity_consumption bidirectional narrow_gauge magnetic_field rail_system number_of_engines).sort,
133
+ # @connection.columns(:all_locomotives).map(&:name).sort
134
+ # assert_equal 'text', @connection.columns(:all_locomotives).detect{|c| c.name == "number_of_engines"}.sql_type
135
+ # assert_equal 'one', @connection.query("SELECT number_of_engines FROM all_locomotives WHERE id=#{SteamLocomotive.first.id}").first.first
136
+ # assert_equal '2', @connection.query("SELECT number_of_engines FROM all_locomotives WHERE id=#{ElectricLocomotive.first.id}").first.first
137
+ # end
138
+
139
+ # FIXME: flaky test_respond_to_missing_attributes
140
+ # def test_respond_to_missing_attributes
141
+ # Locomotive.table_name = :all_locomotives
142
+ # ::MaglevLocomotive.reset_column_information
143
+ # assert !MaglevLocomotive.new.respond_to?(:non_existing_attribute_in_the_hierarchy),
144
+ # "Active Record is gone haywire - responds to attributes that are never defined"
145
+ # assert !MaglevLocomotive.new.respond_to?(:coal_consumption),
146
+ # "Responds to an attribute defined only in the STI view, not in the class view"
147
+ # end
141
148
  end
data/test/test_helper.rb CHANGED
@@ -26,18 +26,20 @@ require File.expand_path("../dummy/config/environment.rb", __FILE__)
26
26
  require 'rails/test_help'
27
27
  require 'updateable_views_inheritance'
28
28
 
29
- begin
30
- if RUBY_VERSION > "2"
31
- require 'byebug'
32
- else
33
- require 'debugger'
34
- end
35
- rescue LoadError
36
- # no debugger available
37
- end
29
+ require 'byebug'
38
30
 
39
31
  class ActiveSupport::TestCase #:nodoc:
40
32
  include ActiveRecord::TestFixtures
41
33
  self.fixture_path = "#{File.dirname(__FILE__)}/fixtures/"
42
34
  ActiveRecord::Migration.verbose = false
35
+ # self.use_transactional_fixtures = true
36
+
37
+ # def teardown
38
+ # ActiveRecord::Migrator.down(File.dirname(__FILE__) + '/fixtures/migrations/', 1)
39
+ # ActiveRecord::FixtureSet.reset_cache
40
+ # end
43
41
  end
42
+
43
+ # # Useful for debugging flaky tests that depend on order of other tests
44
+ # require "minitest/reporters"
45
+ # Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_development_dependency 'bigdecimal', '1.3.5'
25
25
  s.add_development_dependency "bundler"
26
26
  s.add_development_dependency "minitest"
27
+ s.add_development_dependency "minitest-reporters"
27
28
  s.add_development_dependency "rails", '= 4.2.11.1'
28
29
  s.add_development_dependency "rake"
29
30
  s.add_development_dependency "simplecov"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: updateable_views_inheritance
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.5
4
+ version: 1.4.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sava Chankov
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-10-09 00:00:00.000000000 Z
12
+ date: 2024-11-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -81,6 +81,20 @@ dependencies:
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: minitest-reporters
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
84
98
  - !ruby/object:Gem::Dependency
85
99
  name: rails
86
100
  requirement: !ruby/object:Gem::Requirement
@@ -249,7 +263,7 @@ files:
249
263
  - test/migration_test.rb
250
264
  - test/pg_insert_returning_with_rules_spec.rb
251
265
  - test/schema_test.rb
252
- - test/single_table_inheritance.rb
266
+ - test/single_table_inheritance_test.rb
253
267
  - test/test_helper.rb
254
268
  - updateable_views_inheritance.gemspec
255
269
  homepage: http://github.com/tutuf/updateable_views_inheritance
@@ -271,7 +285,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
271
285
  - !ruby/object:Gem::Version
272
286
  version: '0'
273
287
  requirements: []
274
- rubygems_version: 3.4.12
288
+ rubygems_version: 3.1.6
275
289
  signing_key:
276
290
  specification_version: 4
277
291
  summary: Class table inheritance for ActiveRecord
@@ -348,5 +362,5 @@ test_files:
348
362
  - test/migration_test.rb
349
363
  - test/pg_insert_returning_with_rules_spec.rb
350
364
  - test/schema_test.rb
351
- - test/single_table_inheritance.rb
365
+ - test/single_table_inheritance_test.rb
352
366
  - test/test_helper.rb