johnsbrn-classy-inheritance 0.6.8 → 0.6.8.1

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/History.txt CHANGED
@@ -1,3 +1,5 @@
1
+ == 0.6.8.1 2009-03-19
2
+ * Update for Rails 2.3 - johnsbrn
1
3
  == 0.6.8 2009-02-03
2
4
  * Make has_one fix consistent with edge Rails - johnsbrn
3
5
  == 0.6.7 2009-02-01
@@ -1,7 +1,9 @@
1
+ require 'active_record/version'
1
2
  module ActiveRecord
2
3
  module Associations
3
4
  class HasOneAssociation
4
5
 
6
+ # this is fixed in 2.3, but it doesn't hurt to leave it here
5
7
  def set_belongs_to_association_for(record)
6
8
  if @reflection.options[:as]
7
9
  record["#{@reflection.options[:as]}_id"] = @owner.id unless @owner.new_record?
@@ -15,6 +17,7 @@ module ActiveRecord
15
17
  end
16
18
 
17
19
  private
20
+ #this is still not fixed in 2.3
18
21
  def new_record(replace_existing)
19
22
  # Make sure we load the target first, if we plan on replacing the existing
20
23
  # instance. Otherwise, if the target has not previously been loaded
@@ -38,11 +41,31 @@ module ActiveRecord
38
41
  end
39
42
  end
40
43
  end
44
+
45
+ if ActiveRecord::VERSION::MAJOR == 2 && ActiveRecord::VERSION::MINOR == 3
46
+
47
+ module AutosaveAssociation
48
+
49
+ # fix active record has_one primary key bug rails 2.3 - http://rails.lighthouseapp.com/projects/8994/tickets/1756-has_one-with-foreign_key-primary_key-bug
50
+ def save_has_one_association(reflection)
51
+ if (association = association_instance_get(reflection.name)) && !association.target.nil?
52
+ primary_key = reflection.options[:primary_key] || :id
53
+ if reflection.options[:autosave] && association.marked_for_destruction?
54
+ association.destroy
55
+ elsif new_record? || association.new_record? || association[reflection.primary_key_name] != send(primary_key) || reflection.options[:autosave]
56
+ association[reflection.primary_key_name] = send(primary_key)
57
+ association.save(false)
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ end
41
64
  end
42
65
 
43
66
  module Stonean
44
67
  module ClassyInheritance
45
- VERSION = '0.6.8'
68
+ VERSION = '0.6.8.1'
46
69
 
47
70
  def self.version
48
71
  VERSION
@@ -50,35 +73,40 @@ module Stonean
50
73
 
51
74
  module ClassMethods
52
75
 
53
- # fix active record has_one primary key bug - http://rails.lighthouseapp.com/projects/8994/tickets/1756-has_one-with-foreign_key-primary_key-bug
54
- def has_one(association_id, options = {})
55
- if options[:through]
56
- reflection = create_has_one_through_reflection(association_id, options)
57
- association_accessor_methods(reflection, ActiveRecord::Associations::HasOneThroughAssociation)
58
- else
59
- reflection = create_has_one_reflection(association_id, options)
76
+
77
+ # fix active record has_one primary key bug rails 2.2.2 - http://rails.lighthouseapp.com/projects/8994/tickets/1756-has_one-with-foreign_key-primary_key-bug
78
+ if ActiveRecord::VERSION::MAJOR == 2 && ActiveRecord::VERSION::MINOR == 2
79
+
80
+ def has_one(association_id, options = {})
81
+ if options[:through]
82
+ reflection = create_has_one_through_reflection(association_id, options)
83
+ association_accessor_methods(reflection, ActiveRecord::Associations::HasOneThroughAssociation)
84
+ else
85
+ reflection = create_has_one_reflection(association_id, options)
60
86
 
61
- ivar = "@#{reflection.name}"
87
+ ivar = "@#{reflection.name}"
62
88
 
63
- method_name = "has_one_after_save_for_#{reflection.name}".to_sym
64
- define_method(method_name) do
65
- association = instance_variable_get(ivar) if instance_variable_defined?(ivar)
89
+ method_name = "has_one_after_save_for_#{reflection.name}".to_sym
90
+ define_method(method_name) do
91
+ association = instance_variable_get(ivar) if instance_variable_defined?(ivar)
66
92
 
67
- primary_key = reflection.options[:primary_key] || :id
68
- if !association.nil? && (new_record? || association.new_record? || association[reflection.primary_key_name] != send(primary_key))
69
- association[reflection.primary_key_name] = send(primary_key)
70
- association.save(true)
93
+ primary_key = reflection.options[:primary_key] || :id
94
+ if !association.nil? && (new_record? || association.new_record? || association[reflection.primary_key_name] != send(primary_key))
95
+ association[reflection.primary_key_name] = send(primary_key)
96
+ association.save(true)
97
+ end
71
98
  end
72
- end
73
- after_save method_name
99
+ after_save method_name
74
100
 
