fides 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -15,4 +15,5 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
- database.yml
18
+ database.yml
19
+ *.sqlite3
data/Rakefile CHANGED
@@ -4,6 +4,9 @@ require "bundler/gem_tasks"
4
4
  require 'rake/testtask'
5
5
  require 'pg'
6
6
  require 'yaml'
7
+ require 'sqlite3'
8
+
9
+ SQLITE3_FILE_PATH = "test/db/fides_test.sqlite3"
7
10
 
8
11
  def postgres_db(opts)
9
12
  path = File.join(File.dirname(__FILE__), "test", "config", "database.yml")
@@ -23,12 +26,23 @@ def postgres_db(opts)
23
26
  end
24
27
  end
25
28
 
29
+ def create_sqlite3_db
30
+ File.delete(SQLITE3_FILE_PATH) if File.exists?(SQLITE3_FILE_PATH)
31
+ db = SQLite3::Database.new SQLITE3_FILE_PATH
32
+ end
33
+
34
+ def destroy_sqlite3_db
35
+ File.delete(SQLITE3_FILE_PATH)
36
+ end
37
+
26
38
  task :create_databases do
27
39
  postgres_db(:create => true)
40
+ create_sqlite3_db
28
41
  end
29
42
 
30
43
  task :destroy_databases do
31
44
  postgres_db(:create => false)
45
+ destroy_sqlite3_db
32
46
  end
33
47
 
34
48
  Rake::TestTask.new do |t|
data/fides.gemspec CHANGED
@@ -27,4 +27,5 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "rake"
28
28
  spec.add_development_dependency "minitest", "~> 4.7.0"
29
29
  spec.add_development_dependency "pg"
30
+ spec.add_development_dependency "sqlite3"
30
31
  end
@@ -1,6 +1,6 @@
1
1
  module Fides
2
2
 
3
- class Postgresql
3
+ class PostgresqlWriter
4
4
  include SqlWriter
5
5
 
6
6
  def self.executable_add_statements(interface_name, models, polymorphic_model)
@@ -2,7 +2,7 @@ require 'fides/sql_writer'
2
2
 
3
3
  module Fides
4
4
 
5
- class Sqlite3
5
+ class Sqlite3Writer
6
6
  include SqlWriter
7
7
 
8
8
  def self.executable_add_statements(interface_name, models, polymorphic_model)
data/lib/fides/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fides
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
data/lib/fides.rb CHANGED
@@ -4,8 +4,8 @@ require 'active_support/concern'
4
4
  require 'active_support/inflector'
5
5
  require 'fides/version'
6
6
  require 'fides/sql_writer'
7
- require 'fides/postgresql'
8
- require 'fides/sqlite3'
7
+ require 'fides/postgresql_writer'
8
+ require 'fides/sqlite3_writer'
9
9
  require 'fides/database_adapter_error'
10
10
 
11
11
  module Fides
@@ -41,7 +41,7 @@ module Fides
41
41
  def get_sql_generator_class
42
42
  db_adapter = ActiveRecord::Base.configurations[Rails.env]['adapter']
43
43
  raise DatabaseAdapterError.new(db_adapter) unless SUPPORTED_ADAPTERS.include?(db_adapter)
44
- return "Fides::#{db_adapter.capitalize}".constantize
44
+ return "Fides::#{db_adapter.capitalize}Writer".constantize
45
45
  end
46
46
 
47
47
  # TODO: Is it safe to just grab the first polymorphic association?
@@ -5,10 +5,4 @@ postgresql:
5
5
  pool: 5
6
6
  username: postgres
7
7
  password: sqlsql
