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 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