gorilla-io 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 631312539a8eadcd08066f2a0be7f2443e61ddac
4
+ data.tar.gz: a01f8253981639d6463576169752f5bf5f887a2b
5
+ SHA512:
6
+ metadata.gz: 9b97db6e2d1260c3e60ec0cda94f027c2bd9aaa83fb19529fb90fcf5c6ba92d7f4011f6180deb202eb6ede9e4fe96776152689ddf5a22a42bb6b2735a80069de
7
+ data.tar.gz: 1f2c9a37fcafcce87b1c61f6447b415c69c97dfac672fd1c32b0374b8127184270423f1e34e9b1839f91735f73d18ee3cca17f72b8ada88e83fe4cd461512625
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ gorilla-ruby
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.1.5
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.5
4
+ - 2.0.0
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in gorilla-client.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Braden Schaeffer
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # Gorilla.io API client for Ruby
2
+
3
+ [![Build Status](https://travis-ci.org/thinkmechanic/gorilla-ruby.svg)](https://travis-ci.org/thinkmechanic/gorilla-ruby)
4
+
5
+ A Ruby wrapper for the [Gorilla.io](http://gorilla.io) API.
6
+
7
+ * [Gorilla.io API Docs](http://docs.gorilla.io/)
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ ```ruby
14
+ gem 'gorilla-io'
15
+ ```
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install gorilla-io
24
+
25
+ ## Configuration
26
+
27
+ Options | Default | Description
28
+ --------|---------|-------------
29
+ `api.url` | `https://api.gorilla.io` | The Gorilla API url (probably won't change this).
30
+ `api.version` | `1` | The desired Gorilla API version.
31
+ `api.key` | `ENV['GORILLA_API_KEY']` | Your Gorilla API key.
32
+ `api.secret` | `ENV['GORILLA_API_SECRET']` | Your Gorilla API secret.
33
+ `api.token_duration` | `300` (5 minutes) | Amount in seconds generated signatures are good for.
34
+ `user_agent` | `Gorilla Ruby Client/{version}` | The user agent for the client.
35
+ `client_adapter` | `Faraday.default_adapter` | Enables easily changing the adapter in a test enviornment.
36
+
37
+ #### Configuring Clients
38
+
39
+ You can configure all clients globally, or you can configure any `api` option
40
+ from above on a per-client basis:
41
+
42
+ ```ruby
43
+ Gorilla.configure do |c|
44
+ c.api.key 'your-key'
45
+ c.api.secret 'your-secret'
46
+ end
47
+
48
+ # Uses the global config
49
+ client = Gorilla::Client.new
50
+
51
+ # Uses the global config, overrides key & secret
52
+ client = Gorilla::Client.new({
53
+ key: 'other-key',
54
+ secret: 'other-secret'
55
+ })
56
+ ```
57
+
58
+ You can also customize the Faraday middleware stack by passing a block to the
59
+ client that will be passed a `Faraday::Connection` and a hash of the current
60
+ `api` options. In fact, [`Gorilla::Client`](lib/gorilla/client.rb) is just a
61
+ [`Gorilla::VanillaClient`](lib/gorilla/vanilla_client.rb) that does just that.
62
+
63
+ ```ruby
64
+ gorilla_client = Gorilla::VanillaClient.new do |conn, options|
65
+ conn.request :api_version, options[:version]
66
+ conn.request :signature_auth, options
67
+ end
68
+ ```
69
+
70
+ ## Contributing
71
+
72
+ 1. Fork it ( https://github.com/[my-github-username]/gorilla-client/fork )
73
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
74
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
75
+ 4. Push to the branch (`git push origin my-new-feature`)
76
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
7
+
8
+ task :console do
9
+ require 'irb'
10
+ require 'irb/completion'
11
+ require 'gorilla-io'
12
+ ARGV.clear
13
+ IRB.start
14
+ end
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'gorilla/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'gorilla-io'
8
+ spec.version = Gorilla::VERSION
9
+ spec.authors = ['Gorilla.io']
10
+ spec.email = ['braden@gorilla.io']
11
+ spec.summary = %q{Ruby wrapper for the Gorilla.io API}
12
+ spec.description = %q{Ruby wrapper for the Gorilla.io API}
13
+ spec.homepage = 'https://github.com/thinkmechanic/gorilla-ruby'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.7'
22
+ spec.add_development_dependency 'rake', '~> 10.0'
23
+ spec.add_development_dependency 'rspec', '~> 3.0'
24
+
25
+ spec.add_dependency 'faraday', '~> 0.9'
26
+ spec.add_dependency 'faraday_middleware', '~> 0.9'
27
+ spec.add_dependency 'configurations', '~> 1.4'
28
+ spec.add_dependency 'jwt', '~> 1.2'
29
+ end
@@ -0,0 +1,12 @@
1
+ module Gorilla
2
+ class Client < VanillaClient
3
+
4
+ def initialize(opts={}, &block)
5
+ super(opts) do |conn, options|
6
+ conn.request :api_version, options[:version]
7
+ conn.request :signature_auth, options
8
+ yield(conn) if block_given?
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,23 @@
1
+ module Gorilla
2
+ # Top-level error for rescuing all Gorilla Client errors
3
+ class Error < StandardError
4
+ def initialize(response)
5
+ @response = response
6
+ end
7
+ end
8
+
9
+ # Raised when Gorilla.io returns the HTTP status code 400
10
+ class BadRequest < Error; end
11
+
12
+ # Raised when Gorilla.io returns the HTTP status code 401
13
+ class Unauthorized < Error; end
14
+
15
+ # Raised when Gorilla.io returns the HTTP status code 404
16
+ class NotFound < Error; end
17
+
18
+ # Raised when Gorilla.io returns the HTTP status code 422
19
+ class ValidationError < Error; end
20
+
21
+ # Raised when Gorilla.io returns the HTTP status code 50x
22
+ class ServerError < Error; end
23
+ end
@@ -0,0 +1,24 @@
1
+ module Gorilla
2
+ module Middleware
3
+ class ApiVersion < Faraday::Middleware
4
+
5
+ VERSION_HEADER = 'application/vnd.gorilla.v%s+json'.freeze
6
+
7
+ def initialize(app, version)
8
+ super(app)
9
+ @version = version
10
+ end
11
+
12
+ def call(env)
13
+ env[:request_headers]['Accept'] = accept_header
14
+ @app.call(env)
15
+ end
16
+
17
+ private
18
+
19
+ def accept_header
20
+ VERSION_HEADER % @version
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,36 @@
1
+ module Gorilla
2
+ module Middleware
3
+ class HttpExceptions < Faraday::Middleware
4
+
5
+ def call(env)
6
+ @app.call(env).on_complete do |response|
7
+ case response[:status].to_s.strip
8
+ when '400'
9
+ raise_error Gorilla::BadRequest, response
10
+ when '401'
11
+ raise_error Gorilla::Unauthorized, response
12
+ when '404'
13
+ raise_error Gorilla::NotFound, response
14
+ when '422'
15
+ raise_error Gorilla::ValidationError, response
16
+ when /50\d/
17
+ raise_error Gorilla::ServerError, response
18
+ end
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def raise_error(klass, response)
25
+ msg = if response[:body].kind_of?(Hash)
26
+ error = response[:body]['error']
27
+ error['code'] + ' - ' + error['message']
28
+ else
29
+ response[:body]
30
+ end
31
+
32
+ raise klass.new(response), [response[:status], msg].compact.join(': ')
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,40 @@
1
+ module Gorilla
2
+ module Middleware
3
+ class SignatureAuth < Faraday::Middleware
4
+
5
+ SIGNATURE_METHOD = 'Signature'.freeze
6
+ SIGNATURE_ALGO = 'HS256'.freeze
7
+
8
+ def initialize(app, opts={})
9
+ [:key, :secret].each do |key|
10
+ raise ArgumentError, "#{key.inspect} is required" if !opts[key]
11
+ end
12
+
13
+ opts[:token_duration] ||= 5 * 60
14
+
15
+ super(app)
16
+ @opts = opts
17
+ end
18
+
19
+ def call(env)
20
+ env[:request_headers]['Authorization'] = build_auth_header(env)
21
+ @app.call(env)
22
+ end
23
+
24
+ private
25
+
26
+ def build_auth_header(env)
27
+ token = build_token(env)
28
+ "#{SIGNATURE_METHOD} #{@opts[:key]} #{token}"
29
+ end
30
+
31
+ def build_token(env)
32
+ JWT.encode({
33
+ exp: Time.now.utc.to_i + @opts[:token_duration].to_i,
34
+ method: env[:method].to_s.upcase,
35
+ path: env[:url].path.split('?').first
36
+ }, @opts[:secret], SIGNATURE_ALGO)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,15 @@
1
+ module Gorilla
2
+ module Middleware
3
+ class UserAgent < Faraday::Middleware
4
+ def initialize(app, agent_string)
5
+ super(app)
6
+ @agent_string = agent_string
7
+ end
8
+
9
+ def call(env)
10
+ env[:request_headers]['User-Agent'] = @agent_string
11
+ @app.call(env)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,38 @@
1
+ module Gorilla
2
+ class VanillaClient
3
+
4
+ attr_reader :connection
5
+
6
+ def initialize(opts={}, &block)
7
+ options = config.api.to_h.merge(opts)
8
+
9
+ @connection = Faraday.new(options[:url]) do |conn|
10
+ conn.request :user_agent, config.user_agent
11
+ conn.request :json
12
+ yield(conn, options) if block_given?
13
+ conn.response :json, content_type: /\bjson$/
14
+ conn.adapter config.client_adapter
15
+ end
16
+ end
17
+
18
+ def get(path, params={})
19
+ connection.get(path, params)
20
+ end
21
+
22
+ def post(path, params={})
23
+ connection.post(path, params)
24
+ end
25
+
26
+ def put(path, params={})
27
+ connection.put(path, params)
28
+ end
29
+
30
+ def delete(path, params={})
31
+ connection.delete(path, params)
32
+ end
33
+
34
+ def config
35
+ Gorilla.configuration
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,3 @@
1
+ module Gorilla
2
+ VERSION = "0.0.1"
3
+ end
data/lib/gorilla-io.rb ADDED
@@ -0,0 +1 @@
1
+ require 'gorilla'
data/lib/gorilla.rb ADDED
@@ -0,0 +1,48 @@
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'configurations'
4
+ require 'jwt'
5
+
6
+ require 'gorilla/version'
7
+
8
+ require 'gorilla/error'
9
+ require 'gorilla/middleware/api_version'
10
+ require 'gorilla/middleware/user_agent'
11
+ require 'gorilla/middleware/signature_auth'
12
+ require 'gorilla/middleware/http_exceptions'
13
+
14
+ require 'gorilla/vanilla_client'
15
+ require 'gorilla/client'
16
+
17
+ module Gorilla
18
+ include Configurations
19
+
20
+ configurable api: %i{url version key secret token_duration}
21
+ configurable :user_agent
22
+ configurable :client_adapter
23
+
24
+ configuration_defaults do |c|
25
+ c.api.url = 'https://api.gorilla.io/'
26
+ c.api.version = 1
27
+ c.api.key = ENV['GORILLA_API_KEY']
28
+ c.api.secret = ENV['GORILLA_API_SECRET']
29
+ c.api.token_duration = 5 * 60
30
+
31
+ c.user_agent = "Gorilla Client/#{VERSION}"
32
+ c.client_adapter = Faraday.default_adapter
33
+ end
34
+
35
+ def self.testing!
36
+ stub = Faraday::Adapter::Test::Stubs.new
37
+ configuration.client_adapter = stub
38
+ stub
39
+ end
40
+
41
+ Faraday::Request.register_middleware \
42
+ user_agent: Gorilla::Middleware::UserAgent,
43
+ api_version: Gorilla::Middleware::ApiVersion,
44
+ signature_auth: Gorilla::Middleware::SignatureAuth
45
+
46
+ Faraday::Response.register_middleware \
47
+ http_exceptions: Gorilla::Middleware::HttpExceptions
48
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe_request_middleware Gorilla::Middleware::ApiVersion do
4
+ let(:version) { 1 }
5
+ let(:args) { [version] }
6
+
7
+ it "sets the Accept header" do
8
+ result = process(nil)
9
+ accept = result[:request_headers]['accept']
10
+ expect(accept).to eq("application/vnd.gorilla.v#{version}+json")
11
+ end
12
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe_response_middleware Gorilla::Middleware::HttpExceptions do
4
+
5
+ {
6
+ 400 => Gorilla::BadRequest,
7
+ 401 => Gorilla::Unauthorized,
8
+ 404 => Gorilla::NotFound,
9
+ 422 => Gorilla::ValidationError,
10
+ 500 => Gorilla::ServerError,
11
+ 503 => Gorilla::ServerError
12
+ }.each do |status, error|
13
+ it "raises a #{error.name} for HTTP status code #{status}" do
14
+ expect { process(nil, status) }.to raise_error(error)
15
+ end
16
+ end
17
+
18
+ it 'raises a Gorilla::Error with the correct message from a Hash' do
19
+ expect {
20
+ process({'error' => {'code' => 'code', 'message' => 'message'}}, 400)
21
+ }.to raise_error(Gorilla::Error, '400: code - message')
22
+ end
23
+
24
+ it 'raises a Gorilla::Error with the correct message from a String' do
25
+ expect {
26
+ process('This is a string', 400)
27
+ }.to raise_error(Gorilla::Error, '400: This is a string')
28
+ end
29
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe_request_middleware Gorilla::Middleware::SignatureAuth do
4
+ let(:api_key) { 'api-key' }
5
+ let(:api_secret) { 'api-secret' }
6
+ let(:token_duration) { 5 * 60 }
7
+
8
+ let(:args) { [{
9
+ key: api_key,
10
+ secret: api_secret,
11
+ token_duration: token_duration
12
+ }] }
13
+
14
+ let(:test_time) { Time.mktime(2015, 1, 1) }
15
+ before { allow(Time).to receive(:now).and_return(test_time) }
16
+
17
+ let(:token) do
18
+ JWT.encode({
19
+ exp: test_time.utc.to_i + token_duration.to_i,
20
+ method: 'GET',
21
+ path: '/forms'
22
+ }, api_secret, 'HS256')
23
+ end
24
+
25
+ let(:result) do
26
+ process(nil) do |env|
27
+ env[:method] = :get
28
+ env[:url] = URI.parse('https://api.gorilla.io/forms')
29
+ end
30
+ end
31
+
32
+ context 'missing an :api_key' do
33
+ let(:api_key) { nil }
34
+
35
+ it 'raises an ArgumentError' do
36
+ expect { result }.to raise_error(ArgumentError, ':key is required')
37
+ end
38
+ end
39
+
40
+ context 'missing an :api_secret' do
41
+ let(:api_secret) { nil }
42
+
43
+ it 'raises an ArgumentError' do
44
+ expect { result }.to raise_error(ArgumentError, ':secret is required')
45
+ end
46
+ end
47
+
48
+ context 'with valid credentials' do
49
+ it 'sets the Authorization header' do
50
+ auth = result[:request_headers]['authorization']
51
+ expect(auth).to eq("Signature #{api_key} #{token}")
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe_request_middleware Gorilla::Middleware::UserAgent do
4
+ let(:args) { ['Gorilla Agent'] }
5
+
6
+ it "sets the User-Agent header" do
7
+ result = process(nil)
8
+ agent = result[:request_headers]['user-agent']
9
+ expect(agent).to eq('Gorilla Agent')
10
+ end
11
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Gorilla::VanillaClient do
4
+
5
+ let(:client) { Gorilla::VanillaClient.new }
6
+
7
+ describe 'initializing' do
8
+ it 'uses the url from Gorilla.configuration given no :url option' do
9
+ expect(Faraday).to receive(:new).with(Gorilla.configuration.api.url)
10
+ Gorilla::VanillaClient.new
11
+ end
12
+
13
+ it 'overrides the url given a :url options' do
14
+ expect(Faraday).to receive(:new).with('http://test.com/')
15
+ Gorilla::VanillaClient.new(url: 'http://test.com/')
16
+ end
17
+
18
+ it 'yields correctly' do
19
+ Gorilla::VanillaClient.new do |conn, options|
20
+ expect(conn).to be_a(Faraday::Connection)
21
+ expect(options).to eq(Gorilla.configuration.api.to_h)
22
+ end
23
+ end
24
+
25
+ it 'overrides the default :api configuration options' do
26
+ Gorilla::VanillaClient.new(key: 'test-key') do |conn, options|
27
+ expect(options[:key]).to eq('test-key')
28
+ end
29
+ end
30
+
31
+ it 'builds the default stack' do
32
+ conn_stub = double('Faraday::Connection', {
33
+ adapter: nil,
34
+ request: nil,
35
+ response: nil
36
+ })
37
+
38
+ expect(Faraday).to receive(:new).and_yield(conn_stub)
39
+
40
+ expect_stack conn_stub,
41
+ [:request, :user_agent, Gorilla.configuration.user_agent],
42
+ [:request, :json],
43
+ [:response, :json, content_type: /\bjson$/],
44
+ [:adapter, Gorilla.configuration.client_adapter]
45
+
46
+ Gorilla::VanillaClient.new
47
+ end
48
+ end
49
+
50
+ [:get, :post, :put, :delete].each do |verb|
51
+ describe "##{verb}" do
52
+ it 'delegates to connection' do
53
+ expect(client.connection).to receive(verb)
54
+ .with('/path', {param: 'value'})
55
+ .and_return(nil)
56
+
57
+ client.send(verb, '/path', {param: 'value'})
58
+ end
59
+ end
60
+ end
61
+
62
+ describe '#connection' do
63
+ subject { client.connection }
64
+ it { is_expected.to be_a(Faraday::Connection) }
65
+ end
66
+
67
+ private
68
+
69
+ def expect_stack(conn, *stacks)
70
+ stacks.each do |stack|
71
+ method, *args = stack
72
+ expect(conn).to receive(method).with(*args)
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,39 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ require 'gorilla-io'
5
+
6
+ # Requires supporting ruby files
7
+ Dir["spec/support/**/*.rb"].each { |f| require File.expand_path("./#{f}") }
8
+
9
+ RSpec.configure do |config|
10
+ if config.files_to_run.one?
11
+ config.default_formatter = 'doc'
12
+ end
13
+
14
+ config.order = :random
15
+ Kernel.srand config.seed
16
+
17
+ config.expect_with :rspec do |expectations|
18
+ expectations.syntax = :expect
19
+ end
20
+
21
+ config.mock_with :rspec do |mocks|
22
+ mocks.syntax = :expect
23
+ mocks.verify_partial_doubles = true
24
+ end
25
+
26
+ # Example groups
27
+ config.alias_example_group_to :describe_request_middleware, type: :request
28
+ config.alias_example_group_to :describe_response_middleware, type: :response
29
+
30
+ # Reset API Key configuration
31
+ Gorilla.configure do |c|
32
+ c.api.key = 'api-key'
33
+ c.api.secret = 'api-secret'
34
+ end
35
+
36
+ config.include FaradayHelpers
37
+ config.include RequestMiddlewareContext, type: :request
38
+ config.include ResponseMiddlewareContext, type: :response
39
+ end
@@ -0,0 +1,49 @@
1
+ module FaradayHelpers
2
+ def faraday_env(env)
3
+ Faraday::Env.from(env)
4
+ end
5
+ end
6
+
7
+ module RequestMiddlewareContext
8
+ def self.included(base)
9
+ base.let(:args) { [] }
10
+ base.let(:middleware) do
11
+ described_class.new(lambda{|env| env}, *args)
12
+ end
13
+ end
14
+
15
+ def process(body, &block)
16
+ env = {
17
+ body: body,
18
+ request_headers: Faraday::Utils::Headers.new
19
+ }
20
+
21
+ yield env if block_given?
22
+ middleware.call(faraday_env(env))
23
+ end
24
+ end
25
+
26
+ module ResponseMiddlewareContext
27
+ def self.included(base)
28
+ base.let(:args) { [] }
29
+ base.let(:headers) { Hash.new }
30
+ base.let(:middleware) {
31
+ described_class.new(lambda {|env|
32
+ Faraday::Response.new(env)
33
+ }, *args)
34
+ }
35
+ end
36
+
37
+ def process(body, status, options = {})
38
+ env = {
39
+ body: body,
40
+ status: status,
41
+ request: options,
42
+ request_headers: Faraday::Utils::Headers.new,
43
+ response_headers: Faraday::Utils::Headers.new(headers)
44
+ }
45
+
46
+ yield env if block_given?
47
+ middleware.call(faraday_env(env))
48
+ end
49
+ end
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gorilla-io
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Gorilla.io
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: faraday
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.9'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: faraday_middleware
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.9'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.9'
83
+ - !ruby/object:Gem::Dependency
84
+ name: configurations
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.4'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.4'
97
+ - !ruby/object:Gem::Dependency
98
+ name: jwt
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.2'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.2'
111
+ description: Ruby wrapper for the Gorilla.io API
112
+ email:
113
+ - braden@gorilla.io
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".gitignore"
119
+ - ".rspec"
120
+ - ".ruby-gemset"
121
+ - ".ruby-version"
122
+ - ".travis.yml"
123
+ - Gemfile
124
+ - LICENSE.txt
125
+ - README.md
126
+ - Rakefile
127
+ - gorilla-io.gemspec
128
+ - lib/gorilla-io.rb
129
+ - lib/gorilla.rb
130
+ - lib/gorilla/client.rb
131
+ - lib/gorilla/error.rb
132
+ - lib/gorilla/middleware/api_version.rb
133
+ - lib/gorilla/middleware/http_exceptions.rb
134
+ - lib/gorilla/middleware/signature_auth.rb
135
+ - lib/gorilla/middleware/user_agent.rb
136
+ - lib/gorilla/vanilla_client.rb
137
+ - lib/gorilla/version.rb
138
+ - spec/lib/gorilla/middleware/api_version_spec.rb
139
+ - spec/lib/gorilla/middleware/http_exceptions_spec.rb
140
+ - spec/lib/gorilla/middleware/signature_auth_spec.rb
141
+ - spec/lib/gorilla/middleware/user_agent_spec.rb
142
+ - spec/lib/gorilla/vanilla_client_spec.rb
143
+ - spec/spec_helper.rb
144
+ - spec/support/faraday_helpers.rb
145
+ homepage: https://github.com/thinkmechanic/gorilla-ruby
146
+ licenses:
147
+ - MIT
148
+ metadata: {}
149
+ post_install_message:
150
+ rdoc_options: []
151
+ require_paths:
152
+ - lib
153
+ required_ruby_version: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ required_rubygems_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ requirements: []
164
+ rubyforge_project:
165
+ rubygems_version: 2.4.3
166
+ signing_key:
167
+ specification_version: 4
168
+ summary: Ruby wrapper for the Gorilla.io API
169
+ test_files:
170
+ - spec/lib/gorilla/middleware/api_version_spec.rb
171
+ - spec/lib/gorilla/middleware/http_exceptions_spec.rb
172
+ - spec/lib/gorilla/middleware/signature_auth_spec.rb
173
+ - spec/lib/gorilla/middleware/user_agent_spec.rb
174
+ - spec/lib/gorilla/vanilla_client_spec.rb
175
+ - spec/spec_helper.rb
176
+ - spec/support/faraday_helpers.rb