8
- host: localhost
9
-
10
- sqlite3:
11
- adapter: sqlite3
12
- database: /Users/martykraft/Code/fides/test/db/fides_test.sqlite3
13
- pool: 5
14
- timeout: 5000
8
+ host: localhost
File without changes
@@ -0,0 +1,66 @@
1
+ require_relative '../test_helper'
2
+
3
+ module Fides
4
+ def self.run_common_tests
5
+ describe "PostgreSQL database interaction behaviour" do
6
+ it "raises an exception inserting a polymorphic without a coresponding record" do
7
+ clothing_article = ClothingArticle.new
8
+ clothing_article.name = "Jeggings"
9
+ clothing_article.wearable_id = 123
10
+ clothing_article.wearable_type = "Teenager"
11
+ assert_raises(ActiveRecord::StatementInvalid) { clothing_article.save }
12
+ end
13
+
14
+ it "raises an exception deleting a record that is still referenced by the polymorphic table" do
15
+ senior = Senior.new
16
+ senior.name = "Mr. John"
17
+ senior.save
18
+ senior.reload
19
+
20
+ clothing_article = ClothingArticle.new
21
+ clothing_article.name = "Flood pants"
22
+ clothing_article.wearable_id = senior.id
23
+ clothing_article.wearable_type = "Senior"
24
+ clothing_article.save
25
+
26
+ assert_raises(ActiveRecord::StatementInvalid) { Senior.find(senior.id).delete }
27
+ end
28
+
29
+ it "allows an insert of a model type specified in #add_polymorphic_triggers" do
30
+ baby = Baby.new
31
+ baby.name = "JJ"
32
+ baby.save
33
+ baby.reload
34
+
35
+ clothing_article = ClothingArticle.new
36
+ clothing_article.name = "Onesie"
37
+ clothing_article.wearable_id = baby.id
38
+ clothing_article.wearable_type = "Baby"
39
+ assert clothing_article.save
40
+ end
41
+
42
+ it "allows a delete of a record NOT referenced by the polymorphic table" do
43
+ teenager = Teenager.new
44
+ teenager.name = "Johnny"
45
+ teenager.save
46
+ teenager.reload
47
+
48
+ assert Teenager.find(teenager.id).delete
49
+ end
50
+
51
+ it "allows an insert of a model type that wasn't specified in #add_polymorphic_triggers" do
52
+ clothing_article = ClothingArticle.new
53
+ clothing_article.name = "Nothing"
54
+ clothing_article.wearable_id = 123
55
+ clothing_article.wearable_type = "Zygote"
56
+ assert clothing_article.save
57
+ end
58
+ end # describe
59
+ end # run_common_tests
60
+
61
+ connect_and_migrate_database("postgresql")
62
+ run_common_tests
63
+
64
+ connect_and_migrate_database("sqlite3")
65
+ run_common_tests
66
+ end # Fides
data/test/test_helper.rb CHANGED
@@ -8,10 +8,13 @@ require_relative 'integration/models/teenager'
8
8
  require_relative 'integration/models/senior'
9
9
  require_relative 'integration/models/clothing_article'
10
10
 
11
- def migrate_database(adapter_name)
11
+
12
+ def connect_and_migrate_database(adapter_name)
12
13
  path = File.join(File.dirname(__FILE__), "config", "database.yml")
13
14
  yaml = YAML.load_file(path)
15
+ yaml["sqlite3"] = { :adapter => "sqlite3", :database => File.join(File.dirname(__FILE__), "db", "fides_test.sqlite3") }
14
16
  connection_config = yaml[adapter_name]
17
+
15
18
  ActiveRecord::Base.establish_connection(connection_config)
16
19
 
17
20
  Rails.stub :env, "test" do
@@ -1,8 +1,8 @@
1
1
  require_relative '../test_helper'
2
2
 
3
- describe Fides::Postgresql do
3
+ describe Fides::PostgresqlWriter do
4
4
 
5
- let(:subject) { Fides::Postgresql }
5
+ let(:subject) { Fides::PostgresqlWriter }
6
6
 
7
7
  it 'responds to #executable_add_statements' do
8
8
  assert_respond_to subject, :executable_add_statements
@@ -1,8 +1,8 @@
1
1
  require_relative '../test_helper'
2
2
 
3
- describe Fides::Sqlite3 do
3
+ describe Fides::Sqlite3Writer do
4
4
 
