active_remote 2.1.0.beta2 → 2.1.0.rc1
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.
- checksums.yaml +4 -4
- data/lib/active_remote/bulk.rb +47 -19
- data/lib/active_remote/persistence.rb +3 -5
- data/lib/active_remote/rpc.rb +15 -23
- data/lib/active_remote/search.rb +16 -8
- data/lib/active_remote/serialization.rb +2 -2
- data/lib/active_remote/version.rb +1 -1
- data/spec/lib/active_remote/bulk_spec.rb +45 -55
- data/spec/lib/active_remote/persistence_spec.rb +52 -47
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9db0dc04521916e66ca566f9ece9b5f0cc8e803e
|
4
|
+
data.tar.gz: aea18e2d9200b988918570898a95fb0a47ed15aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bead40af9673772592780b3a7b62252815fcd0805e2988a5d7d4b6f9d2a3eb32975e3fd2b50f1937096d32c1c053ae5ff8567959861f5c87aeac01cdd27b0b57
|
7
|
+
data.tar.gz: 56d7903986b4bbb33a3c703a833441d44dd76210a560bb48c9e12d72ac9fff3da23276ba3958752d4b8a8b30507f0c44185c4a57fa289c3fbf89dc20698ce330
|
data/lib/active_remote/bulk.rb
CHANGED
@@ -32,8 +32,13 @@ module ActiveRemote
|
|
32
32
|
# Tag.create_all(Generic::Remote::Tags.new(:records => [ Generic::Remote::Tag.new(:name => 'foo') ])
|
33
33
|
#
|
34
34
|
def create_all(*records)
|
35
|
-
response = rpc.execute(:create_all,
|
36
|
-
|
35
|
+
response = rpc.execute(:create_all, _parse_records(records))
|
36
|
+
|
37
|
+
if response.respond_to?(:records)
|
38
|
+
serialize_records(response.records)
|
39
|
+
else
|
40
|
+
warn "DEPRECATED responses to bulk methods must respond to :records. In Active Remote 3.0, bulk responses that don't respond to :records will raise an exception"
|
41
|
+
end
|
37
42
|
end
|
38
43
|
|
39
44
|
# Delete multiple records at the same time. Returns a collection of active
|
@@ -58,8 +63,13 @@ module ActiveRemote
|
|
58
63
|
# Tag.delete_all(Generic::Remote::Tags.new(:records => [ Generic::Remote::Tag.new(:guid => 'foo') ])
|
59
64
|
#
|
60
65
|
def delete_all(*records)
|
61
|
-
response = rpc.execute(:delete_all,
|
62
|
-
|
66
|
+
response = rpc.execute(:delete_all, _parse_records(records))
|
67
|
+
|
68
|
+
if response.respond_to?(:records)
|
69
|
+
serialize_records(response.records)
|
70
|
+
else
|
71
|
+
warn "DEPRECATED responses to bulk methods must respond to :records. In Active Remote 3.0, bulk responses that don't respond to :records will raise an exception"
|
72
|
+
end
|
63
73
|
end
|
64
74
|
|
65
75
|
# Destroy multiple records at the same time. Returns a collection of active
|
@@ -84,8 +94,13 @@ module ActiveRemote
|
|
84
94
|
# Tag.destroy_all(Generic::Remote::Tags.new(:records => [ Generic::Remote::Tag.new(:guid => 'foo') ])
|
85
95
|
#
|
86
96
|
def destroy_all(*records)
|
87
|
-
response = rpc.execute(:destroy_all,
|
88
|
-
|
97
|
+
response = rpc.execute(:destroy_all, _parse_records(records))
|
98
|
+
|
99
|
+
if response.respond_to?(:records)
|
100
|
+
serialize_records(response.records)
|
101
|
+
else
|
102
|
+
warn "DEPRECATED responses to bulk methods must respond to :records. In Active Remote 3.0, bulk responses that don't respond to :records will raise an exception"
|
103
|
+
end
|
89
104
|
end
|
90
105
|
|
91
106
|
# Parse given records to get them ready to be built into a request.
|
@@ -96,18 +111,9 @@ module ActiveRemote
|
|
96
111
|
# Returns +{ :records => records }+.
|
97
112
|
#
|
98
113
|
def parse_records(*records)
|
99
|
-
|
114
|
+
warn "DEPRECATED Model.parse_records is deprecated. It will be removed in Active Remove 3.0"
|
100
115
|
|
101
|
-
|
102
|
-
records.collect!(&:attributes)
|
103
|
-
else
|
104
|
-
records.collect!(&:to_hash)
|
105
|
-
end
|
106
|
-
|
107
|
-
return records.first if records.first && records.first.has_key?(:records)
|
108
|
-
|
109
|
-
# If we made it this far, build a bulk-formatted hash.
|
110
|
-
return { :records => records }
|
116
|
+
_parse_records(*records)
|
111
117
|
end
|
112
118
|
|
113
119
|
# Update multiple records at the same time. Returns a collection of active
|
@@ -132,8 +138,30 @@ module ActiveRemote
|
|
132
138
|
# Tag.update_all(Generic::Remote::Tags.new(:records => [ Generic::Remote::Tag.new(:guid => 'foo', :name => 'baz') ])
|
133
139
|
#
|
134
140
|
def update_all(*records)
|
135
|
-
response = rpc.execute(:update_all,
|
136
|
-
|
141
|
+
response = rpc.execute(:update_all, _parse_records(records))
|
142
|
+
|
143
|
+
if response.respond_to?(:records)
|
144
|
+
serialize_records(response.records)
|
145
|
+
else
|
146
|
+
warn "DEPRECATED responses to bulk methods must respond to :records. In Active Remote 3.0, bulk responses that don't respond to :records will raise an exception"
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
private
|
151
|
+
|
152
|
+
def _parse_records(*records)
|
153
|
+
records.flatten!
|
154
|
+
|
155
|
+
if records.first.respond_to?(:attributes)
|
156
|
+
records.collect!(&:attributes)
|
157
|
+
else
|
158
|
+
records.collect!(&:to_hash)
|
159
|
+
end
|
160
|
+
|
161
|
+
return records.first if records.first && records.first.has_key?(:records)
|
162
|
+
|
163
|
+
# If we made it this far, build a bulk-formatted hash.
|
164
|
+
return { :records => records }
|
137
165
|
end
|
138
166
|
end
|
139
167
|
end
|
@@ -78,8 +78,7 @@ module ActiveRemote
|
|
78
78
|
raise ReadOnlyRemoteRecord if readonly?
|
79
79
|
response = rpc.execute(:delete, scope_key_hash)
|
80
80
|
|
81
|
-
|
82
|
-
# add_errors(response.errors)
|
81
|
+
add_errors(response.errors)
|
83
82
|
|
84
83
|
return success? ? freeze : false
|
85
84
|
end
|
@@ -102,10 +101,9 @@ module ActiveRemote
|
|
102
101
|
#
|
103
102
|
def destroy
|
104
103
|
raise ReadOnlyRemoteRecord if readonly?
|
105
|
-
response = execute(:destroy, scope_key_hash)
|
104
|
+
response = rpc.execute(:destroy, scope_key_hash)
|
106
105
|
|
107
|
-
|
108
|
-
# add_errors(response.errors)
|
106
|
+
add_errors(response.errors)
|
109
107
|
|
110
108
|
return success? ? freeze : false
|
111
109
|
end
|
data/lib/active_remote/rpc.rb
CHANGED
@@ -9,8 +9,6 @@ module ActiveRemote
|
|
9
9
|
include Embedded
|
10
10
|
end
|
11
11
|
|
12
|
-
# TODO: Deprecate this pattern of executing RPC calls
|
13
|
-
#
|
14
12
|
module Embedded
|
15
13
|
extend ActiveSupport::Concern
|
16
14
|
|
@@ -19,11 +17,10 @@ module ActiveRemote
|
|
19
17
|
end
|
20
18
|
|
21
19
|
module ClassMethods
|
22
|
-
#
|
23
|
-
#
|
24
|
-
# TODO: Add deprecation warning
|
25
|
-
#
|
20
|
+
# :noapi:
|
26
21
|
def request(rpc_method, request_args)
|
22
|
+
warn "DEPRECATED Model.request is deprecated and will be removed in Active Remote 3.0. This is handled by the Protobuf RPC adpater now"
|
23
|
+
|
27
24
|
return request_args unless request_args.is_a?(Hash)
|
28
25
|
|
29
26
|
message_class = request_type(rpc_method)
|
@@ -31,20 +28,18 @@ module ActiveRemote
|
|
31
28
|
message_class.new(fields)
|
32
29
|
end
|
33
30
|
|
34
|
-
#
|
35
|
-
#
|
36
|
-
# TODO: Add deprecation warning
|
37
|
-
#
|
31
|
+
# :noapi:
|
38
32
|
def request_type(rpc_method)
|
33
|
+
warn "DEPRECATED Model.request_type is deprecated and will be removed in Active Remote 3.0. This is handled by the Protobuf RPC adpater now"
|
34
|
+
|
39
35
|
service_class.rpcs[rpc_method].request_type
|
40
36
|
end
|
41
37
|
end
|
42
38
|
|
43
|
-
#
|
44
|
-
#
|
45
|
-
# TODO: Add deprecation warning
|
46
|
-
#
|
39
|
+
# :noapi:
|
47
40
|
def execute(rpc_method, request_args)
|
41
|
+
warn "DEPRECATED Model#execute is deprecated and will be removed in Active Remote 3.0. Use Model#rpc.execute instead"
|
42
|
+
|
48
43
|
@last_request = request(rpc_method, request_args)
|
49
44
|
|
50
45
|
_service_class.client.__send__(rpc_method, @last_request) do |c|
|
@@ -63,22 +58,19 @@ module ActiveRemote
|
|
63
58
|
@last_response
|
64
59
|
end
|
65
60
|
|
66
|
-
|
67
|
-
# Execute an RPC call to the remote service and return the raw response.
|
68
|
-
#
|
69
|
-
# TODO: Add deprecation warning
|
70
|
-
#
|
61
|
+
# :noapi:
|
71
62
|
def remote_call(rpc_method, request_args)
|
63
|
+
warn "DEPRECATED Model#remote_call is deprecated and will be removed in Active Remote 3.0. Use Model#rpc.execute instead"
|
64
|
+
|
72
65
|
rpc.execute(rpc_method, request_args)
|
73
66
|
end
|
74
67
|
|
75
68
|
private
|
76
69
|
|
77
|
-
#
|
78
|
-
#
|
79
|
-
# TODO: Add deprecation warning
|
80
|
-
#
|
70
|
+
# :noapi:
|
81
71
|
def request(rpc_method, attributes)
|
72
|
+
warn "DEPRECATED Model#request is deprecated and will be removed in Active Remote 3.0. This is handled by the Protobuf RPC adpater now"
|
73
|
+
|
82
74
|
self.class.request(rpc_method, attributes)
|
83
75
|
end
|
84
76
|
end
|
data/lib/active_remote/search.rb
CHANGED
@@ -14,6 +14,13 @@ module ActiveRemote
|
|
14
14
|
|
15
15
|
module ClassMethods
|
16
16
|
|
17
|
+
# :noapi:
|
18
|
+
def _active_remote_search_args(args)
|
19
|
+
warn "DEPRECATED Model._active_remote_search_args is depracted and will be remoted in Active Remote 3.0."
|
20
|
+
|
21
|
+
validate_search_args!(args)
|
22
|
+
end
|
23
|
+
|
17
24
|
# Tries to load the first record; if it fails, an exception is raised.
|
18
25
|
#
|
19
26
|
# ====Examples
|
@@ -89,7 +96,7 @@ module ActiveRemote
|
|
89
96
|
# Tag.search(Generic::Remote::TagRequest.new(:name => 'foo'))
|
90
97
|
#
|
91
98
|
def search(args)
|
92
|
-
args =
|
99
|
+
args = validate_search_args!(args)
|
93
100
|
|
94
101
|
response = rpc.execute(:search, args)
|
95
102
|
|
@@ -99,13 +106,15 @@ module ActiveRemote
|
|
99
106
|
end
|
100
107
|
end
|
101
108
|
|
102
|
-
#
|
103
|
-
|
109
|
+
# Validates the given args to ensure they are compatible
|
110
|
+
# Search args must be a hash or respond to to_hash
|
111
|
+
#
|
112
|
+
def validate_search_args!(args)
|
104
113
|
unless args.is_a?(Hash)
|
105
114
|
if args.respond_to?(:to_hash)
|
106
115
|
args = args.to_hash
|
107
116
|
else
|
108
|
-
raise "Invalid parameter: #{args}.
|
117
|
+
raise "Invalid parameter: #{args}. Search args must respond to :to_hash."
|
109
118
|
end
|
110
119
|
end
|
111
120
|
|
@@ -113,11 +122,10 @@ module ActiveRemote
|
|
113
122
|
end
|
114
123
|
end
|
115
124
|
|
116
|
-
#
|
117
|
-
# for records matching the given search args until all records have been
|
118
|
-
# retrieved) if no pagination options are given.
|
119
|
-
#
|
125
|
+
# :noapi:
|
120
126
|
def _active_remote_search(args)
|
127
|
+
warn "DEPRECATED Model#_active_remote_search is depracted and will be remoted in Active Remote 3.0."
|
128
|
+
|
121
129
|
run_callbacks :search do
|
122
130
|
rpc.execute(:search, args)
|
123
131
|
end
|
@@ -46,7 +46,7 @@ module ActiveRemote
|
|
46
46
|
# DEPRECATED – Use :add_errors instead
|
47
47
|
#
|
48
48
|
def add_errors_from_response(response = nil)
|
49
|
-
warn 'DEPRECATED
|
49
|
+
warn 'DEPRECATED Model#add_errors_from_response is deprecated and will be removed in Active Remote 3.0. Use Model#add_errors instead'
|
50
50
|
|
51
51
|
response ||= last_response
|
52
52
|
|
@@ -56,7 +56,7 @@ module ActiveRemote
|
|
56
56
|
# DEPRECATED – Use the class-level :serialize_errors instead
|
57
57
|
#
|
58
58
|
def serialize_records(records = nil)
|
59
|
-
warn 'DEPRECATED Calling
|
59
|
+
warn 'DEPRECATED Calling Model#serialize_records is deprecated and will be removed in Active Remote 3.0. Use Model.serialize_records instead'
|
60
60
|
|
61
61
|
records ||= last_response.records if last_response.respond_to?(:records)
|
62
62
|
return if records.nil?
|
@@ -1,79 +1,69 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ActiveRemote::Bulk do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
describe ".create_all" do
|
8
|
-
before { Tag.better_stub(:parse_records).and_return(records) }
|
9
|
-
|
10
|
-
it "creates remote records" do
|
11
|
-
Tag.rpc.better_receive(:execute).with(:create_all, records)
|
12
|
-
Tag.create_all(records)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe ".delete_all" do
|
17
|
-
before { Tag.better_stub(:parse_records).and_return(records) }
|
4
|
+
shared_examples_for "a bulk method" do |bulk_method|
|
5
|
+
let(:records) { [ Hash.new ] }
|
6
|
+
let(:response) { double(:response, :records => []) }
|
18
7
|
|
19
|
-
|
20
|
-
Tag.rpc.better_receive(:execute).with(:delete_all, records)
|
21
|
-
Tag.delete_all(records)
|
22
|
-
end
|
23
|
-
end
|
8
|
+
before { Tag.rpc.better_stub(:execute).and_return(response) }
|
24
9
|
|
25
|
-
|
26
|
-
|
10
|
+
context "given an empty array" do
|
11
|
+
let(:parsed_records) { { :records => records } }
|
12
|
+
let(:records) { [] }
|
27
13
|
|
28
|
-
|
29
|
-
|
30
|
-
|
14
|
+
it "calls #{bulk_method} with parsed records" do
|
15
|
+
Tag.rpc.better_receive(:execute).with(bulk_method, parsed_records)
|
16
|
+
Tag.__send__(bulk_method, records)
|
17
|
+
end
|
31
18
|
end
|
32
|
-
end
|
33
19
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
record = double(Hash)
|
39
|
-
record.stub(:attributes) { {} }
|
40
|
-
record
|
41
|
-
}
|
20
|
+
context "given an array of record hashes" do
|
21
|
+
let(:hash_record){ double(:record, :to_hash => {}) }
|
22
|
+
let(:parsed_records) { { :records => records.map(&:to_hash) } }
|
23
|
+
let(:records) { [ hash_record ] }
|
42
24
|
|
43
|
-
|
44
|
-
|
45
|
-
|
25
|
+
it "calls #{bulk_method} with parsed records" do
|
26
|
+
Tag.rpc.better_receive(:execute).with(bulk_method, parsed_records)
|
27
|
+
Tag.__send__(bulk_method, records)
|
28
|
+
end
|
46
29
|
end
|
47
30
|
|
48
|
-
|
49
|
-
parsed_records
|
50
|
-
|
51
|
-
|
31
|
+
context "given an array of remote records" do
|
32
|
+
let(:parsed_records) { { :records => records.map(&:attributes) } }
|
33
|
+
let(:records) { [ remote_record ] }
|
34
|
+
let(:remote_record) { double(:remote, :attributes => {}) }
|
52
35
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
36
|
+
it "calls #{bulk_method} with parsed records" do
|
37
|
+
Tag.rpc.better_receive(:execute).with(bulk_method, parsed_records)
|
38
|
+
Tag.__send__(bulk_method, records)
|
39
|
+
end
|
57
40
|
end
|
58
41
|
|
59
|
-
context "
|
60
|
-
let(:
|
42
|
+
context "given a bulk message" do
|
43
|
+
let(:parsed_records) { { :records => records.map(&:to_hash) } }
|
61
44
|
let(:tag) { Generic::Remote::Tag.new }
|
62
45
|
let(:tags) { Generic::Remote::Tags.new(:records => [ tag ]) }
|
63
46
|
|
64
|
-
it "
|
65
|
-
|
66
|
-
Tag.
|
47
|
+
it "calls #{bulk_method} with parsed records" do
|
48
|
+
Tag.rpc.better_receive(:execute).with(bulk_method, parsed_records)
|
49
|
+
Tag.__send__(bulk_method, tags)
|
67
50
|
end
|
68
51
|
end
|
69
52
|
end
|
70
53
|
|
71
|
-
describe ".
|
72
|
-
|
54
|
+
describe ".create_all" do
|
55
|
+
it_behaves_like "a bulk method", :create_all
|
56
|
+
end
|
73
57
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
58
|
+
describe ".delete_all" do
|
59
|
+
it_behaves_like "a bulk method", :delete_all
|
60
|
+
end
|
61
|
+
|
62
|
+
describe ".destroy_all" do
|
63
|
+
it_behaves_like "a bulk method", :destroy_all
|
64
|
+
end
|
65
|
+
|
66
|
+
describe ".update_all" do
|
67
|
+
it_behaves_like "a bulk method", :update_all
|
78
68
|
end
|
79
69
|
end
|
@@ -57,16 +57,21 @@ describe ActiveRemote::Persistence do
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
60
|
+
context "when the response has errors" do
|
61
|
+
let(:error) { Generic::Error.new(:field => 'name', :message => 'Boom!') }
|
62
|
+
let(:response) { Generic::Remote::Tag.new(:errors => [ error ]) }
|
63
|
+
|
64
|
+
before { rpc.better_stub(:execute).and_return(response) }
|
65
|
+
|
66
|
+
it "adds the errors to the record" do
|
67
|
+
subject.delete
|
68
|
+
subject.has_errors?.should be_true
|
69
|
+
end
|
70
|
+
|
71
|
+
it "returns false" do
|
72
|
+
subject.delete.should be_false
|
73
|
+
end
|
74
|
+
end
|
70
75
|
end
|
71
76
|
|
72
77
|
describe "#delete!" do
|
@@ -75,25 +80,21 @@ describe ActiveRemote::Persistence do
|
|
75
80
|
subject.delete!
|
76
81
|
end
|
77
82
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
# end
|
83
|
+
context "when an error occurs" do
|
84
|
+
let(:error) { Generic::Error.new(:field => 'name', :message => 'Boom!') }
|
85
|
+
let(:response) { Generic::Remote::Tag.new(:errors => [ error ]) }
|
86
|
+
|
87
|
+
before { rpc.better_stub(:execute).and_return(response) }
|
88
|
+
|
89
|
+
it "raises an exception" do
|
90
|
+
expect { subject.delete! }.to raise_error(ActiveRemote::ActiveRemoteError)
|
91
|
+
end
|
92
|
+
end
|
89
93
|
end
|
90
94
|
|
91
95
|
describe "#destroy" do
|
92
|
-
before { subject.stub(:execute) }
|
93
|
-
after { subject.unstub(:execute) }
|
94
|
-
|
95
96
|
it "destroys a remote record" do
|
96
|
-
|
97
|
+
rpc.should_receive(:execute).with(:destroy, subject.scope_key_hash)
|
97
98
|
subject.destroy
|
98
99
|
end
|
99
100
|
|
@@ -104,35 +105,39 @@ describe ActiveRemote::Persistence do
|
|
104
105
|
end
|
105
106
|
end
|
106
107
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
108
|
+
context "when the response has errors" do
|
109
|
+
let(:error) { Generic::Error.new(:field => 'name', :message => 'Boom!') }
|
110
|
+
let(:response) { Generic::Remote::Tag.new(:errors => [ error ]) }
|
111
|
+
|
112
|
+
before { rpc.better_stub(:execute).and_return(response) }
|
113
|
+
|
114
|
+
it "adds the errors to the record" do
|
115
|
+
subject.destroy
|
116
|
+
subject.has_errors?.should be_true
|
117
|
+
end
|
118
|
+
|
119
|
+
it "returns false" do
|
120
|
+
subject.destroy.should be_false
|
121
|
+
end
|
122
|
+
end
|
117
123
|
end
|
118
124
|
|
119
125
|
describe "#destroy!" do
|
120
126
|
it "destroys a remote record" do
|
121
|
-
|
127
|
+
rpc.should_receive(:execute).with(:destroy, subject.scope_key_hash)
|
122
128
|
subject.destroy!
|
123
129
|
end
|
124
130
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
# end
|
131
|
+
context "when an error occurs" do
|
132
|
+
let(:error) { Generic::Error.new(:field => 'name', :message => 'Boom!') }
|
133
|
+
let(:response) { Generic::Remote::Tag.new(:errors => [ error ]) }
|
134
|
+
|
135
|
+
before { rpc.better_stub(:execute).and_return(response) }
|
136
|
+
|
137
|
+
it "raises an exception" do
|
138
|
+
expect { subject.destroy! }.to raise_error(ActiveRemote::ActiveRemoteError)
|
139
|
+
end
|
140
|
+
end
|
136
141
|
end
|
137
142
|
|
138
143
|
describe "#readonly?" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_remote
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.0.
|
4
|
+
version: 2.1.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Hutchison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_attr
|