updateable_views_inheritance 1.4.5 → 1.4.7
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 +4 -4
- data/CHANGELOG.md +15 -0
- data/README.md +42 -2
- data/lib/updateable_views_inheritance/postgresql_adapter.rb +32 -26
- data/lib/updateable_views_inheritance/version.rb +1 -1
- data/test/fixtures/migrations/2_create_with_default_table.rb +6 -6
- data/test/instantiation_test.rb +1 -3
- data/test/schema_test.rb +59 -1
- data/test/{single_table_inheritance.rb → single_table_inheritance_test.rb} +21 -14
- data/test/test_helper.rb +11 -9
- data/updateable_views_inheritance.gemspec +1 -0
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 661b8ded59885a6e482cac9d0dfec5f9e1ab10050e3944b5f176e543958f8a33
|
4
|
+
data.tar.gz: fa8e6f63a74a28f9a09d1574ec6e3ae788df2ebdf3eead5789ef691c40337aed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
[](https://github.com/tutuf/updateable_views_inheritance/actions?query=workflow:build)
|
4
|
-
[](https://codecov.io/gh/tutuf/updateable_views_inheritance)
|
5
|
+
[](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
|
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
|
-
#
|
10
|
+
# Parent relation
|
11
11
|
# [:table]
|
12
|
-
#
|
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
|
-
#
|
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] ||
|
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
|
-
|
33
|
-
|
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
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
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
|
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.
|
64
|
-
parent_column_names = parent_columns.
|
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.
|
110
|
-
#
|
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.
|
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.
|
@@ -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, :
|
10
|
-
t.decimal :water_consumption, :
|
11
|
-
t.decimal :coal_consumption, :
|
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
|
data/test/instantiation_test.rb
CHANGED
@@ -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
|
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
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
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
|
-
|
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.
|
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-
|
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/
|
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.
|
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/
|
365
|
+
- test/single_table_inheritance_test.rb
|
352
366
|
- test/test_helper.rb
|