5
- let(:subject) { Fides::Sqlite3 }
5
+ let(:subject) { Fides::Sqlite3Writer }
6
6
 
7
7
  it 'responds to #executable_add_statements' do
8
8
  assert_respond_to subject, :executable_add_statements
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fides
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Martin Kraft
@@ -13,48 +14,55 @@ dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activesupport
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - '>='
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: '0'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - '>='
27
+ - - ! '>='
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0'
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: activerecord
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - '>='
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
37
  version: '0'
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - '>='
43
+ - - ! '>='
39
44
  - !ruby/object:Gem::Version
40
45
  version: '0'
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: rails
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - '>='
51
+ - - ! '>='
46
52
  - !ruby/object:Gem::Version
47
53
  version: '0'
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - '>='
59
+ - - ! '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0'
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: bundler
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
67
  - - ~>
60
68
  - !ruby/object:Gem::Version
@@ -62,6 +70,7 @@ dependencies:
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
75
  - - ~>
67
76
  - !ruby/object:Gem::Version
@@ -69,20 +78,23 @@ dependencies:
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: rake
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
- - - '>='
83
+ - - ! '>='
74
84
  - !ruby/object:Gem::Version
75
85
  version: '0'
76
86
  type: :development
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
- - - '>='
91
+ - - ! '>='
81
92
  - !ruby/object:Gem::Version
82
93
  version: '0'
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: minitest
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
99
  - - ~>
88
100
  - !ruby/object:Gem::Version
@@ -90,6 +102,7 @@ dependencies:
90
102
  type: :development
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
107
  - - ~>
95
108
  - !ruby/object:Gem::Version
@@ -97,15 +110,33 @@ dependencies:
97
110
  - !ruby/object:Gem::Dependency
98
111
  name: pg
99
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
100
114
  requirements:
101
- - - '>='
115
+ - - ! '>='
102
116
  - !ruby/object:Gem::Version
103
117
  version: '0'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
107
122
  requirements:
108
- - - '>='
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: sqlite3
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
109
140
  - !ruby/object:Gem::Version
110
141
  version: '0'
111
142
  description: Maintains referential integrity of Rails polymorphic associations.
@@ -124,19 +155,18 @@ files:
124
155
  - lib/fides.rb
125
156
  - lib/fides/database_adapter.rb
126
157
  - lib/fides/database_adapter_error.rb
127
- - lib/fides/postgresql.rb
158
+ - lib/fides/postgresql_writer.rb
128
159
  - lib/fides/sql_writer.rb
129
- - lib/fides/sqlite3.rb
160
+ - lib/fides/sqlite3_writer.rb
130
161
  - lib/fides/version.rb
131
162
  - test/config/database.yml.example
132
- - test/db/fides_test.sqlite3
163
+ - test/db/.gitkeep
164
+ - test/integration/db_test.rb
133
165
  - test/integration/migrations/create_test_tables.rb
134
166
  - test/integration/models/baby.rb
135
167
  - test/integration/models/clothing_article.rb
136
168
  - test/integration/models/senior.rb
137
169
  - test/integration/models/teenager.rb
138
- - test/integration/postgresql_db_test.rb
139
- - test/integration/sqlite3_db_test.rb
140
170
  - test/test_helper.rb
141
171
  - test/unit/fides_test.rb
142
172
  - test/unit/postgresql_test.rb
@@ -146,38 +176,38 @@ files:
146
176
  homepage: https://github.com/mkraft/fides
147
177
  licenses:
148
178
  - MIT
149
- metadata: {}
150
179
  post_install_message:
151
180
  rdoc_options: []
152
181
  require_paths:
153
182
  - lib
154
183
  required_ruby_version: !ruby/object:Gem::Requirement
184
+ none: false
155
185
  requirements:
156
- - - '>='
186
+ - - ! '>='
157
187
  - !ruby/object:Gem::Version
158
188
  version: '0'
159
189
  required_rubygems_version: !ruby/object:Gem::Requirement
