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