remotely 0.1.1 → 0.1.2
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/README.md +24 -2
- data/lib/remotely.rb +14 -20
- data/lib/remotely/application.rb +49 -0
- data/lib/remotely/associations.rb +2 -2
- data/lib/remotely/ext/url.rb +15 -0
- data/lib/remotely/http_methods.rb +38 -48
- data/lib/remotely/version.rb +1 -1
- data/spec/remotely/application_spec.rb +31 -0
- data/spec/remotely/model_spec.rb +10 -10
- data/spec/remotely_spec.rb +14 -9
- data/spec/support/test_classes.rb +3 -1
- metadata +27 -24
data/README.md
CHANGED
@@ -3,11 +3,16 @@
|
|
3
3
|
Remotely lets you specify associations for your models that should
|
4
4
|
be fetched from a remote API instead of the database.
|
5
5
|
|
6
|
-
##
|
6
|
+
## Configuration
|
7
7
|
|
8
8
|
Apps are where Remotely goes to find association resources. You can define as many as you want, but if you define only one, you can omit the `:app` option from your associations.
|
9
9
|
|
10
|
-
Remotely.
|
10
|
+
Remotely.configure do
|
11
|
+
app :legsapp do
|
12
|
+
url "http://somanylegs.com/api/v1"
|
13
|
+
basic_auth "username", "password"
|
14
|
+
end
|
15
|
+
end
|
11
16
|
|
12
17
|
## Defining Associations
|
13
18
|
|
@@ -37,6 +42,23 @@ Apps are where Remotely goes to find association resources. You can define as ma
|
|
37
42
|
has_many_remote :legs, :app => :legsapp, ...
|
38
43
|
end
|
39
44
|
|
45
|
+
**Note about associations**
|
46
|
+
|
47
|
+
If you do not specify the `:app` options in your associations, you need
|
48
|
+
to create a `Remotely::Model` subclass for the associated object. This
|
49
|
+
is so Remotely knows which app to use to retrieve entries of that type.
|
50
|
+
|
51
|
+
class Person < ActiveRecord::Base
|
52
|
+
has_many_remote :legs
|
53
|
+
end
|
54
|
+
|
55
|
+
# Means the following must exist:
|
56
|
+
|
57
|
+
class Leg < Remotely::Model
|
58
|
+
app :legsapp
|
59
|
+
uri "/legs"
|
60
|
+
end
|
61
|
+
|
40
62
|
### id Substitution
|
41
63
|
|
42
64
|
A path can include "`:id`" anywhere in it, which is replaced by the instance's `id`. This is useful when the resource on the API end is namespaced. For example:
|
data/lib/remotely.rb
CHANGED
@@ -4,14 +4,15 @@ require "active_support/inflector"
|
|
4
4
|
require "active_support/concern"
|
5
5
|
require "active_support/core_ext/hash"
|
6
6
|
require "active_model"
|
7
|
+
|
7
8
|
require "remotely/ext/url"
|
9
|
+
require "remotely/application"
|
10
|
+
require "remotely/http_methods"
|
11
|
+
require "remotely/associations"
|
12
|
+
require "remotely/model"
|
13
|
+
require "remotely/collection"
|
8
14
|
|
9
15
|
module Remotely
|
10
|
-
autoload :Collection, "remotely/collection"
|
11
|
-
autoload :Associations, "remotely/associations"
|
12
|
-
autoload :Model, "remotely/model"
|
13
|
-
autoload :HTTPMethods, "remotely/http_methods"
|
14
|
-
|
15
16
|
class RemotelyError < StandardError
|
16
17
|
def message; self.class::MESSAGE; end
|
17
18
|
end
|
@@ -38,7 +39,7 @@ module Remotely
|
|
38
39
|
end
|
39
40
|
|
40
41
|
class << self
|
41
|
-
# @return [Hash]
|
42
|
+
# @return [Hash] Registered application configurations
|
42
43
|
def apps
|
43
44
|
@apps ||= {}
|
44
45
|
end
|
@@ -61,27 +62,20 @@ module Remotely
|
|
61
62
|
#
|
62
63
|
# @param [Symbol] name Placeholder name for the application.
|
63
64
|
# @param [String] url URL to the application's API.
|
65
|
+
# @param [Block] Block defining the attributes of the application.
|
64
66
|
#
|
65
|
-
def app(name, url)
|
66
|
-
url
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
# requests.
|
72
|
-
#
|
73
|
-
# @param [String] user BasicAuth user
|
74
|
-
# @param [String] password BasicAuth password
|
75
|
-
#
|
76
|
-
def basic_auth(user=nil, password=nil)
|
77
|
-
user and password and @basic_auth = [user, password] or @basic_auth
|
67
|
+
def app(name, url=nil, &block)
|
68
|
+
if !url && block_given?
|
69
|
+
apps[name] = Application.new(name, &block)
|
70
|
+
else
|
71
|
+
apps[name] = Application.new(name) { url(url) }
|
72
|
+
end
|
78
73
|
end
|
79
74
|
|
80
75
|
# Clear all registered apps
|
81
76
|
#
|
82
77
|
def reset!
|
83
78
|
@apps = {}
|
84
|
-
@basic_auth = nil
|
85
79
|
end
|
86
80
|
end
|
87
81
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Remotely
|
2
|
+
class Application
|
3
|
+
attr_reader :name
|
4
|
+
|
5
|
+
def initialize(name, &block)
|
6
|
+
@name = name
|
7
|
+
instance_eval(&block)
|
8
|
+
end
|
9
|
+
|
10
|
+
# Set or get the applications base url.
|
11
|
+
#
|
12
|
+
# @param [String] url Base url to the appplication
|
13
|
+
#
|
14
|
+
def url(url=nil)
|
15
|
+
return @url unless url
|
16
|
+
@url = URI.parse(set_scheme(url)).to_s
|
17
|
+
end
|
18
|
+
|
19
|
+
# Set or get BasicAuth credentials.
|
20
|
+
#
|
21
|
+
# @param [String] user BasicAuth user
|
22
|
+
# @param [String] password BasicAuth password
|
23
|
+
#
|
24
|
+
def basic_auth(user=nil, password=nil)
|
25
|
+
return @basic_auth unless user && password
|
26
|
+
@basic_auth = [user, password]
|
27
|
+
end
|
28
|
+
|
29
|
+
# Connection to the application (with BasicAuth if it was set).
|
30
|
+
#
|
31
|
+
def connection
|
32
|
+
return unless @url
|
33
|
+
|
34
|
+
@connection ||= Faraday::Connection.new(@url) do |b|
|
35
|
+
b.request :url_encoded
|
36
|
+
b.adapter :net_http
|
37
|
+
end
|
38
|
+
|
39
|
+
@connection.basic_auth(*@basic_auth) if @basic_auth
|
40
|
+
@connection
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def set_scheme(url)
|
46
|
+
url =~ /^http/ ? url : "http://#{url}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -193,7 +193,7 @@ module Remotely
|
|
193
193
|
end
|
194
194
|
|
195
195
|
private
|
196
|
-
|
196
|
+
|
197
197
|
def can_fetch_remotely_association?(name)
|
198
198
|
opts = remote_associations[name]
|
199
199
|
|
@@ -218,7 +218,7 @@ module Remotely
|
|
218
218
|
def fetch_association(name)
|
219
219
|
type = remote_associations[name][:type]
|
220
220
|
klass = name.to_s.classify.constantize
|
221
|
-
response =
|
221
|
+
response = klass.get(path_to(name, type), :class => klass, :parent => self)
|
222
222
|
set_association(name, response)
|
223
223
|
end
|
224
224
|
|
data/lib/remotely/ext/url.rb
CHANGED
@@ -5,6 +5,7 @@ class URL
|
|
5
5
|
@url = "/" + args.flatten.compact.join("/")
|
6
6
|
@url.gsub! %r[/{2,}], "/"
|
7
7
|
@url.gsub! %r[/$], ""
|
8
|
+
define_delegation_methods
|
8
9
|
end
|
9
10
|
|
10
11
|
def +(other)
|
@@ -22,6 +23,20 @@ class URL
|
|
22
23
|
def to_s
|
23
24
|
@url
|
24
25
|
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def define_delegation_methods
|
30
|
+
@url.public_methods(false).each do |name|
|
31
|
+
metaclass.class_eval do
|
32
|
+
define_method(name) { |*args| @url.send(name, *args) }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def metaclass
|
38
|
+
(class << self; self; end)
|
39
|
+
end
|
25
40
|
end
|
26
41
|
|
27
42
|
def URL(*args)
|
@@ -12,6 +12,10 @@ module Remotely
|
|
12
12
|
# Set or get the app for this model belongs to. If name is passed,
|
13
13
|
# it's a setter, otherwise, a getter.
|
14
14
|
#
|
15
|
+
# In getter form, if a model didn't declare which app it is
|
16
|
+
# associated with and there is only one registered app, it
|
17
|
+
# will default to that app.
|
18
|
+
#
|
15
19
|
# @overload app()
|
16
20
|
# Gets the current `app` value.
|
17
21
|
#
|
@@ -22,11 +26,7 @@ module Remotely
|
|
22
26
|
# @return [Symbol] New app symbol or current value.
|
23
27
|
#
|
24
28
|
def app(name=nil)
|
25
|
-
|
26
|
-
name = Remotely.apps.first.first
|
27
|
-
end
|
28
|
-
|
29
|
-
(name and @app = name) or @app
|
29
|
+
@app = (@app || Remotely.apps[name] || only_registered_app)
|
30
30
|
end
|
31
31
|
|
32
32
|
# Set or get the base uri for this model. If name is passed,
|
@@ -42,24 +42,7 @@ module Remotely
|
|
42
42
|
# @return [String] New uri or current value.
|
43
43
|
#
|
44
44
|
def uri(path=nil)
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
# The connection to the remote API.
|
49
|
-
#
|
50
|
-
# @return [Faraday::Connection] Connection to the remote API.
|
51
|
-
#
|
52
|
-
def remotely_connection
|
53
|
-
address = Remotely.apps[app][:base]
|
54
|
-
address = "http://#{address}" unless address =~ /^http/
|
55
|
-
|
56
|
-
@connection ||= Faraday::Connection.new(address) do |b|
|
57
|
-
b.request :url_encoded
|
58
|
-
b.adapter :net_http
|
59
|
-
end
|
60
|
-
|
61
|
-
@connection.basic_auth(*Remotely.basic_auth) if Remotely.basic_auth
|
62
|
-
@connection
|
45
|
+
@uri = (@uri || path)
|
63
46
|
end
|
64
47
|
|
65
48
|
# GET request.
|
@@ -71,14 +54,14 @@ module Remotely
|
|
71
54
|
# is an array, Collection, if it's a hash, Model, otherwise it's the
|
72
55
|
# parsed response body.
|
73
56
|
#
|
74
|
-
def get(
|
75
|
-
|
57
|
+
def get(path, options={})
|
58
|
+
path = expand(path)
|
76
59
|
klass = options.delete(:class)
|
77
60
|
parent = options.delete(:parent)
|
78
61
|
|
79
|
-
before_request(
|
62
|
+
before_request(path, :get, options)
|
80
63
|
|
81
|
-
response =
|
64
|
+
response = app.connection.get { |req| req.url(path, options) }
|
82
65
|
parse_response(raise_if_html(response), klass, parent)
|
83
66
|
end
|
84
67
|
|
@@ -95,14 +78,14 @@ module Remotely
|
|
95
78
|
# is an array, Collection, if it's a hash, Model, otherwise it's the
|
96
79
|
# parsed response body.
|
97
80
|
#
|
98
|
-
def post(
|
99
|
-
|
81
|
+
def post(path, options={})
|
82
|
+
path = expand(path)
|
100
83
|
klass = options.delete(:class)
|
101
84
|
parent = options.delete(:parent)
|
102
85
|
body = options.delete(:body) || Yajl::Encoder.encode(options)
|
103
86
|
|
104
|
-
before_request(
|
105
|
-
raise_if_html(
|
87
|
+
before_request(path, :post, body)
|
88
|
+
raise_if_html(app.connection.post(path, body))
|
106
89
|
end
|
107
90
|
|
108
91
|
# PUT request.
|
@@ -113,12 +96,12 @@ module Remotely
|
|
113
96
|
# @return [Boolean] Was the request successful? (Resulted in a
|
114
97
|
# 200-299 response code)
|
115
98
|
#
|
116
|
-
def put(
|
117
|
-
|
99
|
+
def put(path, options={})
|
100
|
+
path = expand(path)
|
118
101
|
body = options.delete(:body) || Yajl::Encoder.encode(options)
|
119
102
|
|
120
|
-
before_request(
|
121
|
-
raise_if_html(
|
103
|
+
before_request(path, :put, body)
|
104
|
+
raise_if_html(app.connection.put(path, body))
|
122
105
|
end
|
123
106
|
|
124
107
|
# DELETE request.
|
@@ -128,29 +111,30 @@ module Remotely
|
|
128
111
|
# @return [Boolean] Was the resource deleted? (Resulted in a
|
129
112
|
# 200-299 response code)
|
130
113
|
#
|
131
|
-
def http_delete(
|
132
|
-
|
133
|
-
before_request(
|
134
|
-
response = raise_if_html(
|
114
|
+
def http_delete(path)
|
115
|
+
path = expand(path)
|
116
|
+
before_request(path, :delete)
|
117
|
+
response = raise_if_html(app.connection.delete(path))
|
135
118
|
SUCCESS_STATUSES.include?(response.status)
|
136
119
|
end
|
137
120
|
|
138
|
-
#
|
139
|
-
#
|
140
|
-
#
|
141
|
-
#
|
142
|
-
#
|
121
|
+
# Remove the leading slash because Faraday considers
|
122
|
+
# it to be absolute path and ignores any prefixes. eg:
|
123
|
+
#
|
124
|
+
# c = Faraday::Connection.new("http://foo.com/api")
|
125
|
+
# c.get("users") # => /api/users (Good)
|
126
|
+
# c.get("/users") # => /users (Bad)
|
143
127
|
#
|
144
128
|
# @example
|
145
129
|
# Remotely.configure { app :thingapp, "http://example.com/api" }
|
146
|
-
# Model.expand("/members") # => "
|
130
|
+
# Model.expand("/members") # => "members"
|
147
131
|
#
|
148
|
-
def expand(
|
149
|
-
|
150
|
-
uri =~ /^#{baseuri}/ ? uri : URL(baseuri, uri)
|
132
|
+
def expand(path)
|
133
|
+
path.gsub(%r(^/), "")
|
151
134
|
end
|
152
135
|
|
153
136
|
# Gets called before a request. Override to add logging, etc.
|
137
|
+
#
|
154
138
|
def before_request(uri, http_verb = :get, options = {})
|
155
139
|
if ENV['REMOTELY_DEBUG']
|
156
140
|
puts "-> #{http_verb.to_s.upcase} #{uri}"
|
@@ -201,5 +185,11 @@ module Remotely
|
|
201
185
|
body
|
202
186
|
end
|
203
187
|
end
|
188
|
+
|
189
|
+
private
|
190
|
+
|
191
|
+
def only_registered_app
|
192
|
+
Remotely.apps.size == 1 ? Remotely.apps.first.last : nil
|
193
|
+
end
|
204
194
|
end
|
205
195
|
end
|
data/lib/remotely/version.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Remotely::Application do
|
4
|
+
it "sets the url" do
|
5
|
+
app = Remotely::Application.new(:name) { url "http://omg.com" }
|
6
|
+
app.url.should == "http://omg.com"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "defaults the url to http" do
|
10
|
+
app = Remotely::Application.new(:name) { url "omg.com" }
|
11
|
+
app.url.should == "http://omg.com"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "sets basic auth credentials" do
|
15
|
+
app = Remotely::Application.new(:name) { basic_auth "user", "pass" }
|
16
|
+
app.basic_auth.should == ["user", "pass"]
|
17
|
+
end
|
18
|
+
|
19
|
+
it "has a connection to the app" do
|
20
|
+
app = Remotely::Application.new(:name) { url "http://example.com" }
|
21
|
+
app.connection.should be_a Faraday::Connection
|
22
|
+
end
|
23
|
+
|
24
|
+
it "has a connection with basic auth to the app" do
|
25
|
+
app = Remotely::Application.new(:name) do
|
26
|
+
url "http://example.com"
|
27
|
+
basic_auth "user", "pass"
|
28
|
+
end
|
29
|
+
app.connection.headers["authorization"].should_not be_nil
|
30
|
+
end
|
31
|
+
end
|
data/spec/remotely/model_spec.rb
CHANGED
@@ -257,7 +257,12 @@ describe Remotely::Model do
|
|
257
257
|
|
258
258
|
context "basic auth" do
|
259
259
|
before do
|
260
|
-
Remotely.configure
|
260
|
+
Remotely.configure do
|
261
|
+
app :adventure_app do
|
262
|
+
url "http://localhost:3000"
|
263
|
+
basic_auth "user", "password"
|
264
|
+
end
|
265
|
+
end
|
261
266
|
end
|
262
267
|
|
263
268
|
after do
|
@@ -265,7 +270,6 @@ describe Remotely::Model do
|
|
265
270
|
end
|
266
271
|
|
267
272
|
it "sends Authorization headers when basic auth is configured" do
|
268
|
-
Remotely.configure { basic_auth "user", "password" }
|
269
273
|
Adventure.find(1)
|
270
274
|
a_request(:get, "#{app}/adventures/1").with(headers: {'Authorization' => "Basic dXNlcjpwYXNzd29yZA=="})
|
271
275
|
end
|
@@ -277,7 +281,7 @@ describe Remotely::Model do
|
|
277
281
|
end
|
278
282
|
|
279
283
|
it "sets the app it belongs to" do
|
280
|
-
Adventure.app.should == :adventure_app
|
284
|
+
Adventure.app.name.should == :adventure_app
|
281
285
|
end
|
282
286
|
|
283
287
|
it "sets the uri to itself" do
|
@@ -285,7 +289,7 @@ describe Remotely::Model do
|
|
285
289
|
end
|
286
290
|
|
287
291
|
it "has a connection" do
|
288
|
-
Adventure.
|
292
|
+
Adventure.app.connection.should be_a Faraday::Connection
|
289
293
|
end
|
290
294
|
|
291
295
|
it "supports ActiveModel::Naming methods" do
|
@@ -343,12 +347,8 @@ describe Remotely::Model do
|
|
343
347
|
Thing.app :uri_app
|
344
348
|
end
|
345
349
|
|
346
|
-
it "
|
347
|
-
Thing.expand("/members").should == "
|
348
|
-
end
|
349
|
-
|
350
|
-
it "doesn't prepend when it's already there" do
|
351
|
-
Thing.expand("/api/members").should == "/api/members"
|
350
|
+
it "removes leading slash to work with Faraday's path_prefix" do
|
351
|
+
Thing.expand("/members").should == "members"
|
352
352
|
end
|
353
353
|
end
|
354
354
|
|
data/spec/remotely_spec.rb
CHANGED
@@ -5,19 +5,24 @@ describe Remotely do
|
|
5
5
|
Remotely.reset!
|
6
6
|
end
|
7
7
|
|
8
|
-
it "is
|
8
|
+
it "is resetable" do
|
9
9
|
Remotely.configure { app :configapp, "localhost:2222" }
|
10
|
-
Remotely.
|
10
|
+
Remotely.reset!
|
11
|
+
Remotely.apps.should be_empty
|
11
12
|
end
|
12
13
|
|
13
|
-
it "
|
14
|
-
Remotely.configure {
|
15
|
-
Remotely.
|
14
|
+
it "is configurable with the old, non-block style" do
|
15
|
+
Remotely.configure { app :configapp, "localhost:2222" }
|
16
|
+
Remotely.apps[:configapp].url.should == "http://localhost:2222"
|
16
17
|
end
|
17
18
|
|
18
|
-
it "is
|
19
|
-
Remotely.configure { app
|
20
|
-
Remotely.
|
21
|
-
|
19
|
+
it "is configurable with a block" do
|
20
|
+
Remotely.configure { app(:configapp) { url "localhost:2222" } }
|
21
|
+
Remotely.apps[:configapp].url.should == "http://localhost:2222"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "saves the basic auth credentials" do
|
25
|
+
Remotely.configure { app(:appname) { basic_auth "user", "pass" }}
|
26
|
+
Remotely.apps[:appname].basic_auth.should == ["user", "pass"]
|
22
27
|
end
|
23
28
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remotely
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
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:
|
12
|
+
date: 2012-01-05 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &2169407720 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2169407720
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &2169407000 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 2.6.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2169407000
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: ZenTest
|
38
|
-
requirement: &
|
38
|
+
requirement: &2169400760 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2169400760
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: autotest-growl
|
49
|
-
requirement: &
|
49
|
+
requirement: &2169400280 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2169400280
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: webmock
|
60
|
-
requirement: &
|
60
|
+
requirement: &2169399780 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2169399780
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: ruby-debug19
|
71
|
-
requirement: &
|
71
|
+
requirement: &2169399220 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2169399220
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: ruby-debug-completion
|
82
|
-
requirement: &
|
82
|
+
requirement: &2169398540 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2169398540
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: activesupport
|
93
|
-
requirement: &
|
93
|
+
requirement: &2169397720 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2169397720
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: activemodel
|
104
|
-
requirement: &
|
104
|
+
requirement: &2169397260 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *2169397260
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: faraday
|
115
|
-
requirement: &
|
115
|
+
requirement: &2169396740 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :runtime
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *2169396740
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: yajl-ruby
|
126
|
-
requirement: &
|
126
|
+
requirement: &2169395480 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ! '>='
|
@@ -131,7 +131,7 @@ dependencies:
|
|
131
131
|
version: '0'
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *2169395480
|
135
135
|
description: Remote API based model associations.
|
136
136
|
email:
|
137
137
|
- me@mattenoble.com
|
@@ -147,6 +147,7 @@ files:
|
|
147
147
|
- README.md
|
148
148
|
- Rakefile
|
149
149
|
- lib/remotely.rb
|
150
|
+
- lib/remotely/application.rb
|
150
151
|
- lib/remotely/associations.rb
|
151
152
|
- lib/remotely/collection.rb
|
152
153
|
- lib/remotely/ext/url.rb
|
@@ -154,6 +155,7 @@ files:
|
|
154
155
|
- lib/remotely/model.rb
|
155
156
|
- lib/remotely/version.rb
|
156
157
|
- remotely.gemspec
|
158
|
+
- spec/remotely/application_spec.rb
|
157
159
|
- spec/remotely/associations_spec.rb
|
158
160
|
- spec/remotely/collection_spec.rb
|
159
161
|
- spec/remotely/ext/url_spec.rb
|
@@ -188,6 +190,7 @@ signing_key:
|
|
188
190
|
specification_version: 3
|
189
191
|
summary: Remote API based model associations.
|
190
192
|
test_files:
|
193
|
+
- spec/remotely/application_spec.rb
|
191
194
|
- spec/remotely/associations_spec.rb
|
192
195
|
- spec/remotely/collection_spec.rb
|
193
196
|
- spec/remotely/ext/url_spec.rb
|