190
+ none: false
160
191
  requirements:
161
- - - '>='
192
+ - - ! '>='
162
193
  - !ruby/object:Gem::Version
163
194
  version: '0'
164
195
  requirements: []
165
196
  rubyforge_project:
166
- rubygems_version: 2.0.3
197
+ rubygems_version: 1.8.25
167
198
  signing_key:
168
- specification_version: 4
199
+ specification_version: 3
169
200
  summary: Creates SQL triggers from Rails migrations to enforce the integrity of polymorphic
170
201
  associations at the database level.
171
202
  test_files:
172
203
  - test/config/database.yml.example
173
- - test/db/fides_test.sqlite3
204
+ - test/db/.gitkeep
205
+ - test/integration/db_test.rb
174
206
  - test/integration/migrations/create_test_tables.rb
175
207
  - test/integration/models/baby.rb
176
208
  - test/integration/models/clothing_article.rb
177
209
  - test/integration/models/senior.rb
178
210
  - test/integration/models/teenager.rb
179
- - test/integration/postgresql_db_test.rb
180
- - test/integration/sqlite3_db_test.rb
181
211
  - test/test_helper.rb
182
212
  - test/unit/fides_test.rb
183
213
  - test/unit/postgresql_test.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 6fde73e7ab62368ba7a22585c3673a992be3b3e3
4
- data.tar.gz: e4f539ce123bd091d1488f7863a02a90ec41c14c
5
- SHA512:
6
- metadata.gz: 0455f24cdc03855dd62b41ec33d33c9000adfbf1ecbf343936147aefa1c0013cc3488af5919e693417fc4d67631def0ad72a20bc7bef0a816493a60d1c9cfcba
7
- data.tar.gz: 5c8d63d83bc8f1a1dda968b1fa8840c1a28e5a845abffade3bffb4ff956465c812c84b0019d5adb56ea5ce284d7d56116483c039edd6799994fab55d2c996f34
@@ -1,56 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- module Fides
4
- migrate_database("postgresql")
5
-
6
- describe "PostgreSQL database interaction behaviour" do
7
- it "raises an exception inserting a polymorphic without a coresponding record" do
8
- clothing_article = ClothingArticle.new
9
- clothing_article.name = "Jeggings"
10
- clothing_article.wearable_id = 123
11
- clothing_article.wearable_type = "Teenager"
12
- assert_raises(ActiveRecord::StatementInvalid) { clothing_article.save }
13
- end
14
-
15
- it "raises an exception deleting a record that is still referenced by the polymorphic table" do
16
- senior = Senior.new
17
- senior.name = "Mr. John"
18
- senior.save
19
- senior.reload
20
-
21
- clothing_article = ClothingArticle.new
22
- clothing_article.name = "Flood pants"
23
- clothing_article.wearable_id = senior.id
24
- clothing_article.wearable_type = "Senior"
25
- clothing_article.save
26
-
27
- assert_raises(ActiveRecord::StatementInvalid) { Senior.find(senior.id).delete }
28
- end
29
-
30
- it "allows an insert of a model type specified in #add_polymorphic_triggers" do
31
- baby = Baby.new
32
- baby.name = "JJ"
33
- baby.save
34
- baby.reload
35
-
36
- clothing_article = ClothingArticle.new
37
- clothing_article.name = "Onesie"
38
- clothing_article.wearable_id = baby.id
39
- clothing_article.wearable_type = "Baby"
40
- assert clothing_article.save
41
- end
42
-
43
- it "allows a delete of a record NOT referenced by the polymorphic table" do
44
- teenager = Teenager.new
45
- teenager.name = "Johnny"
46
- teenager.save
47
- teenager.reload
48
-
49
- assert Teenager.find(teenager.id).delete
50
- end
51
-
52
- # TODO: Should unspecified model types be rejected?
53
- it "allows an insert of a model type NOT specified in #add_polymorphic_triggers"
54
- end
55
-
56
- end
File without changes