faraday_middleware 0.3.2 → 0.6.0

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/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format=nested
3
+ --backtrace
data/LICENSE.md ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Erik Michaels-Ober, Wynn Netherland, et al.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile CHANGED
@@ -1,14 +1,8 @@
1
- $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
- require 'rake'
3
- require 'rake/testtask'
4
1
  require 'bundler'
5
-
6
2
  Bundler::GemHelper.install_tasks
7
3
 
8
- Rake::TestTask.new(:test) do |test|
9
- test.ruby_opts = ["-rubygems"] if defined? Gem
10
- test.libs << "lib" << "test"
11
- test.pattern = "test/**/*_test.rb"
12
- end
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
13
6
 
14
- task :default => :test
7
+ task :test => :spec
8
+ task :default => :spec
@@ -1,29 +1,36 @@
1
1
  require File.expand_path('../lib/faraday_middleware/version', __FILE__)
2
2
 
3
3
  Gem::Specification.new do |s|
4
- s.add_development_dependency('hashie', '~> 1.0')
5
- s.add_development_dependency('json', '~> 1.4')
6
- s.add_development_dependency('multi_json', '~> 0.0')
7
- s.add_development_dependency('multi_xml', '~> 0.2')
8
- s.add_development_dependency('oauth2', '~> 0.1')
9
- s.add_development_dependency('rake', '~> 0.8')
10
- s.add_development_dependency('shoulda', '~> 2.11')
11
- s.add_development_dependency('simplecov', '~> 0.3')
12
- s.add_development_dependency('test-unit', '~> 2.1')
13
- s.add_runtime_dependency('faraday', '~> 0.5.4')
14
- s.authors = ["Wynn Netherland"]
15
- s.description = %q{Various middleware for Faraday}
16
- s.email = ['wynn.netherland@gmail.com']
17
- s.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
18
- s.extra_rdoc_files = ["README.md"]
19
- s.files = `git ls-files`.split("\n")
20
- s.homepage = 'http://wynnnetherland.com/projects/faraday-middleware/'
21
4
  s.name = 'faraday_middleware'
5
+ s.summary = %q{Various middleware for Faraday}
6
+ s.description = s.summary
7
+
8
+ s.homepage = 'http://wynnnetherland.com/projects/faraday-middleware/'
9
+
10
+ s.authors = ["Erik Michaels-Ober", "Wynn Netherland"]
11
+ s.email = ['sferik@gmail.com', 'wynn.netherland@gmail.com']
12
+
13
+ s.version = FaradayMiddleware::VERSION
22
14
  s.platform = Gem::Platform::RUBY
23
- s.rdoc_options = ['--charset=UTF-8']
15
+
24
16
  s.require_paths = ['lib']
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+
21
+ s.extra_rdoc_files = ["README.md"]
22
+ s.rdoc_options = ['--charset=UTF-8']
23
+
25
24
  s.required_rubygems_version = Gem::Requirement.new('>= 1.3.6') if s.respond_to? :required_rubygems_version=
26
- s.summary = s.description
27
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
28
- s.version = FaradayMiddleware::VERSION
25
+
26
+ s.add_runtime_dependency('faraday', '~> 0.6.0')
27
+ s.add_development_dependency('rake', '~> 0.8')
28
+ s.add_development_dependency('rspec', '~> 2.5')
29
+ s.add_development_dependency('simplecov', '~> 0.4')
30
+ s.add_development_dependency('hashie', '~> 1.0')
31
+ s.add_development_dependency('json_pure', '~> 1.5')
32
+ s.add_development_dependency('multi_json', '~> 0.0')
33
+ s.add_development_dependency('multi_xml', '~> 0.2')
34
+ s.add_development_dependency('oauth2', '~> 0.2')
35
+ s.add_development_dependency('simple_oauth', '~> 0.1')
29
36
  end
@@ -0,0 +1,23 @@
1
+ require 'faraday'
2
+
3
+ module Faraday
4
+ class Request::OAuth < Faraday::Middleware
5
+ dependency 'simple_oauth'
6
+
7
+ def call(env)
8
+ params = env[:body].is_a?(Hash) ? env[:body] : {}
9
+
10
+ signature_params = params.reject{ |k,v| v.respond_to?(:content_type) }
11
+
12
+ header = SimpleOAuth::Header.new(env[:method], env[:url], signature_params, @options)
13
+
14
+ env[:request_headers]['Authorization'] = header.to_s
15
+
16
+ @app.call(env)
17
+ end
18
+
19
+ def initialize(app, options)
20
+ @app, @options = app, options
21
+ end
22
+ end
23
+ end
@@ -2,16 +2,16 @@ require 'faraday'
2
2
 
3
3
  module Faraday
4
4
  class Request::OAuth2 < Faraday::Middleware
