fides 1.0.0 → 1.0.1
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.
- data/.gitignore +2 -1
- data/Rakefile +14 -0
- data/fides.gemspec +1 -0
- data/lib/fides/{postgresql.rb → postgresql_writer.rb} +1 -1
- data/lib/fides/{sqlite3.rb → sqlite3_writer.rb} +1 -1
- data/lib/fides/version.rb +1 -1
- data/lib/fides.rb +3 -3
- data/test/config/database.yml.example +1 -7
- data/test/db/{fides_test.sqlite3 → .gitkeep} +0 -0
- data/test/integration/db_test.rb +66 -0
- data/test/test_helper.rb +4 -1
- data/test/unit/postgresql_test.rb +2 -2
- data/test/unit/sqlite3_test.rb +2 -2
- metadata +54 -24
- checksums.yaml +0 -7
- data/test/integration/postgresql_db_test.rb +0 -56
- data/test/integration/sqlite3_db_test.rb +0 -0
data/.gitignore
CHANGED
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
data/lib/fides/version.rb
CHANGED
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/
|
8
|
-
require 'fides/
|
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?
|
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
|
-
|
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::
|
3
|
+
describe Fides::PostgresqlWriter do
|
4
4
|
|
5
|
-
let(:subject) { Fides::
|
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
|
data/test/unit/sqlite3_test.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require_relative '../test_helper'
|
2
2
|
|
3
|
-
describe Fides::
|
3
|
+
describe Fides::Sqlite3Writer do
|
4
4
|
|
5
|
-
let(:subject) { Fides::
|
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.
|
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/
|
158
|
+
- lib/fides/postgresql_writer.rb
|
128
159
|
- lib/fides/sql_writer.rb
|
129
|
-
- lib/fides/
|
160
|
+
- lib/fides/sqlite3_writer.rb
|
130
161
|
- lib/fides/version.rb
|
131
162
|
- test/config/database.yml.example
|
132
|
-
- test/db
|
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:
|
197
|
+
rubygems_version: 1.8.25
|
167
198
|
signing_key:
|
168
|
-
specification_version:
|
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
|
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
|