remotable 0.2.2 → 0.2.3
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/lib/remotable/active_record_extender.rb +9 -3
- data/lib/remotable/active_resource_fixes.rb +36 -14
- data/lib/remotable/version.rb +1 -1
- data/test/remotable_test.rb +1 -1
- metadata +89 -29
@@ -144,7 +144,7 @@ module Remotable
|
|
144
144
|
# so you can use the remoted record in associations.
|
145
145
|
def instantiate(*args)
|
146
146
|
record = super
|
147
|
-
if record.expired? && !
|
147
|
+
if record.expired? && !record.nosync?
|
148
148
|
record.pull_remote_data!
|
149
149
|
record = nil if record.destroyed?
|
150
150
|
end
|
@@ -248,6 +248,7 @@ module Remotable
|
|
248
248
|
end
|
249
249
|
|
250
250
|
def remote_path_for_composite_key(route, local_key, values)
|
251
|
+
values.flatten!
|
251
252
|
unless values.length == local_key.length
|
252
253
|
raise ArgumentError, "local_key has #{local_key.length} attributes but values has #{values.length}"
|
253
254
|
end
|
@@ -348,7 +349,11 @@ module Remotable
|
|
348
349
|
private
|
349
350
|
|
350
351
|
def fetch_value
|
351
|
-
|
352
|
+
if local_key.is_a?(Array)
|
353
|
+
local_key.map(&method(:send))
|
354
|
+
else
|
355
|
+
send(local_key)
|
356
|
+
end
|
352
357
|
end
|
353
358
|
|
354
359
|
def fetch_remote_resource
|
@@ -397,7 +402,8 @@ module Remotable
|
|
397
402
|
end
|
398
403
|
|
399
404
|
def destroy_remote_resource
|
400
|
-
|
405
|
+
return nil unless remote_resource
|
406
|
+
if remote_resource.destroy
|
401
407
|
true
|
402
408
|
else
|
403
409
|
merge_remote_errors(remote_resource.errors)
|
@@ -5,18 +5,11 @@ require "active_support/concern"
|
|
5
5
|
module ActiveResourceFixes
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
|
-
|
9
|
-
#
|
10
|
-
#
|
11
|
-
def
|
12
|
-
|
13
|
-
if method_name =~ /\w+=/
|
14
|
-
true
|
15
|
-
elsif attributes.include?(method_name)
|
16
|
-
true
|
17
|
-
else
|
18
|
-
super(method_symbol, include_private)
|
19
|
-
end
|
8
|
+
|
9
|
+
# ! ActiveModel::AttributeMethods assumes that :attribute is the target
|
10
|
+
# for attribute lookup. ActiveResource doesn't define that method.
|
11
|
+
def attribute(method)
|
12
|
+
attributes[method]
|
20
13
|
end
|
21
14
|
|
22
15
|
|
@@ -43,6 +36,20 @@ end
|
|
43
36
|
|
44
37
|
|
45
38
|
module ActiveResourceFixes30
|
39
|
+
|
40
|
+
# ActiveResource hacks method_missing without hacking respond_to?
|
41
|
+
# In fact, it responds to any method that ends in an equals sign.
|
42
|
+
# It also responds to any method that matches an attribute name.
|
43
|
+
def respond_to?(method_symbol, include_private=false)
|
44
|
+
method_name = method_symbol.to_s
|
45
|
+
if method_name =~ /\w+=/
|
46
|
+
true
|
47
|
+
elsif attributes.include?(method_name)
|
48
|
+
true
|
49
|
+
else
|
50
|
+
super(method_symbol, include_private)
|
51
|
+
end
|
52
|
+
end
|
46
53
|
|
47
54
|
# ! in this method, don't check the Content-Type header: rack doesn't always return it
|
48
55
|
def load_attributes_from_response(response)
|
@@ -56,6 +63,20 @@ end
|
|
56
63
|
|
57
64
|
module ActiveResourceFixes31
|
58
65
|
|
66
|
+
# ActiveResource hacks method_missing without hacking respond_to?
|
67
|
+
# In fact, it responds to any method that ends in an equals sign.
|
68
|
+
# It also responds to any method that matches an attribute name.
|
69
|
+
def respond_to?(method_symbol, include_private=false)
|
70
|
+
method_name = method_symbol.to_s
|
71
|
+
if method_name =~ /\w+=/
|
72
|
+
true
|
73
|
+
elsif attributes.include?(method_name)
|
74
|
+
true
|
75
|
+
else
|
76
|
+
super(method_symbol, include_private)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
59
80
|
# ! in this method, don't check the Content-Type header: rack doesn't always return it
|
60
81
|
def load_attributes_from_response(response)
|
61
82
|
if !response.body.nil? && response.body.strip.size > 0
|
@@ -66,8 +87,9 @@ module ActiveResourceFixes31
|
|
66
87
|
|
67
88
|
end
|
68
89
|
|
69
|
-
|
70
|
-
|
90
|
+
if Rails.version >= '3.2'
|
91
|
+
#
|
92
|
+
elsif Rails.version < '3.1'
|
71
93
|
ActiveResource::Base.send(:include, ActiveResourceFixes30)
|
72
94
|
else
|
73
95
|
ActiveResource::Base.send(:include, ActiveResourceFixes31)
|
data/lib/remotable/version.rb
CHANGED
data/test/remotable_test.rb
CHANGED
@@ -27,7 +27,7 @@ class RemotableTest < ActiveSupport::TestCase
|
|
27
27
|
end
|
28
28
|
|
29
29
|
test "should be able to generate paths for composite keys" do
|
30
|
-
assert_equal "groups/5/tenants/test", RemoteWithCompositeKey.remote_path_for([:group_id, :slug], 5, "test")
|
30
|
+
assert_equal "groups/5/tenants/test", RemoteWithCompositeKey.remote_path_for([:group_id, :slug], [5, "test"])
|
31
31
|
end
|
32
32
|
|
33
33
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remotable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activeresource
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: activerecord
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: activesupport
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: rails
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '0'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: minitest
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: '0'
|
66
86
|
type: :development
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: turn
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>='
|
@@ -76,10 +101,15 @@ dependencies:
|
|
76
101
|
version: '0'
|
77
102
|
type: :development
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: factory_girl
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ! '>='
|
@@ -87,10 +117,15 @@ dependencies:
|
|
87
117
|
version: '0'
|
88
118
|
type: :development
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
91
126
|
- !ruby/object:Gem::Dependency
|
92
127
|
name: sqlite3
|
93
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
94
129
|
none: false
|
95
130
|
requirements:
|
96
131
|
- - ! '>='
|
@@ -98,10 +133,15 @@ dependencies:
|
|
98
133
|
version: '0'
|
99
134
|
type: :development
|
100
135
|
prerelease: false
|
101
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
102
142
|
- !ruby/object:Gem::Dependency
|
103
143
|
name: active_resource_simulator
|
104
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
105
145
|
none: false
|
106
146
|
requirements:
|
107
147
|
- - ! '>='
|
@@ -109,10 +149,15 @@ dependencies:
|
|
109
149
|
version: '0'
|
110
150
|
type: :development
|
111
151
|
prerelease: false
|
112
|
-
version_requirements:
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
113
158
|
- !ruby/object:Gem::Dependency
|
114
159
|
name: simplecov
|
115
|
-
requirement:
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
116
161
|
none: false
|
117
162
|
requirements:
|
118
163
|
- - ! '>='
|
@@ -120,10 +165,15 @@ dependencies:
|
|
120
165
|
version: '0'
|
121
166
|
type: :development
|
122
167
|
prerelease: false
|
123
|
-
version_requirements:
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
124
174
|
- !ruby/object:Gem::Dependency
|
125
175
|
name: rr
|
126
|
-
requirement:
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
127
177
|
none: false
|
128
178
|
requirements:
|
129
179
|
- - ! '>='
|
@@ -131,10 +181,15 @@ dependencies:
|
|
131
181
|
version: '0'
|
132
182
|
type: :development
|
133
183
|
prerelease: false
|
134
|
-
version_requirements:
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
135
190
|
- !ruby/object:Gem::Dependency
|
136
191
|
name: database_cleaner
|
137
|
-
requirement:
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
138
193
|
none: false
|
139
194
|
requirements:
|
140
195
|
- - ! '>='
|
@@ -142,7 +197,12 @@ dependencies:
|
|
142
197
|
version: '0'
|
143
198
|
type: :development
|
144
199
|
prerelease: false
|
145
|
-
version_requirements:
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ! '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
146
206
|
description: Remotable keeps a locally-stored ActiveRecord synchronized with a remote
|
147
207
|
resource.
|
148
208
|
email:
|
@@ -194,7 +254,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
194
254
|
version: '0'
|
195
255
|
segments:
|
196
256
|
- 0
|
197
|
-
hash:
|
257
|
+
hash: 3994390182043534799
|
198
258
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
259
|
none: false
|
200
260
|
requirements:
|
@@ -203,10 +263,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
203
263
|
version: '0'
|
204
264
|
segments:
|
205
265
|
- 0
|
206
|
-
hash:
|
266
|
+
hash: 3994390182043534799
|
207
267
|
requirements: []
|
208
268
|
rubyforge_project: remotable
|
209
|
-
rubygems_version: 1.8.
|
269
|
+
rubygems_version: 1.8.23
|
210
270
|
signing_key:
|
211
271
|
specification_version: 3
|
212
272
|
summary: Binds an ActiveRecord model to a remote resource and keeps the two synchronized
|