5
- begin
6
- require 'oauth2'
7
- rescue LoadError, NameError => error
8
- self.load_error = error
9
- end
5
+ dependency 'oauth2'
10
6
 
11
7
  def call(env)
12
8
  params = env[:url].query_values || {}
13
- env[:url].query_values = params.merge('access_token' => @token)
14
- env[:request_headers].merge!('Authorization' => "Token token=\"#{@token}\"")
9
+
10
+ env[:url].query_values = { 'access_token' => @token }.merge(params)
11
+
12
+ token = env[:url].query_values['access_token']
13
+
14
+ env[:request_headers].merge!('Authorization' => "Token token=\"#{token}\"")
15
15
 
16
16
  @app.call env
17
17
  end
@@ -0,0 +1,24 @@
1
+ require 'faraday'
2
+
3
+ module Faraday
4
+ class Response::Mashify < Response::Middleware
5
+ dependency 'faraday_middleware/support/rash'
6
+
7
+ class << self
8
+ attr_accessor :mash_class
9
+ end
10
+
11
+ self.mash_class = ::Hashie::Rash
12
+
13
+ def parse(body)
14
+ case body
15
+ when Hash
16
+ self.class.mash_class.new(body)
17
+ when Array
18
+ body.map { |item| item.is_a?(Hash) ? self.class.mash_class.new(item) : item }
19
+ else
20
+ body
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+ require 'faraday'
2
+
3
+ module Faraday
4
+ class Response::ParseJson < Response::Middleware
5
+ dependency 'multi_json'
6
+
7
+ def parse(body)
8
+ case body
9
+ when ''
10
+ nil
11
+ when 'true'
12
+ true
13
+ when 'false'
14
+ false
15
+ else
16
+ ::MultiJson.decode(body)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,11 @@
1
+ require 'faraday'
2
+
3
+ module Faraday
4
+ class Response::ParseXml < Response::Middleware
5
+ dependency 'multi_xml'
6
+
7
+ def parse(body)
8
+ ::MultiXml.parse(body)
9
+ end
10
+ end
11
+ end
@@ -1,4 +1,12 @@
1
- faraday_middleware_files = Dir[File.join(File.dirname(__FILE__), "/faraday/**/*.rb")].sort
2
- faraday_middleware_files.each do |file|
3
- require file
1
+ require 'faraday'
2
+
3
+ class Faraday::Request
4
+ autoload :OAuth, 'faraday/request/oauth'
5
+ autoload :OAuth2, 'faraday/request/oauth2'
6
+ end
7
+
8
+ class Faraday::Response
9
+ autoload :Mashify, 'faraday/response/mashify'
10
+ autoload :ParseJson, 'faraday/response/parse_json'
11
+ autoload :ParseXml, 'faraday/response/parse_xml'
4
12
  end
@@ -0,0 +1,26 @@
1
+ require 'hashie/mash'
2
+
3
+ module Hashie
4
+ class Rash < Mash
5
+
6
+ protected
7
+
8
+ def convert_key(key) #:nodoc:
9
+ underscore_string(key.to_s)
10
+ end
11
+
12
+ # converts a camel_cased string to a underscore string
13
+ # subs spaces with underscores, strips whitespace
14
+ # Same way ActiveSupport does string.underscore
15
+ def underscore_string(str)
16
+ str.to_s.strip.
17
+ gsub(' ', '_').
18
+ gsub(/::/, '/').
19
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
20
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
21
+ tr("-", "_").
22
+ downcase
23
+ end
24
+
25
+ end
26
+ end
@@ -1,3 +1,3 @@
1
1
  module FaradayMiddleware
2
- VERSION = "0.3.2"
2
+ VERSION = "0.6.0"
3
3
  end
