active_remote 1.4.1 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/active_remote/base.rb +2 -0
- data/lib/active_remote/persistence.rb +5 -6
- data/lib/active_remote/publication.rb +54 -0
- data/lib/active_remote/serializers/json.rb +2 -6
- data/lib/active_remote/version.rb +1 -1
- data/spec/lib/active_remote/dsl_spec.rb +0 -9
- data/spec/lib/active_remote/publication_spec.rb +18 -0
- metadata +7 -4
data/lib/active_remote/base.rb
CHANGED
@@ -4,6 +4,7 @@ require 'active_remote/bulk'
|
|
4
4
|
require 'active_remote/dirty'
|
5
5
|
require 'active_remote/dsl'
|
6
6
|
require 'active_remote/persistence'
|
7
|
+
require 'active_remote/publication'
|
7
8
|
require 'active_remote/rpc'
|
8
9
|
require 'active_remote/search'
|
9
10
|
require 'active_remote/serialization'
|
@@ -19,6 +20,7 @@ module ActiveRemote
|
|
19
20
|
include ::ActiveRemote::Bulk
|
20
21
|
include ::ActiveRemote::DSL
|
21
22
|
include ::ActiveRemote::Persistence
|
23
|
+
include ::ActiveRemote::Publication
|
22
24
|
include ::ActiveRemote::RPC
|
23
25
|
include ::ActiveRemote::Search
|
24
26
|
include ::ActiveRemote::Serialization
|
@@ -75,7 +75,7 @@ module ActiveRemote
|
|
75
75
|
#
|
76
76
|
def delete
|
77
77
|
raise ReadOnlyRemoteRecord if readonly?
|
78
|
-
execute(:delete, attributes.slice("guid"))
|
78
|
+
execute(:delete, @attributes.slice("guid"))
|
79
79
|
|
80
80
|
return success? ? freeze : false
|
81
81
|
end
|
@@ -98,7 +98,7 @@ module ActiveRemote
|
|
98
98
|
#
|
99
99
|
def destroy
|
100
100
|
raise ReadOnlyRemoteRecord if readonly?
|
101
|
-
execute(:destroy, attributes.slice("guid"))
|
101
|
+
execute(:destroy, @attributes.slice("guid"))
|
102
102
|
|
103
103
|
return success? ? freeze : false
|
104
104
|
end
|
@@ -197,10 +197,9 @@ module ActiveRemote
|
|
197
197
|
# errors from the response.
|
198
198
|
#
|
199
199
|
def create
|
200
|
-
|
201
|
-
new_attributes.delete("guid")
|
200
|
+
@attributes.delete("guid")
|
202
201
|
|
203
|
-
execute(:create,
|
202
|
+
execute(:create, @attributes)
|
204
203
|
|
205
204
|
assign_attributes(last_response.to_hash)
|
206
205
|
add_errors_from_response
|
@@ -222,7 +221,7 @@ module ActiveRemote
|
|
222
221
|
# (plus :guid) will be updated. Defaults to all attributes.
|
223
222
|
#
|
224
223
|
def update(attribute_names = @attributes.keys)
|
225
|
-
updated_attributes = attributes.slice(*attribute_names)
|
224
|
+
updated_attributes = @attributes.slice(*attribute_names)
|
226
225
|
updated_attributes.merge!("guid" => self[:guid])
|
227
226
|
|
228
227
|
execute(:update, updated_attributes)
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module ActiveRemote
|
2
|
+
module Publication
|
3
|
+
# Returns a hash of publishable attributes.
|
4
|
+
#
|
5
|
+
def publishable_hash
|
6
|
+
keys = _publishable_attributes_or_attribute_keys
|
7
|
+
|
8
|
+
attributes_hash = keys.inject({}) do |publishable_hash, key|
|
9
|
+
value = respond_to?(key) ? __send__(key) : @attributes[key]
|
10
|
+
|
11
|
+
publishable_hash[key] = case
|
12
|
+
when value.respond_to?(:map) then
|
13
|
+
_map_value(value)
|
14
|
+
when value.respond_to?(:publishable_hash) then
|
15
|
+
value.publishable_hash
|
16
|
+
when value.respond_to?(:to_hash) then
|
17
|
+
value.to_hash
|
18
|
+
else
|
19
|
+
value
|
20
|
+
end
|
21
|
+
|
22
|
+
publishable_hash
|
23
|
+
end
|
24
|
+
|
25
|
+
attributes_hash
|
26
|
+
end
|
27
|
+
|
28
|
+
def _publishable_json_attributes
|
29
|
+
_publishable_attributes_or_attribute_keys - _publishable_json_methods
|
30
|
+
end
|
31
|
+
|
32
|
+
def _publishable_json_methods
|
33
|
+
_publishable_attributes_or_attribute_keys.reject { |attribute| @attributes.key?(attribute) }
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def _map_value(value)
|
39
|
+
case
|
40
|
+
when value.any? { |obj| obj.respond_to?(:publishable_hash) } then
|
41
|
+
value.map(&:publishable_hash)
|
42
|
+
when value.any? { |obj| obj.respond_to?(:to_hash) } then
|
43
|
+
value.map(&:to_hash)
|
44
|
+
else
|
45
|
+
value
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def _publishable_attributes_or_attribute_keys
|
50
|
+
@_publishable_attributes_or_attribute_keys = _publishable_attributes
|
51
|
+
@_publishable_attributes_or_attribute_keys ||= @attributes.keys
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -2,13 +2,9 @@ module ActiveRemote
|
|
2
2
|
module Serializers
|
3
3
|
module JSON
|
4
4
|
# Returns a json representation of the whitelisted publishable attributes.
|
5
|
+
#
|
5
6
|
def as_json(options = {})
|
6
|
-
|
7
|
-
|
8
|
-
json_methods = json_attributes.reject { |attribute| attributes.key?(attribute) }
|
9
|
-
json_attributes -= json_methods
|
10
|
-
|
11
|
-
default_options = { :only => json_attributes, :methods => json_methods }
|
7
|
+
default_options = { :only => _publishable_json_attributes, :methods => _publishable_json_methods }
|
12
8
|
default_options.merge!(options)
|
13
9
|
|
14
10
|
super(default_options)
|
@@ -21,15 +21,6 @@ describe ActiveRemote::DSL do
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
describe ".auto_paging_size" do
|
25
|
-
context "when given a value" do
|
26
|
-
it "sets @auto_paging_size to the value" do
|
27
|
-
Tag.auto_paging_size 100
|
28
|
-
Tag.auto_paging_size.should eq 100
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
24
|
describe ".namespace" do
|
34
25
|
context "when given a value" do
|
35
26
|
it "sets @namespace to the value" do
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActiveRemote::Publication do
|
4
|
+
let(:attributes) { { :guid => 'foo', :name => 'bar' } }
|
5
|
+
|
6
|
+
subject { Tag.new(attributes) }
|
7
|
+
|
8
|
+
context "with publishable attributes defined" do
|
9
|
+
let(:expected_hash) { attributes.slice(:name) }
|
10
|
+
|
11
|
+
before { Tag.attr_publishable :name }
|
12
|
+
after { reset_publishable_attributes(Tag) }
|
13
|
+
|
14
|
+
it "serializes to a hash with only the publishable attributes" do
|
15
|
+
subject.publishable_hash.should eq expected_hash
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_remote
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-02-
|
12
|
+
date: 2013-02-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: active_attr
|
@@ -164,6 +164,7 @@ files:
|
|
164
164
|
- lib/active_remote/dsl.rb
|
165
165
|
- lib/active_remote/errors.rb
|
166
166
|
- lib/active_remote/persistence.rb
|
167
|
+
- lib/active_remote/publication.rb
|
167
168
|
- lib/active_remote/rpc.rb
|
168
169
|
- lib/active_remote/search.rb
|
169
170
|
- lib/active_remote/serialization.rb
|
@@ -181,6 +182,7 @@ files:
|
|
181
182
|
- spec/lib/active_remote/dirty_spec.rb
|
182
183
|
- spec/lib/active_remote/dsl_spec.rb
|
183
184
|
- spec/lib/active_remote/persistence_spec.rb
|
185
|
+
- spec/lib/active_remote/publication_spec.rb
|
184
186
|
- spec/lib/active_remote/rpc_spec.rb
|
185
187
|
- spec/lib/active_remote/search_spec.rb
|
186
188
|
- spec/lib/active_remote/serialization_spec.rb
|
@@ -219,7 +221,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
219
221
|
version: '0'
|
220
222
|
segments:
|
221
223
|
- 0
|
222
|
-
hash: -
|
224
|
+
hash: -3057893291356198545
|
223
225
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
224
226
|
none: false
|
225
227
|
requirements:
|
@@ -228,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
228
230
|
version: '0'
|
229
231
|
segments:
|
230
232
|
- 0
|
231
|
-
hash: -
|
233
|
+
hash: -3057893291356198545
|
232
234
|
requirements: []
|
233
235
|
rubyforge_project:
|
234
236
|
rubygems_version: 1.8.24
|
@@ -243,6 +245,7 @@ test_files:
|
|
243
245
|
- spec/lib/active_remote/dirty_spec.rb
|
244
246
|
- spec/lib/active_remote/dsl_spec.rb
|
245
247
|
- spec/lib/active_remote/persistence_spec.rb
|
248
|
+
- spec/lib/active_remote/publication_spec.rb
|
246
249
|
- spec/lib/active_remote/rpc_spec.rb
|
247
250
|
- spec/lib/active_remote/search_spec.rb
|
248
251
|
- spec/lib/active_remote/serialization_spec.rb
|