saddle 0.0.33 → 0.0.34

Sign up to get free protection for your applications and to get access to all the features.
data/lib/saddle.rb CHANGED
@@ -17,7 +17,7 @@ module Saddle
17
17
  extend Options
18
18
 
19
19
  class << self
20
- attr_accessor :additional_middlewares, :parent_module
20
+ attr_accessor :additional_middlewares
21
21
 
22
22
  # Once your implementation is written, this is the magic you need to
23
23
  # create a client instance.
@@ -39,8 +39,6 @@ module Saddle
39
39
  end
40
40
  # Add additional client attributes
41
41
  obj.send(:include, Saddle::ClientAttributes)
42
- # Store the parent module in case we need it later
43
- @parent_module = Module.nesting.last
44
42
  end
45
43
 
46
44
  end
@@ -10,15 +10,19 @@ module Saddle
10
10
 
11
11
  class UserAgent < Faraday::Middleware
12
12
  def call(env)
13
+ user_agent = nil
13
14
  # Build a user agent that looks like 'SaddleExample 0.0.1'
14
- user_agent = env[:request][:saddle][:client].name
15
- if env[:request][:saddle][:client].parent_module
16
- if defined?(env[:request][:saddle][:client].parent_module::VERSION)
17
- user_agent += " #{env[:request][:saddle][:client].parent_module::VERSION}"
15
+ begin
16
+ user_agent = client_name = env[:request][:saddle][:client].name
17
+ parent_module = client_name.split('::')[0..-2].join('::').constantize
18
+ if parent_module
19
+ if defined?(parent_module::VERSION)
20
+ user_agent += " #{parent_module::VERSION}"
21
+ end
18
22
  end
23
+ rescue StandardError
19
24
  end
20
-
21
- env[:request_headers]['User-Agent'] = user_agent
25
+ env[:request_headers]['User-Agent'] = user_agent if user_agent
22
26
 
23
27
  @app.call env
24
28
  end
@@ -6,8 +6,9 @@ module Saddle
6
6
  module Middleware
7
7
  module Response
8
8
 
9
- # Public: Parse response bodies as JSON.
9
+ # Public: Parse response bodies as JSON.
10
10
  class ParseJson < Faraday::Middleware
11
+
11
12
  CONTENT_TYPE = 'Content-Type'.freeze
12
13
  MIME_TYPE = 'application/json'.freeze
13
14
 
@@ -16,31 +17,34 @@ module Saddle
16
17
  end
17
18
 
18
19
  def call(env)
19
- result = @app.call env
20
- if parse_response?(env)
21
- # Make sure we're working with a valid body that's not a String
22
- if env[:body] && env[:body].respond_to?(:to_str)
23
- env[:request_headers][CONTENT_TYPE] ||= MIME_TYPE
24
- env[:body] = ::JSON.parse env[:body]
25
- end
20
+ result = @app.call(env)
21
+
22
+ if parse_response?(result)
23
+ result.env[:body] = ::JSON.parse(result.env[:body])
26
24
  end
27
25
  result
28
26
  end
29
27
 
30
- def parse_response?(env)
31
- has_body?(env) and (response_type(env) == MIME_TYPE)
28
+
29
+ private
30
+
31
+ def parse_response?(result)
32
+ has_body?(result) && (response_type(result) == MIME_TYPE)
32
33
  end
33
34
 
34
- def has_body?(env)
35
- body = env[:body] and !(body.respond_to?(:to_str) and body.empty?)
35
+ def has_body?(result)
36
+ result.env[:body] &&
37
+ (!result.env[:body].respond_to?(:to_str) || # must already be in string format
38
+ !result.env[:body].empty?) # or must be non-empty
36
39
  end
37
40
 
38
- def response_type(env)
39
- return nil unless env[:response_headers]
40
- type = env[:response_headers][CONTENT_TYPE].to_s
41
+ def response_type(result)
42
+ return nil unless result.headers
43
+ type = result.headers[CONTENT_TYPE].to_s
41
44
  type = type.split(';', 2).first if type.index(';')
42
45
  type
43
46
  end
47
+
44
48
  end
45
49
 
46
50
  end
@@ -1,3 +1,5 @@
1
+ require 'active_support/core_ext/hash'
2
+
1
3
  require 'faraday'
2
4
  require 'faraday_middleware'
3
5
 
@@ -65,7 +67,7 @@ module Saddle
65
67
  # Make a GET request
66
68
  def get(url, params={}, options={})
67
69
  response = connection.get do |req|
68
- req.options.merge!(options)
70
+ req.options.deep_merge!(options)
69
71
  req.url(url, params)
70
72
  end
71
73
  response.body
@@ -74,7 +76,7 @@ module Saddle
74
76
  # Make a POST request
75
77
  def post(url, data={}, options={})
76
78
  response = connection.post do |req|
77
- req.options.merge!(options)
79
+ req.options.deep_merge!(options)
78
80
  req.url(url)
79
81
  req.body = data
80
82
  end
@@ -84,7 +86,7 @@ module Saddle
84
86
  # Make a PUT request
85
87
  def put(url, data={}, options={})
86
88
  response = connection.put do |req|
87
- req.options.merge!(options)
89
+ req.options.deep_merge!(options)
88
90
  req.url(url)
89
91
  req.body = data
90
92
  end
@@ -94,7 +96,7 @@ module Saddle
94
96
  # Make a DELETE request
95
97
  def delete(url, params={}, options={})
96
98
  response = connection.delete do |req|
97
- req.options.merge!(options)
99
+ req.options.deep_merge!(options)
98
100
  req.url(url, params)
99
101
  end
100
102
  response.body
@@ -1,3 +1,3 @@
1
1
  module Saddle
2
- VERSION = '0.0.33'
2
+ VERSION = '0.0.34'
3
3
  end
@@ -30,7 +30,7 @@ describe Saddle::Client do
30
30
  [
31
31
  200,
32
32
  {'Content-Type' => 'application/json'},
33
- {'success' => true},
33
+ {'success' => true}.to_json,
34
34
  ]
35
35
  }
36
36
  @default_client.requester.get('/test.json')['success'].should == true
@@ -0,0 +1,4 @@
1
+ require 'faraday' # for test stubs
2
+ require 'saddle'
3
+
4
+ require 'pry'
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.33
4
+ version: 0.0.34
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -100,6 +100,7 @@ files:
100
100
  - spec/multiple_spec.rb
101
101
  - spec/requester/get_spec.rb
102
102
  - spec/requester/post_spec.rb
103
+ - spec/spec_helper.rb
103
104
  homepage: https://github.com/mLewisLogic/saddle
104
105
  licenses:
105
106
  - MIT
@@ -136,3 +137,4 @@ test_files:
136
137
  - spec/multiple_spec.rb
137
138
  - spec/requester/get_spec.rb
138
139
  - spec/requester/post_spec.rb
140
+ - spec/spec_helper.rb