updateable_views_inheritance 1.4.2 → 1.4.4

Sign up to get free protection for your applications and to get access to all the features.
data/test/schema_test.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), 'test_helper')
1
+ require_relative 'test_helper'
2
2
 
3
3
  class UpdateableViewsInheritanceSchemaTest < ActiveSupport::TestCase
4
4
  def setup
@@ -14,7 +14,6 @@ class UpdateableViewsInheritanceSchemaTest < ActiveSupport::TestCase
14
14
  assert_equal 'id', @connection.primary_key(:maglev_locomotives), "Wrong or no primary key for child aggregate view"
15
15
  end
16
16
 
17
-
18
17
  def test_content_columns
19
18
  assert !SteamLocomotive.content_columns.map(&:name).include?("id")
20
19
  end
@@ -221,4 +220,35 @@ class UpdateableViewsInheritanceSchemaTest < ActiveSupport::TestCase
221
220
  assert @connection.columns(:bicycles).map{ |c| c.name }.include?('wheel_size'),
222
221
  "Newly added column not present in view after rebuild for 2. hierarchy"
223
222
  end
223
+
224
+ class UseExistingTable < ActiveRecord::Migration
225
+ def self.up
226
+ create_table :tbl_diesel_locomotives do |t|
227
+ t.belongs_to :locomotives
228
+ t.integer :num_cylinders
229
+ end
230
+ create_child(:diesel_locomotives,
231
+ table: :tbl_diesel_locomotives,
232
+ parent: :locomotives,
233
+ skip_creating_child_table: true)
234
+ end
235
+ end
236
+
237
+ def test_skip_creating_child_table
238
+ UseExistingTable.up
239
+ assert @connection.columns(:diesel_locomotives).map(&:name).include?("num_cylinders")
240
+ end
241
+
242
+ class ReservedSQLWords < ActiveRecord::Migration
243
+ def self.up
244
+ create_child(:table, parent: :locomotives) do |t|
245
+ t.integer :column
246
+ end
247
+ end
248
+ end
249
+
250
+ def test_reserved_words_in_tables_and_columns
251
+ ReservedSQLWords.up
252
+ assert @connection.columns(:table).map(&:name).include?("column")
253
+ end
224
254
  end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), 'test_helper')
1
+ require_relative 'test_helper'
2
2
 
3
3
  class SingleTableInheritanceAggregateViewTest < ActiveSupport::TestCase
4
4
  def setup
data/test/test_helper.rb CHANGED
@@ -1,6 +1,27 @@
1
1
  # Configure Rails Environment
2
2
  ENV["RAILS_ENV"] = "test"
3
3
 
4
+ # test coverage
5
+ require 'simplecov'
6
+ require 'simplecov_json_formatter'
7
+
8
+ SimpleCov.start 'rails' do
9
+ if ENV['CI']
10
+ formatter SimpleCov::Formatter::JSONFormatter
11
+ else
12
+ formatter SimpleCov::Formatter::MultiFormatter.new([
13
+ SimpleCov::Formatter::SimpleFormatter,
14
+ SimpleCov::Formatter::HTMLFormatter
15
+ ])
16
+ end
17
+
18
+ track_files "lib/**/*.rb"
19
+ # repeat the add_filter values in sonar-project.properties file
20
+ # otherwise sonarcloud does not calculate properly the coverage ratio
21
+ add_filter "lib/generators/updateable_views_inheritance/templates/create_updateable_views_inheritance.rb"
22
+ add_filter "lib/updateable_views_inheritance/version.rb"
23
+ end
24
+
4
25
  require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
26
  require 'rails/test_help'
6
27
  require 'updateable_views_inheritance'
@@ -19,10 +19,14 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  s.add_dependency "activerecord", "~> 4.2.8"
22
- s.add_dependency "pg"
22
+ s.add_dependency "pg", "~> 0.21"
23
23
 
