cassette-rack 0.4.1 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4c827fb45c350323207577d2f55c0b8907c0c1cf
4
- data.tar.gz: 1dea33463a3ac0d384a37bab30248ed9612006e7
3
+ metadata.gz: 93203bf07ad2d2bf689158528378c15fcc5c4386
4
+ data.tar.gz: 72ba360c0eab36c64fb845346fbdb24e950a6a55
5
5
  SHA512:
6
- metadata.gz: 90e36902bde61636a5ea50a0efc279589b987ad559bf7dc9f5bb02dc05b6be0bbc34a3cc6ec60a9ec210b85efce1ca178e8345f55204d098478bf581e2029b52
7
- data.tar.gz: 1345cf19838a737f75c03c46a933329cca0dac88d24c70e881329911e4781808d3ab0426717ba97227c9c6e3009b4fc38f1dbf1ddf12099ff50d92252a407054
6
+ metadata.gz: 5f339b4d8279553bc7067452b4218cdbbcaf288674dfd7eb5b842534f52e0f907a0e9e7aad3a6132b3d039ad352c96986015257cc30f26bd5e35db8dbaa8550d
7
+ data.tar.gz: c083878e301b10f8a76487c1987f8325b921058f1f555f5cf6c4d4d43df625f0217bf48cd2fcf97f7657dd5ce4648463ee228e30059ef1b7eec70e0b49d82c80
@@ -36,7 +36,7 @@ module CassetteRack
36
36
  end
37
37
 
38
38
  def http
39
- cassette.http_interactions.interactions.first
39
+ cassette.http_interactions.interactions.last
40
40
  end
41
41
  end
42
42
  end
@@ -3,6 +3,8 @@ require 'cassette-rack/response'
3
3
 
4
4
  module CassetteRack
5
5
  module Request
6
+ attr_reader :request_options
7
+
6
8
  def get(path, params=nil, headers=nil)
7
9
  request(:get, path, params, headers)
8
10
  end
@@ -19,19 +21,25 @@ module CassetteRack
19
21
  request(:put, path, nil, headers, body)
20
22
  end
21
23
 
22
- def delete(path)
23
- request(:delete, path)
24
+ def delete(path, headers=nil)
25
+ request(:delete, path, nil, headers)
24
26
  end
25
27
 
26
28
  def request(method, path, params=nil, headers=nil, body=nil, options=nil)
27
- conn = Faraday.new(url: CassetteRack.config.url, headers: headers)
29
+ if request_options
30
+ options = request_options
31
+ else
32
+ options = { url: CassetteRack.config.url, headers: headers }
33
+ end
34
+
35
+ conn = Faraday.new(options)
28
36
  res = conn.send(method) do |req|
29
37
  case method
30
38
  when :get, :delete
31
39
  req.url path
32
40
  when :post, :patch, :put
33
41
  req.path = path
34
- req.body = body
42
+ req.body = parse_content(body, req)
35
43
  end
36
44
  end
37
45
 
@@ -41,5 +49,13 @@ module CassetteRack
41
49
  def response
42
50
  @response
43
51
  end
52
+
53
+ def parse_content(body, req)
54
+ if req.headers['content-type'] == 'application/json' and body.class == Hash
55
+ body.to_json
56
+ else
57
+ body
58
+ end
59
+ end
44
60
  end
45
61
  end
@@ -1,11 +1,16 @@
1
+ #require 'json'
2
+
1
3
  module CassetteRack
2
4
  class Response
3
- attr_reader :status, :headers, :body, :method
5
+ attr_reader :status, :headers, :body, :content
6
+ #, :method
4
7
 
5
- def initialize(response)
6
- @status = response.status
7
- @headers = response.headers
8
- @body = response.body
8
+ def initialize(res)
9
+ @response = res
10
+ @status = res.status
11
+ @headers = res.headers
12
+ @body = res.body
13
+ parse_content
9
14
  end
10
15
 
11
16
  def status_code
@@ -15,5 +20,37 @@ module CassetteRack
15
20
  def response_headers
16
21
  headers
17
22
  end
23
+
24
+ def success?
25
+ @response.success?
26
+ end
27
+
28
+ def permit(*keys)
29
+ case content
30
+ when Hash
31
+ content.select { |key| keys.include? key }
32
+ when Array
33
+ content.map { |item| item.select { |key| keys.include? key } }
34
+ end
35
+ end
36
+
37
+ private
38
+ def parse_content
39
+ case body
40
+ when nil, '', ' '
41
+ @content = nil
42
+ when 'true'
43
+ @content = true
44
+ when 'false'
45
+ @content = false
46
+ else
47
+ if @response.env.request_headers['accept'] == 'application/json'
48
+ @content = JSON.parse(body)
49
+ else
50
+ @content = body
51
+ end
52
+ end
53
+ end
54
+ # end private
18
55
  end
19
56
  end
@@ -0,0 +1,77 @@
1
+ require 'faraday'
2
+
3
+ module CassetteRack
4
+ class Response
5
+ class RaiseError < Faraday::Response::Middleware
6
+ def on_complete(env)
7
+ if error = CassetteRack::Response::Error.status(env)
8
+ raise error
9
+ end
10
+ end
11
+ end
12
+
13
+ class Error < StandardError
14
+ attr_reader :response
15
+
16
+ def self.status(env)
17
+ if klass =
18
+ case env[:status]
19
+ when 400 then Response::Error::BadRequest
20
+ when 401 then Response::Error::Unauthorized
21
+ when 403 then Response::Error::Forbidden
22
+ when 404 then Response::Error::NotFound
23
+ when 405 then Response::Error::MethodNotAllowed
24
+ when 406 then Response::Error::NotAcceptable
25
+ when 409 then Response::Error::Conflict
26
+ when 415 then Response::Error::UnsupportedMediaType
27
+ when 422 then Response::Error::UnprocessableEntity
28
+ when 400..499 then Response::Error::ClientError
29
+ when 500 then Response::Error::InternalServerError
30
+ when 501 then Response::Error::NotImplemented
31
+ when 502 then Response::Error::BadGateway
32
+ when 503 then Response::Error::ServiceUnavailable
33
+ when 500..599 then Response::Error::ServerError
34
+ end
35
+ klass.new(env)
36
+ end
37
+ end
38
+
39
+ def initialize(response)
40
+ @response = response
41
+
42
+ str = response[:body]
43
+ if response.request_headers['accept'] == 'application/json'
44
+ begin
45
+ body = JSON.parse(response[:body])
46
+ str = body['message'] if body.key?('message')
47
+ str = body['error_message'] if body.key?('error_message')
48
+ rescue
49
+ end
50
+ end
51
+
52
+ super(str)
53
+ end
54
+
55
+ def response_status
56
+ response[:status]
57
+ end
58
+
59
+ def response_body
60
+ response[:body]
61
+ end
62
+ end
63
+
64
+ class Response::Error::BadRequest < CassetteRack::Response::Error; end
65
+ class Response::Error::Unauthorized < CassetteRack::Response::Error; end
66
+ class Response::Error::Forbidden < CassetteRack::Response::Error; end
67
+ class Response::Error::NotFound < CassetteRack::Response::Error; end
68
+ class Response::Error::MethodNotAllowed < CassetteRack::Response::Error; end
69
+ class Response::Error::NotAcceptable < CassetteRack::Response::Error; end
70
+ class Response::Error::Conflict < CassetteRack::Response::Error; end
71
+ class Response::Error::InternalServerError < CassetteRack::Response::Error; end
72
+ class Response::Error::NotImplemented < CassetteRack::Response::Error; end
73
+ class Response::Error::BadGateway < CassetteRack::Response::Error; end
74
+ class Response::Error::UnprocessableEntity < CassetteRack::Response::Error; end
75
+ class Response::Error::ServiceUnavailable < CassetteRack::Response::Error; end
76
+ end
77
+ end
@@ -1,3 +1,3 @@
1
1
  module CassetteRack
2
- VERSION = '0.4.1'.freeze
2
+ VERSION = '0.5.0'.freeze
3
3
  end
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cassette-rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ogom
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-29 00:00:00.000000000 Z
11
+ date: 2015-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -131,6 +131,7 @@ files:
131
131
  - lib/cassette-rack/engine.rb
132
132
  - lib/cassette-rack/request.rb
133
133
  - lib/cassette-rack/response.rb
134
+ - lib/cassette-rack/response/raise_error.rb
134
135
  - lib/cassette-rack/tree.rb
135
136
  - lib/cassette-rack/tree/branch.rb
136
137
  - lib/cassette-rack/tree/leaf.rb
@@ -138,7 +139,7 @@ files:
138
139
  - lib/templates/layouts/application.html.liquid
139
140
  - lib/templates/layouts/content.md.liquid
140
141
  - lib/templates/layouts/preview.liquid
141
- - spec/grant-front_spec.rb
142
+ - spec/cassette-rack_spec.rb
142
143
  - spec/lib/version_spec.rb
143
144
  - spec/spec_helper.rb
144
145
  homepage: http://ogom.github.io/cassette-rack
@@ -166,7 +167,7 @@ signing_key:
166
167
  specification_version: 4
167
168
  summary: Operate of the VCR cassette
168
169
  test_files:
169
- - spec/grant-front_spec.rb
170
+ - spec/cassette-rack_spec.rb
170
171
  - spec/lib/version_spec.rb
171
172
  - spec/spec_helper.rb
172
173
  has_rdoc: