sparkfly-foreigner 0.6.0 → 0.7.1
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.
- 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