automatic_foreign_key 1.1.6 → 1.1.7

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,5 @@
1
+ 1.1.7
2
+ * handle references for change_column
1
3
  1.1
2
4
  * create index within foreign key (auto index)
3
5
  * global configuration for: auto_index and on_update/on_delete actions
data/README.rdoc CHANGED
@@ -4,6 +4,21 @@ Automatic Foreign Key is an ActiveRecord extension that automatically generates
4
4
  constraints when creating tables. It uses SQL-92 syntax and as such should be
5
5
  compatible with most databases that support foreign-key constraints.
6
6
 
7
+ As a bonus, the extension also allows you to create indices on columns via
8
+ options to the schema column definition statements.
9
+
10
+ === Installation
11
+
12
+ As a gem
13
+
14
+ gem install automatic_foreign_key
15
+
16
+ ...or as a plugin
17
+
18
+ script/plugin install http://github.com/mlomnicki/automatic_foreign_key.git
19
+
20
+ === Usage
21
+
7
22
  In the simplest case, the plugin assumes that if you have a column named
8
23
  +customer_id+ that you want a foreign-key constraint generated that references
9
24
  the +id+ column in the +customers+ table:
@@ -99,16 +114,46 @@ If you want to pass some options for index use hash params.
99
114
  Auto indexing option is useless for MySQL users as their RDBMS adds indices on foreign
100
115
  keys by default. However PostgreSQL users may have fun with that feature.
101
116
 
117
+ === Column Indices
118
+
119
+ You can create an index on any column by specifying the +:index+ option.
120
+
121
+ create_table :users do |t|
122
+ ...
123
+ t.string :role, :index => true
124
+ end
125
+
126
+ If you want to pass some options for rails' +add_index()+ you can use hash params.
127
+
128
+ create_table :users do |t|
129
+ ...
130
+ t.string :userid, :index => { :unique => true }
131
+ end
132
+
133
+ You can also define a multi-column index by specifying a +:with+ option
134
+ listing one or more additional columns to be passed to +add_index()+.
135
+
136
+ create_table :users do |t|
137
+ t.integer :group_id
138
+ t.integer :member_number, :index => { :with => :group_id, :unique => true }
139
+ t.integer :country_code
140
+ t.string :area_code
141
+ t.string :local_phone, :index => { :with => [:country_code, :area_code], :unique => true }
142
+ end
143
+
102
144
  === Configuration
103
145
 
104
146
  For customization purposes create config/initializers/automatic_foreign_key.rb file:
105
- AutomaticForeignKey.auto_index = true # create indices on FKs by default
106
- AutomaticForeignKey.on_update = :cascade # cascade as default on_update action
107
- AutomaticForeignKey.on_delete = :restrict # restrict as default on_delete action
147
+
148
+ AutomaticForeignKey.setup do |config|
149
+ config.auto_index = true # create indices on FKs by default
150
+ config.on_update = :cascade # cascade as default on_update action
151
+ config.on_delete = :restrict # restrict as default on_delete action
152
+ end
108
153
 
109
154
  === Rails 3 compatibility
110
155
 
111
- Automatic foreign key is fully compatibly with Rails 3.
156
+ Automatic foreign key is fully compatible with Rails 3.
112
157
 
113
158
  === Rails 2.x compatibility
114
159
 
data/Rakefile CHANGED
@@ -12,8 +12,8 @@ constraints when creating tables or adding columns. It uses SQL-92 syntax and as
12
12
  gem.email = "michal.lomnicki@gmail.com"
13
13
  gem.homepage = "http://github.com/mlomnicki/automatic_foreign_key"
14
14
  gem.authors = ["Michał Łomnicki"]
15
- gem.add_dependency "redhillonrails_core", ">= 1.0.4.1"
16
- gem.add_dependency "activerecord", ">= 2.2"
15
+ gem.files.exclude "Gemfile"
16
+ gem.files.exclude "Gemfile.lock"
17
17
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
18
18
  end
