footrest 0.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/footrest.gemspec +5 -3
- data/lib/faraday/response/raise_footrest_http_error.rb +1 -0
- data/lib/footrest/client.rb +4 -4
- data/lib/footrest/configuration.rb +9 -3
- data/lib/footrest/connection.rb +7 -6
- data/lib/footrest/request.rb +19 -5
- data/lib/footrest/version.rb +1 -1
- data/spec/footrest/client_spec.rb +33 -6
- data/spec/footrest/http_error_spec.rb +1 -1
- data/spec/footrest/request_spec.rb +15 -28
- data/spec/helper.rb +4 -4
- metadata +7 -4
data/footrest.gemspec
CHANGED
@@ -4,10 +4,12 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'footrest/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
|
-
gem.authors = ["Nathan Mills"]
|
8
|
-
gem.email = ["nathanm@instructure.com"]
|
7
|
+
gem.authors = ["Duane Johnson", "Nathan Mills"]
|
8
|
+
gem.email = ["duane@instructure.com", "nathanm@instructure.com"]
|
9
9
|
gem.description = %q{Ruby interface for restful APIs}
|
10
10
|
gem.summary = %q{REST APIs}
|
11
|
+
gem.homepage = 'https://github.com/instructure/footrest'
|
12
|
+
gem.license = 'MIT'
|
11
13
|
|
12
14
|
gem.files = %w[Rakefile footrest.gemspec]
|
13
15
|
gem.files += Dir.glob("lib/**/*.rb")
|
@@ -27,4 +29,4 @@ Gem::Specification.new do |gem|
|
|
27
29
|
gem.add_dependency "faraday", "~> 0.8.8"
|
28
30
|
gem.add_dependency "faraday_middleware", "~> 0.9.0"
|
29
31
|
gem.add_dependency "activesupport", ">= 3.0.0"
|
30
|
-
end
|
32
|
+
end
|
data/lib/footrest/client.rb
CHANGED
@@ -3,14 +3,14 @@ require 'footrest/request'
|
|
3
3
|
|
4
4
|
module Footrest
|
5
5
|
class Client
|
6
|
-
attr_reader :options
|
7
|
-
|
8
6
|
include Footrest::Connection
|
9
7
|
include Footrest::Request
|
10
8
|
|
9
|
+
attr_reader :config
|
10
|
+
|
11
11
|
def initialize(options={}, &block)
|
12
|
-
@
|
13
|
-
@
|
12
|
+
@config = Footrest.config.merge(options)
|
13
|
+
set_connection(@config, &block)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
@@ -4,10 +4,16 @@ require 'active_support/configurable'
|
|
4
4
|
module Footrest
|
5
5
|
include ActiveSupport::Configurable
|
6
6
|
config_accessor :token
|
7
|
-
config_accessor :
|
8
|
-
config_accessor :
|
7
|
+
config_accessor :prefix
|
8
|
+
config_accessor :logging
|
9
9
|
|
10
10
|
def configure
|
11
11
|
yield self
|
12
12
|
end
|
13
|
-
end
|
13
|
+
end
|
14
|
+
|
15
|
+
Footrest.configure do |config|
|
16
|
+
config.token = nil
|
17
|
+
config.prefix = nil
|
18
|
+
config.logging = false
|
19
|
+
end
|
data/lib/footrest/connection.rb
CHANGED
@@ -5,20 +5,21 @@ require 'faraday/response/raise_footrest_http_error'
|
|
5
5
|
module Footrest
|
6
6
|
module Connection
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
attr_reader :connection
|
9
|
+
|
10
|
+
def set_connection(config, &block)
|
11
|
+
@connection = Faraday.new(url: config[:prefix]) do |faraday|
|
11
12
|
faraday.request :multipart
|
12
13
|
faraday.request :url_encoded
|
13
|
-
faraday.response :logger if
|
14
|
+
faraday.response :logger if config[:logging]
|
14
15
|
faraday.adapter Faraday.default_adapter
|
15
16
|
faraday.use FaradayMiddleware::FollowRedirects
|
16
17
|
faraday.use FaradayMiddleware::ParseJson, :content_type => /\bjson$/
|
17
18
|
faraday.use Faraday::Response::RaiseFootrestHttpError
|
18
19
|
faraday.headers[:accept] = "application/json"
|
19
|
-
faraday.headers[:authorization] = "Bearer #{
|
20
|
+
faraday.headers[:authorization] = "Bearer #{config[:token]}" if config[:token]
|
20
21
|
faraday.headers[:user_agent] = "Footrest"
|
21
|
-
|
22
|
+
yield faraday if block_given?
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
data/lib/footrest/request.rb
CHANGED
@@ -1,6 +1,20 @@
|
|
1
1
|
module Footrest
|
2
2
|
module Request
|
3
3
|
|
4
|
+
def config
|
5
|
+
raise "Config should be overridden"
|
6
|
+
end
|
7
|
+
|
8
|
+
def join(*parts)
|
9
|
+
joined = parts.map{ |p| p.gsub(%r{^/|/$}, '') }.join('/')
|
10
|
+
joined = '/' + joined if parts.first[0] == '/'
|
11
|
+
joined
|
12
|
+
end
|
13
|
+
|
14
|
+
def fullpath(path)
|
15
|
+
config[:prefix] ? join(config[:prefix], path) : path
|
16
|
+
end
|
17
|
+
|
4
18
|
def delete(path, options={})
|
5
19
|
request_with_params_in_url(:delete, path, options)
|
6
20
|
end
|
@@ -18,20 +32,20 @@ module Footrest
|
|
18
32
|
end
|
19
33
|
|
20
34
|
def request_with_params_in_url(method, path, options)
|
21
|
-
request(method
|
22
|
-
r.url(
|
35
|
+
request(method) do |r|
|
36
|
+
r.url(fullpath(path), options)
|
23
37
|
end
|
24
38
|
end
|
25
39
|
|
26
40
|
def request_with_params_in_body(method, path, options)
|
27
|
-
request(method
|
28
|
-
r.path =
|
41
|
+
request(method) do |r|
|
42
|
+
r.path = fullpath(path)
|
29
43
|
r.body = options unless options.empty?
|
30
44
|
end
|
31
45
|
end
|
32
46
|
|
33
47
|
# Generic request
|
34
|
-
def request(method,
|
48
|
+
def request(method, &block)
|
35
49
|
connection.send(method, &block).body
|
36
50
|
end
|
37
51
|
|
data/lib/footrest/version.rb
CHANGED
@@ -1,16 +1,43 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
describe Footrest::Client do
|
4
|
-
|
5
4
|
it "sets the domain" do
|
6
|
-
client = Footrest::Client.new(
|
7
|
-
expect(client.
|
8
|
-
|
5
|
+
client = Footrest::Client.new(prefix: "http://domain.test")
|
6
|
+
expect(client.config.prefix).to eq("http://domain.test")
|
9
7
|
end
|
10
8
|
|
11
9
|
it "sets the authtoken" do
|
12
|
-
client = Footrest::Client.new(token:"test_token")
|
13
|
-
expect(client.
|
10
|
+
client = Footrest::Client.new(token: "test_token")
|
11
|
+
expect(client.config.token).to eq("test_token")
|
14
12
|
end
|
15
13
|
|
14
|
+
context "Request" do
|
15
|
+
let(:client) { Footrest::Client.new }
|
16
|
+
|
17
|
+
it "gets" do
|
18
|
+
stub_request(:get, "http://domain.test/page?p=1").
|
19
|
+
to_return(:status => 200, :body => "", :headers => {})
|
20
|
+
client.get('http://domain.test/page', :p => 1)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "deletes" do
|
24
|
+
stub_request(:get, "http://domain.test/page?auth=xyz").
|
25
|
+
to_return(:status => 200, :body => "", :headers => {})
|
26
|
+
client.get('http://domain.test/page', :auth => 'xyz')
|
27
|
+
end
|
28
|
+
|
29
|
+
it "posts" do
|
30
|
+
stub_request(:post, "http://domain.test/new_page").
|
31
|
+
with(:body => {"password"=>"xyz", "username"=>"abc"}).
|
32
|
+
to_return(:status => 200, :body => "", :headers => {})
|
33
|
+
client.post('http://domain.test/new_page', :username => 'abc', :password => 'xyz')
|
34
|
+
end
|
35
|
+
|
36
|
+
it "puts" do
|
37
|
+
stub_request(:put, "http://domain.test/update_page").
|
38
|
+
with(:body => {"password"=>"zzz", "username"=>"aaa"}).
|
39
|
+
to_return(:status => 200, :body => "", :headers => {})
|
40
|
+
client.put('http://domain.test/update_page', :username => 'aaa', :password => 'zzz')
|
41
|
+
end
|
42
|
+
end
|
16
43
|
end
|
@@ -2,7 +2,7 @@ require 'helper'
|
|
2
2
|
|
3
3
|
describe Footrest::HttpError do
|
4
4
|
before do
|
5
|
-
@client = Footrest::Client.new(
|
5
|
+
@client = Footrest::Client.new(prefix: "http://domain.com", token: "test_token")
|
6
6
|
end
|
7
7
|
|
8
8
|
it "raises a bad request error" do
|
@@ -1,38 +1,25 @@
|
|
1
1
|
require 'helper'
|
2
|
-
require 'ostruct'
|
3
2
|
|
4
|
-
class RequestHarness
|
5
|
-
include Footrest::Connection
|
6
|
-
include Footrest::Request
|
7
|
-
end
|
3
|
+
class RequestHarness; include Footrest::Request; end
|
8
4
|
|
9
5
|
describe Footrest::Request do
|
10
|
-
|
11
6
|
let(:request) { RequestHarness.new }
|
7
|
+
context "join" do
|
8
|
+
it "retains initial slash" do
|
9
|
+
expect(request.join('/test', 'path')).to eq('/test/path')
|
10
|
+
end
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
request.get('http://domain.test/page', :p => 1)
|
17
|
-
end
|
12
|
+
it "combines multiple segments" do
|
13
|
+
expect(request.join('test', 'path', 'parts')).to eq('test/path/parts')
|
14
|
+
end
|
18
15
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
request.get('http://domain.test/page', :auth => 'xyz')
|
23
|
-
end
|
24
|
-
|
25
|
-
it "posts" do
|
26
|
-
stub_request(:post, "http://domain.test/new_page").
|
27
|
-
with(:body => {"password"=>"xyz", "username"=>"abc"}).
|
28
|
-
to_return(:status => 200, :body => "", :headers => {})
|
29
|
-
request.post('http://domain.test/new_page', :username => 'abc', :password => 'xyz')
|
30
|
-
end
|
16
|
+
it "respects http://" do
|
17
|
+
expect(request.join('http://', 'path')).to eq('http://path')
|
18
|
+
end
|
31
19
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
request.put('http://domain.test/update_page', :username => 'aaa', :password => 'zzz')
|
20
|
+
it "keeps slashes within strings" do
|
21
|
+
expect(request.join('http://', 'domain', '/path/to/something')).
|
22
|
+
to eq('http://domain/path/to/something')
|
23
|
+
end
|
37
24
|
end
|
38
25
|
end
|
data/spec/helper.rb
CHANGED
@@ -17,19 +17,19 @@ def fixture(file)
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def stub_get(client, url)
|
20
|
-
stub_request(:get,
|
20
|
+
stub_request(:get, File.join(client.domain, url))
|
21
21
|
end
|
22
22
|
|
23
23
|
def stub_post(client, url)
|
24
|
-
stub_request(:post,
|
24
|
+
stub_request(:post, File.join(client.domain, url))
|
25
25
|
end
|
26
26
|
|
27
27
|
def stub_put(client, url)
|
28
|
-
stub_request(:put,
|
28
|
+
stub_request(:put, File.join(client.domain, url))
|
29
29
|
end
|
30
30
|
|
31
31
|
def stub_delete(client, url)
|
32
|
-
stub_request(:delete,
|
32
|
+
stub_request(:delete, File.join(client.domain, url))
|
33
33
|
end
|
34
34
|
|
35
35
|
def json_response(file)
|
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: footrest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
+
- Duane Johnson
|
8
9
|
- Nathan Mills
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2013-07
|
13
|
+
date: 2013-08-07 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: rake
|
@@ -157,6 +158,7 @@ dependencies:
|
|
157
158
|
version: 3.0.0
|
158
159
|
description: Ruby interface for restful APIs
|
159
160
|
email:
|
161
|
+
- duane@instructure.com
|
160
162
|
- nathanm@instructure.com
|
161
163
|
executables: []
|
162
164
|
extensions: []
|
@@ -176,8 +178,9 @@ files:
|
|
176
178
|
- spec/footrest/http_error_spec.rb
|
177
179
|
- spec/footrest/request_spec.rb
|
178
180
|
- spec/helper.rb
|
179
|
-
homepage:
|
180
|
-
licenses:
|
181
|
+
homepage: https://github.com/instructure/footrest
|
182
|
+
licenses:
|
183
|
+
- MIT
|
181
184
|
post_install_message:
|
182
185
|
rdoc_options: []
|
183
186
|
require_paths:
|