faraday_middleware 0.8.6 → 0.8.7

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/.gitignore CHANGED
@@ -1,6 +1,3 @@
1
- # Mac OS X
2
- .DS_Store
3
-
4
1
  # TextMate
5
2
  *.tmproj
6
3
  tmtags
@@ -19,6 +16,7 @@ rdoc
19
16
  doc
20
17
  log
21
18
  .yardoc
19
+ tmp
22
20
 
23
21
  # Bundler
24
22
  *.gem
@@ -4,6 +4,8 @@ module FaradayMiddleware
4
4
  # Public: Converts parsed response bodies to a Hashie::Mash if they were of
5
5
  # Hash or Array type.
6
6
  class Mashify < Faraday::Response::Middleware
7
+ attr_accessor :mash_class
8
+
7
9
  class << self
8
10
  attr_accessor :mash_class
9
11
  end
@@ -13,12 +15,17 @@ module FaradayMiddleware
13
15
  self.mash_class = ::Hashie::Mash
14
16
  end
15
17
 
18
+ def initialize(app = nil, options = {})
19
+ super(app)
20
+ self.mash_class = options[:mash_class] || self.class.mash_class
21
+ end
22
+
16
23
  def parse(body)
17
24
  case body
18
25
  when Hash
19
- self.class.mash_class.new(body)
26
+ mash_class.new(body)
20
27
  when Array
21
- body.map { |item| item.is_a?(Hash) ? self.class.mash_class.new(item) : item }
28
+ body.map { |item| item.is_a?(Hash) ? mash_class.new(item) : item }
22
29
  else
23
30
  body
24
31
  end
@@ -3,10 +3,12 @@ require 'faraday_middleware/response_middleware'
3
3
  module FaradayMiddleware
4
4
  # Public: Parse response bodies as JSON.
5
5
  class ParseJson < ResponseMiddleware
6
- dependency 'json'
6
+ dependency {
7
+ require 'json' unless defined?(JSON)
8
+ }
7
9
 
8
10
  define_parser { |body|
9
- JSON.parse body unless body.empty?
11
+ JSON.parse body unless body.strip.empty?
10
12
  }
11
13
 
12
14
  # Public: Override the content-type of the response with "application/json"
@@ -1,3 +1,3 @@
1
1
  module FaradayMiddleware
2
- VERSION = "0.8.6"
2
+ VERSION = "0.8.7"
3
3
  end
data/spec/caching_test.rb CHANGED
@@ -2,6 +2,7 @@ require 'test/unit'
2
2
  require 'forwardable'
3
3
  require 'fileutils'
4
4
  require 'rack/cache'
5
+ require 'faraday'
5
6
  require 'faraday_middleware/response/caching'
6
7
  require 'faraday_middleware/rack_compatible'
7
8
 
@@ -87,10 +88,22 @@ end
87
88
  class HttpCachingTest < Test::Unit::TestCase
88
89
  include FileUtils
89
90
 
90
- CACHE_DIR = File.expand_path('../cache', __FILE__)
91
+ CACHE_DIR = File.expand_path('../../tmp/cache', __FILE__)
92
+
93
+ # middleware to check whether "rack.errors" is free of error reports
94
+ class RackErrorsComplainer < Struct.new(:app)
95
+ def call(env)
96
+ response = app.call(env)
97
+ error_stream = env['rack.errors'].string
98
+ raise %(unexpected error in 'rack.errors') if error_stream.include? 'error'
99
+ response
100
+ end
101
+ end
91
102
 
92
103
  def setup
93
104
  rm_r CACHE_DIR if File.exists? CACHE_DIR
105
+ # force reinitializing cache dirs
106
+ Rack::Cache::Storage.instance.clear
94
107
 
95
108
  request_count = 0
96
109
  response = lambda { |env|
@@ -101,6 +114,8 @@ class HttpCachingTest < Test::Unit::TestCase
101
114
  }
102
115
 
103
116
  @conn = Faraday.new do |b|
117
+ b.use RackErrorsComplainer
118
+
104
119
  b.use FaradayMiddleware::RackCompatible, Rack::Cache::Context,
105
120
  :metastore => "file:#{CACHE_DIR}/rack/meta",
106
121
  :entitystore => "file:#{CACHE_DIR}/rack/body",
data/spec/mashify_spec.rb CHANGED
@@ -47,7 +47,7 @@ describe FaradayMiddleware::Mashify do
47
47
  values[1].username.should == 'sferik'
48
48
  end
49
49
 
50
- it 'should allow for use of custom Mash subclasses' do
50
+ it 'should allow for use of custom Mash subclasses at the class level' do
51
51
  class MyMash < ::Hashie::Mash; end
52
52
  described_class.mash_class = MyMash
53
53
 
@@ -56,6 +56,16 @@ describe FaradayMiddleware::Mashify do
56
56
 
57
57
  me.class.should == MyMash
58
58
  end
59
+
60
+ it 'should allow for use of custom Mash subclasses at the instance level' do
61
+ class MyMash < ::Hashie::Mash; end
62
+ mashify = described_class.new(nil, :mash_class => MyMash)
63
+
64
+ env = { :body => { "name" => "Erik Michaels-Ober", "username" => "sferik" } }
65
+ me = mashify.on_complete(env)
66
+
67
+ me.class.should == MyMash
68
+ end
59
69
  end
60
70
 
61
71
  context 'integration test' do
@@ -61,7 +61,7 @@ describe FaradayMiddleware::ParseJson, :type => :response do
61
61
  end
62
62
 
63
63
  it "chokes on invalid json" do
64
- ['{!', ' ', '"a"', 'true', 'null', '1'].each do |data|
64
+ ['{!', '"a"', 'true', 'null', '1'].each do |data|
65
65
  expect { process(data) }.to raise_error(Faraday::Error::ParsingError)
66
66
  end
67
67
  end
@@ -97,4 +97,16 @@ describe FaradayMiddleware::ParseJson, :type => :response do
97
97
  response['content-type'].should eql('application/json')
98
98
  end
99
99
  end
100
+
101
+ context "HEAD responses" do
102
+ it "should nullify the body if it's only one space" do
103
+ response = process(' ')
104
+ response.body.should be_nil
105
+ end
106
+
107
+ it "should nullify the body if it's two spaces" do
108
+ response = process(' ')
109
+ response.body.should be_nil
110
+ end
111
+ end
100
112
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faraday_middleware
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.6
4
+ version: 0.8.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-20 00:00:00.000000000 Z
13
+ date: 2012-04-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: faraday
17
- requirement: &70323858414060 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -25,10 +25,18 @@ dependencies:
25
25
  version: '0.9'
26
26
  type: :runtime
27
27
  prerelease: false
28
- version_requirements: *70323858414060
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.7.4
34
+ - - <
35
+ - !ruby/object:Gem::Version
36
+ version: '0.9'
29
37
  - !ruby/object:Gem::Dependency
30
38
  name: multi_xml
31
- requirement: &70323858413240 !ruby/object:Gem::Requirement
39
+ requirement: !ruby/object:Gem::Requirement
32
40
  none: false
33
41
  requirements:
34
42
  - - ~>
@@ -36,10 +44,15 @@ dependencies:
36
44
  version: '0.2'
37
45
  type: :development
38
46
  prerelease: false
39
- version_requirements: *70323858413240
47
+ version_requirements: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ~>
51
+ - !ruby/object:Gem::Version
52
+ version: '0.2'
40
53
  - !ruby/object:Gem::Dependency
41
54
  name: rake
42
- requirement: &70323858412680 !ruby/object:Gem::Requirement
55
+ requirement: !ruby/object:Gem::Requirement
43
56
  none: false
44
57
  requirements:
