pg_morph 0.3.0 → 1.0.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.
@@ -13,21 +13,53 @@ describe PgMorph::Polymorphic do
13
13
 
14
14
  it { expect(@polymorphic.child_table).to eq(:bars) }
15
15
 
16
+ describe "#base_table" do
17
+ it "sets default base table" do
18
+ expect(@polymorphic.base_table).to eq(:foos_base)
19
+ end
20
+
21
+ it "sets base table with options" do
22
+ polymorphic = PgMorph::Polymorphic.new(:foos, :bars, column: :baz, base_table: :base)
23
+ expect(polymorphic.base_table).to eq(:base)
24
+ end
25
+ end
26
+
27
+ describe '#rename_base_table_sql' do
28
+ it 'returns proper sql if there is no base table yet' do
29
+ expect(@polymorphic.rename_base_table_sql.squeeze(' ')).to eq %Q{
30
+ ALTER TABLE foos RENAME TO foos_base;
31
+ }.squeeze(' ')
32
+ end
33
+
34
+ it 'returns empty string if base table exists' do
35
+ expect(@polymorphic).to receive(:can_rename_to_base_table?).and_return(false)
36
+ expect(@polymorphic.rename_base_table_sql.squeeze(' ')).to eq ''
37
+ end
38
+ end
39
+
40
+ describe '#create_base_table_view_sql' do
41
+ it 'returns proper sql' do
42
+ expect(@polymorphic.create_base_table_view_sql).to eq %Q{
43
+ CREATE OR REPLACE VIEW foos AS SELECT * FROM foos_base;
44
+ }
45
+ end
46
+ end
47
+
16
48
  describe '#create_proxy_table_sql' do
17
- it do
18
- @polymorphic.create_proxy_table_sql.squeeze(' ').should == %Q{
49
+ it 'generates proper sql' do
50
+ expect(@polymorphic.create_proxy_table_sql.squeeze(' ')).to eq %Q{
19
51
  CREATE TABLE foos_bars (
20
52
  CHECK (baz_type = 'Bar'),
21
53
  PRIMARY KEY (id),
22
54
  FOREIGN KEY (baz_id) REFERENCES bars(id)
23
- ) INHERITS (foos);
55
+ ) INHERITS (foos_base);
24
56
  }.squeeze(' ')
25
57
  end
26
58
  end
27
59
 
28
60
  describe '#create_before_insert_trigger_fun_sql' do
29
- it '' do
30
- @polymorphic.should_receive(:before_insert_trigger_content)
61
+ it 'generates proper sql' do
62
+ expect(@polymorphic).to receive(:before_insert_trigger_content)
31
63
 
32
64
  @polymorphic.create_before_insert_trigger_fun_sql
33
65
  end
@@ -35,7 +67,7 @@ describe PgMorph::Polymorphic do
35
67
 
36
68
  describe '#create_trigger_body' do
37
69
  it 'returns proper sql for new trigger' do
