immigrant 0.3.4 → 0.3.5

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: 7ed3d771b38d02c5ff03b07c83d14e820703fe43
4
- data.tar.gz: 8408b58635d65127dfcb28125bc23ff701abb442
3
+ metadata.gz: 178034936e28a389c8a909243a9576c6212d8fb0
4
+ data.tar.gz: 881d1940852983b4a262e1904b7ccc9471233d25
5
5
  SHA512:
6
- metadata.gz: d81e14ec77a85039b8cd6fb9ca64b3bb25730ee4b232a220c37c1285340993b808d3ec82a2d721172fc2a5647ee934bf007774d76d32105761cd3279b8d98098
7
- data.tar.gz: 29faf9f62a44d17984fd685600e38220a1e3cc355127c98fb810c4e76b1609ec8068eda4380e05a8738b38505c54fd2ab5435e855eba193bd019b0a9a602d42e
6
+ metadata.gz: e59b3cd9d311554a884b871421e719082944ed0c6e891a8b28ddc8f20c8d09ac803a5afa708d7336fda28e141856276eb40034f21d43d0e0b00baa9df56c4f4e
7
+ data.tar.gz: 44a246c9e00744f3003a4c2d4481d3654129659a1f1dbd6c208b1d5d0d646d8ac100c3368da087d062e0703f4e6a3bf4a5048a6527ed36e2dad178c580619f14
@@ -75,7 +75,7 @@ module Immigrant
75
75
  # Foo.has_many :bars
76
76
  # Foo.has_many :bazzes, :class_name => Bar
77
77
  # we need to make sure everything is legit and see if any of them
78
- # specify :dependent => :delete
78
+ # specify :dependent => :delete|:delete_all|:nullify
79
79
  if current_key = foreign_keys[foreign_key.hash_key]
80
80
  if current_key.to_table != foreign_key.to_table || current_key.options[:primary_key] != foreign_key.options[:primary_key]
81
81
  warnings[foreign_key.hash_key] ||= "Skipping #{foreign_key.from_table}.#{foreign_key.options[:column]}: it has multiple associations referencing different keys/tables."
@@ -149,6 +149,12 @@ module Immigrant
149
149
  ]
150
150
  end
151
151
 
152
+ DEPENDENT_MAP = {
153
+ :delete => :cascade,
154
+ :delete_all => :cascade,
155
+ :nullify => :nullify
156
+ }
157
+
152
158
  def infer_has_n_keys(klass, reflection)
153
159
  from_table = reflection.klass.table_name
154
160
  to_table = klass.table_name
@@ -156,8 +162,9 @@ module Immigrant
156
162
  primary_key = (reflection.options[:primary_key] || klass.primary_key).to_s
157
163
 
158
164
  actions = {}
159
- if [:delete, :delete_all].include?(reflection.options[:dependent]) && !qualified_reflection?(reflection, klass)
160
- actions = {:on_delete => :cascade, :on_update => :cascade}
165
+ dependent_action = DEPENDENT_MAP[reflection.options[:dependent]]
166
+ if dependent_action && !qualified_reflection?(reflection, klass)
167
+ actions = {:on_delete => dependent_action, :on_update => dependent_action}
161
168
  end
162
169
 
163
170
  [
@@ -28,6 +28,18 @@ class ImmigrantTest < ActiveSupport::TestCase
28
28
  end
29
29
  })
30
30
  end
31
+ if ActiveRecord::VERSION::STRING < '4.1'
32
+ # make sure habtms create a model class so that MockConnection.tables works
33
+ extend(Module.new{
34
+ define_method :has_and_belongs_to_many do |assoc, options = {}|
35
+ join_table = options[:join_table] || [table_name, assoc.to_s].sort.join("_")
36
+ Class.new(ActiveRecord::Base) do
37
+ self.table_name = join_table
38
+ end
39
+ super assoc, options
40
+ end
41
+ })
42
+ end
31
43
  end
32
44
 
33
45
  class MockConnection
@@ -131,6 +143,23 @@ class ImmigrantTest < ActiveSupport::TestCase
131
143
  )
132
144
  end
133
145
 
146
+ test 'has_one :dependent => :nullify should generate a foreign key with :on_delete => :nullify' do
147
+ given <<-CODE
148
+ class Author < ActiveRecord::Base
149
+ has_one :book, :order => "id DESC", :dependent => :nullify
150
+ end
151
+ class Book < ActiveRecord::Base; end
152
+ CODE
153
+
154
+ assert_equal(
155
+ [foreign_key_definition(
156
+ 'books', 'authors',
157
+ :column => 'author_id', :primary_key => 'id', :on_delete => :nullify, :on_update => :nullify
158
+ )],
159
+ infer_keys
160
+ )
161
+ end
162
+
134
163
  test 'has_many should generate a foreign key' do
135
164
  given <<-CODE
136
165
  class Author < ActiveRecord::Base
@@ -165,6 +194,23 @@ class ImmigrantTest < ActiveSupport::TestCase
165
194
  )
166
195
  end
167
196
 
197
+ test 'has_many :dependent => :nullify should generate a foreign key with :on_delete => :nullify' do
198
+ given <<-CODE
199
+ class Author < ActiveRecord::Base
200
+ has_many :books, :dependent => :nullify
201
+ end
202
+ class Book < ActiveRecord::Base; end
203
+ CODE
204
+
205
+ assert_equal(
206
+ [foreign_key_definition(
207
+ 'books', 'authors',
208
+ :column => 'author_id', :primary_key => 'id', :on_delete => :nullify, :on_update => :nullify
209
+ )],
210
+ infer_keys
211
+ )
212
+ end
213
+
168
214
  test 'has_and_belongs_to_many should generate two foreign keys' do
169
215
  given <<-CODE
170
216
  class Author < ActiveRecord::Base
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: immigrant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Jensen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-18 00:00:00.000000000 Z
11
+ date: 2015-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord