fides 0.0.13 → 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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Rakefile +34 -5
- data/fides.gemspec +2 -2
- data/lib/fides/version.rb +1 -1
- data/lib/fides.rb +1 -5
- data/test/config/database.yml.example +14 -0
- data/test/{lib/integration/postgresql_db_test.rb → db/fides_test.sqlite3} +0 -0
- data/test/integration/migrations/create_test_tables.rb +27 -0
- data/test/integration/models/baby.rb +4 -0
- data/test/integration/models/clothing_article.rb +3 -0
- data/test/integration/models/senior.rb +3 -0
- data/test/integration/models/teenager.rb +3 -0
- data/test/integration/postgresql_db_test.rb +56 -0
- data/test/{lib/integration → integration}/sqlite3_db_test.rb +0 -0
- data/test/test_helper.rb +19 -1
- data/test/{lib → unit}/fides_test.rb +0 -0
- data/test/{lib/fides → unit}/postgresql_test.rb +1 -1
- data/test/{lib/fides → unit}/sql_writer_test.rb +1 -1
- data/test/{lib/fides → unit}/sqlite3_test.rb +1 -1
- data/test/{lib/fides → unit}/version_test.rb +1 -1
- metadata +35 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6fde73e7ab62368ba7a22585c3673a992be3b3e3
|
4
|
+
data.tar.gz: e4f539ce123bd091d1488f7863a02a90ec41c14c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0455f24cdc03855dd62b41ec33d33c9000adfbf1ecbf343936147aefa1c0013cc3488af5919e693417fc4d67631def0ad72a20bc7bef0a816493a60d1c9cfcba
|
7
|
+
data.tar.gz: 5c8d63d83bc8f1a1dda968b1fa8840c1a28e5a845abffade3bffb4ff956465c812c84b0019d5adb56ea5ce284d7d56116483c039edd6799994fab55d2c996f34
|
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -1,12 +1,41 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
|
+
|
2
3
|
require "bundler/gem_tasks"
|
3
|
-
|
4
4
|
require 'rake/testtask'
|
5
|
-
|
5
|
+
require 'pg'
|
6
|
+
require 'yaml'
|
7
|
+
|
8
|
+
def postgres_db(opts)
|
9
|
+
path = File.join(File.dirname(__FILE__), "test", "config", "database.yml")
|
10
|
+
yaml = YAML.load_file(path)
|
11
|
+
pg_connection_config = yaml["postgresql"]
|
12
|
+
begin
|
13
|
+
conn = PG.connect(dbname: 'postgres',
|
14
|
+
password: pg_connection_config["password"],
|
15
|
+
host: pg_connection_config["host"],
|
16
|
+
user: pg_connection_config["username"])
|
17
|
+
conn.exec("DROP DATABASE IF EXISTS #{pg_connection_config['database']};") {}
|
18
|
+
conn.exec("CREATE DATABASE #{pg_connection_config['database']};") {} if opts[:create]
|
19
|
+
rescue PGError => e
|
20
|
+
puts e
|
21
|
+
ensure
|
22
|
+
conn.close unless conn.nil?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
task :create_databases do
|
27
|
+
postgres_db(:create => true)
|
28
|
+
end
|
29
|
+
|
30
|
+
task :destroy_databases do
|
31
|
+
postgres_db(:create => false)
|
32
|
+
end
|
33
|
+
|
6
34
|
Rake::TestTask.new do |t|
|
35
|
+
t.name = :run_tests
|
7
36
|
t.libs << 'lib/fides'
|
8
|
-
t.test_files = FileList['test/
|
37
|
+
t.test_files = FileList['test/unit/*_test.rb', 'test/integration/*_test.rb']
|
9
38
|
t.verbose = true
|
10
39
|
end
|
11
|
-
|
12
|
-
task :
|
40
|
+
|
41
|
+
task :test => [:create_databases, :run_tests, :destroy_databases]
|
data/fides.gemspec
CHANGED
@@ -25,6 +25,6 @@ Gem::Specification.new do |spec|
|
|
25
25
|
|
26
26
|
spec.add_development_dependency "bundler", "~> 1.3"
|
27
27
|
spec.add_development_dependency "rake"
|
28
|
-
spec.add_development_dependency "minitest"
|
29
|
-
spec.add_development_dependency "
|
28
|
+
spec.add_development_dependency "minitest", "~> 4.7.0"
|
29
|
+
spec.add_development_dependency "pg"
|
30
30
|
end
|
data/lib/fides/version.rb
CHANGED
data/lib/fides.rb
CHANGED
@@ -22,10 +22,7 @@ module Fides
|
|
22
22
|
polymorphic_model = opts[:polymorphic_model]
|
23
23
|
interface = opts.has_key?(:interface_name) ? opts[:interface_name] : interface_name(polymorphic_model)
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
execution_statements = fides_sql_generator.executable_add_statements(interface, associated_models, polymorphic_model)
|
28
|
-
|
25
|
+
execution_statements = get_sql_generator_class.executable_add_statements(interface, associated_models, polymorphic_model)
|
29
26
|
execution_statements.each { |statement| execute statement }
|
30
27
|
end
|
31
28
|
|
@@ -36,7 +33,6 @@ module Fides
|
|
36
33
|
interface = opts.has_key?(:interface_name) ? opts[:interface_name] : interface_name(polymorphic_model)
|
37
34
|
|
38
35
|
execution_statements = get_sql_generator_class.executable_remove_statements(interface)
|
39
|
-
|
40
36
|
execution_statements.each { |statement| execute statement }
|
41
37
|
end
|
42
38
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
postgresql:
|
2
|
+
encoding: unicode
|
3
|
+
adapter: postgresql
|
4
|
+
database: fides_test
|
5
|
+
pool: 5
|
6
|
+
username: postgres
|
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
|
File without changes
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class CreateTestTables < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :clothing_articles do |t|
|
4
|
+
t.string :name
|
5
|
+
t.integer :wearable_id
|
6
|
+
t.string :wearable_type
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
|
10
|
+
create_table :babies do |t|
|
11
|
+
t.string :name
|
12
|
+
t.timestamps
|
13
|
+
end
|
14
|
+
|
15
|
+
create_table :seniors do |t|
|
16
|
+
t.string :name
|
17
|
+
t.timestamps
|
18
|
+
end
|
19
|
+
|
20
|
+
create_table :teenagers do |t|
|
21
|
+
t.string :name
|
22
|
+
t.timestamps
|
23
|
+
end
|
24
|
+
|
25
|
+
add_polymorphic_triggers(:polymorphic_model => "ClothingArticle", :associated_models => ["Baby", "Senior", "Teenager"])
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,56 @@
|
|
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
|
data/test/test_helper.rb
CHANGED
@@ -1,4 +1,22 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
2
|
require 'minitest/pride'
|
3
3
|
require File.expand_path('../../lib/fides.rb', __FILE__)
|
4
|
-
require '
|
4
|
+
require 'pg'
|
5
|
+
require_relative 'integration/migrations/create_test_tables'
|
6
|
+
require_relative 'integration/models/baby'
|
7
|
+
require_relative 'integration/models/teenager'
|
8
|
+
require_relative 'integration/models/senior'
|
9
|
+
require_relative 'integration/models/clothing_article'
|
10
|
+
|
11
|
+
def migrate_database(adapter_name)
|
12
|
+
path = File.join(File.dirname(__FILE__), "config", "database.yml")
|
13
|
+
yaml = YAML.load_file(path)
|
14
|
+
connection_config = yaml[adapter_name]
|
15
|
+
ActiveRecord::Base.establish_connection(connection_config)
|
16
|
+
|
17
|
+
Rails.stub :env, "test" do
|
18
|
+
ActiveRecord::Base.stub :configurations, { "test" => { "adapter" => adapter_name } } do
|
19
|
+
CreateTestTables.new.change
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fides
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Kraft
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -84,18 +84,18 @@ dependencies:
|
|
84
84
|
name: minitest
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 4.7.0
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 4.7.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: pg
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - '>='
|
@@ -128,14 +128,21 @@ files:
|
|
128
128
|
- lib/fides/sql_writer.rb
|
129
129
|
- lib/fides/sqlite3.rb
|
130
130
|
- lib/fides/version.rb
|
131
|
-
- test/
|
132
|
-
- test/
|
133
|
-
- test/
|
134
|
-
- test/
|
135
|
-
- test/
|
136
|
-
- test/
|
137
|
-
- test/
|
131
|
+
- test/config/database.yml.example
|
132
|
+
- test/db/fides_test.sqlite3
|
133
|
+
- test/integration/migrations/create_test_tables.rb
|
134
|
+
- test/integration/models/baby.rb
|
135
|
+
- test/integration/models/clothing_article.rb
|
136
|
+
- test/integration/models/senior.rb
|
137
|
+
- test/integration/models/teenager.rb
|
138
|
+
- test/integration/postgresql_db_test.rb
|
139
|
+
- test/integration/sqlite3_db_test.rb
|
138
140
|
- test/test_helper.rb
|
141
|
+
- test/unit/fides_test.rb
|
142
|
+
- test/unit/postgresql_test.rb
|
143
|
+
- test/unit/sql_writer_test.rb
|
144
|
+
- test/unit/sqlite3_test.rb
|
145
|
+
- test/unit/version_test.rb
|
139
146
|
homepage: https://github.com/mkraft/fides
|
140
147
|
licenses:
|
141
148
|
- MIT
|
@@ -162,11 +169,18 @@ specification_version: 4
|
|
162
169
|
summary: Creates SQL triggers from Rails migrations to enforce the integrity of polymorphic
|
163
170
|
associations at the database level.
|
164
171
|
test_files:
|
165
|
-
- test/
|
166
|
-
- test/
|
167
|
-
- test/
|
168
|
-
- test/
|
169
|
-
- test/
|
170
|
-
- test/
|
171
|
-
- test/
|
172
|
+
- test/config/database.yml.example
|
173
|
+
- test/db/fides_test.sqlite3
|
174
|
+
- test/integration/migrations/create_test_tables.rb
|
175
|
+
- test/integration/models/baby.rb
|
176
|
+
- test/integration/models/clothing_article.rb
|
177
|
+
- test/integration/models/senior.rb
|
178
|
+
- test/integration/models/teenager.rb
|
179
|
+
- test/integration/postgresql_db_test.rb
|
180
|
+
- test/integration/sqlite3_db_test.rb
|
172
181
|
- test/test_helper.rb
|
182
|
+
- test/unit/fides_test.rb
|
183
|
+
- test/unit/postgresql_test.rb
|
184
|
+
- test/unit/sql_writer_test.rb
|
185
|
+
- test/unit/sqlite3_test.rb
|
186
|
+
- test/unit/version_test.rb
|