geert 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
data/geert.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{geert}
8
- s.version = "0.0.1"
8
+ s.version = "0.0.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Iain Hecker"]
@@ -2,11 +2,6 @@ module Geert
2
2
 
3
3
  class Association
4
4
 
5
- attr_reader :reflection, :model
6
-
7
- def exclude?
8
- polymorphic? or uses_polymorphic?
9
- end
10
5
 
11
6
  def migration
12
7
  "add_foreign_key :#{source}, :#{target}, #{options_string}" unless exclude?
@@ -16,14 +11,26 @@ module Geert
16
11
  reflection.options[:polymorphic]
17
12
  end
18
13
 
19
- def uses_polymorphic?
20
- model.associations.select(&:polymorphic?).map(&:column).include?(column)
21
- end
22
-
23
14
  def column
24
15
  reflection.primary_key_name
25
16
  end
26
17
 
18
+ private
19
+
20
+ def exclude?
21
+ existing? or polymorphic? or uses_polymorphic?
22
+ end
23
+
24
+ def existing?
25
+ ActiveRecord::Base.connection.foreign_keys(source).any? do |fk|
26
+ fk.options[:column].to_s == column.to_s
27
+ end
28
+ end
29
+
30
+ def uses_polymorphic?
31
+ model.associations.select(&:polymorphic?).map(&:column).include?(column)
32
+ end
33
+
27
34
  def source
28
35
  model.table_name
29
36
  end
@@ -33,13 +40,36 @@ module Geert
33
40
  end
34
41
 
35
42
  def options
36
- {:column => column}
43
+ {:column => column}.merge(dependency || {})
44
+ end
45
+
46
+ def dependency
47
+ { :dependent => dependency_type } if dependency_type
48
+ end
49
+
50
+ def dependency_type
51
+ [ :nullify, :delete ].find { |type| send("#{type}?") }
37
52
  end
38
53
 
54
+ def nullify?
55
+ dependency_option == :nullify
56
+ end
57
+
58
+ def delete?
59
+ dependency_option == :delete_all
60
+ end
61
+
62
+ def dependency_option
63
+ reflection.options[:dependent]
64
+ end
65
+
66
+ # Just to make it pretty, remove the curly braces
39
67
  def options_string
40
68
  options.inspect.gsub(/\A\{(.*)\}\z/, '\\1')
41
69
  end
42
70
 
71
+ attr_reader :reflection, :model
72
+
43
73
  def initialize(reflection, model)
44
74
  @reflection, @model = reflection, model
45
75
  end
data/lib/geert.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/geert/project'
2
2
  require File.dirname(__FILE__) + '/geert/model'
3
3
  require File.dirname(__FILE__) + '/geert/association'
4
+ require "foreigner"
4
5
 
5
6
  module Geert
6
7
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geert
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Iain Hecker