codebrulee-attr_remote 0.0.4 → 0.0.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.
data/attr_remote.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "attr_remote"
3
- s.version = "0.0.4"
3
+ s.version = "0.0.5"
4
4
  s.date = "2008-01-06"
5
5
  s.summary = "Painlessly integrate ActiveResource into ActiveRecord."
6
6
  s.email = "smithk14@gmail.com"
data/lib/attr_remote.rb CHANGED
@@ -4,147 +4,154 @@ require 'active_resource'
4
4
 
5
5
  module AttrRemote
6
6
  module ClassMethods
7
+ def remote_attributes
8
+ @remote_attributes ||= []
9
+ end
10
+
11
+ def remote_changed?
12
+ @remote_changed == true
13
+ end
14
+
7
15
  def attr_remote(*remote_attrs)
8
16
  remote_class = "Remote#{self.to_s}"
9
17
  remote_instance_meth = remote_class.underscore
10
18
  remote_instance_id = remote_class.foreign_key
19
+
20
+ remote_attributes.concat(remote_attrs).uniq!
11
21
 
12
22
  class_eval <<-remote_access
13
- # def remote_user
14
- # @remote_user ||= RemoteUser.find(self.remote_user_id) rescue nil
15
- # end
16
- def #{remote_instance_meth}
17
- @#{remote_instance_meth} ||= #{remote_class}.find(self.#{remote_instance_id}) rescue nil
18
- end
19
-
20
- # before_create :create_remote_user
21
- before_create :create_#{remote_instance_meth}
22
-
23
- # def create_remote_user
24
- # unless self.remote_user_id
25
- # remote_hash = {}
26
- # self.class.remote_attributes.each do |attr|
27
- # remote_hash[attr.to_sym] = self.send(attr.to_sym)
28
- # end
29
- # remote_hash[:validate_only] = true if validate_only
30
- # @remote_user = RemoteUser.create(remote_hash)
31
- #
32
- # unless @remote_user.valid?
33
- # @remote_user.errors.each do |attr, err|
34
- # errors.add(attr, err)
35
- # end
36
- # return false
37
- # else
38
- # self.remote_user_id = @remote_user.id
39
- # end
40
- # end
41
- # end
42
- def create_#{remote_instance_meth}
43
- unless self.#{remote_instance_id}
44
- remote_hash = {}
45
- self.class.remote_attributes.each do |attr|
46
- remote_hash[attr.to_sym] = self.send(attr.to_sym)
47
- end
48
- @#{remote_instance_meth} = #{remote_class}.create(remote_hash)
49
-
50
- unless @#{remote_instance_meth}.valid?
51
- @#{remote_instance_meth}.errors.each do |attr, err|
52
- errors.add(attr, err)
53
- end
54
- return false
55
- else
56
- self.#{remote_instance_id} = @#{remote_instance_meth}.id
57
- end
58
- end
23
+ # def remote_user
24
+ # @remote_user ||= RemoteUser.find(self.remote_user_id) rescue nil
25
+ # end
26
+ def #{remote_instance_meth}
27
+ @#{remote_instance_meth} ||= #{remote_class}.find(self.#{remote_instance_id}) rescue nil
28
+ end
29
+
30
+ # before_create :create_remote_user
31
+ before_create :create_#{remote_instance_meth}
32
+
33
+ # def create_remote_user
34
+ # unless self.remote_user_id
35
+ # remote_hash = {}
36
+ # self.class.remote_attributes.each do |attr|
37
+ # remote_hash[attr.to_sym] = self.send(attr.to_sym)
38
+ # end
39
+ # remote_hash[:validate_only] = true if validate_only
40
+ # @remote_user = RemoteUser.create(remote_hash)
41
+ #
42
+ # unless @remote_user.valid?
43
+ # @remote_user.errors.each do |attr, err|
44
+ # errors.add(attr, err)
45
+ # end
46
+ # return false
47
+ # else
48
+ # self.remote_user_id = @remote_user.id
49
+ # end
50
+ # end
51
+ # end
52
+ def create_#{remote_instance_meth}
53
+ unless self.#{remote_instance_id}
54
+ remote_hash = {}
55
+ self.class.remote_attributes.each do |attr|
56
+ remote_hash[attr.to_sym] = self.send(attr.to_sym)
59
57
  end