19
19
  Jeweler::GemcutterTasks.new
@@ -42,7 +42,7 @@ rescue LoadError
42
42
  end
43
43
 
44
44
  require 'spec/rake/spectask'
45
- %w[postgresql mysql].each do |adapter|
45
+ %w[postgresql mysql mysql2].each do |adapter|
46
46
  namespace adapter do
47
47
  Spec::Rake::SpecTask.new(:spec) do |spec|
48
48
  spec.libs << 'lib' << 'spec' << "spec/connections/#{adapter}"
@@ -53,13 +53,11 @@ end
53
53
 
54
54
  desc 'Run postgresql and mysql tests'
55
55
  task :spec do
56
- %w[postgresql mysql].each do |adapter|
56
+ %w[postgresql mysql mysql2].each do |adapter|
57
57
  Rake::Task["#{adapter}:spec"].invoke
58
58
  end
59
59
  end
60
60
 
61
- task :spec => :check_dependencies
62
-
63
61
  task :default => :spec
64
62
 
65
63
  Spec::Rake::SpecTask.new(:rcov) do |spec|
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.6
1
+ 1.1.7
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{automatic_foreign_key}
8
- s.version = "1.1.6"
8
+ s.version = "1.1.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Micha\305\202 \305\201omnicki"]
12
- s.date = %q{2010-09-13}
11
+ s.authors = ["Michał Łomnicki"]
12
+ s.date = %q{2011-01-10}
13
13
  s.description = %q{Automatic Foreign Key automatically generates foreign-key
14
14
  constraints when creating tables or adding columns. It uses SQL-92 syntax and as such should be compatible with most databases that support foreign-key constraints.}
15
15
  s.email = %q{michal.lomnicki@gmail.com}
@@ -18,71 +18,91 @@ constraints when creating tables or adding columns. It uses SQL-92 syntax and as
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
- ".gitignore",
22
- "CHANGELOG",
23
- "MIT-LICENSE",
24
- "README.rdoc",
25
- "Rakefile",
26
- "VERSION",
27
- "automatic_foreign_key.gemspec",
28
- "init.rb",
29
- "install.rb",
30
- "lib/automatic_foreign_key.rb",
31
- "lib/automatic_foreign_key/active_record/base.rb",
32
- "lib/automatic_foreign_key/active_record/connection_adapters/schema_statements.rb",
33
- "lib/automatic_foreign_key/active_record/connection_adapters/table_definition.rb",
34
- "lib/automatic_foreign_key/active_record/migration.rb",
35
- "lib/generators/automatic_foreign_key/migration_generator.rb",
36
- "lib/generators/automatic_foreign_key/templates/migration.rb",
37
- "spec/aaa_create_tables_spec.rb",
38
- "spec/connections/mysql/connection.rb",
39
- "spec/connections/postgresql/connection.rb",
40
- "spec/migration_spec.rb",
41
- "spec/models/comment.rb",
42
- "spec/models/post.rb",
43
- "spec/models/user.rb",
44
- "spec/references_spec.rb",
45
- "spec/schema/schema.rb",
46
- "spec/spec_helper.rb",
47
- "spec/support/matchers/automatic_foreign_key_matchers.rb",
48
- "spec/support/matchers/have_index.rb",
49
- "spec/support/matchers/reference.rb"
21
+ "CHANGELOG",
22
+ "MIT-LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "automatic_foreign_key.gemspec",
27
+ "init.rb",
28
+ "install.rb",
29
+ "lib/automatic_foreign_key.rb",
30
+ "lib/automatic_foreign_key/active_record/base.rb",
31
+ "lib/automatic_foreign_key/active_record/connection_adapters/schema_statements.rb",
32
+ "lib/automatic_foreign_key/active_record/connection_adapters/table_definition.rb",
33
+ "lib/automatic_foreign_key/active_record/migration.rb",
34
+ "lib/generators/automatic_foreign_key/migration_generator.rb",
35
+ "lib/generators/automatic_foreign_key/templates/migration.rb",
36
+ "spec/aaa_create_tables_spec.rb",
37
+ "spec/connections/mysql/connection.rb",
38
+ "spec/connections/mysql2/connection.rb",
39
+ "spec/connections/postgresql/connection.rb",
40
+ "spec/migration_spec.rb",
41
+ "spec/models/comment.rb",
42
+ "spec/models/post.rb",
43
+ "spec/models/user.rb",
44
+ "spec/references_spec.rb",
45
+ "spec/schema/schema.rb",
46
+ "spec/schema_dumper_spec.rb",
47
+ "spec/spec_helper.rb",
48
+ "spec/support/matchers/automatic_foreign_key_matchers.rb",
49
+ "spec/support/matchers/have_index.rb",
50
+ "spec/support/matchers/reference.rb"
50
51
  ]