data/spec/helper.rb ADDED
@@ -0,0 +1,25 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'although not required, its recommended you use bundler when running the tests'
5
+ end
6
+
7
+ require 'simplecov'
8
+ SimpleCov.start
9
+
10
+ require 'rspec'
11
+
12
+ require 'faraday_middleware'
13
+
14
+
15
+ class DummyApp
16
+ attr_accessor :env
17
+
18
+ def call(env)
19
+ @env = env
20
+ end
21
+
22
+ def reset
23
+ @env = nil
24
+ end
25
+ end
@@ -0,0 +1,85 @@
1
+ require 'helper'
2
+
3
+ describe Faraday::Response::Mashify do
4
+ context 'during configuration' do
5
+ it 'should allow for a custom Mash class to be set' do
6
+ Faraday::Response::Mashify.should respond_to(:mash_class)
7
+ Faraday::Response::Mashify.should respond_to(:mash_class=)
8
+ end
9
+ end
10
+
11
+ context 'when used' do
12
+ before(:each) { Faraday::Response::Mashify.mash_class = ::Hashie::Rash }
13
+ let(:mashify) { Faraday::Response::Mashify.new }
14
+
15
+ it 'should create a Hashie::Rash from the body' do
16
+ env = { :body => { "name" => "Erik Michaels-Ober", "username" => "sferik" } }
17
+ me = mashify.on_complete(env)
18
+ me.class.should == Hashie::Rash
19
+ end
20
+
21
+ it 'should handle strings' do
22
+ env = { :body => "Most amazing string EVER" }
23
+ me = mashify.on_complete(env)
24
+ me.should == "Most amazing string EVER"
25
+ end
26
+
27
+ it 'should handle hashes and decamelcase the keys' do
28
+ env = { :body => { "name" => "Erik Michaels-Ober", "userName" => "sferik" } }
29
+ me = mashify.on_complete(env)
30
+ me.name.should == 'Erik Michaels-Ober'
31
+ me.user_name.should == 'sferik'
32
+ end
33
+
34
+ it 'should handle arrays' do
35
+ env = { :body => [123, 456] }
36
+ values = mashify.on_complete(env)
37
+ values.first.should == 123
38
+ values.last.should == 456
39
+ end
40
+
41
+ it 'should handle arrays of hashes' do
42
+ env = { :body => [{ "username" => "sferik" }, { "username" => "pengwynn" }] }
43
+ us = mashify.on_complete(env)
44
+ us.first.username.should == 'sferik'
45
+ us.last.username.should == 'pengwynn'
46
+ end
47
+
48
+ it 'should handle mixed arrays' do
49
+ env = { :body => [123, { "username" => "sferik" }, 456] }
50
+ values = mashify.on_complete(env)
51
+ values.first.should == 123
52
+ values.last.should == 456
53
+ values[1].username.should == 'sferik'
54
+ end
55
+
56
+ it 'should allow for use of custom Mash subclasses' do
57
+ class MyMash < ::Hashie::Mash; end
58
+ Faraday::Response::Mashify.mash_class = MyMash
59
+
60
+ env = { :body => { "name" => "Erik Michaels-Ober", "username" => "sferik" } }
61
+ me = mashify.on_complete(env)
62
+
63
+ me.class.should == MyMash
64
+ end
65
+ end
66
+
67
+ context 'integration test' do
68
+ let(:stubs) { Faraday::Adapter::Test::Stubs.new }
69
+ let(:connection) do
70
+ Faraday::Connection.new do |builder|
71
+ builder.adapter :test, stubs
72
+ builder.use Faraday::Response::Mashify
73
+ end
74
+ end
75
+
76
+ # although it is not good practice to pass a hash as the body, if we add ParseJson
77
+ # to the middleware stack we end up testing two middlewares instead of one
78
+ it 'should create a Hash from the body' do
79
+ stubs.get('/hash') {[200, {'content-type' => 'application/json; charset=utf-8'}, { "name" => "Erik Michaels-Ober", "username" => "sferik" }]}
80
+ me = connection.get('/hash').body
81
+ me.name.should == 'Erik Michaels-Ober'
82
+ me.username.should == 'sferik'
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,50 @@
1
+ require 'helper'
2
+
3
+ describe Faraday::Request::OAuth2 do
4
+
5
+ context 'when used with a access token in the initializer' do
6
+ let(:oauth2) { Faraday::Request::OAuth2.new(DummyApp.new, '1234') }
7
+
8
+ it 'should add the access token to the request' do
9
+ env = {
10
+ :request_headers => {},
11
+ :url => Addressable::URI.parse('http://www.github.com')
12
+ }
13
+
14
+ request = oauth2.call(env)
15
+ request[:request_headers]["Authorization"].should == "Token token=\"1234\""
16
+ request[:url].query_values["access_token"].should == "1234"
17
+ end
18
+ end
19
+
20
+ context 'when used with a access token in the query_values' do
21
+ let(:oauth2) { Faraday::Request::OAuth2.new(DummyApp.new) }
22
+
23
+ it 'should add the access token to the request' do
24
+ env = {
25
+ :request_headers => {},
26
+ :url => Addressable::URI.parse('http://www.github.com/?access_token=1234')
27
+ }
28
+
29
+ request = oauth2.call(env)
30
+ request[:request_headers]["Authorization"].should == "Token token=\"1234\""
31
+ request[:url].query_values["access_token"].should == "1234"
32
+ end
33
+ end
34
+
35
+ context 'integration test' do
36
+ let(:stubs) { Faraday::Adapter::Test::Stubs.new }
37
+ let(:connection) do
38
+ Faraday::Connection.new do |builder|
39
+ builder.use Faraday::Request::OAuth2, '1234'
40
+ builder.adapter :test, stubs
41
+ end
42
+ end
43
+
44
+ it 'should add the access token to the query string' do
45
+ stubs.get('/me?access_token=1234') {[200, {}, 'sferik']}
46
+ me = connection.get('/me')
47
+ me.body.should == 'sferik'
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,46 @@
1
+ require 'helper'
2
+
3
+ describe Faraday::Request::OAuth do
4
+ OAUTH_HEADER_REGEX = /^OAuth oauth_consumer_key=\"\d{4}\", oauth_nonce=\".+\", oauth_signature=\".+\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"\d{10}\", oauth_token=\"\d{4}\", oauth_version=\"1\.0\"/
5
+
6
+ let(:config) do
7
+ {
8
+ :consumer_key => '1234',
9
+ :consumer_secret => '1234',
10
+ :token => '1234',
11
+ :token_secret => '1234'
12
+ }
13
+ end
14
+
15
+ context 'when used' do
16
+ let(:oauth) { Faraday::Request::OAuth.new(DummyApp.new, config) }
17
+
18
+ let(:env) do
19
+ { :request_headers => {}, :url => Addressable::URI.parse('http://www.github.com') }
20
+ end
21
+
22
+ it 'should add the access token to the header' do
23
+ request = oauth.call(env)
24
+ request[:request_headers]["Authorization"].should match OAUTH_HEADER_REGEX
25
+ end
26
+ end
27
+
28
+
29
+ context 'integration test' do
30
+ let(:stubs) { Faraday::Adapter::Test::Stubs.new }
31
+ let(:connection) do
32
+ Faraday::Connection.new do |builder|
33
+ builder.use Faraday::Request::OAuth, config
34
+ builder.adapter :test, stubs
35
+ end
36
+ end
37
+
38
+ # Sadly we can not check the headers in this integration test, but this will
39
+ # confirm that the middleware doesn't break the stack
40
+ it 'should add the access token to the query string' do
41
+ stubs.get('/me') {[200, {}, 'sferik']}
42
+ me = connection.get('http://www.github.com/me')
43
+ me.body.should == 'sferik'
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,69 @@
1
+ require 'helper'
2
+
3
+ describe Faraday::Response::ParseJson do
4
+ context 'when used' do
5
+ let(:multi_json) { Faraday::Response::ParseJson.new }
6
+
7
+ it 'should handle a blank response' do
8
+ empty = multi_json.on_complete(:body => '')
9
+ empty.should be_nil
10
+ end
11
+
12
+ it 'should handle a true response' do
13
+ response = multi_json.on_complete(:body => 'true')
14
+ response.should be_true
15
+ end
16
+
17
+ it 'should handle a false response' do
18
+ response = multi_json.on_complete(:body => 'false')
19
+ response.should be_false
20
+ end
21
+
22
+ it 'should handle hashes' do
23
+ me = multi_json.on_complete(:body => '{"name":"Erik Michaels-Ober","screen_name":"sferik"}')
24
+ me.class.should == Hash
25
+ me['name'].should == 'Erik Michaels-Ober'
26
+ me['screen_name'].should == 'sferik'
27
+ end
28
+
29
+ it 'should handle arrays' do
30
+ values = multi_json.on_complete(:body => '[123, 456]')
31
+ values.class.should == Array
32
+ values.first.should == 123
33
+ values.last.should == 456
34
+ end
35
+
36
+ it 'should handle arrays of hashes' do
37
+ us = multi_json.on_complete(:body => '[{"screen_name":"sferik"},{"screen_name":"pengwynn"}]')
38
+ us.class.should == Array
39
+ us.first['screen_name'].should == 'sferik'
40
+ us.last['screen_name'].should == 'pengwynn'
41
+ end
42
+
43
+ it 'should handle mixed arrays' do
44
+ values = multi_json.on_complete(:body => '[123, {"screen_name":"sferik"}, 456]')
45
+ values.class.should == Array
46
+ values.first.should == 123
47
+ values.last.should == 456
48
+ values[1]['screen_name'].should == 'sferik'
49
+ end
50
+ end
51
+
52
+ context 'integration test' do
53
+ let(:stubs) { Faraday::Adapter::Test::Stubs.new }
54
+ let(:connection) do
55
+ Faraday::Connection.new do |builder|
56
+ builder.adapter :test, stubs
57
+ builder.use Faraday::Response::ParseJson
58
+ end
59
+ end
60
+
61
+ it 'should create a Hash from the body' do
62
+ stubs.get('/hash') {[200, {'content-type' => 'application/json; charset=utf-8'}, '{"name":"Erik Michaels-Ober","screen_name":"sferik"}']}
63
+ me = connection.get('/hash').body
64
+ me.class.should == Hash
65
+ me['name'].should == 'Erik Michaels-Ober'
66
+ me['screen_name'].should == 'sferik'
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,39 @@
1
+ require 'helper'
2
+
3
+ describe Faraday::Response::ParseXml do
4
+ context 'when used' do
5
+ let(:multi_xml) { Faraday::Response::ParseXml.new }
6
+
7
+ it 'should handle an empty response' do
8
+ empty = multi_xml.on_complete(:body => '')
9
+ empty.should == Hash.new
10
+ end
11
+
12
+ it 'should create a Hash from the body' do
13
+ me = multi_xml.on_complete(:body => '<user><name>Erik Michaels-Ober</name><screen_name>sferik</screen_name></user>')
14
+ me.class.should == Hash
15
+ end
16
+
17
+ it 'should handle hashes' do
18
+ me = multi_xml.on_complete(:body => '<user><name>Erik Michaels-Ober</name><screen_name>sferik</screen_name></user>')
19
+ me['user']['name'].should == 'Erik Michaels-Ober'
20
+ me['user']['screen_name'].should == 'sferik'
21
+ end
22
+ end
23
+
24
+ context 'integration test' do
25
+ let(:stubs) { Faraday::Adapter::Test::Stubs.new }
26
+ let(:connection) do
27
+ Faraday::Connection.new do |builder|
28
+ builder.adapter :test, stubs
29
+ builder.use Faraday::Response::ParseXml
30
+ end
31
+ end
32
+
33
+ it 'should create a Hash from the body' do
34
+ stubs.get('/hash') {[200, {'content-type' => 'application/xml; charset=utf-8'}, '<user><name>Erik Michaels-Ober</name><screen_name>sferik</screen_name></user>']}
35
+ me = connection.get('/hash').body
36
+ me.class.should == Hash
37
+ end
38
+ end
39
+ end
metadata CHANGED
@@ -2,129 +2,131 @@
2
2
  name: faraday_middleware
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.2
5
+ version: 0.6.0
6
6
  platform: ruby