24
- s.add_development_dependency 'minitest'
25
- s.add_development_dependency "rails", ' ~> 4.2.8'
26
- s.add_development_dependency "bundler", "~> 1.3"
24
+ s.add_development_dependency 'bigdecimal', '1.3.5'
25
+ s.add_development_dependency "bundler"
26
+ s.add_development_dependency "minitest"
27
+ s.add_development_dependency "rails", '= 4.2.11.1'
27
28
  s.add_development_dependency "rake"
29
+ s.add_development_dependency "simplecov"
30
+ s.add_development_dependency "simplecov_json_formatter"
31
+ s.add_development_dependency "solargraph"
28
32
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: updateable_views_inheritance
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.2
4
+ version: 1.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sava Chankov
8
8
  - Denitsa Belogusheva
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-03-28 00:00:00.000000000 Z
12
+ date: 2024-10-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -27,12 +27,40 @@ dependencies:
27
27
  version: 4.2.8
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: pg
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '0.21'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '0.21'
42
+ - !ruby/object:Gem::Dependency
43
+ name: bigdecimal
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '='
47
+ - !ruby/object:Gem::Version
48
+ version: 1.3.5
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '='
54
+ - !ruby/object:Gem::Version
55
+ version: 1.3.5
56
+ - !ruby/object:Gem::Dependency
57
+ name: bundler
30
58
  requirement: !ruby/object:Gem::Requirement
31
59
  requirements:
32
60
  - - ">="
33
61
  - !ruby/object:Gem::Version
34
62
  version: '0'
35
- type: :runtime
63
+ type: :development
36
64
  prerelease: false
37
65
  version_requirements: !ruby/object:Gem::Requirement
38
66
  requirements:
@@ -57,32 +85,60 @@ dependencies:
57
85
  name: rails
58
86
  requirement: !ruby/object:Gem::Requirement
59
87
  requirements:
60
- - - "~>"
88
+ - - '='
61
89
  - !ruby/object:Gem::Version
62
- version: 4.2.8
90
+ version: 4.2.11.1
63
91
  type: :development
64
92
  prerelease: false
65
93
  version_requirements: !ruby/object:Gem::Requirement
66
94
  requirements:
67
- - - "~>"
95
+ - - '='
68
96
  - !ruby/object:Gem::Version
69
- version: 4.2.8
97
+ version: 4.2.11.1
70
98
  - !ruby/object:Gem::Dependency
71
- name: bundler
99
+ name: rake
72
100
  requirement: !ruby/object:Gem::Requirement
73
101
  requirements:
74
- - - "~>"
102
+ - - ">="
75
103
  - !ruby/object:Gem::Version
76
- version: '1.3'
104
+ version: '0'
77
105
  type: :development
78
106
  prerelease: false
79
107
  version_requirements: !ruby/object:Gem::Requirement
80
108
  requirements:
81
- - - "~>"
109
+ - - ">="
82
110
  - !ruby/object:Gem::Version
83
- version: '1.3'
111
+ version: '0'
84
112
  - !ruby/object:Gem::Dependency
85
- name: rake
113
+ name: simplecov
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: simplecov_json_formatter
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: solargraph
86
142
  requirement: !ruby/object:Gem::Requirement
87
143
  requirements:
88
144
  - - ">="
@@ -104,11 +160,14 @@ executables: []
104
160
  extensions: []
105
161
  extra_rdoc_files: []
106
162
  files:
163
+ - ".deepsource.toml"
164
+ - ".github/workflows/build.yml"
107
165
  - ".gitignore"
166
+ - ".vscode/settings.json"
108
167
  - CHANGELOG.md
109
168
  - Gemfile
110
169
  - MIT-LICENSE
111
- - README.rdoc
170
+ - README.md
112
171
  - Rakefile
113
172
  - doc/template/horo.rb
114
173
  - lib/generators/updateable_views_inheritance/install_generator.rb
