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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6730418f04d57da6e4cbd55988a3c508009ee881
4
- data.tar.gz: 89a9e627c96a5c215351e9223265c5b249ad88b9
3
+ metadata.gz: 6fde73e7ab62368ba7a22585c3673a992be3b3e3
4
+ data.tar.gz: e4f539ce123bd091d1488f7863a02a90ec41c14c
5
5
  SHA512:
6
- metadata.gz: 2cccbd5ab8741d65b6bc26540ad1b59f9b0d336ceccb48680041e793ffea21464218a82a22b7a0af74b75e3a0d8a734121f7de4a6fa9965678e16698937436f3
7
- data.tar.gz: 2d1c481246449df7bde5418a3f47a980c3b228e887793f6939209dcb01b4806cb9542d6b602c79b674086a346faa6f181e517d96625730a58a10f722a9e3b52e
6
+ metadata.gz: 0455f24cdc03855dd62b41ec33d33c9000adfbf1ecbf343936147aefa1c0013cc3488af5919e693417fc4d67631def0ad72a20bc7bef0a816493a60d1c9cfcba
7
+ data.tar.gz: 5c8d63d83bc8f1a1dda968b1fa8840c1a28e5a845abffade3bffb4ff956465c812c84b0019d5adb56ea5ce284d7d56116483c039edd6799994fab55d2c996f34
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ database.yml
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/lib/*_test.rb', 'test/lib/fides/*_test.rb']
37
+ t.test_files = FileList['test/unit/*_test.rb', 'test/integration/*_test.rb']
9
38
  t.verbose = true
10
39
  end
11
-
12
- task :default => :test
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 "pry"
28
+ spec.add_development_dependency "minitest", "~> 4.7.0"
29
+ spec.add_development_dependency "pg"
30
30
  end
data/lib/fides/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fides
2
- VERSION = "0.0.13"
2
+ VERSION = "1.0.0"
3
3
  end
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
- fides_sql_generator = get_sql_generator_class
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
@@ -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,4 @@
1
+ class Baby < ActiveRecord::Base
2
+ self.table_name = 'babies'
3
+ has_many :clothing_articles, :as => :wearable
4
+ end
@@ -0,0 +1,3 @@
1
+ class ClothingArticle < ActiveRecord::Base
2
+ belongs_to :wearable, :polymorphic => true
3
+ end
@@ -0,0 +1,3 @@
1
+ class Senior < ActiveRecord::Base
2
+ has_many :clothing_articles, :as => :wearable
3
+ end
@@ -0,0 +1,3 @@
1
+ class Teenager < ActiveRecord::Base
2
+ has_many :clothing_articles, :as => :wearable
3
+ 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
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 'pry'
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
@@ -1,4 +1,4 @@
1
- require_relative '../../test_helper'
1
+ require_relative '../test_helper'
2
2
 
3
3
  describe Fides::Postgresql do
4
4
 
@@ -1,4 +1,4 @@
1
- require_relative '../../test_helper'
1
+ require_relative '../test_helper'
2
2
 
3
3
  describe Fides::SqlWriter do
4
4
 
@@ -1,4 +1,4 @@
1
- require_relative '../../test_helper'
1
+ require_relative '../test_helper'
2
2
 
3
3
  describe Fides::Sqlite3 do
4
4
 
@@ -1,4 +1,4 @@
1
- require_relative '../../test_helper'
1
+ require_relative '../test_helper'
2
2
 
3
3
  describe Fides do
4
4
 
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.13
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-03-31 00:00:00.000000000 Z
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: '0'
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: '0'
96
+ version: 4.7.0
97
97
  - !ruby/object:Gem::Dependency
98
- name: pry
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/lib/fides/postgresql_test.rb
132
- - test/lib/fides/sql_writer_test.rb
133
- - test/lib/fides/sqlite3_test.rb
134
- - test/lib/fides/version_test.rb
135
- - test/lib/fides_test.rb
136
- - test/lib/integration/postgresql_db_test.rb
137
- - test/lib/integration/sqlite3_db_test.rb
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/lib/fides/postgresql_test.rb
166
- - test/lib/fides/sql_writer_test.rb
167
- - test/lib/fides/sqlite3_test.rb
168
- - test/lib/fides/version_test.rb
169
- - test/lib/fides_test.rb
170
- - test/lib/integration/postgresql_db_test.rb
171
- - test/lib/integration/sqlite3_db_test.rb
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