7
7
  authors:
8
+ - Erik Michaels-Ober
8
9
  - Wynn Netherland
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
13
 
13
- date: 2011-02-03 00:00:00 -05:00
14
+ date: 2011-04-01 00:00:00 -07:00
14
15
  default_executable:
15
16
  dependencies:
16
17
  - !ruby/object:Gem::Dependency
17
- name: hashie
18
+ name: faraday
18
19
  prerelease: false
19
20
  requirement: &id001 !ruby/object:Gem::Requirement
20
21
  none: false
21
22
  requirements:
22
23
  - - ~>
23
24
  - !ruby/object:Gem::Version
24
- version: "1.0"
25
- type: :development
25
+ version: 0.6.0
26
+ type: :runtime
26
27
  version_requirements: *id001
27
28
  - !ruby/object:Gem::Dependency
28
- name: json
29
+ name: rake
29
30
  prerelease: false
30
31
  requirement: &id002 !ruby/object:Gem::Requirement
31
32
  none: false
32
33
  requirements:
33
34
  - - ~>
34
35
  - !ruby/object:Gem::Version
35
- version: "1.4"
36
+ version: "0.8"
36
37
  type: :development
37
38
  version_requirements: *id002
38
39
  - !ruby/object:Gem::Dependency
39
- name: multi_json
40
+ name: rspec
40
41
  prerelease: false