@@ -121,6 +180,7 @@ files:
121
180
  - test/content_test.rb
122
181
  - test/deep_hierarchy_test.rb
123
182
  - test/dummy/Rakefile
183
+ - test/dummy/app/assets/config/manifest.js
124
184
  - test/dummy/app/assets/javascripts/application.js
125
185
  - test/dummy/app/assets/stylesheets/application.css
126
186
  - test/dummy/app/controllers/application_controller.rb
@@ -185,6 +245,7 @@ files:
185
245
  - test/fixtures/steam_locomotives.yml
186
246
  - test/fixtures/steam_trains.yml
187
247
  - test/install_generator_test.rb
248
+ - test/instantiation_test.rb
188
249
  - test/migration_test.rb
189
250
  - test/pg_insert_returning_with_rules_spec.rb
190
251
  - test/schema_test.rb
@@ -195,7 +256,7 @@ homepage: http://github.com/tutuf/updateable_views_inheritance
195
256
  licenses:
196
257
  - MIT
197
258
  metadata: {}
198
- post_install_message:
259
+ post_install_message:
199
260
  rdoc_options: []
200
261
  require_paths:
201
262
  - lib
@@ -210,15 +271,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
210
271
  - !ruby/object:Gem::Version
211
272
  version: '0'
212
273
  requirements: []
213
- rubyforge_project:
214
- rubygems_version: 2.6.10
215
- signing_key:
274
+ rubygems_version: 3.4.12
275
+ signing_key:
216
276
  specification_version: 4
217
277
  summary: Class table inheritance for ActiveRecord
218
278
  test_files:
219
279
  - test/content_test.rb
220
280
  - test/deep_hierarchy_test.rb
221
281
  - test/dummy/Rakefile
282
+ - test/dummy/app/assets/config/manifest.js
222
283
  - test/dummy/app/assets/javascripts/application.js
223
284
  - test/dummy/app/assets/stylesheets/application.css
224
285
  - test/dummy/app/controllers/application_controller.rb
@@ -283,6 +344,7 @@ test_files:
283
344
  - test/fixtures/steam_locomotives.yml
284
345
  - test/fixtures/steam_trains.yml
285
346
  - test/install_generator_test.rb
347
+ - test/instantiation_test.rb
286
348
  - test/migration_test.rb
287
349
  - test/pg_insert_returning_with_rules_spec.rb
288
350
  - test/schema_test.rb