60
- private :create_#{remote_instance_meth}
61
-
62
- # validate_on_create :validate_remote_user_on_create
63
- validate_on_create :validate_#{remote_instance_meth}_on_create
64
-
65
- # def validate_remote_user_on_create; end
66
- def validate_#{remote_instance_meth}_on_create; end
58
+ @#{remote_instance_meth} = #{remote_class}.create(remote_hash)
67
59
 
68
- # before_update :update_remote_user
69
- before_update :update_#{remote_instance_meth}
70
-
71
- # def update_remote_user
72
- # if self.remote_user_id
73
- # remote_hash = {}
74
- # self.class.remote_attributes.each do |attr|
75
- # remote_hash[attr.to_sym] = self.send(attr.to_sym)
76
- # end
77
- # remote_user.load(remote_hash)
78
- # remote_user.save
79
- #
80
- # unless @#{remote_instance_meth}.valid?
81
- # remote_user.errors.each do |attr, err|
82
- # errors.add(attr, err)
83
- # end
84
- # return false
85
- # else
86
- # return true
87
- # end
88
- # end
89
- # end
90
- def update_#{remote_instance_meth}
91
- if self.#{remote_instance_id}
92
- remote_hash = {}
93
- self.class.remote_attributes.each do |attr|
94
- remote_hash[attr.to_sym] = self.send(attr.to_sym)
95
- end
96
- #{remote_instance_meth}.load(remote_hash)
97
- #{remote_instance_meth}.save
98
-
99
- unless @#{remote_instance_meth}.valid?
100
- #{remote_instance_meth}.errors.each do |attr, err|
101
- errors.add(attr, err)
102
- end
103
- return false
104
- else
105
- return true
106
- end
60
+ unless @#{remote_instance_meth}.valid?
61
+ @#{remote_instance_meth}.errors.each do |attr, err|
62
+ errors.add(attr, err)
107
63
  end
64
+ return false
65
+ else
66
+ self.#{remote_instance_id} = @#{remote_instance_meth}.id
108
67
  end
109
- private :update_#{remote_instance_meth}
110
-
111
- # validate_on_update :validate_remote_user_on_update
112
- validate_on_update :validate_#{remote_instance_meth}_on_update
113
-
114
- # def validate_remote_user_on_update; end
115
- def validate_#{remote_instance_meth}_on_update; end
116
- remote_access
68
+ end
69
+ end
70
+ private :create_#{remote_instance_meth}
117
71
 
118
- @remote_attributes = remote_attrs
119
- remote_attributes.each do |attr|
120
- class_eval <<-remote_attribute
121
- def #{attr} # def username
122
- remote_#{attr} || '' # remote_username || ''
123
- end # end
72
+ # validate_on_create :validate_remote_user_on_create
73
+ validate_on_create :validate_#{remote_instance_meth}_on_create
74
+
75
+ # def validate_remote_user_on_create; end
76
+ def validate_#{remote_instance_meth}_on_create; end
77
+
78
+ # before_update :update_remote_user
79
+ before_update :update_#{remote_instance_meth}
124
80
 
125
- def remote_#{attr} # def remote_username
126
- if @#{attr} # if @username
127
- @#{attr} # @username
128
- elsif self.#{remote_instance_meth} # elsif self.remote_user
129
- @#{attr} = self. # @username = self.
130
- #{remote_instance_meth}. # remote_user.
131
- #{attr} rescue nil # username rescue nil
132
- else # else
133
- nil # nil
134
- end # end
135
- end # end
81
+ # def update_remote_user
82
+ # if self.remote_user_id and self.class.remote_changed?
83
+ # remote_hash = {}
84
+ # self.class.remote_attributes.each do |attr|
85
+ # remote_hash[attr.to_sym] = self.send(attr.to_sym)
86
+ # end
87
+ # remote_user.load(remote_hash)
88
+ # remote_user.save
89
+ #
90
+ # unless @#{remote_instance_meth}.valid?
91
+ # remote_user.errors.each do |attr, err|
92
+ # errors.add(attr, err)
93
+ # end
94
+ # return false
95
+ # else
96
+ # @remote_changed = false
97
+ # return true
98
+ # end
99
+ # end
100
+ # end
101
+ def update_#{remote_instance_meth}
102
+ if self.#{remote_instance_id} and self.class.remote_changed?
103
+ remote_hash = {}
104
+ self.class.remote_attributes.each do |attr|
105
+ remote_hash[attr.to_sym] = self.send(attr.to_sym)
106
+ end
107
+ #{remote_instance_meth}.load(remote_hash)
108
+ #{remote_instance_meth}.save
136
109
 