41
42
  requirement: &id003 !ruby/object:Gem::Requirement
42
43
  none: false
43
44
  requirements:
44
45
  - - ~>
45
46
  - !ruby/object:Gem::Version
46
- version: "0.0"
47
+ version: "2.5"
47
48
  type: :development
48
49
  version_requirements: *id003
49
50
  - !ruby/object:Gem::Dependency
50
- name: multi_xml
51
+ name: simplecov
51
52
  prerelease: false
52
53
  requirement: &id004 !ruby/object:Gem::Requirement
53
54
  none: false
54
55
  requirements:
55
56
  - - ~>
56
57
  - !ruby/object:Gem::Version
57
- version: "0.2"
58
+ version: "0.4"
58
59
  type: :development
59
60
  version_requirements: *id004
60
61
  - !ruby/object:Gem::Dependency
61
- name: oauth2
62
+ name: hashie
62
63
  prerelease: false
63
64
  requirement: &id005 !ruby/object:Gem::Requirement
64
65
  none: false
65
66
  requirements:
66
67
  - - ~>
67
68
  - !ruby/object:Gem::Version
68
- version: "0.1"
69
+ version: "1.0"
69
70
  type: :development
70
71
  version_requirements: *id005
71
72
  - !ruby/object:Gem::Dependency
72
- name: rake
73
+ name: json_pure
73
74
  prerelease: false
74
75
  requirement: &id006 !ruby/object:Gem::Requirement
75
76
  none: false
76
77
  requirements:
77
78
  - - ~>
78
79
  - !ruby/object:Gem::Version
79
- version: "0.8"
80
+ version: "1.5"
80
81
  type: :development
