matthuhiggins-foreigner 0.4.1 → 0.5.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.
data/README CHANGED
@@ -14,9 +14,13 @@ Install as a plugin:
14
14
 
15
15
  ruby script/plugin install git://github.com/matthuhiggins/foreigner.git
16
16
 
17
- Install as a gem by adding the following to environment.rb:
17
+ In Rails 2, install as a gem by adding the following to config/environment.rb:
18
18
 
19
- config.gem "matthuhiggins-foreigner", :lib => "foreigner", :source => http://gemcutter.org
19
+ config.gem "matthuhiggins-foreigner", :lib => "foreigner"
20
+
21
+ In Rails 3, install as a gem by adding the following to your Gemfile:
22
+
23
+ gem 'matthuhiggins-foreigner', :require => 'foreigner'
20
24
 
21
25
  API
22
26
  ---
@@ -94,6 +98,6 @@ schema.rb
94
98
  ---------
95
99
 
96
100
  Similar to indexes, the foreign keys in your database are automatically dumped to schema.rb.
97
- This allows you to use foreign keys without fighting Rails!
101
+ This allows you to use foreign keys without switching to the :sql schema.
98
102
 
99
103
  Copyright (c) 2009 Matthew Higgins, released under the MIT license
@@ -8,23 +8,18 @@ module Foreigner
8
8
  def add_foreign_key(from_table, to_table, options = {})
9
9
  column = options[:column] || "#{to_table.to_s.singularize}_id"
10
10
  foreign_key_name = foreign_key_name(from_table, column, options)
11
+ primary_key = options[:primary_key] || "id"
12
+ dependency = dependency_sql(options[:dependent])
11
13
 
12
14
  sql =
13
15
  "ALTER TABLE #{quote_table_name(from_table)} " +
14
16
  "ADD CONSTRAINT #{quote_column_name(foreign_key_name)} " +
15
- foreign_key_definition(to_table, options)
16
-
17
- execute(sql)
18
- end
19
-
20
- def foreign_key_definition(to_table, options = {})
21
- column = options[:column] || "#{to_table.to_s.singularize}_id"
22
- primary_key = options[:primary_key] || "id"
23
- dependency = dependency_sql(options[:dependent])
17
+ "FOREIGN KEY (#{quote_column_name(column)}) " +
18
+ "REFERENCES #{quote_table_name(ActiveRecord::Migrator.proper_table_name(to_table))}(#{primary_key})"
24
19
 
25
- sql = "FOREIGN KEY (#{quote_column_name(column)}) REFERENCES #{quote_table_name(to_table)}(#{primary_key})"
26
20
  sql << " #{dependency}" unless dependency.blank?
27
- sql
21
+
22
+ execute(sql)
28
23
  end
29
24
 
30
25
  private
data/lib/foreigner.rb CHANGED
@@ -3,19 +3,55 @@ require 'foreigner/connection_adapters/abstract/schema_definitions'
3
3
  require 'foreigner/connection_adapters/sql_2003'
4
4
  require 'foreigner/schema_dumper'
5
5
 
6
- module ActiveRecord
7
- module ConnectionAdapters
8
- include Foreigner::ConnectionAdapters::SchemaStatements
9
- include Foreigner::ConnectionAdapters::SchemaDefinitions
10
- end
11
-
12
- SchemaDumper.class_eval do
13
- include Foreigner::SchemaDumper
14
- end
6
+ module Foreigner
7
+ mattr_accessor :adapters
8
+ self.adapters = {}
9
+
10
+ class << self
11
+ def register(adapter_name, file_name)
12
+ adapters[adapter_name] = file_name
13
+ end
15
14
 
16
- Base.class_eval do
17
- if %w(mysql postgresql).include? connection_pool.spec.config[:adapter].downcase
18
- require "foreigner/connection_adapters/#{connection_pool.spec.config[:adapter].downcase}_adapter"
15
+ def load_adapter!
16
+ if adapters.key?(configured_adapter)
17
+ require adapters[configured_adapter]
18
+ end
19
+ end
20
+
21
+ def configured_adapter
22
+ ActiveRecord::Base.connection.adapter_name.downcase
23
+ end
24
+
25
+ def on_load(&block)
26
+ if Rails.version >= '3.0'
27
+ ActiveSupport.on_load :active_record do
28
+ unless ActiveRecord::Base.connected?
29
+ ActiveRecord::Base.configurations = Rails.application.config.database_configuration
30
+ ActiveRecord::Base.establish_connection
31
+ end
32
+ block.call
33
+ end
34
+ else
35
+ yield
36
+ end
19
37
  end
20
38
  end
21
39
  end
40
+
41
+ Foreigner.register 'mysql', 'foreigner/connection_adapters/mysql_adapter'
42
+ Foreigner.register 'postgresql', 'foreigner/connection_adapters/postgresql_adapter'
43
+
44
+ Foreigner.on_load do
45
+ module ActiveRecord
46
+ module ConnectionAdapters
47
+ include Foreigner::ConnectionAdapters::SchemaStatements
48
+ include Foreigner::ConnectionAdapters::SchemaDefinitions
49
+ end
50
+
51
+ SchemaDumper.class_eval do
52
+ include Foreigner::SchemaDumper
53
+ end
54
+ end
55
+
56
+ Foreigner.load_adapter!
57
+ end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: matthuhiggins-foreigner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 5
8
+ - 0
9
+ version: 0.5.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - Matthew Higgins
@@ -9,11 +14,11 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-12-25 00:00:00 -08:00
17
+ date: 2010-04-02 00:00:00 -07:00
13
18
  default_executable:
14
19
  dependencies: []
15
20
 
16
- description: Foreign keys for Rails migrations
21
+ description: Adds helpers to migrations and correctly dumps foreign keys to schema.rb
17
22
  email: developer@matthewhiggins.com
18
23
  executables: []
19
24
 
@@ -35,34 +40,38 @@ files:
35
40
  - test/helper.rb
36
41
  - test/mysql_adapter_test.rb
37
42
  has_rdoc: true
38
- homepage: http://github.com/matthuhiggins/foreigner/tree/master
43
+ homepage: http://github.com/matthuhiggins/foreigner
39
44
  licenses: []
40
45
 
41
46
  post_install_message:
42
- rdoc_options:
43
- - --line-numbers
44
- - --main
45
- - README
47
+ rdoc_options: []
48
+
46
49
  require_paths:
47
50
  - lib
48
51
  required_ruby_version: !ruby/object:Gem::Requirement
49
52
  requirements:
50
53
  - - ">="
51
54
  - !ruby/object:Gem::Version
52
- version: "0"
53
- version:
55
+ segments:
56
+ - 1
57
+ - 8
58
+ - 6
59
+ version: 1.8.6
54
60
  required_rubygems_version: !ruby/object:Gem::Requirement
55
61
  requirements:
56
62
  - - ">="
57
63
  - !ruby/object:Gem::Version
58
- version: "0"
59
- version:
64
+ segments:
65
+ - 1
66
+ - 3
67
+ - 6
68
+ version: 1.3.6
60
69
  requirements: []
61
70
 
62
- rubyforge_project:
63
- rubygems_version: 1.3.5
71
+ rubyforge_project: matthuhiggins-foreigner
72
+ rubygems_version: 1.3.6
64
73
  signing_key:
65
- specification_version: 1
66
- summary: Foreign keys for Rails migrations
74
+ specification_version: 3
75
+ summary: Foreign keys for Rails
67
76
  test_files: []
68
77