sparkfly-foreigner 0.6.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +13 -0
- data/Gemfile.lock +39 -0
- data/README.textile +27 -20
- data/Rakefile +4 -4
- data/VERSION +1 -1
- data/lib/foreigner.rb +6 -4
- data/lib/foreigner/connection_adapters/mysql_adapter.rb +4 -4
- data/lib/foreigner/connection_adapters/postgresql_adapter.rb +8 -8
- data/lib/foreigner/connection_adapters/sqlite3_adapter.rb +1 -1
- data/lib/foreigner/semantics/sql_2003.rb +1 -1
- data/spec/spec_helper.rb +12 -32
- data/spec/{adapter_helper.rb → support/adapter_helper.rb} +27 -2
- data/spec/{factory_helper.rb → support/factory_helper.rb} +3 -1
- metadata +19 -23
- data/.gitignore +0 -3
data/Gemfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
|
3
|
+
# This Gemfile is here for testing purposes. The Gemfile.lock will contain
|
4
|
+
# the exact versions of the gems used to test Foreigner
|
5
|
+
|
6
|
+
group :test do
|
7
|
+
gem 'activerecord'
|
8
|
+
gem 'rspec'
|
9
|
+
gem 'pg'
|
10
|
+
#gem 'mysql2', '0.2.6' # Should be using this instead of mysql gem, but refuses to load
|
11
|
+
gem 'mysql'
|
12
|
+
gem 'sqlite3'
|
13
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activemodel (3.0.5)
|
5
|
+
activesupport (= 3.0.5)
|
6
|
+
builder (~> 2.1.2)
|
7
|
+
i18n (~> 0.4)
|
8
|
+
activerecord (3.0.5)
|
9
|
+
activemodel (= 3.0.5)
|
10
|
+
activesupport (= 3.0.5)
|
11
|
+
arel (~> 2.0.2)
|
12
|
+
tzinfo (~> 0.3.23)
|
13
|
+
activesupport (3.0.5)
|
14
|
+
arel (2.0.9)
|
15
|
+
builder (2.1.2)
|
16
|
+
diff-lcs (1.1.2)
|
17
|
+
i18n (0.5.0)
|
18
|
+
mysql (2.8.1)
|
19
|
+
pg (0.11.0)
|
20
|
+
rspec (2.5.0)
|
21
|
+
rspec-core (~> 2.5.0)
|
22
|
+
rspec-expectations (~> 2.5.0)
|
23
|
+
rspec-mocks (~> 2.5.0)
|
24
|
+
rspec-core (2.5.1)
|
25
|
+
rspec-expectations (2.5.0)
|
26
|
+
diff-lcs (~> 1.1.2)
|
27
|
+
rspec-mocks (2.5.0)
|
28
|
+
sqlite3 (1.3.3)
|
29
|
+
tzinfo (0.3.27)
|
30
|
+
|
31
|
+
PLATFORMS
|
32
|
+
ruby
|
33
|
+
|
34
|
+
DEPENDENCIES
|
35
|
+
activerecord
|
36
|
+
mysql
|
37
|
+
pg
|
38
|
+
rspec
|
39
|
+
sqlite3
|
data/README.textile
CHANGED
@@ -9,10 +9,12 @@ was taken out.
|
|
9
9
|
|
10
10
|
h2. Test Coverage
|
11
11
|
|
12
|
-
These tests were created and tested against our target platform, Rails
|
13
|
-
|
12
|
+
These tests were created and tested against our target platform, Rails 3. If you are using Rails 2.3.5,
|
13
|
+
use sparkfly-foreigner 0.6.0. this currently works with Rails 3.0 beta 3.
|
14
14
|
|
15
|
-
|
15
|
+
Rspec coverage was against Rspec 2.0 beta6
|
16
|
+
|
17
|
+
PostgreSQL (tested against 8.3.9, 8.4.2)
|
16
18
|
- "Schema" tests: do the table migrations actually add referential integrity?
|
17
19
|
- "Schema Extractor" tests: does the foreign_key() method extract out the foreign key from information_schema?
|
18
20
|
- "Semantics" tests: do the add/drop constraints emit proper SQL?
|
@@ -24,6 +26,7 @@ MySQL (tested against 5.0.90 / Gentoo mysql-5.0.90-r2 hardened x86_64)
|
|
24
26
|
|
25
27
|
SQLite3 (tested against 3.6.22 in-memory only)
|
26
28
|
- "Semantics" tests: do the add/drop constraints emit proper SQL?
|
29
|
+
- Warning: sqlite3 probably does not actually work when you use it.
|
27
30
|
|
28
31
|
Schema Dumper
|
29
32
|
- Are we emitting the correct schema.rb syntax for adding foreign key constraints?
|
@@ -34,6 +37,15 @@ TODO:
|
|
34
37
|
|
35
38
|
h2. Usage
|
36
39
|
|
40
|
+
h3. Installation
|
41
|
+
|
42
|
+
Add this to your Gemfile:
|
43
|
+
<pre>
|
44
|
+
gem 'sparkfly-foreigner', :require => 'foreigner'
|
45
|
+
</pre>
|
46
|
+
|
47
|
+
h3. Migrations
|
48
|
+
|
37
49
|
To specify a different column name you can do the following:
|
38
50
|
<pre>
|
39
51
|
create_table :comments do |t|
|
@@ -66,7 +78,7 @@ To specify a reference with a foreign key constraint using Rails convention:
|
|
66
78
|
|
67
79
|
Read the specs for more example usage.
|
68
80
|
|
69
|
-
|
81
|
+
h3. schema.rb
|
70
82
|
|
71
83
|
All of the constrants are updated in schema.rb when you either:
|
72
84
|
<pre>
|
@@ -76,25 +88,17 @@ All of the constrants are updated in schema.rb when you either:
|
|
76
88
|
This allows you to see the state of your migratons and
|
77
89
|
take advantage of using <pre>rake db:schema:load</pre>
|
78
90
|
|
79
|
-
h2.
|
80
|
-
|
81
|
-
h3. Rails 3
|
82
|
-
|
83
|
-
- Have not tested any of these changes against Rails 3.
|
84
|
-
- See the matthuhiggins-foreigner or dwilkie-foreigner if you want a Foreigner that plays nice with Rails 3.
|
85
|
-
|
86
|
-
h3. Rails 2.3.5
|
91
|
+
h2. Testing
|
87
92
|
|
88
|
-
|
89
|
-
<pre>
|
90
|
-
|
91
|
-
|
93
|
+
You will need rspec 2.0. At the time of this writing, you install it with:
|
94
|
+
<pre>
|
95
|
+
gem install rspec --pre
|
96
|
+
</pre>
|
92
97
|
|
93
|
-
|
98
|
+
You will also want to make sure you have Rubygems 1.3.6
|
94
99
|
|
95
|
-
|
96
|
-
|
97
|
-
before you run those tests.
|
100
|
+
Run "rake spec" to run all the spec. Make sure that all of the PostgreSQL and MySQL databases defined in
|
101
|
+
spec/spec_helper.rb are created before you run those tests.
|
98
102
|
|
99
103
|
h2. Copyrights
|
100
104
|
|
@@ -103,3 +107,6 @@ Copyright (c) 2010 Ho-Sheng Hsiao, released under the MIT license
|
|
103
107
|
Modified from code written by David Wilkie and Matt Higgins. See http://github.com/sparkfly/foreigner for details on
|
104
108
|
what got changed from what.
|
105
109
|
|
110
|
+
Contributions:
|
111
|
+
- theaboutbox https://github.com/theaboutbox/foreigner
|
112
|
+
|
data/Rakefile
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/testtask'
|
3
3
|
require 'rake/rdoctask'
|
4
|
-
require '
|
4
|
+
require 'rspec/core/rake_task'
|
5
5
|
|
6
6
|
desc 'Default: run specs.'
|
7
7
|
task :default => :spec
|
8
8
|
|
9
9
|
desc 'Run the specs'
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
11
|
+
#t.spec_opts = ['--colour --format progress --loadby mtime --reverse']
|
12
|
+
#t.spec_files = FileList['spec/**/*_spec.rb']
|
13
13
|
end
|
14
14
|
|
15
15
|
desc 'Generate documentation for the foreigner plugin.'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.7.1
|
data/lib/foreigner.rb
CHANGED
@@ -25,11 +25,13 @@ module Foreigner
|
|
25
25
|
def on_load(&block)
|
26
26
|
if defined?(Rails) && Rails.version >= '3.0'
|
27
27
|
ActiveSupport.on_load :active_record do
|
28
|
-
|
29
|
-
ActiveRecord::Base.
|
30
|
-
|
28
|
+
ActiveSupport.on_load :before_initialize do
|
29
|
+
unless ActiveRecord::Base.connected?
|
30
|
+
ActiveRecord::Base.configurations = Rails.application.config.database_configuration
|
31
|
+
ActiveRecord::Base.establish_connection
|
32
|
+
end
|
33
|
+
block.call
|
31
34
|
end
|
32
|
-
block.call
|
33
35
|
end
|
34
36
|
else
|
35
37
|
yield
|
@@ -11,10 +11,10 @@ module Foreigner
|
|
11
11
|
|
12
12
|
def foreign_keys(table_name)
|
13
13
|
fk_info = select_all %{
|
14
|
-
SELECT fk.referenced_table_name as 'to_table'
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
SELECT fk.referenced_table_name as 'to_table',
|
15
|
+
fk.referenced_column_name as 'primary_key',
|
16
|
+
fk.column_name as 'column',
|
17
|
+
fk.constraint_name as 'name'
|
18
18
|
FROM information_schema.key_column_usage fk
|
19
19
|
WHERE fk.referenced_column_name is not null
|
20
20
|
AND fk.table_schema = '#{@config[:database]}'
|
@@ -6,18 +6,18 @@ module Foreigner
|
|
6
6
|
|
7
7
|
def foreign_keys(table_name)
|
8
8
|
fk_info = select_all %{
|
9
|
-
SELECT tc.constraint_name as name
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
SELECT tc.constraint_name as name,
|
10
|
+
ccu.table_name as to_table,
|
11
|
+
ccu.column_name as primary_key,
|
12
|
+
kcu.column_name as column,
|
13
|
+
rc.delete_rule as dependency
|
14
14
|
FROM information_schema.table_constraints tc
|
15
15
|
JOIN information_schema.key_column_usage kcu
|
16
|
-
|
16
|
+
USING (constraint_catalog, constraint_schema, constraint_name)
|
17
17
|
JOIN information_schema.referential_constraints rc
|
18
|
-
|
18
|
+
USING (constraint_catalog, constraint_schema, constraint_name)
|
19
19
|
JOIN information_schema.constraint_column_usage ccu
|
20
|
-
|
20
|
+
USING (constraint_catalog, constraint_schema, constraint_name)
|
21
21
|
WHERE tc.constraint_type = 'FOREIGN KEY'
|
22
22
|
AND tc.constraint_catalog = '#{@config[:database]}'
|
23
23
|
AND tc.table_name = '#{table_name}'
|
@@ -15,7 +15,7 @@ module Foreigner
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def add_foreign_key(from_table, to_table, options = {})
|
18
|
-
column = options[:column] ||
|
18
|
+
column = options[:column] || column_name(to_table)
|
19
19
|
foreign_key_name = foreign_key_name(from_table, column, options)
|
20
20
|
primary_key = options[:primary_key] || "id"
|
21
21
|
reference = sql_for_reference(to_table, primary_key)
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
require 'rubygems'
|
1
|
+
require 'rspec'
|
3
2
|
|
4
3
|
require 'active_support'
|
5
4
|
require 'active_record'
|
@@ -11,36 +10,17 @@ require "foreigner/connection_adapters/postgresql_adapter"
|
|
11
10
|
require "foreigner/connection_adapters/mysql_adapter"
|
12
11
|
require "foreigner/connection_adapters/sqlite3_adapter"
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
:
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
:postgresql_admin => {
|
26
|
-
:adapter => "postgresql",
|
27
|
-
:username => "root",
|
28
|
-
:password => "",
|
29
|
-
:database => "test",
|
30
|
-
:min_messages => "ERROR"
|
31
|
-
}, # :postgresql_admin is used to connect in; :postgresql is used to actually test the migrations
|
32
|
-
:mysql => {
|
33
|
-
:adapter => 'mysql',
|
34
|
-
:host => 'localhost',
|
35
|
-
:username => 'root',
|
36
|
-
:database => 'foreigner_test'
|
37
|
-
|
38
|
-
},
|
39
|
-
:sqlite3 => {
|
40
|
-
:adapter => "sqlite3",
|
41
|
-
:database => ":memory:"
|
42
|
-
}
|
43
|
-
}
|
13
|
+
|
14
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
15
|
+
|
16
|
+
RSpec.configure do |config|
|
17
|
+
config.mock_with :rspec
|
18
|
+
config.filter_run :focus => true
|
19
|
+
config.filter_run_excluding :external => true
|
20
|
+
config.run_all_when_everything_filtered = true
|
21
|
+
end
|
22
|
+
|
23
|
+
# CONFIGURATIONS defined in support/adapter_helper.rb
|
44
24
|
|
45
25
|
# Turn this on for debugging
|
46
26
|
ActiveRecord::Migration.verbose = false
|
@@ -1,5 +1,30 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
CONFIGURATIONS = {
|
2
|
+
:postgresql => {
|
3
|
+
:adapter => "postgresql",
|
4
|
+
:username => "root",
|
5
|
+
:password => "",
|
6
|
+
:database => "test_foreigner_gem",
|
7
|
+
:min_messages => "ERROR"
|
8
|
+
},
|
9
|
+
:postgresql_admin => {
|
10
|
+
:adapter => "postgresql",
|
11
|
+
:username => "root",
|
12
|
+
:password => "",
|
13
|
+
:database => "test",
|
14
|
+
:min_messages => "ERROR"
|
15
|
+
}, # :postgresql_admin is used to connect in; :postgresql is used to actually test the migrations
|
16
|
+
:mysql => {
|
17
|
+
:adapter => 'mysql',
|
18
|
+
:host => 'localhost',
|
19
|
+
:username => 'root',
|
20
|
+
:database => 'foreigner_test'
|
21
|
+
|
22
|
+
},
|
23
|
+
:sqlite3 => {
|
24
|
+
:adapter => "sqlite3",
|
25
|
+
:database => ":memory:"
|
26
|
+
}
|
27
|
+
}
|
3
28
|
|
4
29
|
module AdapterHelper
|
5
30
|
module AdapterTestHarness
|
@@ -29,7 +29,9 @@ module MigrationFactory
|
|
29
29
|
# def self.up
|
30
30
|
# end
|
31
31
|
# end
|
32
|
-
|
32
|
+
|
33
|
+
# ActiveSupport 3.0 changed the name to singleton_class
|
34
|
+
(migration.respond_to?(:singleton_class) ? migration.singleton_class : migration.metaclass).class_eval do
|
33
35
|
define_method(:up, &blk)
|
34
36
|
end
|
35
37
|
migration
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sparkfly-foreigner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 1
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
8
|
+
- 7
|
9
|
+
- 1
|
10
|
+
version: 0.7.1
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Ho-Sheng Hsiao
|
@@ -14,7 +15,7 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date:
|
18
|
+
date: 2011-05-05 00:00:00 -04:00
|
18
19
|
default_executable:
|
19
20
|
dependencies: []
|
20
21
|
|
@@ -27,7 +28,8 @@ extensions: []
|
|
27
28
|
extra_rdoc_files:
|
28
29
|
- README.textile
|
29
30
|
files:
|
30
|
-
-
|
31
|
+
- Gemfile
|
32
|
+
- Gemfile.lock
|
31
33
|
- MIT-LICENSE
|
32
34
|
- README.textile
|
33
35
|
- Rakefile
|
@@ -40,8 +42,6 @@ files:
|
|
40
42
|
- lib/foreigner/connection_adapters/sqlite3_adapter.rb
|
41
43
|
- lib/foreigner/schema_dumper.rb
|
42
44
|
- lib/foreigner/semantics/sql_2003.rb
|
43
|
-
- spec/adapter_helper.rb
|
44
|
-
- spec/factory_helper.rb
|
45
45
|
- spec/mysql/schema_extractor_spec.rb
|
46
46
|
- spec/mysql/schema_spec.rb
|
47
47
|
- spec/mysql/semantics_spec.rb
|
@@ -51,46 +51,42 @@ files:
|
|
51
51
|
- spec/schema_dumper_spec.rb
|
52
52
|
- spec/spec_helper.rb
|
53
53
|
- spec/sqlite3/schema_spec.rb
|
54
|
+
- spec/support/adapter_helper.rb
|
55
|
+
- spec/support/factory_helper.rb
|
54
56
|
- tasks/foreigner_tasks.rake
|
55
57
|
has_rdoc: true
|
56
58
|
homepage: http://github.com/hosh/foreigner
|
57
59
|
licenses: []
|
58
60
|
|
59
61
|
post_install_message:
|
60
|
-
rdoc_options:
|
61
|
-
|
62
|
+
rdoc_options: []
|
63
|
+
|
62
64
|
require_paths:
|
63
65
|
- lib
|
64
66
|
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
65
68
|
requirements:
|
66
69
|
- - ">="
|
67
70
|
- !ruby/object:Gem::Version
|
71
|
+
hash: 3
|
68
72
|
segments:
|
69
73
|
- 0
|
70
74
|
version: "0"
|
71
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
72
77
|
requirements:
|
73
78
|
- - ">="
|
74
79
|
- !ruby/object:Gem::Version
|
80
|
+
hash: 3
|
75
81
|
segments:
|
76
82
|
- 0
|
77
83
|
version: "0"
|
78
84
|
requirements: []
|
79
85
|
|
80
86
|
rubyforge_project:
|
81
|
-
rubygems_version: 1.
|
87
|
+
rubygems_version: 1.5.2
|
82
88
|
signing_key:
|
83
89
|
specification_version: 3
|
84
90
|
summary: Foreign keys for Rails migrations for PostgreSQL, MySQL and Sqlite3. Based on dwilkie-foreigner
|
85
|
-
test_files:
|
86
|
-
|
87
|
-
- spec/spec_helper.rb
|
88
|
-
- spec/sqlite3/schema_spec.rb
|
89
|
-
- spec/postgresql/schema_extractor_spec.rb
|
90
|
-
- spec/postgresql/schema_spec.rb
|
91
|
-
- spec/postgresql/semantics_spec.rb
|
92
|
-
- spec/adapter_helper.rb
|
93
|
-
- spec/factory_helper.rb
|
94
|
-
- spec/mysql/schema_extractor_spec.rb
|
95
|
-
- spec/mysql/schema_spec.rb
|
96
|
-
- spec/mysql/semantics_spec.rb
|
91
|
+
test_files: []
|
92
|
+
|
data/.gitignore
DELETED