38
- @polymorphic.send(:create_trigger_body).squeeze(' ').should == %Q{
70
+ expect(@polymorphic.send(:create_trigger_body).squeeze(' ')).to eq %Q{
39
71
  IF (NEW.baz_type = 'Bar') THEN
40
72
  INSERT INTO foos_bars VALUES (NEW.*);
41
73
  }.squeeze(' ')
@@ -43,8 +75,8 @@ describe PgMorph::Polymorphic do
43
75
  end
44
76
 
45
77
  describe '#before_insert_trigger_content' do
46
- it '' do
47
- @polymorphic.send(:before_insert_trigger_content) { 'my block' }.squeeze(' ').should == %Q{
78
+ it 'generate proper sql' do
79
+ expect(@polymorphic.send(:before_insert_trigger_content) { 'my block' }.squeeze(' ')).to eq %Q{
48
80
  CREATE OR REPLACE FUNCTION foos_baz_fun() RETURNS TRIGGER AS $$
49
81
  BEGIN
50
82
  my block
@@ -57,42 +89,20 @@ describe PgMorph::Polymorphic do
57
89
  end
58
90
  end
59
91
 
60
- describe '#create_after_insert_trigger_fun_sql' do
61
- it do
62
- @polymorphic.create_after_insert_trigger_fun_sql.squeeze(' ').should == %Q{
63
- CREATE OR REPLACE FUNCTION delete_from_foos_master_fun() RETURNS TRIGGER AS $$
64
- BEGIN
65
- DELETE FROM ONLY foos WHERE id = NEW.id;
66
- RETURN NEW;
67
- END; $$ LANGUAGE plpgsql;
68
- }.squeeze(' ')
69
- end
70
- end
71
-
72
- describe '#create_after_insert_trigger_sql' do
73
- it do
74
- @polymorphic.create_after_insert_trigger_sql.squeeze(' ').should == %Q{
75
- DROP TRIGGER IF EXISTS foos_after_insert_trigger ON foos;
76
- CREATE TRIGGER foos_after_insert_trigger
77
- AFTER INSERT ON foos
78
- FOR EACH ROW EXECUTE PROCEDURE delete_from_foos_master_fun();
79
- }.squeeze(' ')
80
- end
81
- end
82
-
83
92
  describe '#remove_before_insert_trigger_sql' do
84
93
  it 'raise error if no function' do
85
- -> { @polymorphic.remove_before_insert_trigger_sql }
86
- .should raise_error PG::Error
94
+ expect { @polymorphic.remove_before_insert_trigger_sql }
95
+ .to raise_error PG::Error
87
96
  end
88
97
 
89
98
  it 'returns proper sql for single child table' do
90
99
  @polymorphic.stub(:get_function).with('foos_baz_fun').and_return('')
91
100
 
92
- @polymorphic.remove_before_insert_trigger_sql.squeeze(' ').should == %Q{
101
+ expect(@polymorphic.remove_before_insert_trigger_sql.squeeze(' ')).to eq %Q{
93
102
  DROP TRIGGER foos_baz_insert_trigger ON foos;
94
103
  DROP FUNCTION foos_baz_fun();
95
104
  }.squeeze(' ')
96
105
  end
97
106
  end
107
+
98
108
  end
@@ -1,3 +1,11 @@
1
+ if ENV['CODECLIMATE_REPO_TOKEN']
2
+ require "codeclimate-test-reporter"
3
+ CodeClimate::TestReporter.start
4
+ else
5
+ require 'simplecov'
6
+ SimpleCov.start
7
+ end
8
+
1
9
  ENV["RAILS_ENV"] ||= 'test'
2
10
  require File.expand_path("../dummy/config/environment", __FILE__)
3
11
  require 'rspec/rails'
metadata CHANGED
@@ -1,126 +1,139 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_morph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Hanka Seweryn
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-10-14 00:00:00.000000000 Z
11
+ date: 2015-03-18 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activerecord
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '3'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '3'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rails
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
33
  version: '3'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
40
  version: '3'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: pg
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ~>
45
+ - - "~>"
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0.17'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ~>
52
+ - - "~>"
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0.17'
55
+ - !ruby/object:Gem::Dependency
56
+ name: codeclimate-test-reporter
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.4'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.4'
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: rspec-rails
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
- - - ! '>='
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.14'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.14'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
68
88
  - !ruby/object:Gem::Version
69
- version: '0'
89
+ version: '4.2'
70
90
  type: :development
71
91
  prerelease: false
72
92
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
93
  requirements:
75
- - - ! '>='
94
+ - - "~>"
76
95
  - !ruby/object:Gem::Version
77
- version: '0'
96
+ version: '4.2'
78
97
  - !ruby/object:Gem::Dependency
79
98
  name: rake
80
99
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
100
  requirements:
83
- - - ~>
101
+ - - "~>"
84
102
  - !ruby/object:Gem::Version
85
103
  version: '10.3'
86
104
  type: :development
87
105
  prerelease: false
88
106
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
107
  requirements:
91
- - - ~>
108
+ - - "~>"
92
109
  - !ruby/object:Gem::Version
93
110
  version: '10.3'
94
111
  - !ruby/object:Gem::Dependency
95
112
  name: pry
96
113
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
114
  requirements:
99
- - - ~>
115
+ - - "~>"
100
116
  - !ruby/object:Gem::Version
101
117
  version: '0.10'
102
118
  type: :development
103
119
  prerelease: false
104
120
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
121
  requirements:
107
- - - ~>
122
+ - - "~>"
108
123
  - !ruby/object:Gem::Version
109
124
  version: '0.10'
110
125
  - !ruby/object:Gem::Dependency
111
126
  name: awesome_print
112
127
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
128
  requirements:
115
- - - ~>
129
+ - - "~>"
116
130
  - !ruby/object:Gem::Version
117
131
  version: '1.2'
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
135
  requirements:
123
- - - ~>
136
+ - - "~>"
124
137
  - !ruby/object:Gem::Version
125
138
  version: '1.2'
126
139
  description: Takes care of postgres DB consistency for ActiveRecord polymorphic associations
@@ -131,9 +144,12 @@ executables: []
131
144
  extensions: []
132
145
  extra_rdoc_files: []
133
146
  files:
134
- - .gitignore
147
+ - ".gitignore"
148
+ - ".travis.yml"
149
+ - CHANGELOG.md
135
150
  - Gemfile
136
151
  - Gemfile.lock
152
+ - Guardfile
137
153
  - LICENSE.txt
138
154
  - README.md
139
155
  - Rakefile
@@ -175,36 +191,35 @@ files:
175
191
  - spec/dummy/db/migrate/20140401124727_create_likes.rb
176
192
  - spec/dummy/db/schema.rb
177
193
  - spec/dummy/db/seeds.rb
178
- - spec/pg_morph/adapter_integration_spec.rb
179
- - spec/pg_morph/adapter_spec.rb
180
- - spec/pg_morph/naming_spec.rb
181
- - spec/pg_morph/polymorphic_integration_spec.rb
182
- - spec/pg_morph/polymorphic_spec.rb
194
+ - spec/lib/pg_morph/adapter_integration_spec.rb
195
+ - spec/lib/pg_morph/adapter_spec.rb
196
+ - spec/lib/pg_morph/naming_spec.rb
197
+ - spec/lib/pg_morph/polymorphic_integration_spec.rb
198
+ - spec/lib/pg_morph/polymorphic_spec.rb
183
199
  - spec/spec_helper.rb
184
200
  homepage: https://github.com/LunarLogic/pg_morph
185
201
  licenses:
186
202
  - MIT
203
+ metadata: {}
187
204
  post_install_message:
188
205
  rdoc_options: []
189
206
  require_paths:
190
207
  - lib
191
208
  required_ruby_version: !ruby/object:Gem::Requirement
192
- none: false
193
209
  requirements:
194
- - - ! '>='
210
+ - - ">="
195
211
  - !ruby/object:Gem::Version
196
212
  version: '0'
197
213
  required_rubygems_version: !ruby/object:Gem::Requirement
198
- none: false
199
214
  requirements:
200
- - - ! '>='
215
+ - - ">="
201
216
  - !ruby/object:Gem::Version
202
217
  version: '0'
203
218
  requirements: []
204
219
  rubyforge_project:
205
- rubygems_version: 1.8.25
220
+ rubygems_version: 2.2.2
206
221
  signing_key:
207
- specification_version: 3
222
+ specification_version: 4
208
223
  summary: Takes care of postgres DB consistency for ActiveRecord polymorphic associations
209
224
  test_files:
210
225
  - spec/dummy/.rspec
@@ -237,10 +252,9 @@ test_files:
237
252
  - spec/dummy/db/migrate/20140401124727_create_likes.rb
238
253
  - spec/dummy/db/schema.rb
239
254
  - spec/dummy/db/seeds.rb
240
- - spec/pg_morph/adapter_integration_spec.rb
241
- - spec/pg_morph/adapter_spec.rb
242
- - spec/pg_morph/naming_spec.rb
243
- - spec/pg_morph/polymorphic_integration_spec.rb
244
- - spec/pg_morph/polymorphic_spec.rb
255
+ - spec/lib/pg_morph/adapter_integration_spec.rb
256
+ - spec/lib/pg_morph/adapter_spec.rb
257
+ - spec/lib/pg_morph/naming_spec.rb
258
+ - spec/lib/pg_morph/polymorphic_integration_spec.rb
259
+ - spec/lib/pg_morph/polymorphic_spec.rb
245
260
  - spec/spec_helper.rb
246
- has_rdoc:
@@ -1,89 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PgMorph::Adapter do
4
- ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
5
- include PgMorph::Adapter
6
-
7
- def run(query)
8
- ActiveRecord::Base.connection.select_value(query)
9
- end
10
- end
11
-
12
- before do
13
- @adapter = ActiveRecord::Base.connection
14
- @comments_polymorphic = PgMorph::Polymorphic.new(:likes, :comments, column: :likeable)
15
- @posts_polymorphic = PgMorph::Polymorphic.new(:likes, :posts, column: :likeable)
16
- begin
17
- Like.destroy_all
18
- Comment.destroy_all
19
- @adapter.remove_polymorphic_foreign_key(:likes, :comments, column: :likeable)
20
- @adapter.remove_polymorphic_foreign_key(:likes, :posts, column: :likeable)
21
- rescue
22
- end
23
- end
24
-
25
- after do
26
- begin
27
- @adapter.add_polymorphic_foreign_key(:likes, :comments, column: :likeable)
28
- rescue
29
- end
30
- end
31
-
32
- describe '#add_polymorphic_foreign_key' do
33
- it 'creates proxy table' do
34
- @adapter.add_polymorphic_foreign_key(:likes, :comments, column: :likeable)
35
-
36
- expect(@adapter.run('SELECT id FROM likes_comments')).to be_nil
37
- end
38
- end
39
-
40
- describe '#remove_polymorphic_foreign_key' do
41
- it 'removes proxy table' do
42
- @adapter.add_polymorphic_foreign_key(:likes, :comments, column: :likeable)
43
- expect(@adapter.run('SELECT id FROM likes_comments')).to be_nil
44
-
45
- @adapter.remove_polymorphic_foreign_key(:likes, :comments, column: :likeable)
46
-
47
- -> { @adapter.run('SELECT id FROM likes_comments') }
48
- .should raise_error ActiveRecord::StatementInvalid
49
- end
50
- end
51
-
52
- describe 'assertions to a partition' do
53
- it 'works properly' do
54
- # new record inserted correctly
55
- @adapter.add_polymorphic_foreign_key(:likes, :comments, column: :likeable)
56
- comment = Comment.create(content: 'comment')
57
- like = Like.create(likeable: comment)
58
-
59
- expect(Like.count).to eq(1)
60
- expect(like.id).to eq(Like.last.id)
61
-
62
- # new record with more partition tables inserted correctly
63
- @adapter.add_polymorphic_foreign_key(:likes, :posts, column: :likeable)
64
- post = Post.create(content: 'content')
65
- like2 = Like.create(likeable: post)
66
-
67
- expect(Like.count).to eq(2)
68
- expect(like2.id).to eq(Like.last.id)
69
-
70
- # after removing partition row not inserted
71
- like.destroy
72
- expect(Like.count).to eq(1)
73
- @adapter.remove_polymorphic_foreign_key(:likes, :comments, column: :likeable)
74
-
75
- -> { Like.create(likeable: comment) }
76
- .should raise_error ActiveRecord::StatementInvalid
77
-
78
- # if no partitions row inserted correctly
79
- like2.destroy
80
- expect(Like.count).to eq(0)
81
- @adapter.remove_polymorphic_foreign_key(:likes, :posts, column: :likeable)
82
- like4 = Like.create(likeable: post)
83
-
84
- expect(Like.count).to eq(1)
85
- expect(like4.id).to eq(Like.last.id)
86
- end
87
- end
88
-
89
- end