51
52
  s.homepage = %q{http://github.com/mlomnicki/automatic_foreign_key}
52
- s.rdoc_options = ["--charset=UTF-8"]
53
53
  s.require_paths = ["lib"]
54
- s.rubygems_version = %q{1.3.6}
54
+ s.rubygems_version = %q{1.3.7}
55
55
  s.summary = %q{Automatically generate foreign-key constraints when creating tables}
56
56
  s.test_files = [
57
+ "spec/aaa_create_tables_spec.rb",
58
+ "spec/connections/mysql/connection.rb",
59
+ "spec/connections/mysql2/connection.rb",
60
+ "spec/connections/postgresql/connection.rb",
61
+ "spec/migration_spec.rb",
62
+ "spec/models/comment.rb",
63
+ "spec/models/post.rb",
64
+ "spec/models/user.rb",
65
+ "spec/references_spec.rb",
57
66
  "spec/schema/schema.rb",
58
- "spec/connections/postgresql/connection.rb",
59
- "spec/connections/mysql/connection.rb",
60
- "spec/aaa_create_tables_spec.rb",
61
- "spec/support/matchers/have_index.rb",
62
- "spec/support/matchers/automatic_foreign_key_matchers.rb",
63
- "spec/support/matchers/reference.rb",
64
- "spec/spec_helper.rb",
65
- "spec/references_spec.rb",
66
- "spec/migration_spec.rb",
67
- "spec/models/user.rb",
68
- "spec/models/post.rb",
69
- "spec/models/comment.rb"
67
+ "spec/schema_dumper_spec.rb",
68
+ "spec/spec_helper.rb",
69
+ "spec/support/matchers/automatic_foreign_key_matchers.rb",
70
+ "spec/support/matchers/have_index.rb",
71
+ "spec/support/matchers/reference.rb"
70
72
  ]
71
73
 
72
74
  if s.respond_to? :specification_version then
73
75
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
74
76
  s.specification_version = 3
75
77
 
76
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
77
- s.add_runtime_dependency(%q<redhillonrails_core>, [">= 1.0.4.1"])
78
- s.add_runtime_dependency(%q<activerecord>, [">= 2.2"])
78
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
79
+ s.add_runtime_dependency(%q<activerecord>, [">= 0"])
80
+ s.add_runtime_dependency(%q<redhillonrails_core>, ["~> 1.1.1"])
81
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5"])
82
+ s.add_development_dependency(%q<rspec>, ["~> 1.3"])
83
+ s.add_development_dependency(%q<railties>, [">= 0"])
84
+ s.add_development_dependency(%q<pg>, [">= 0"])
85
+ s.add_development_dependency(%q<mysql>, [">= 0"])
86
+ s.add_development_dependency(%q<mysql2>, [">= 0"])
79
87
  else
80
- s.add_dependency(%q<redhillonrails_core>, [">= 1.0.4.1"])
81
- s.add_dependency(%q<activerecord>, [">= 2.2"])
88
+ s.add_dependency(%q<activerecord>, [">= 0"])
89
+ s.add_dependency(%q<redhillonrails_core>, ["~> 1.1.1"])
90
+ s.add_dependency(%q<jeweler>, ["~> 1.5"])
91
+ s.add_dependency(%q<rspec>, ["~> 1.3"])
92
+ s.add_dependency(%q<railties>, [">= 0"])
93
+ s.add_dependency(%q<pg>, [">= 0"])
94
+ s.add_dependency(%q<mysql>, [">= 0"])
95
+ s.add_dependency(%q<mysql2>, [">= 0"])
82
96
  end
83
97
  else
84
- s.add_dependency(%q<redhillonrails_core>, [">= 1.0.4.1"])
85
- s.add_dependency(%q<activerecord>, [">= 2.2"])
98
+ s.add_dependency(%q<activerecord>, [">= 0"])
99
+ s.add_dependency(%q<redhillonrails_core>, ["~> 1.1.1"])
100
+ s.add_dependency(%q<jeweler>, ["~> 1.5"])
101
+ s.add_dependency(%q<rspec>, ["~> 1.3"])
102
+ s.add_dependency(%q<railties>, [">= 0"])
103
+ s.add_dependency(%q<pg>, [">= 0"])
104
+ s.add_dependency(%q<mysql>, [">= 0"])
105
+ s.add_dependency(%q<mysql2>, [">= 0"])
86
106
  end
87
107
  end
88
108
 
@@ -1,5 +1,4 @@
1
1
  begin
2
- require 'active_support'
3
2
  require 'redhillonrails_core'
4
3
  rescue
5
4
  gem 'redhillonrails_core'
@@ -28,6 +27,10 @@ module AutomaticForeignKey
28
27
  mattr_accessor :auto_index
29
28
  @@auto_index = nil
30
29
 
30
+ def self.setup(&block)
31
+ yield self
32
+ end
33
+
31
34
  def self.options_for_index(index)
32
35
  index.is_a?(Hash) ? index : {}
33
36
  end
@@ -28,7 +28,8 @@ module AutomaticForeignKey::ActiveRecord
28
28
  elsif column_name == 'parent_id'
29
29
  [table_name, :id]
30
30
  elsif column_name =~ /^(.*)_id$/
31
- [pluralized_table_name($1), :id]
31
+ determined_table_name = ActiveRecord::Base.pluralize_table_names ? $1.to_s.pluralize : $1
32
+ [determined_table_name, :id]
32
33
  end
33
34
  end
34
35
  end
@@ -14,7 +14,8 @@ module AutomaticForeignKey::ActiveRecord::ConnectionAdapters
14
14
  indices = table_definition.indices
15
15
  end
16
16
  indices.each do |column_name, index_options|
17
- add_index(table, column_name, index_options)
17
+ column_names = [column_name] + Array.wrap(index_options.delete(:with))
18
+ add_index(table, column_names, index_options)
18
19
  end
19
20
  end
20
21
 
@@ -5,8 +5,7 @@ module AutomaticForeignKey::ActiveRecord
5
5
  end
6
6
 
7
7
  module ClassMethods
8
- # Overrides standard ActiveRecord add column and adds
9
- # foreign key if column references other column
8
+ # Overrides ActiveRecord#add_column and adds foreign key if column references other column
10
9
  #
11
10
  # add_column('comments', 'post_id', :integer)
12
11
  # # creates a column and adds foreign key on posts(id)
@@ -30,6 +29,17 @@ module AutomaticForeignKey::ActiveRecord
30
29
  #
31
30
  def add_column(table_name, column_name, type, options = {})
32
31
  super
32
+ handle_column_options(table_name, column_name, options)
33
+ end
34
+
35
+ def change_column(table_name, column_name, type, options = {})
36
+ super
37
+ remove_foreign_key_if_exists(table_name, column_name)
38
+ handle_column_options(table_name, column_name, options)
39
+ end
40
+
41
+ protected
42
+ def handle_column_options(table_name, column_name, options)
33
43
  references = ActiveRecord::Base.references(table_name, column_name, options)
34
44
  if references
35
45
  AutomaticForeignKey.set_default_update_and_delete_actions!(options)
@@ -42,6 +52,12 @@ module AutomaticForeignKey::ActiveRecord
42
52
  end
43
53
  end
44
54
 
55
+ def remove_foreign_key_if_exists(table_name, column_name)
56
+ foreign_keys = ActiveRecord::Base.connection.foreign_keys(table_name.to_s)
57
+ fk = foreign_keys.detect { |fk| fk.table_name == table_name.to_s && fk.column_names == Array(column_name).collect(&:to_s) }
58
+ remove_foreign_key(table_name, fk.name) if fk
59
+ end
60
+
45
61
  end
46
62
  end
47
63
  end
@@ -1,9 +1,9 @@
1
- require 'generators/active_record'
2
- require 'active_record'
1
+ require 'rails/generators'
2
+ require 'rails/generators/active_record'
3
3
 
4
4
  module AutomaticForeignKey
5
5
  class MigrationGenerator < ::ActiveRecord::Generators::Base
6
- argument :name, :default => 'create_automatic_foreign_keys'
6
+ argument :name, :default => 'create_foreign_keys'
7
7
 
8
8
  def self.source_root
9
9
  File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
@@ -22,15 +22,15 @@ module AutomaticForeignKey
22
22
  end
23
23
 
24
24
  def determine_foreign_keys
25
- returning [] do |foreign_keys|
26
- connection = ::ActiveRecord::Base.connection
27
- connection.tables.each do |table_name|
28
- connection.columns(table_name).each do |column|
29
- references = ::ActiveRecord::Base.references(table_name, column.name)
30
- foreign_keys << ::RedHillConsulting::Core::ActiveRecord::ConnectionAdapters::ForeignKeyDefinition.new(nil, table_name, column.name, references.first, references.last) if references
31
- end
25
+ foreign_keys = []
26
+ connection = ::ActiveRecord::Base.connection
27
+ connection.tables.each do |table_name|
28
+ connection.columns(table_name).each do |column|
29
+ references = ::ActiveRecord::Base.references(table_name, column.name)
30
+ foreign_keys << ::RedhillonrailsCore::ActiveRecord::ConnectionAdapters::ForeignKeyDefinition.new(nil, table_name, column.name, references.first, references.last) if references
32
31
  end
33
32
  end
33
+ foreign_keys
34
34
  end
35
35
  end
36
36
  end
@@ -6,5 +6,6 @@ class <%= migration_class_name %> < ActiveRecord::Migration
6
6
  end
7
7
 
8
8
  def self.down
9
+ raise ActiveRecord::IrreversibleMigration
9
10
  end
10
11
  end
@@ -0,0 +1,16 @@
1
+ print "Using MySQL2\n"
2
+ require 'logger'
3
+
4
+ ActiveRecord::Base.configurations = {
5
+ 'afk' => {
6
+ :adapter => 'mysql2',
7
+ :database => 'afk_unittest',
8
+ :username => 'afk',
9
+ :encoding => 'utf8',
10
+ :socket => '/var/run/mysqld/mysqld.sock',
11
+ :min_messages => 'warning'
12
+ }
13
+
14
+ }
15
+
16
+ ActiveRecord::Base.establish_connection 'afk'
@@ -15,10 +15,10 @@ end
15
15
  describe ActiveRecord::Migration do
16
16
 
17
17
  context "when table is created" do
18
- before(:all) do
18
+
19
+ before(:each) do
19
20
  @model = Post
20
21
  end
21
-
22
22
 
23
23
  it "should create foreign keys" do
24
24
  create_table(@model, :user_id => {},
@@ -47,6 +47,12 @@ describe ActiveRecord::Migration do
47
47
  create_table(@model, :state => { :index => true })
48
48
  @model.should have_index.on(:state)
49
49
  end
50
+
51
+ it "should create a multiple-column index if specified" do
52
+ create_table(@model, :city => {},
53
+ :state => { :index => {:with => :city} } )
54
+ @model.should have_index.on([:state, :city])
55
+ end
50
56
 
51
57
  it "should auto-index foreign keys only" do
52
58
  AutomaticForeignKey.auto_index = true
@@ -63,7 +69,7 @@ describe ActiveRecord::Migration do
63
69
 
64
70
  context "when column is added" do
65
71
 
66
- before(:all) do
72
+ before(:each) do
67
73
  @model = Comment
68
74
  end
69
75
 
@@ -187,6 +193,48 @@ describe ActiveRecord::Migration do
187
193
  end
188
194
 
189
195
  end
196
+
197
+ context "when column is changed" do
198
+
199
+ before(:each) do
200
+ @model = Comment
201
+ end
202
+
203
+ it "should create foreign key" do
204
+ change_column :user, :string, :references => [:users, :login]
205
+ @model.should reference(:users, :login).on(:user)
206
+ change_column :user, :string, :references => nil
207
+ end
208
+
209
+ context "and initially references to users table" do
210
+
211
+ it "should have foreign key" do
212
+ @model.should reference(:users)
213
+ end
214
+
215
+ it "should drop foreign key afterwards" do
216
+ change_column :user_id, :integer, :references => :members
217
+ @model.should_not reference(:users)
218
+ change_column :user_id, :integer, :references => :users
219
+ end
220
+
221
+ it "should reference pointed table afterwards" do
222
+ change_column :user_id, :integer, :references => :members
223
+ @model.should reference(:members)
224
+ end
225
+
226
+ end
227
+
228
+ protected
229
+ def change_column(column_name, *args)
230
+ table = @model.table_name
231
+ ActiveRecord::Migration.suppress_messages do
232
+ ActiveRecord::Migration.change_column(table, column_name, *args)
233
+ @model.reset_column_information
234
+ end
235
+ end
236
+
237
+ end
190
238
 
191
239
  def foreign_key(model, column)
192
240
  columns = Array(column).collect(&:to_s)
@@ -194,7 +242,7 @@ describe ActiveRecord::Migration do
194
242
  end
195
243
 
196
244
  def mysql?
197
- ActiveRecord::Base.connection.adapter_name == 'MySQL'
245
+ ActiveRecord::Base.connection.adapter_name =~ /^mysql/i
198
246
  end
199
247
 
200
248
  def create_table(model, columns_with_options)
@@ -4,11 +4,19 @@ ActiveRecord::Schema.define do
4
4
  t.string :login
5
5
  end
6
6
  add_index :users, :login, :unique => true
7
+
8
+ create_table :members, :force => true do |t|
9
+ t.string :login
10
+ end
7
11
 
8
12
  create_table :comments, :force => true do |t|
9
13
  t.string :content
14
+ t.integer :user
15
+ t.integer :user_id
10
16
  end
11
17
 
18
+ add_foreign_key :comments, :user_id, :users, :id
19
+
12
20
  create_table :posts, :force => true do |t|
13
21
  t.string :content
14
22
  end
@@ -0,0 +1,32 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require 'stringio'
3
+
4
+ require 'models/post'
5
+
6
+ describe "Schema dump" do
7
+
8
+ let(:dump) do
9
+ stream = StringIO.new
10
+ ActiveRecord::SchemaDumper.ignore_tables = []
11
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
12
+ stream.string
13
+ end
14
+
15
+ it "shouldn't include :index option for index" do
16
+ add_column(:author_id, :integer, :references => :users, :index => true) do
17
+ dump.should_not match(/index => true/)
18
+ end
19
+ end
20
+
21
+ protected
22
+ def add_column(column_name, *args)
23
+ table = Post.table_name
24
+ ActiveRecord::Migration.suppress_messages do
25
+ ActiveRecord::Migration.add_column(table, column_name, *args)
26
+ Post.reset_column_information
27
+ yield if block_given?
28
+ ActiveRecord::Migration.remove_column(table, column_name)
29
+ end
30
+ end
31
+
32
+ end
@@ -14,7 +14,7 @@ module AutomaticForeignKeyMatchers
14
14
  if @references_table_name
15
15
  @result = @model.foreign_keys.select do |fk|
16
16
  fk.references_table_name == @references_table_name &&
17
- fk.references_column_names == @references_column_names
17
+ @references_column_names.empty? ? true : fk.references_column_names == @references_column_names
18
18
  end
19
19
  else
20
20
  @result = @model.foreign_keys
@@ -26,7 +26,7 @@ module AutomaticForeignKeyMatchers
26
26
  (@on_delete ? fk.on_delete == @on_delete : true)
27
27
  end
28
28
  else
29
- !!@result
29
+ !@result.empty?
30
30
  end
31
31
  end
32
32
 
@@ -34,7 +34,7 @@ module AutomaticForeignKeyMatchers
34
34
  target_column_names = @column_names.present? ? "(#{@column_names.join(', ')})" : ""
35
35
  destinantion_column_names = @references_table_name ? "#{@references_table_name}(#{@references_column_names.join(', ')})" : "anything"
36
36
  invert = should_not ? 'not' : ''
37
- "Expected #{@model.table_name}#{target_column_names} #{invert} to reference #{destinantion_column_names}"
37
+ "Expected #{@model.table_name}#{target_column_names} to #{invert} reference #{destinantion_column_names}"
38
38
  end
39
39
 
40
40
  def failure_message_for_should_not
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 1
8
- - 6
9
- version: 1.1.6
8
+ - 7
9
+ version: 1.1.7
10
10
  platform: ruby
11
11
  authors:
12
12
  - "Micha\xC5\x82 \xC5\x81omnicki"
@@ -14,37 +14,117 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-09-13 00:00:00 +02:00
17
+ date: 2011-01-10 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: redhillonrails_core
22
- prerelease: false
21
+ name: activerecord
23
22
  requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  segments:
28
- - 1
29
28
  - 0
30
- - 4
31
- - 1
32
- version: 1.0.4.1
29
+ version: "0"
33
30
  type: :runtime
31
+ prerelease: false
34
32
  version_requirements: *id001
35
33
  - !ruby/object:Gem::Dependency
36
- name: activerecord
37
- prerelease: false
34
+ name: redhillonrails_core
38
35
  requirement: &id002 !ruby/object:Gem::Requirement
36
+ none: false
39
37
  requirements:
40
- - - ">="
38
+ - - ~>
41
39
  - !ruby/object:Gem::Version
42
40
  segments:
43
- - 2
44
- - 2
45
- version: "2.2"
41
+ - 1
42
+ - 1
43
+ - 1
44
+ version: 1.1.1
46
45
  type: :runtime
46
+ prerelease: false
47
47
  version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: jeweler
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 1
57
+ - 5
58
+ version: "1.5"
59
+ type: :development
60
+ prerelease: false
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: &id004 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 1
71
+ - 3
72
+ version: "1.3"
73
+ type: :development
74
+ prerelease: false
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: railties
78
+ requirement: &id005 !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: *id005
89
+ - !ruby/object:Gem::Dependency
90
+ name: pg
91
+ requirement: &id006 !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ segments:
97
+ - 0
98
+ version: "0"
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *id006
102
+ - !ruby/object:Gem::Dependency
103
+ name: mysql
104
+ requirement: &id007 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ segments:
110
+ - 0
111
+ version: "0"
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: *id007
115
+ - !ruby/object:Gem::Dependency
116
+ name: mysql2
117
+ requirement: &id008 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ segments:
123
+ - 0
124
+ version: "0"
125
+ type: :development
126
+ prerelease: false
127
+ version_requirements: *id008
48
128
  description: |-
49
129
  Automatic Foreign Key automatically generates foreign-key
50
130
  constraints when creating tables or adding columns. It uses SQL-92 syntax and as such should be compatible with most databases that support foreign-key constraints.
@@ -57,7 +137,6 @@ extra_rdoc_files:
57
137
  - README.rdoc
58
138
  files:
59
139
  - .document
60
- - .gitignore
61
140
  - CHANGELOG
62
141
  - MIT-LICENSE
63
142
  - README.rdoc
@@ -75,6 +154,7 @@ files:
75
154
  - lib/generators/automatic_foreign_key/templates/migration.rb
76
155
  - spec/aaa_create_tables_spec.rb
77
156
  - spec/connections/mysql/connection.rb
157
+ - spec/connections/mysql2/connection.rb
78
158
  - spec/connections/postgresql/connection.rb
79
159
  - spec/migration_spec.rb
80
160
  - spec/models/comment.rb
@@ -82,6 +162,7 @@ files:
82
162
  - spec/models/user.rb
83
163
  - spec/references_spec.rb
84
164
  - spec/schema/schema.rb
165
+ - spec/schema_dumper_spec.rb
85
166
  - spec/spec_helper.rb
86
167
  - spec/support/matchers/automatic_foreign_key_matchers.rb
87
168
  - spec/support/matchers/have_index.rb
@@ -91,11 +172,12 @@ homepage: http://github.com/mlomnicki/automatic_foreign_key
91
172
  licenses: []
92
173
 
93
174
  post_install_message:
94
- rdoc_options:
95
- - --charset=UTF-8
175
+ rdoc_options: []
176
+
96
177
  require_paths:
97
178
  - lib
98
179
  required_ruby_version: !ruby/object:Gem::Requirement
180
+ none: false
99
181
  requirements:
100
182
  - - ">="
101
183
  - !ruby/object:Gem::Version
@@ -103,6 +185,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
185
  - 0
104
186
  version: "0"
105
187
  required_rubygems_version: !ruby/object:Gem::Requirement
188
+ none: false
106
189
  requirements:
107
190
  - - ">="
108
191
  - !ruby/object:Gem::Version
@@ -112,21 +195,23 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
195
  requirements: []
113
196
 
114
197
  rubyforge_project:
115
- rubygems_version: 1.3.6
198
+ rubygems_version: 1.3.7
116
199
  signing_key:
117
200
  specification_version: 3
118
201
  summary: Automatically generate foreign-key constraints when creating tables
119
202
  test_files:
120
- - spec/schema/schema.rb
121
- - spec/connections/postgresql/connection.rb
122
- - spec/connections/mysql/connection.rb
123
203
  - spec/aaa_create_tables_spec.rb
124
- - spec/support/matchers/have_index.rb
125
- - spec/support/matchers/automatic_foreign_key_matchers.rb
126
- - spec/support/matchers/reference.rb
127
- - spec/spec_helper.rb
128
- - spec/references_spec.rb
204
+ - spec/connections/mysql/connection.rb
205
+ - spec/connections/mysql2/connection.rb
206
+ - spec/connections/postgresql/connection.rb
129
207
  - spec/migration_spec.rb
130
- - spec/models/user.rb
131
- - spec/models/post.rb
132
208
  - spec/models/comment.rb
209
+ - spec/models/post.rb
210
+ - spec/models/user.rb
211
+ - spec/references_spec.rb
212
+ - spec/schema/schema.rb
213
+ - spec/schema_dumper_spec.rb
214
+ - spec/spec_helper.rb
215
+ - spec/support/matchers/automatic_foreign_key_matchers.rb
216
+ - spec/support/matchers/have_index.rb
217
+ - spec/support/matchers/reference.rb
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC