saddle 0.0.34 → 0.0.35

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 1.9.3
5
+ - jruby-19mode # JRuby in 1.9 mode
6
+
7
+ script: rspec
data/Gemfile CHANGED
@@ -6,10 +6,12 @@ gem 'faraday', '~> 0.8.7'
6
6
  gem 'faraday_middleware', '~> 0.9.0'
7
7
 
8
8
  group :test do
9
- gem 'rspec', '~> 2.13.0'
9
+ gem 'rake'
10
+ gem 'rspec', '~> 2.14.1'
10
11
  gem 'rspec-instafail', '~> 0.2'
11
12
 
12
13
  gem 'airbrake'
14
+ gem 'simple_oauth', '~> 0.2.0' # Optional dependency
13
15
  gem 'statsd-ruby', :require => ['statsd']
14
16
  end
15
17
 
data/Gemfile.lock CHANGED
@@ -24,15 +24,17 @@ GEM
24
24
  coderay (~> 1.0.5)
25
25
  method_source (~> 0.8)
26
26
  slop (~> 3.4)
27
- rspec (2.13.0)
28
- rspec-core (~> 2.13.0)
29
- rspec-expectations (~> 2.13.0)
30
- rspec-mocks (~> 2.13.0)
31
- rspec-core (2.13.1)
32
- rspec-expectations (2.13.0)
27
+ rake (10.1.0)
28
+ rspec (2.14.1)
29
+ rspec-core (~> 2.14.0)
30
+ rspec-expectations (~> 2.14.0)
31
+ rspec-mocks (~> 2.14.0)
32
+ rspec-core (2.14.2)
33
+ rspec-expectations (2.14.0)
33
34
  diff-lcs (>= 1.1.3, < 2.0)
34
35
  rspec-instafail (0.2.4)
35
- rspec-mocks (2.13.1)
36
+ rspec-mocks (2.14.1)
37
+ simple_oauth (0.2.0)
36
38
  slop (3.4.5)
37
39
  statsd-ruby (1.2.0)
38
40
 
@@ -45,6 +47,8 @@ DEPENDENCIES
45
47
  faraday (~> 0.8.7)
46
48
  faraday_middleware (~> 0.9.0)
47
49
  pry
48
- rspec (~> 2.13.0)
50
+ rake
51
+ rspec (~> 2.14.1)
49
52
  rspec-instafail (~> 0.2)
53
+ simple_oauth (~> 0.2.0)
50
54
  statsd-ruby
data/README.md CHANGED
@@ -60,3 +60,15 @@ Saddle enables you to create beautifully stable and functionaly API clients, in
60
60
 
61
61
  ## todo
62
62
  * xml posting/parsing