81
82
  version_requirements: *id006
82
83
  - !ruby/object:Gem::Dependency
83
- name: shoulda
84
+ name: multi_json
84
85
  prerelease: false
85
86
  requirement: &id007 !ruby/object:Gem::Requirement
86
87
  none: false
87
88
  requirements:
88
89
  - - ~>
89
90
  - !ruby/object:Gem::Version
90
- version: "2.11"
91
+ version: "0.0"
91
92
  type: :development
92
93
  version_requirements: *id007
93
94
  - !ruby/object:Gem::Dependency
94
- name: simplecov
95
+ name: multi_xml
95
96
  prerelease: false
96
97
  requirement: &id008 !ruby/object:Gem::Requirement
97
98
  none: false
98
99
  requirements:
99
100
  - - ~>
100
101
  - !ruby/object:Gem::Version
101
- version: "0.3"
102
+ version: "0.2"
102
103
  type: :development
103
104
  version_requirements: *id008
104
105
  - !ruby/object:Gem::Dependency
105
- name: test-unit
106
+ name: oauth2
106
107
  prerelease: false
107
108
  requirement: &id009 !ruby/object:Gem::Requirement
108
109
  none: false
109
110
  requirements:
110
111
  - - ~>
111
112
  - !ruby/object:Gem::Version
112
- version: "2.1"
113
+ version: "0.2"
113
114
  type: :development
114
115
  version_requirements: *id009
115
116
  - !ruby/object:Gem::Dependency
116
- name: faraday
117
+ name: simple_oauth
117
118
  prerelease: false
118
119
  requirement: &id010 !ruby/object:Gem::Requirement
119
120
  none: false
120
121
  requirements:
121
122
  - - ~>
122
123
  - !ruby/object:Gem::Version
123
- version: 0.5.4
124
- type: :runtime
124
+ version: "0.1"
125
+ type: :development
125
126
  version_requirements: *id010
126
127
  description: Various middleware for Faraday
127
128
  email:
129
+ - sferik@gmail.com
128
130
  - wynn.netherland@gmail.com
129
131
  executables: []
130
132
 
@@ -135,22 +137,27 @@ extra_rdoc_files:
135
137
  files:
136
138
  - .gemtest
137
139
  - .gitignore
140
+ - .rspec
138
141
  - CHANGELOG.md
139
142
  - Gemfile
143
+ - LICENSE.md
140
144
  - README.md
141
145
  - Rakefile
142
146
  - faraday_middleware.gemspec
143
- - lib/faraday/mashify.rb
144
- - lib/faraday/oauth2.rb
145
- - lib/faraday/parse_json.rb
146
- - lib/faraday/parse_xml.rb
147
+ - lib/faraday/request/oauth.rb
148
+ - lib/faraday/request/oauth2.rb
149
+ - lib/faraday/response/mashify.rb
150
+ - lib/faraday/response/parse_json.rb
151
+ - lib/faraday/response/parse_xml.rb
147
152
  - lib/faraday_middleware.rb
153
+ - lib/faraday_middleware/support/rash.rb
148
154
  - lib/faraday_middleware/version.rb
149
- - test/helper.rb
150
- - test/mashify_test.rb
151
- - test/oauth2_test.rb
152
- - test/parse_json_test.rb
153
- - test/parse_xml_test.rb
155
+ - spec/helper.rb
156
+ - spec/mashify_spec.rb
157
+ - spec/oauth2_spec.rb
158
+ - spec/oauth_spec.rb
159
+ - spec/parse_json_spec.rb
160
+ - spec/parse_xml_spec.rb
154
161
  has_rdoc: true
155
162
  homepage: http://wynnnetherland.com/projects/faraday-middleware/
156
163
  licenses: []
@@ -175,13 +182,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
182
  requirements: []
176
183
 
177
184
  rubyforge_project:
178
- rubygems_version: 1.5.0
185
+ rubygems_version: 1.6.2
179
186
  signing_key:
180
187
  specification_version: 3
181
188
  summary: Various middleware for Faraday
182
189
  test_files:
183
- - test/helper.rb
184
- - test/mashify_test.rb
185
- - test/oauth2_test.rb
186
- - test/parse_json_test.rb
187
- - test/parse_xml_test.rb
190
+ - spec/helper.rb
191
+ - spec/mashify_spec.rb
192
+ - spec/oauth2_spec.rb
193
+ - spec/oauth_spec.rb
194
+ - spec/parse_json_spec.rb
195
+ - spec/parse_xml_spec.rb
@@ -1,27 +0,0 @@
1
- require 'faraday'
2
-
3
- module Faraday
4
- class Response::Mashify < Response::Middleware
5
- begin
6
- require 'hashie'
7
- rescue LoadError, NameError => error
8
- self.load_error = error
9
- end
10
-
11
- def self.register_on_complete(env)
12
- env[:response].on_complete do |response|
13
- response_body = response[:body]
14
- if response_body.is_a?(Hash)
15
- response[:body] = ::Hashie::Mash.new(response_body)
16
- elsif response_body.is_a?(Array)
17
- response[:body] = response_body.map{|item| item.is_a?(Hash) ? ::Hashie::Mash.new(item) : item}
18
- end
19
- end
20
- end
21
-
22
- def initialize(app)
23
- super
24
- @parser = nil
25
- end
26
- end
27
- end
@@ -1,33 +0,0 @@
1
- require 'faraday'
2
-
3
- module Faraday
4
- class Response::ParseJson < Response::Middleware
5
- begin
6
- require 'multi_json'
7
- rescue LoadError, NameError => error
8
- self.load_error = error
9
- end
10
-
11
- def self.register_on_complete(env)
12
- env[:response].on_complete do |response|
13
- response[:body] = begin
14
- case response[:body]
15
- when ''
16
- nil
17
- when 'true'
18
- true
19
- when 'false'
20
- false
21
- else
22
- ::MultiJson.decode(response[:body])
23
- end
24
- end
25
- end
26
- end
27
-
28
- def initialize(app)
29
- super
30
- @parser = nil
31
- end
32
- end
33
- end
@@ -1,24 +0,0 @@
1
- require 'faraday'
2
-
3
- module Faraday
4
- class Response::ParseXml < Response::Middleware
5
- begin
6
- require 'multi_xml'
7
- rescue LoadError, NameError => error
8
- self.load_error = error
9
- end
10
-
11
- def self.register_on_complete(env)
12
- env[:response].on_complete do |response|
13
- response[:body] = begin
14
- ::MultiXml.parse(response[:body])
15
- end
16
- end
17
- end
18
-
19
- def initialize(app)
20
- super
21
- @parser = nil
22
- end
23
- end
24
- end
data/test/helper.rb DELETED
@@ -1,9 +0,0 @@
1
- require 'simplecov'
2
- SimpleCov.start do
3
- add_group 'Libraries', 'lib'
4
- end
5
-
6
- require 'test/unit'
7
- require 'shoulda'
8
-
9
- require File.expand_path('../../lib/faraday_middleware', __FILE__)
data/test/mashify_test.rb DELETED
@@ -1,43 +0,0 @@
1
- require 'helper'
2
-
3
- class MashifyTest < Test::Unit::TestCase
4
- context 'when used' do
5
- setup do
6
- @stubs = Faraday::Adapter::Test::Stubs.new
7
- @conn = Faraday::Connection.new do |builder|
8
- builder.adapter :test, @stubs
9
- builder.use Faraday::Response::ParseJson
10
- builder.use Faraday::Response::Mashify
11
- end
12
- end
13
-
14
- should 'create a Hashie::Mash from the body' do
15
- @stubs.get('/hash') {[200, {'content-type' => 'application/json; charset=utf-8'}, '{"name":"Wynn Netherland","username":"pengwynn"}']}
16
- me = @conn.get("/hash").body
17
- assert_equal 'Wynn Netherland', me.name
18
- assert_equal 'pengwynn', me.username
19
- end
20
-
21
- should 'handle arrays' do
22
- @stubs.get('/array') {[200, {'content-type' => 'application/json; charset=utf-8'}, '[{"username":"pengwynn"},{"username":"jnunemaker"}]']}
23
- us = @conn.get("/array").body
24
- assert_equal 'pengwynn', us.first.username
25
- assert_equal 'jnunemaker', us.last.username
26
- end
27
-
28
- should 'handle arrays of non-hashes' do
29
- @stubs.get('/array/simple') {[200, {'content-type' => 'application/json; charset=utf-8'}, "[123, 456]"]}
30
- values = @conn.get("/array/simple").body
31
- assert_equal 123, values.first
32
- assert_equal 456, values.last
33
- end
34
-
35
- should 'handle arrays of hashes and non-hashes' do
36
- @stubs.get('/array/simple') {[200, {'content-type' => 'application/json; charset=utf-8'}, '[123, {"username":"slainer68"}, 42]']}
37
- values = @conn.get("/array/simple").body
38
- assert_equal 123, values[0]
39
- assert_equal "slainer68", values[1].username
40
- assert_equal 42, values[2]
41
- end
42
- end
43
- end
data/test/oauth2_test.rb DELETED
@@ -1,18 +0,0 @@
1
- require 'helper'
2
-
3
- class OAuth2Test < Test::Unit::TestCase
4
- context 'when used' do
5
- setup do
6
- @stubs = Faraday::Adapter::Test::Stubs.new
7
- @stubs.get('/me?access_token=OU812') {[200, {}, 'pengwynn']}
8
- end
9
-
10
- should 'add the access token to the request' do
11
- do_you = Faraday::Connection.new do |builder|
12
- builder.use Faraday::Request::OAuth2, 'OU812'
13
- builder.adapter :test, @stubs
14
- end
15
- do_you.get("/me")
16
- end
17
- end
18
- end
@@ -1,74 +0,0 @@
1
- require 'helper'
2
-
3
- class ParseJsonTest < Test::Unit::TestCase
4
- context 'when used' do
5
- setup do
6
- @stubs = Faraday::Adapter::Test::Stubs.new
7
- @conn = Faraday::Connection.new do |builder|
8
- builder.adapter :test, @stubs
9
- builder.use Faraday::Response::ParseJson
10
- end
11
- end
12
-
13
- context "when there is a JSON body" do
14
- setup do
15
- @stubs.get('/me') {[200, {'content-type' => 'application/json; charset=utf-8'}, '{"name":"Wynn Netherland","username":"pengwynn"}']}
16
- end
17
-
18
- should 'parse the body as JSON' do
19
- me = @conn.get("/me").body
20
- assert me.is_a?(Hash)
21
- assert_equal 'Wynn Netherland', me['name']
22
- assert_equal 'pengwynn', me['username']
23
- end
24
- end
25
-
26
- context "when the JSON body is empty" do
27
- setup do
28
- @stubs.get('/me') {[200, {'content-type' => 'application/json; charset=utf-8'}, ""]}
29
- end
30
-
31
- should 'still have the status code' do
32
- response = @conn.get("/me")
33
- assert_equal 200, response.status
34
- end
35
-
36
- should 'set body to nil' do
37
- response = @conn.get("/me")
38
- assert_equal nil, response.body
39
- end
40
- end
41
-
42
- context "when the JSON body is 'true'" do
43
- setup do
44
- @stubs.get('/me') {[200, {'content-type' => 'application/json; charset=utf-8'}, "true"]}
45
- end
46
-
47
- should 'still have the status code' do
48
- response = @conn.get("/me")
49
- assert_equal 200, response.status
50
- end
51
-
52
- should 'set body to true' do
53
- response = @conn.get("/me")
54
- assert_equal true, response.body
55
- end
56
- end
57
-
58
- context "when the JSON body is 'false'" do
59
- setup do
60
- @stubs.get('/me') {[200, {'content-type' => 'application/json; charset=utf-8'}, "false"]}
61
- end
62
-
63
- should 'still have the status code' do
64
- response = @conn.get("/me")
65
- assert_equal 200, response.status
66
- end
67
-
68
- should 'set body to false' do
69
- response = @conn.get("/me")
70
- assert_equal false, response.body
71
- end
72
- end
73
- end
74
- end
@@ -1,56 +0,0 @@
1
- require 'helper'
2
-
3
- class ParseXmlTest < Test::Unit::TestCase
4
- context 'when used' do
5
- setup do
6
- @stubs = Faraday::Adapter::Test::Stubs.new
7
- @conn = Faraday::Connection.new do |builder|
8
- builder.adapter :test, @stubs
9
- builder.use Faraday::Response::ParseXml
10
- end
11
- end
12
-
13
- context "when there is a XML body" do
14
- setup do
15
- @stubs.get('/me') {[200, {'content-type' => 'application/xml; charset=utf-8'}, '<user><name>Erik Michaels-Ober</name><username>sferik</username></user>']}
16
- end
17
-
18
- should 'parse the body as XML' do
19
- me = @conn.get("/me").body['user']
20
- assert me.is_a?(Hash)
21
- assert_equal 'Erik Michaels-Ober', me['name']
22
- assert_equal 'sferik', me['username']
23
- end
24
- end
25
-
26
- context "when there is a ATOM body" do
27
- setup do
28
- @stubs.get('/me') {[200, {'content-type' => 'application/atom+xml; charset=utf-8'}, '<user><name>Erik Michaels-Ober</name><username>sferik</username></user>']}
29
- end
30
-
31
- should 'parse the body as XML' do
32
- me = @conn.get("/me").body['user']
33
- assert me.is_a?(Hash)
34
- assert_equal 'Erik Michaels-Ober', me['name']
35
- assert_equal 'sferik', me['username']
36
- end
37
- end
38
-
39
- context "when the XML body is empty" do
40
- setup do
41
- @stubs.get('/me') {[200, {'content-type' => 'application/xml; charset=utf-8'}, ""]}
42
- end
43
-
44
- should 'still have the status code' do
45
- response = @conn.get("/me")
46
- assert_equal 200, response.status
47
- end
48
-
49
- should 'set body to nil' do
50
- response = @conn.get("/me")
51
- assert_equal Hash.new, response.body
52
- end
53
- end
54
-
55
- end
56
- end