data/README.rdoc DELETED
@@ -1,121 +0,0 @@
1
- ==Class Table Inheritance
2
-
3
- Class Table Inheritance for ActiveRecord using updateable views.
4
-
5
- More about the pattern on http://www.martinfowler.com/eaaCatalog/classTableInheritance.html. This gem messes very little with Rails inheritance mechanism.
6
- Instead it relies on updatable views in the database to represent classes in the inheritance chain. The approach was {first suggested by John
7
- Wilger}[http://web.archive.org/web/20060408145717/johnwilger.com/articles/2005/09/29/class-table-inheritance-in-rails-with-postgresql].
8
-
9
-
10
- ==Requirements
11
-
12
- Rails: 4.x
13
-
14
- Ruby: 1.9.3+
15
-
16
- Database: PostgreSQL 8.1+ only. Patches for other DBMS are welcome. Note that you are not required to use updateable views, children relations can be tables (with some triggers involved) or materialized views.
17
-
18
- ==Install
19
- Run
20
- gem install updateable_views_inheritance
21
-
22
- ==Usage
23
-
24
- ===Setup
25
-
26
- * In <tt>Gemfile</tt> add <tt>gem 'updateable_views_inheritance'</tt>
27
- * Run <tt>rails generate updateable_views_inheritance:install && rake db:migrate</tt>
28
- * In <tt>config/environment.rb</tt> set <tt>config.active_record.schema_format = :sql</tt>
29
- * In case you're using fixtures, don't forget to run
30
-
31
- rake updateable_views_inheritance:fixture
32
-
33
- after every change to the class hierarchy. Otherwise tests may fail.
34
-
35
- ===Example
36
-
37
- class CtiExample < ActiveRecord::Migration
38
- def self.up
39
- create_table :locomotives do |t|
40
- t.column :name, :string
41
- t.column :max_speed, :integer
42
- t.column :type, :string
43
- end
44
-
45
- create_child(:steam_locomotives, :parent => :locomotives) do |t|
46
- t.decimal :water_consumption, :precision => 6, :scale => 2
47
- t.decimal :coal_consumption, :precision => 6, :scale => 2
48
- end
49
-
50
- create_child(:electric_locomotives, :table => :raw_electric_locomotives, :parent => :locomotives) do |t|
51
- t.decimal :electricity_consumption, :precision => 6, :scale => 2
52
- end
53
- end
54
-
55
- def self.down
56
- drop_child :steam_locomotives
57
- drop_child :electric_locomotives
58
- drop_table :locomotives
59
- end
60
- end
61
-
62
- And the models:
63
- class Locomotive
64
- end
65
-
66
- class SteamLocomotive < Locomotive
67
- self.table_name = :steam_locomotives
68
- end
69
-
70
- class ElectricLocomotive < Locomotive
71
- self.table_name = :electric_locomotives
72
- end
73
-
74
- Note that models of children classes must specify table name explicitly.
75
-
76
- ===Changing Columns in Underlying Tables
77
-
78
- class RemoveColumnInParentTable < ActiveRecord::Migration
79
- def self.up
80
- remove_parent_and_children_views(:locomotives)
81
- remove_column(:locomotives, :max_speed)
82
- rename_column(:name, :title)
83
- rebuild_parent_and_children_views(:locomotives)
84
- end
85
- end
86
-
87
- ===Renaming Underlying Tables
88
-
89
- remove_parent_and_children_views(:old_name)
90
- rename_table(:old_name,:new_name)
91
- execute "UPDATE updateable_views_inheritance SET child_aggregate_view = 'new_name' WHERE child_aggregate_view = 'old_name'"
92
- execute "UPDATE updateable_views_inheritance SET parent_relation = 'new_name' WHERE parent_relation = 'old_name'"
93
- rebuild_parent_and_children_views(:new_name)
94
-
95
- ===Removing Classes
96
-
97
- Note that you should remove only leaf classes (i.e. those that do not have descendants). If you want to erase a whole chain or part of chain you have to remove first the leaves and then their ancestors. Use <tt>drop_child(child_view)</tt> in migrations.
98
-
99
- ==Compatibility with Single Table Inheritance
100
-
101
- The approach of this gem is completely independent from Rails built-in Single Table Inheritance. STI and CLTI can safely be mixed in one inheritance chain.
102
-
103
- ==Testing Your App
104
-
105
- If you use fixtures, you must run <tt>rake updateable_views_inheritance:fixture</tt> to generate fixture for the updateable_views_inheritance table after you add/remove
106
- classes from the hierarchy or change underlying table or view names. <b>Without it primary key sequence for inheritors' tables won't be bumped to the max and it might not be possible to save objects!</b> If you don't use fixtures for the classes in the hierarchy you don't need to do that.
107
-
108
- This gem re-enables referential integrity on fixture loading. This means that
109
-
110
- fixtures :all
111
-
112
- may fail when there are foreign key constraints on tables. To fix this, explicitly declare fixture load order in <tt>test_helper.rb</tt>:
113
-
114
- fixtures :roots, :trunks, :leafs, ...
115
-
116
- for all fixtures you want to load.
117
-
118
- ==Gem Development & Testing
119
-
120
- The gem has a comprehensive test suite. In order to run it, your user must be a superuser in PostgreSQL.
121
- If this is not the case, run <tt>createuser -s pesho</tt> (assuming your Unix account is <tt>pesho</tt>).