45
58
  - - ~>
@@ -47,10 +60,15 @@ dependencies:
47
60
  version: '0.9'
48
61
  type: :development
49
62
  prerelease: false
50
- version_requirements: *70323858412680
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '0.9'
51
69
  - !ruby/object:Gem::Dependency
52
70
  name: hashie
53
- requirement: &70323858412120 !ruby/object:Gem::Requirement
71
+ requirement: !ruby/object:Gem::Requirement
54
72
  none: false
55
73
  requirements:
56
74
  - - ~>
@@ -58,10 +76,15 @@ dependencies:
58
76
  version: '1.2'
59
77
  type: :development
60
78
  prerelease: false
61
- version_requirements: *70323858412120
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ~>
83
+ - !ruby/object:Gem::Version
84
+ version: '1.2'
62
85
  - !ruby/object:Gem::Dependency
63
86
  name: rash
64
- requirement: &70323858411460 !ruby/object:Gem::Requirement
87
+ requirement: !ruby/object:Gem::Requirement
65
88
  none: false
66
89
  requirements:
67
90
  - - ~>
@@ -69,10 +92,15 @@ dependencies:
69
92
  version: '0.3'
70
93
  type: :development
71
94
  prerelease: false
72
- version_requirements: *70323858411460
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ~>
99
+ - !ruby/object:Gem::Version
100
+ version: '0.3'
73
101
  - !ruby/object:Gem::Dependency
74
102
  name: rspec
75
- requirement: &70323858410680 !ruby/object:Gem::Requirement
103
+ requirement: !ruby/object:Gem::Requirement
76
104
  none: false
77
105
  requirements:
78
106
  - - ~>
@@ -80,10 +108,15 @@ dependencies:
80
108
  version: '2.6'
81
109
  type: :development
82
110
  prerelease: false
83
- version_requirements: *70323858410680
111
+ version_requirements: !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - ~>
115
+ - !ruby/object:Gem::Version
116
+ version: '2.6'
84
117
  - !ruby/object:Gem::Dependency
85
118
  name: simple_oauth
86
- requirement: &70323858410200 !ruby/object:Gem::Requirement
119
+ requirement: !ruby/object:Gem::Requirement
87
120
  none: false
88
121
  requirements:
89
122
  - - ~>
@@ -91,10 +124,15 @@ dependencies:
91
124
  version: '0.1'
92
125
  type: :development
93
126
  prerelease: false
94
- version_requirements: *70323858410200
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ~>
131
+ - !ruby/object:Gem::Version
132
+ version: '0.1'
95
133
  - !ruby/object:Gem::Dependency
96
134
  name: rack-cache
97
- requirement: &70323858409700 !ruby/object:Gem::Requirement
135
+ requirement: !ruby/object:Gem::Requirement
98
136
  none: false
99
137
  requirements:
100
138
  - - ~>
@@ -102,7 +140,12 @@ dependencies:
102
140
  version: '1.1'
103
141
  type: :development
104
142
  prerelease: false
105
- version_requirements: *70323858409700
143
+ version_requirements: !ruby/object:Gem::Requirement
144
+ none: false
145
+ requirements:
146
+ - - ~>
147
+ - !ruby/object:Gem::Version
148
+ version: '1.1'
106
149
  description: Various middleware for Faraday
107
150
  email:
108
151
  - sferik@gmail.com
@@ -171,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
214
  version: 1.3.6
172
215
  requirements: []
173
216
  rubyforge_project:
174
- rubygems_version: 1.8.10
217
+ rubygems_version: 1.8.22
175
218
  signing_key:
176
219
  specification_version: 3
177
220
  summary: Various middleware for Faraday
@@ -188,3 +231,4 @@ test_files:
188
231
  - spec/parse_xml_spec.rb
189
232
  - spec/parse_yaml_spec.rb
190
233
  - spec/rashify_spec.rb
234
+ has_rdoc: