remotely 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/.travis.yml +15 -1
- data/Appraisals +14 -0
- data/Gemfile +4 -13
- data/README.md +10 -1
- data/gemfiles/rails32.gemfile +11 -0
- data/gemfiles/rails41.gemfile +11 -0
- data/gemfiles/rails42.gemfile +11 -0
- data/lib/remotely/application.rb +9 -0
- data/lib/remotely/model.rb +4 -5
- data/lib/remotely/version.rb +1 -1
- data/remotely.gemspec +1 -1
- data/spec/remotely/application_spec.rb +9 -0
- data/spec/remotely/model_spec.rb +4 -0
- metadata +25 -37
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 94c992b78a682bc69db2b902ee75a6b5b9fb5e58
|
4
|
+
data.tar.gz: 64f00a68922e910d14f91f19bbd6970a9a0f35e2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d43b00413570a0265d41c9259d4a834478eed74ca166f3a635037ca7cb39dc3efc344d20793f7b2a5f37d6f9cdf2ff710402411a862bb78f0903c8c391452fb8
|
7
|
+
data.tar.gz: 9f4d3ac58a62e7c1ddded8927f1326959c52fe5320d0c8cfca380ebbeeccfbb14d9194804674fb21f85f6b2bfb6b2d25a94a481e7871414d05145dbcc1957b37
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,8 +1,22 @@
|
|
1
|
+
sudo: false
|
1
2
|
language: ruby
|
3
|
+
script: rspec spec
|
4
|
+
|
5
|
+
gemfile:
|
6
|
+
- gemfiles/rails32.gemfile
|
7
|
+
- gemfiles/rails41.gemfile
|
8
|
+
- gemfiles/rails42.gemfile
|
9
|
+
|
2
10
|
rvm:
|
3
11
|
- 1.9.3
|
4
|
-
-
|
12
|
+
- 2.0.0
|
13
|
+
- 2.1.0
|
14
|
+
- 2.2.0
|
15
|
+
- rbx-2.4.1
|
5
16
|
- jruby-19mode
|
17
|
+
- jruby-head
|
18
|
+
|
6
19
|
matrix:
|
7
20
|
allow_failures:
|
8
21
|
- rvm: jruby-19mode
|
22
|
+
- rvm: jruby-head
|
data/Appraisals
ADDED
data/Gemfile
CHANGED
@@ -1,16 +1,7 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
|
-
gemspec
|
3
|
-
|
4
|
-
platforms :jruby do
|
5
|
-
gem "jruby-openssl"
|
6
|
-
end
|
7
2
|
|
8
|
-
|
9
|
-
platforms :mri do
|
10
|
-
gem "debugger"
|
11
|
-
end
|
3
|
+
gemspec
|
12
4
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
5
|
+
gem 'appraisal'
|
6
|
+
gem 'jruby-openssl', platforms: :jruby
|
7
|
+
gem 'pry'
|
data/README.md
CHANGED
@@ -7,15 +7,24 @@ be fetched from a remote API instead of the database.
|
|
7
7
|
|
8
8
|
## Configuration
|
9
9
|
|
10
|
-
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.
|
10
|
+
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. Remotely also supports any Faraday middleware, to configure just call `use_middleware` with the class name and options.
|
11
11
|
|
12
12
|
Remotely.configure do
|
13
13
|
app :legsapp do
|
14
14
|
url "http://somanylegs.com/api/v1"
|
15
15
|
basic_auth "username", "password"
|
16
|
+
use_middleware Faraday::HttpCache, store: MyCache.new
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
20
|
+
class Millepied < Remotely::Model
|
21
|
+
app :legsapp
|
22
|
+
uri "/legs"
|
23
|
+
|
24
|
+
# Optional - restrict saveable attributes
|
25
|
+
attr_savable :name, :type
|
26
|
+
end
|
27
|
+
|
19
28
|
## Defining Associations
|
20
29
|
|
21
30
|
`has_many_remote` takes two options, `:app` and `:path`. `:app` tells Remotely which registered app to fetch it from. `:path` tells it the URI to the object (everything after the app).
|
data/lib/remotely/application.rb
CHANGED
@@ -48,12 +48,21 @@ module Remotely
|
|
48
48
|
@authorization = [type, token]
|
49
49
|
end
|
50
50
|
|
51
|
+
def use_middleware(klass, options = {})
|
52
|
+
middleware << [klass, options]
|
53
|
+
end
|
54
|
+
|
55
|
+
def middleware
|
56
|
+
@middleware ||= []
|
57
|
+
end
|
58
|
+
|
51
59
|
# Connection to the application (with BasicAuth if it was set).
|
52
60
|
#
|
53
61
|
def connection
|
54
62
|
return unless @url
|
55
63
|
|
56
64
|
@connection ||= Faraday::Connection.new(@url) do |b|
|
65
|
+
middleware.each { |m, opts| b.use(m, opts) }
|
57
66
|
b.request :url_encoded
|
58
67
|
b.adapter :net_http
|
59
68
|
end
|
data/lib/remotely/model.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
module Remotely
|
2
2
|
class Model
|
3
|
-
extend Forwardable
|
4
3
|
extend ActiveModel::Naming
|
5
4
|
include ActiveModel::Conversion
|
6
5
|
include Associations
|
@@ -148,7 +147,7 @@ module Remotely
|
|
148
147
|
end
|
149
148
|
end
|
150
149
|
|
151
|
-
|
150
|
+
delegate :uri, :get, :post, :put, :parse_response, to: :"self.class"
|
152
151
|
|
153
152
|
# @return [Hash] Key-value of attributes and values.
|
154
153
|
attr_accessor :attributes
|
@@ -205,7 +204,7 @@ module Remotely
|
|
205
204
|
def save
|
206
205
|
method = new_record? ? :post : :put
|
207
206
|
status = new_record? ? 201 : 200
|
208
|
-
attrs = new_record? ? attributes : attributes.slice(*savable_attributes)
|
207
|
+
attrs = new_record? ? attributes : attributes.slice(*savable_attributes << :id)
|
209
208
|
url = new_record? ? uri : URL(uri, id)
|
210
209
|
|
211
210
|
resp = public_send(method, url, attrs)
|
@@ -221,7 +220,7 @@ module Remotely
|
|
221
220
|
end
|
222
221
|
|
223
222
|
def savable_attributes
|
224
|
-
|
223
|
+
self.class.savable_attributes || attributes.keys
|
225
224
|
end
|
226
225
|
|
227
226
|
# Sets multiple errors with a hash
|
@@ -296,7 +295,7 @@ module Remotely
|
|
296
295
|
end
|
297
296
|
|
298
297
|
def method_missing(name, *args, &block)
|
299
|
-
if self.attributes.include?(name)
|
298
|
+
if self.attributes.include?(name) || self.savable_attributes.include?(name)
|
300
299
|
self.attributes[name]
|
301
300
|
elsif name =~ /(.*)=$/ && self.attributes.include?($1.to_sym)
|
302
301
|
self.attributes[$1.to_sym] = args.first
|
data/lib/remotely/version.rb
CHANGED
data/remotely.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
|
|
17
17
|
|
18
18
|
gem.add_development_dependency "rake"
|
19
19
|
gem.add_development_dependency "rspec", "~> 2.6.0"
|
20
|
-
gem.add_development_dependency "webmock"
|
20
|
+
gem.add_development_dependency "webmock", '~> 1.18.0'
|
21
21
|
|
22
22
|
gem.add_dependency "activesupport"
|
23
23
|
gem.add_dependency "activemodel"
|
@@ -59,4 +59,13 @@ describe Remotely::Application do
|
|
59
59
|
end
|
60
60
|
app.connection.headers["authorization"].should_not be_nil
|
61
61
|
end
|
62
|
+
|
63
|
+
it "has a list of middleware for faraday to use" do
|
64
|
+
CustomMiddleware = Module.new
|
65
|
+
app = Remotely::Application.new(:name) do
|
66
|
+
url "http://example.com"
|
67
|
+
use_middleware CustomMiddleware, { a: 'a', b: 'b'}
|
68
|
+
end
|
69
|
+
app.connection.builder.handlers.should include(CustomMiddleware)
|
70
|
+
end
|
62
71
|
end
|
data/spec/remotely/model_spec.rb
CHANGED
@@ -12,6 +12,10 @@ describe Remotely::Model do
|
|
12
12
|
|
13
13
|
subject { Adventure.new(attrs) }
|
14
14
|
|
15
|
+
it 'should respond to uninitialized attributes defined as saveable' do
|
16
|
+
Adventure.new.name.should == nil
|
17
|
+
end
|
18
|
+
|
15
19
|
it "stores which attributes are savable" do
|
16
20
|
Adventure.savable_attributes.should == [:name, :type]
|
17
21
|
end
|
metadata
CHANGED
@@ -1,36 +1,32 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remotely
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.3.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Matte Noble
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2015-01-09 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,81 +41,71 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: webmock
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
47
|
+
version: 1.18.0
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
54
|
+
version: 1.18.0
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: activesupport
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: activemodel
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :runtime
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: faraday
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - '>='
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - '>='
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: multi_json
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - '>='
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '0'
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- -
|
108
|
+
- - '>='
|
124
109
|
- !ruby/object:Gem::Version
|
125
110
|
version: '0'
|
126
111
|
description: Remote API based model associations.
|
@@ -134,9 +119,13 @@ files:
|
|
134
119
|
- .gitignore
|
135
120
|
- .rspec
|
136
121
|
- .travis.yml
|
122
|
+
- Appraisals
|
137
123
|
- Gemfile
|
138
124
|
- README.md
|
139
125
|
- Rakefile
|
126
|
+
- gemfiles/rails32.gemfile
|
127
|
+
- gemfiles/rails41.gemfile
|
128
|
+
- gemfiles/rails42.gemfile
|
140
129
|
- lib/remotely.rb
|
141
130
|
- lib/remotely/application.rb
|
142
131
|
- lib/remotely/associations.rb
|
@@ -158,27 +147,26 @@ files:
|
|
158
147
|
- spec/support/webmock.rb
|
159
148
|
homepage: ''
|
160
149
|
licenses: []
|
150
|
+
metadata: {}
|
161
151
|
post_install_message:
|
162
152
|
rdoc_options: []
|
163
153
|
require_paths:
|
164
154
|
- lib
|
165
155
|
required_ruby_version: !ruby/object:Gem::Requirement
|
166
|
-
none: false
|
167
156
|
requirements:
|
168
|
-
- -
|
157
|
+
- - '>='
|
169
158
|
- !ruby/object:Gem::Version
|
170
159
|
version: '0'
|
171
160
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
|
-
none: false
|
173
161
|
requirements:
|
174
|
-
- -
|
162
|
+
- - '>='
|
175
163
|
- !ruby/object:Gem::Version
|
176
164
|
version: '0'
|
177
165
|
requirements: []
|
178
166
|
rubyforge_project:
|
179
|
-
rubygems_version:
|
167
|
+
rubygems_version: 2.4.1
|
180
168
|
signing_key:
|
181
|
-
specification_version:
|
169
|
+
specification_version: 4
|
182
170
|
summary: Remote API based model associations.
|
183
171
|
test_files:
|
184
172
|
- spec/remotely/application_spec.rb
|