137
- def #{attr}=(attr_value) # def username=(attr_value)
138
- @#{attr} = attr_value # @username = attr_value
139
- end # end
140
- remote_attribute
110
+ unless @#{remote_instance_meth}.valid?
111
+ #{remote_instance_meth}.errors.each do |attr, err|
112
+ errors.add(attr, err)
113
+ end
114
+ return false
115
+ else
116
+ @remote_changed = false
117
+ return true
118
+ end
141
119
  end
142
120
  end
121
+ private :update_#{remote_instance_meth}
143
122
 
144
- def remote_attributes
145
- @remote_attributes ||= []
146
- end
123
+ # validate_on_update :validate_remote_user_on_update
124
+ validate_on_update :validate_#{remote_instance_meth}_on_update
147
125
 
126
+ # def validate_remote_user_on_update; end
127
+ def validate_#{remote_instance_meth}_on_update; end
128
+ remote_access
129
+
130
+ remote_attributes.each do |attr|
131
+ class_eval <<-remote_attribute
132
+ def #{attr} # def username
133
+ remote_#{attr} || '' # remote_username || ''
134
+ end # end
135
+
136
+ def remote_#{attr} # def remote_username
137
+ if @#{attr} # if @username
138
+ @#{attr} # @username
139
+ elsif self.#{remote_instance_meth} # elsif self.remote_user
140
+ @#{attr} = self. # @username = self.
141
+ #{remote_instance_meth}. # remote_user.
142
+ #{attr} rescue nil # username rescue nil
143
+ else # else
144
+ nil # nil
145
+ end # end
146
+ end # end
147
+
148
+ def #{attr}=(attr_value) # def username=(attr_value)
149
+ @#{attr} = attr_value # @username = attr_value
150
+ @remote_changed = true # @remote_changed = true
151
+ end # end
152
+ remote_attribute
153
+ end
154
+ end
148
155
  end
149
156
  end
150
157
 
data/test/db/test.db CHANGED
Binary file
data/test/models/user.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  class User < ActiveRecord::Base
2
- attr_remote :name, :not_here
2
+ attr_remote :name
3
+ attr_remote :not_here
3
4
  end
@@ -1,6 +1,12 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  class TestAttrRemote < Test::Unit::TestCase
4
+ context "general specs" do
5
+ test "that attributes can be added multiple times" do
6
+ assert_equal User.remote_attributes, [:name, :not_here]
7
+ end
8
+ end
9
+
4
10
  context "remote object access" do
5
11
  before do
6
12
  @user = Factory(:user)
@@ -72,7 +78,7 @@ class TestAttrRemote < Test::Unit::TestCase
72
78
  end
73
79
 
74
80
  context "updates" do
75
- test "that an attribute change is propogated" do
81
+ test "that a remote attribute change is propogated" do
76
82
  user = Factory(:user)
77
83
  user.name = "boo"
78
84
  assert user.save
@@ -84,6 +90,13 @@ class TestAttrRemote < Test::Unit::TestCase
84
90
  user = User.find(user.id)
85
91
  assert_equal "boo", user.name
86
92
  end
93
+
94
+ test "that save doesn't cause a remote hit if a remote attribute has not been changed" do
95
+ user = Factory(:user, :remote_user_id => 2)
96
+ # purposely not mocking the ARes call to "prove"
97
+ # that it isn't invoked son save
98
+ assert user.save
99
+ end
87
100
  end
88
101
 
89
102
  context "deletes" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codebrulee-attr_remote
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Smith