75
- add_single_associated_validation_callbacks(reflection.name) if options[:validate] == true
76
- association_accessor_methods(reflection, ActiveRecord::Associations::HasOneAssociation)
77
- association_constructor_method(:build, reflection, ActiveRecord::Associations::HasOneAssociation)
78
- association_constructor_method(:create, reflection, ActiveRecord::Associations::HasOneAssociation)
101
+ add_single_associated_validation_callbacks(reflection.name) if options[:validate] == true
102
+ association_accessor_methods(reflection, ActiveRecord::Associations::HasOneAssociation)
103
+ association_constructor_method(:build, reflection, ActiveRecord::Associations::HasOneAssociation)
104
+ association_constructor_method(:create, reflection, ActiveRecord::Associations::HasOneAssociation)
79
105
 
80
- configure_dependency_for_has_one(reflection)
106
+ configure_dependency_for_has_one(reflection)
107
+ end
81
108
  end
109
+
82
110
  end
83
111
 
84
112
  def depends_on(model_sym, options = {})
@@ -1,10 +1,9 @@
1
1
  require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
- User.depends_on :profile, :attrs => [:first_name, :last_name, :email]
4
-
5
3
  class TestClassyInheritance < Test::Unit::TestCase
6
4
 
7
5
  def setup
6
+ User.depends_on :profile, :attrs => [:first_name, :last_name, :email]
8
7
  @user = User.new
9
8
  end
10
9
 
@@ -1,11 +1,12 @@
1
1
  require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
- Account.has_dependency :account_login, :attrs => [:login, :password], :foreign_key => :account_email, :primary_key => :email
4
-
5
3
  class TestHasDependency < Test::Unit::TestCase
6
4
 
7
5
  def setup
6
+ Account.has_dependency :account_login, :attrs => [:login, :password], :foreign_key => :account_email, :primary_key => :email
7
+ Database.has_dependency :database_login, :attrs => [:login]
8
8
  @account = Account.new
9
+ @database = Database.new
9
10
  end
10
11
 
11
12
  def test_active_record_should_respond_to_depends_on
@@ -32,6 +33,17 @@ class TestHasDependency < Test::Unit::TestCase
32
33
  assert @account.respond_to?(:password=)
33
34
  end
34
35
 
36
+ def test_profile_should_create_author_record
37
+ @database.name = 'page'
38
+ @database.login = 'joe'
39
+
40
+ @database.save!
41
+
42
+ @database_login = DatabaseLogin.find(:first, :conditions => {:database_id => @database.id})
43
+
44
+ assert_equal 'joe', @database_login.login
45
+ end
46
+
35
47
  def test_account_should_create_account_login_record
36
48
  @account.login = 'joe'
37
49
  @account.password = 'password'
data/test/test_helper.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'activerecord'
3
3
 
4
+ ActiveRecord.load_all!
5
+
4
6
  require 'test/unit'
5
7
  require File.dirname(__FILE__) + '/../lib/classy-inheritance'
6
8
 
@@ -56,6 +58,17 @@ class SetupTestTables < ActiveRecord::Migration
56
58
  t.timestamps
57
59
  end
58
60
 
61
+ create_table :databases, :force => true do |t|
62
+ t.string :name
63
+ t.timestamps
64
+ end
65
+
66
+ create_table :database_logins, :force => true do |t|
67
+ t.string :login
68
+ t.integer :database_id
69
+ t.timestamps
70
+ end
71
+
59
72
  create_table :addresses, :force => true do |t|
60
73
  t.string :line_one
61
74
  t.string :line_two
@@ -118,6 +131,14 @@ class Profile < ActiveRecord::Base
118
131
  validates_presence_of :first_name, :last_name, :email
119
132
  end
120
133
 
134
+ class Database < ActiveRecord::Base
135
+ validates_presence_of :name
136
+ end
137
+
138
+ class DatabaseLogin < ActiveRecord::Base
139
+ validates_presence_of :login
140
+ end
141
+
121
142
  class Account < ActiveRecord::Base
122
143
  validates_presence_of :first_name, :last_name, :email
123
144
  end
@@ -1,16 +1,17 @@
1
1
  require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
3
  class TestWithOptionalDependency < Test::Unit::TestCase
4
- # Turn off the validates_presence_of call
5
- Author.depends_on :profile, :validates_presence_if => false,
6
- :attrs => [:first_name, :last_name, :email]
7
-
8
- # Turn off the validates_presence_of and the validates_associated calls
9
- Artist.depends_on :profile, :validates_presence_if => false,
10
- :validates_associated_if => false,
11
- :attrs => [:first_name, :last_name, :email]
12
4
 
13
5
  def setup
6
+ # Turn off the validates_presence_of call
7
+ Author.depends_on :profile, :validates_presence_if => false,
8
+ :attrs => [:first_name, :last_name, :email]
9
+
10
+ # Turn off the validates_presence_of and the validates_associated calls
11
+ Artist.depends_on :profile, :validates_presence_if => false,
12
+ :validates_associated_if => false,
13
+ :attrs => [:first_name, :last_name, :email]
14
+
14
15
  @author = Author.new
15
16
  @artist = Artist.new
16
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: johnsbrn-classy-inheritance
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.8
4
+ version: 0.6.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Stone
@@ -9,11 +9,12 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-01 00:00:00 -08:00
12
+ date: 2009-03-19 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bones
17
+ type: :development
17
18
  version_requirement:
18
19
  version_requirements: !ruby/object:Gem::Requirement
19
20
  requirements: