geert 0.0.1 → 0.0.2

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/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