polymorphic_constraints 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.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +10 -0
  5. data/Appraisals +15 -0
  6. data/Gemfile +15 -0
  7. data/MIT-LICENSE +20 -0
  8. data/README.md +254 -0
  9. data/README.rdoc +3 -0
  10. data/Rakefile +61 -0
  11. data/gemfiles/rails_3.1.gemfile +8 -0
  12. data/gemfiles/rails_3.2.gemfile +8 -0
  13. data/gemfiles/rails_4.0.gemfile +8 -0
  14. data/gemfiles/rails_4.1.gemfile +8 -0
  15. data/lib/polymorphic_constraints.rb +24 -0
  16. data/lib/polymorphic_constraints/adapter.rb +34 -0
  17. data/lib/polymorphic_constraints/connection_adapters/abstract/schema_statements.rb +23 -0
  18. data/lib/polymorphic_constraints/connection_adapters/mysql2_adapter.rb +167 -0
  19. data/lib/polymorphic_constraints/connection_adapters/postgresql_adapter.rb +147 -0
  20. data/lib/polymorphic_constraints/connection_adapters/sqlite3_adapter.rb +166 -0
  21. data/lib/polymorphic_constraints/migration/command_recorder.rb +20 -0
  22. data/lib/polymorphic_constraints/railtie.rb +27 -0
  23. data/lib/polymorphic_constraints/utils/polymorphic_error_handler.rb +19 -0
  24. data/lib/polymorphic_constraints/utils/polymorphic_model_finder.rb +19 -0
  25. data/lib/polymorphic_constraints/utils/sql_string.rb +9 -0
  26. data/lib/polymorphic_constraints/version.rb +3 -0
  27. data/polymorphic_constraints.gemspec +30 -0
  28. data/spec/dummy/Rakefile +6 -0
  29. data/spec/dummy/app/assets/images/.keep +0 -0
  30. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  31. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  32. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  33. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  34. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  35. data/spec/dummy/app/mailers/.keep +0 -0
  36. data/spec/dummy/app/models/.keep +0 -0
  37. data/spec/dummy/app/models/concerns/.keep +0 -0
  38. data/spec/dummy/app/models/employee.rb +3 -0
  39. data/spec/dummy/app/models/picture.rb +3 -0
  40. data/spec/dummy/app/models/product.rb +3 -0
  41. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  42. data/spec/dummy/bin/bundle +3 -0
  43. data/spec/dummy/bin/rails +4 -0
  44. data/spec/dummy/bin/rake +4 -0
  45. data/spec/dummy/config.ru +4 -0
  46. data/spec/dummy/config/application.rb +30 -0
  47. data/spec/dummy/config/boot.rb +5 -0
  48. data/spec/dummy/config/database.mysql.yml +6 -0
  49. data/spec/dummy/config/database.postgresql.yml +6 -0
  50. data/spec/dummy/config/database.sqlite.yml +5 -0
  51. data/spec/dummy/config/database.yml +5 -0
  52. data/spec/dummy/config/environment.rb +5 -0
  53. data/spec/dummy/config/environments/development.rb +37 -0
  54. data/spec/dummy/config/environments/production.rb +78 -0
  55. data/spec/dummy/config/environments/test.rb +39 -0
  56. data/spec/dummy/config/initializers/assets.rb +8 -0
  57. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  58. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  59. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  60. data/spec/dummy/config/initializers/inflections.rb +16 -0
  61. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  62. data/spec/dummy/config/initializers/secret_token.rb +2 -0
  63. data/spec/dummy/config/initializers/session_store.rb +3 -0
  64. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  65. data/spec/dummy/config/locales/en.yml +23 -0
  66. data/spec/dummy/config/routes.rb +56 -0
  67. data/spec/dummy/config/secrets.yml +22 -0
  68. data/spec/dummy/db/migrate/20141002195532_polymorphic_tables.rb +18 -0
  69. data/spec/dummy/lib/assets/.keep +0 -0
  70. data/spec/dummy/log/.keep +0 -0
  71. data/spec/dummy/public/404.html +67 -0
  72. data/spec/dummy/public/422.html +67 -0
  73. data/spec/dummy/public/500.html +66 -0
  74. data/spec/dummy/public/favicon.ico +0 -0
  75. data/spec/integration/active_record_integration_spec.rb +117 -0
  76. data/spec/lib/polymorphic_constraints/connection_adapters/mysql2_adapter_spec.rb +166 -0
  77. data/spec/lib/polymorphic_constraints/connection_adapters/postgresql_adapter_spec.rb +159 -0
  78. data/spec/lib/polymorphic_constraints/connection_adapters/sqlite3_adapter_spec.rb +150 -0
  79. data/spec/lib/polymorphic_constraints/utils/polymorphic_error_handler_spec.rb +45 -0
  80. data/spec/spec_helper.rb +52 -0
  81. data/spec/support/adapter_helper.rb +16 -0
  82. metadata +263 -0
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'polymorphic error reraise' do
4
+ class DummyController < ApplicationController
5
+ def polymorphic_record_not_found
6
+ raise ActiveRecord::StatementInvalid, 'Polymorphic record not found.'
7
+ end
8
+
9
+ def polymorphic_reference_exists
10
+ raise ActiveRecord::StatementInvalid, 'Polymorphic reference exists.'
11
+ end
12
+
13
+ def not_a_polymorphic_error
14
+ raise ActiveRecord::StatementInvalid, 'Not a Polymorphic Constraints error.'
15
+ end
16
+ end
17
+
18
+ Rails.application.routes.draw do
19
+ # The priority is based upon order of creation: first created -> highest priority.
20
+ # See how all your routes lay out with "rake routes".
21
+ get '/polymorphic_record_not_found', to: 'dummy#polymorphic_record_not_found'
22
+ get '/polymorphic_reference_exists', to: 'dummy#polymorphic_reference_exists'
23
+ get '/not_a_polymorphic_error', to: 'dummy#not_a_polymorphic_error'
24
+ end
25
+
26
+ describe DummyController, type: :controller do
27
+ context 'polymorphic record not found' do
28
+ it 're-raises ActiveRecord::RecordNotFound properly' do
29
+ expect { get :polymorphic_record_not_found }.to raise_error(ActiveRecord::RecordNotFound)
30
+ end
31
+ end
32
+
33
+ context 'polymorphic reference exists' do
34
+ it 're-raises ActiveRecord::ReferenceViolation properly' do
35
+ expect { get :polymorphic_reference_exists }.to raise_error(ActiveRecord::ReferenceViolation)
36
+ end
37
+ end
38
+
39
+ context 'not a polymorphic constraints error' do
40
+ it 're-raises ActiveRecord::StatementInvalid properly' do
41
+ expect { get :not_a_polymorphic_error }.to raise_error(ActiveRecord::StatementInvalid)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,52 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+
3
+ require 'dummy/config/environment'
4
+ require_relative '../lib/polymorphic_constraints'
5
+ require 'rspec/rails'
6
+ require 'coveralls'
7
+
8
+ Coveralls.wear!
9
+
10
+ ActiveRecord::Migration.verbose = true
11
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
12
+
13
+ RSpec.configure do |config|
14
+ config.after(:all) do
15
+ drop_tables
16
+ end
17
+ end
18
+
19
+ def setup_sqlite3
20
+ connection_config = ActiveRecord::Base.connection_config
21
+ ActiveRecord::Base.establish_connection(connection_config)
22
+ migrate_db
23
+ end
24
+
25
+ def setup_postgresql
26
+ connect_db
27
+ migrate_db
28
+ end
29
+
30
+ def setup_mysql2
31
+ connect_db
32
+ migrate_db
33
+ end
34
+
35
+ private
36
+
37
+ def connect_db
38
+ connection_config = ActiveRecord::Base.connection_config
39
+ ActiveRecord::Base.establish_connection(connection_config.merge(:database => nil))
40
+ ActiveRecord::Base.connection.recreate_database(connection_config[:database])
41
+ ActiveRecord::Base.establish_connection(connection_config)
42
+ end
43
+
44
+ def migrate_db
45
+ ActiveRecord::Migrator.migrate(File.join(Rails.root, 'db/migrate'))
46
+ end
47
+
48
+ def drop_tables
49
+ ActiveRecord::Base.connection.tables.each do |table|
50
+ ActiveRecord::Base.connection.drop_table(table)
51
+ end
52
+ end
@@ -0,0 +1,16 @@
1
+ module Support
2
+ module AdapterHelper
3
+ def execute(sql, name = nil)
4
+ sql_statements << sql
5
+ sql
6
+ end
7
+
8
+ def sql_statements
9
+ @sql_statements ||= []
10
+ end
11
+
12
+ def strip_non_essential_spaces(string_to_strip)
13
+ string_to_strip.gsub(/\s{2,}|\\n/, " ").strip
14
+ end
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,263 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: polymorphic_constraints
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Ahmad Musaffa
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pg
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: mysql2
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.2
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.0.2
83
+ - !ruby/object:Gem::Dependency
84
+ name: coveralls
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Helps to maintain referential integrity for Rails polymorphic associations.
98
+ email:
99
+ - musaffa_csemm@yahoo.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".rspec"
106
+ - ".travis.yml"
107
+ - Appraisals
108
+ - Gemfile
109
+ - MIT-LICENSE
110
+ - README.md
111
+ - README.rdoc
112
+ - Rakefile
113
+ - gemfiles/rails_3.1.gemfile
114
+ - gemfiles/rails_3.2.gemfile
115
+ - gemfiles/rails_4.0.gemfile
116
+ - gemfiles/rails_4.1.gemfile
117
+ - lib/polymorphic_constraints.rb
118
+ - lib/polymorphic_constraints/adapter.rb
119
+ - lib/polymorphic_constraints/connection_adapters/abstract/schema_statements.rb
120
+ - lib/polymorphic_constraints/connection_adapters/mysql2_adapter.rb
121
+ - lib/polymorphic_constraints/connection_adapters/postgresql_adapter.rb
122
+ - lib/polymorphic_constraints/connection_adapters/sqlite3_adapter.rb
123
+ - lib/polymorphic_constraints/migration/command_recorder.rb
124
+ - lib/polymorphic_constraints/railtie.rb
125
+ - lib/polymorphic_constraints/utils/polymorphic_error_handler.rb
126
+ - lib/polymorphic_constraints/utils/polymorphic_model_finder.rb
127
+ - lib/polymorphic_constraints/utils/sql_string.rb
128
+ - lib/polymorphic_constraints/version.rb
129
+ - polymorphic_constraints.gemspec
130
+ - spec/dummy/Rakefile
131
+ - spec/dummy/app/assets/images/.keep
132
+ - spec/dummy/app/assets/javascripts/application.js
133
+ - spec/dummy/app/assets/stylesheets/application.css
134
+ - spec/dummy/app/controllers/application_controller.rb
135
+ - spec/dummy/app/controllers/concerns/.keep
136
+ - spec/dummy/app/helpers/application_helper.rb
137
+ - spec/dummy/app/mailers/.keep
138
+ - spec/dummy/app/models/.keep
139
+ - spec/dummy/app/models/concerns/.keep
140
+ - spec/dummy/app/models/employee.rb
141
+ - spec/dummy/app/models/picture.rb
142
+ - spec/dummy/app/models/product.rb
143
+ - spec/dummy/app/views/layouts/application.html.erb
144
+ - spec/dummy/bin/bundle
145
+ - spec/dummy/bin/rails
146
+ - spec/dummy/bin/rake
147
+ - spec/dummy/config.ru
148
+ - spec/dummy/config/application.rb
149
+ - spec/dummy/config/boot.rb
150
+ - spec/dummy/config/database.mysql.yml
151
+ - spec/dummy/config/database.postgresql.yml
152
+ - spec/dummy/config/database.sqlite.yml
153
+ - spec/dummy/config/database.yml
154
+ - spec/dummy/config/environment.rb
155
+ - spec/dummy/config/environments/development.rb
156
+ - spec/dummy/config/environments/production.rb
157
+ - spec/dummy/config/environments/test.rb
158
+ - spec/dummy/config/initializers/assets.rb
159
+ - spec/dummy/config/initializers/backtrace_silencers.rb
160
+ - spec/dummy/config/initializers/cookies_serializer.rb
161
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
162
+ - spec/dummy/config/initializers/inflections.rb
163
+ - spec/dummy/config/initializers/mime_types.rb
164
+ - spec/dummy/config/initializers/secret_token.rb
165
+ - spec/dummy/config/initializers/session_store.rb
166
+ - spec/dummy/config/initializers/wrap_parameters.rb
167
+ - spec/dummy/config/locales/en.yml
168
+ - spec/dummy/config/routes.rb
169
+ - spec/dummy/config/secrets.yml
170
+ - spec/dummy/db/migrate/20141002195532_polymorphic_tables.rb
171
+ - spec/dummy/lib/assets/.keep
172
+ - spec/dummy/log/.keep
173
+ - spec/dummy/public/404.html
174
+ - spec/dummy/public/422.html
175
+ - spec/dummy/public/500.html
176
+ - spec/dummy/public/favicon.ico
177
+ - spec/integration/active_record_integration_spec.rb
178
+ - spec/lib/polymorphic_constraints/connection_adapters/mysql2_adapter_spec.rb
179
+ - spec/lib/polymorphic_constraints/connection_adapters/postgresql_adapter_spec.rb
180
+ - spec/lib/polymorphic_constraints/connection_adapters/sqlite3_adapter_spec.rb
181
+ - spec/lib/polymorphic_constraints/utils/polymorphic_error_handler_spec.rb
182
+ - spec/spec_helper.rb
183
+ - spec/support/adapter_helper.rb
184
+ homepage: https://github.com/musaffa/polymorphic_constraints
185
+ licenses:
186
+ - MIT
187
+ metadata: {}
188
+ post_install_message:
189
+ rdoc_options: []
190
+ require_paths:
191
+ - lib
192
+ required_ruby_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: 1.9.3
197
+ required_rubygems_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ requirements: []
203
+ rubyforge_project:
204
+ rubygems_version: 2.2.2
205
+ signing_key:
206
+ specification_version: 4
207
+ summary: Database agnostic referential integrity enforcer for Rails polymorphic associations
208
+ using triggers.
209
+ test_files:
210
+ - spec/dummy/Rakefile
211
+ - spec/dummy/app/assets/images/.keep
212
+ - spec/dummy/app/assets/javascripts/application.js
213
+ - spec/dummy/app/assets/stylesheets/application.css
214
+ - spec/dummy/app/controllers/application_controller.rb
215
+ - spec/dummy/app/controllers/concerns/.keep
216
+ - spec/dummy/app/helpers/application_helper.rb
217
+ - spec/dummy/app/mailers/.keep
218
+ - spec/dummy/app/models/.keep
219
+ - spec/dummy/app/models/concerns/.keep
220
+ - spec/dummy/app/models/employee.rb
221
+ - spec/dummy/app/models/picture.rb
222
+ - spec/dummy/app/models/product.rb
223
+ - spec/dummy/app/views/layouts/application.html.erb
224
+ - spec/dummy/bin/bundle
225
+ - spec/dummy/bin/rails
226
+ - spec/dummy/bin/rake
227
+ - spec/dummy/config.ru
228
+ - spec/dummy/config/application.rb
229
+ - spec/dummy/config/boot.rb
230
+ - spec/dummy/config/database.mysql.yml
231
+ - spec/dummy/config/database.postgresql.yml
232
+ - spec/dummy/config/database.sqlite.yml
233
+ - spec/dummy/config/database.yml
234
+ - spec/dummy/config/environment.rb
235
+ - spec/dummy/config/environments/development.rb
236
+ - spec/dummy/config/environments/production.rb
237
+ - spec/dummy/config/environments/test.rb
238
+ - spec/dummy/config/initializers/assets.rb
239
+ - spec/dummy/config/initializers/backtrace_silencers.rb
240
+ - spec/dummy/config/initializers/cookies_serializer.rb
241
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
242
+ - spec/dummy/config/initializers/inflections.rb
243
+ - spec/dummy/config/initializers/mime_types.rb
244
+ - spec/dummy/config/initializers/secret_token.rb
245
+ - spec/dummy/config/initializers/session_store.rb
246
+ - spec/dummy/config/initializers/wrap_parameters.rb
247
+ - spec/dummy/config/locales/en.yml
248
+ - spec/dummy/config/routes.rb
249
+ - spec/dummy/config/secrets.yml
250
+ - spec/dummy/db/migrate/20141002195532_polymorphic_tables.rb
251
+ - spec/dummy/lib/assets/.keep
252
+ - spec/dummy/log/.keep
253
+ - spec/dummy/public/404.html
254
+ - spec/dummy/public/422.html
255
+ - spec/dummy/public/500.html
256
+ - spec/dummy/public/favicon.ico
257
+ - spec/integration/active_record_integration_spec.rb
258
+ - spec/lib/polymorphic_constraints/connection_adapters/mysql2_adapter_spec.rb
259
+ - spec/lib/polymorphic_constraints/connection_adapters/postgresql_adapter_spec.rb
260
+ - spec/lib/polymorphic_constraints/connection_adapters/sqlite3_adapter_spec.rb
261
+ - spec/lib/polymorphic_constraints/utils/polymorphic_error_handler_spec.rb
262
+ - spec/spec_helper.rb
263
+ - spec/support/adapter_helper.rb