63
+
64
+
65
+ ## Code Status
66
+
67
+ * [![Build Status](https://travis-ci.org/mLewisLogic/saddle.png?branch=master)](https://travis-ci.org/mLewisLogic/saddle)
68
+ * [![Code Climate](https://codeclimate.com/github/mLewisLogic/saddle.png)](https://codeclimate.com/github/mLewisLogic/saddle)
69
+ * [![Dependency Status](https://gemnasium.com/mLewisLogic/saddle.png)](https://gemnasium.com/mLewisLogic/saddle)
70
+
71
+
72
+ ## License
73
+
74
+ Saddle is released under the [MIT License](http://www.opensource.org/licenses/MIT).
@@ -0,0 +1,54 @@
1
+ require 'faraday'
2
+ require 'simple_oauth'
3
+
4
+
5
+
6
+ module Saddle
7
+ module Middleware
8
+ module Authentication
9
+
10
+ ## Add OAuth 1.0 authentication tokens to requests
11
+ #
12
+ class OAuth1 < Faraday::Middleware
13
+
14
+ TYPE_URLENCODED = 'application/x-www-form-urlencoded'.freeze
15
+
16
+ def call(env)
17
+ if env[:request][:client_options][:oauth1] &&
18
+ env[:request][:client_options][:oauth1][:consumer_key] &&
19
+ env[:request][:client_options][:oauth1][:consumer_secret] &&
20
+ env[:request][:client_options][:oauth1][:token] &&
21
+ env[:request][:client_options][:oauth1][:token_secret]
22
+
23
+ env[:request_headers]['Authorization'] ||= SimpleOAuth::Header.new(
24
+ env[:method],
25
+ env[:url].to_s,
26
+ filtered_body_params(env),
27
+ env[:request][:client_options][:oauth1]
28
+ ).to_s
29
+ end
30
+
31
+ @app.call(env)
32
+ end
33
+
34
+ def body_params(env)
35
+ # Only process body params if it's url-encoded or missing it's Content-Type
36
+ # see RFC 5489, section 3.4.1.3.1 for details
37
+ if !(type = env[:request_headers]['Content-Type']) or type == TYPE_URLENCODED
38
+ if env[:body].respond_to?(:to_str)
39
+ Faraday::Utils::parse_nested_query(env[:body])
40
+ else
41
+ env[:body]
42
+ end
43
+ end || {}
44
+ end
45
+
46
+ def filtered_body_params(env)
47
+ body_params(env).reject {|k,v| v.respond_to?(:content_type) }
48
+ end
49
+
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,33 @@
1
+ require 'faraday'
2
+
3
+
4
+
5
+ module Saddle
6
+ module Middleware
7
+ module Authentication
8
+
9
+ ## Add OAuth 2.0 authentication tokens to requests
10
+ #
11
+ class OAuth2 < Faraday::Middleware
12
+
13
+ def initialize(app, key_name='access_token')
14
+ super(app)
15
+ @key_name = key_name
16
+ end
17
+
18
+ def call(env)
19
+ if env[:request][:client_options][@key_name.to_sym]
20
+ new_query = []
21
+ new_query << env[:url].query if env[:url].query
22
+ new_query << "#{@key_name}=#{CGI.escape(env[:request][:client_options][@key_name.to_sym].to_s)}"
23
+ env[:url].query = new_query.join('&')
24
+ end
25
+
26
+ @app.call(env)
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -1,3 +1,3 @@
1
1
  module Saddle
2
- VERSION = '0.0.34'
2
+ VERSION = '0.0.35'
3
3
  end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ require 'saddle/middleware/authentication/oauth2'
4
+
5
+
6
+ describe Saddle::Middleware::Authentication::OAuth2 do
7
+
8
+ context "Test authentication middleware" do
9
+
10
+ it 'should attach the oauth2 access token' do
11
+ TEST_ACCESS_TOKEN = 'testes'
12
+
13
+ stubs = Faraday::Adapter::Test::Stubs.new do |stub|
14
+ stub.get("/test?oauth2_access_token=#{TEST_ACCESS_TOKEN}") {
15
+ [
16
+ 200,
17
+ {},
18
+ 'Party on!',
19
+ ]
20
+ }
21
+ end
22
+
23
+ class OAuth2Client < Saddle::Client
24
+ add_middleware({
25
+ :klass => Saddle::Middleware::Authentication::OAuth2,
26
+ :args => ['oauth2_access_token'],
27
+ })
28
+ end
29
+
30
+ client = OAuth2Client.create(
31
+ :oauth2_access_token => TEST_ACCESS_TOKEN,
32
+ :stubs => stubs
33
+ )
34
+ client.requester.get('/test').should == 'Party on!'
35
+ end
36
+
37
+ end
38
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saddle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.34
4
+ version: 0.0.35
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-10 00:00:00.000000000 Z
12
+ date: 2013-07-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -67,6 +67,7 @@ extra_rdoc_files: []
67
67
  files:
68
68
  - .gitignore
69
69
  - .rspec
70
+ - .travis.yml
70
71
  - Gemfile
71
72
  - Gemfile.lock
72
73
  - LICENSE
@@ -76,6 +77,8 @@ files:
76
77
  - lib/saddle/endpoint.rb
77
78
  - lib/saddle/errors.rb
78
79
  - lib/saddle/method_tree_builder.rb
80
+ - lib/saddle/middleware/authentication/oauth1.rb
81
+ - lib/saddle/middleware/authentication/oauth2.rb
79
82
  - lib/saddle/middleware/logging/airbrake.rb
80
83
  - lib/saddle/middleware/logging/rails.rb
81
84
  - lib/saddle/middleware/logging/statsd.rb
@@ -91,6 +94,7 @@ files:
91
94
  - lib/saddle/requester.rb
92
95
  - lib/saddle/version.rb
93
96
  - saddle.gemspec
97
+ - spec/middleware/authentication/oauth2_authentication_spec.rb
94
98
  - spec/middleware/instrumentation_spec.rb
95
99
  - spec/middleware/logging/airbrake_spec.rb
96
100
  - spec/middleware/logging/rails_spec.rb
@@ -128,6 +132,7 @@ specification_version: 3
128
132
  summary: A full-featured, generic consumer layer for you to build API client implementations
129
133
  with.
130
134
  test_files:
135
+ - spec/middleware/authentication/oauth2_authentication_spec.rb
131
136
  - spec/middleware/instrumentation_spec.rb
132
137
  - spec/middleware/logging/airbrake_spec.rb
133
138
  - spec/middleware/logging/rails_spec.rb