fides 0.0.13 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|