cage 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,9 @@
1
1
  require "pry"
2
2
  require "awesome_print"
3
+ require "multi_xml"
4
+ require "json"
3
5
  require "faraday"
4
- require "multi_json"
5
- require "nokogiri"
6
+ require "faraday_middleware"
6
7
 
7
8
  require "cage/version"
8
9
  require "cage/response"
@@ -15,8 +15,13 @@ module Cage
15
15
  end
16
16
 
17
17
  def reinitialize_connection
18
- @connection = Faraday::Connection.new "#{scheme}://#{domain}/#{prefix}",
19
- :headers => @headers
18
+ @connection = Faraday.new "#{@scheme}://#{@domain}/#{@prefix}",
19
+ :headers => @headers do |conn|
20
+ conn.use FaradayMiddleware::ParseXml, :content_type => /\bxml$/
21
+ conn.use FaradayMiddleware::ParseJson, :content_type => /\bjson$/
22
+
23
+ conn.adapter Faraday.default_adapter
24
+ end
20
25
  end
21
26
 
22
27
  def method_missing sym, *args, &block
@@ -36,7 +41,8 @@ module Cage
36
41
  end
37
42
 
38
43
  def http method, *args, &block
39
- @last_response = Cage::Response.new connection.send method, *args, &block
44
+ @last_response = Cage::Response.new connection.send method.downcase,
45
+ *args, &block
40
46
  end
41
47
 
42
48
  def set convar, value
@@ -1,15 +1,13 @@
1
1
  module Cage
2
2
  class Response
3
- JSON_MIME_REGEX = %r{(?:application/json|application/x-javascript|
4
- text/javascript|text/x-javascript|text/x-json)}x
5
- XML_MIME_REGEX = %r{(?:application/xml|text/xml|application/atom)}x
3
+ attr_reader :faraday_response
6
4
 
7
5
  def initialize faraday_response
8
6
  @faraday_response = faraday_response
9
7
  end
10
8
 
11
9
  def body
12
- @body ||= parsed_body
10
+ @faraday_response.body
13
11
  end
14
12
 
15
13
  def status
@@ -20,38 +18,22 @@ module Cage
20
18
  @faraday_response.headers
21
19
  end
22
20
 
23
- def parsed_body
24
- case format_for @faraday_response.headers["content-type"]
25
- when :json
26
- MultiJson.decode @faraday_response.body
27
- when :xml
28
- Nokogiri::XML::Document.new @faraday_response.body
29
- else
30
- @faraday_response.body
31
- end
32
- end
33
-
34
- def format_for content_type_string
35
- case content_type_string
36
- when JSON_MIME_REGEX
37
- :json
38
- when XML_MIME_REGEX
39
- :xml
40
- end
21
+ def url
22
+ @faraday_response.env[:url].to_s
41
23
  end
42
24
 
43
25
  def inspect
44
26
  <<-PRETTY
45
27
 
46
- Status: #{@faraday_response.status}
28
+ Status: #{status}
47
29
 
48
30
  Headers:
49
- #{@faraday_response.headers.map { |k, v| " #{k}: #{v}" }.join "\n"}
31
+ #{headers.map { |k, v| " #{k}: #{v}" }.join "\n"}
50
32
 
51
33
  Body:
52
34
  #{body}
53
35
 
54
- #<Cage::Response>
36
+ #<Cage::Response:(#{url})>
55
37
  PRETTY
56
38
  end
57
39
  end
@@ -1,3 +1,3 @@
1
1
  module Cage
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,33 @@
1
+ require "faraday"
2
+ require "minitest/autorun"
3
+ require "minitest/pride"
4
+ require "cage/console"
5
+
6
+ describe Cage::Console do
7
+ subject { Cage::Console.new }
8
+
9
+ it "responds to http methods" do
10
+ [:get, :GET, :post, :POST, :put, :PUT, :delete, :DELETE].each do |method|
11
+ subject.must_respond_to method
12
+ end
13
+ end
14
+
15
+ it "allows you to set connection variables" do
16
+ subject.set :scheme, "http"
17
+ subject.instance_variable_get(:@scheme).must_equal "http"
18
+
19
+ subject.set :domain, "ultrasaurus.com"
20
+ subject.instance_variable_get(:@domain).must_equal "ultrasaurus.com"
21
+
22
+ subject.set :prefix, "blog"
23
+ subject.instance_variable_get(:@prefix).must_equal "blog"
24
+
25
+ subject.set :headers, "X-Awesome" => true
26
+ subject.instance_variable_get(:@headers).must_equal "X-Awesome" => true
27
+ end
28
+
29
+ it "will raise an error if you set a nonsensical variable" do
30
+ proc { subject.set :foobar, "baz" }.must_raise ArgumentError
31
+ end
32
+ end
33
+
@@ -1,7 +1,5 @@
1
1
  require "minitest/autorun"
2
2
  require "minitest/pride"
3
- require "multi_json"
4
- require "nokogiri"
5
3
  require "cage/response"
6
4
 
7
5
  describe Cage::Response do
@@ -13,60 +11,5 @@ describe Cage::Response do
13
11
  it "is created with a response as the constructor argument" do
14
12
  subject.must_be_kind_of Cage::Response
15
13
  end
16
-
17
- describe "detects format from content type header" do
18
- it "detects json" do
19
- %w[application/json application/x-javascript text/javascript
20
- text/x-javascript text/x-json].each do |json_content_type|
21
- subject.format_for(json_content_type).must_equal :json
22
- end
23
- end
24
-
25
- it "detects xml" do
26
- %w[application/xml text/xml application/atom+xml].each do |xml_content_type|
27
- subject.format_for(xml_content_type).must_equal :xml
28
- end
29
- end
30
- end
31
-
32
- describe "parses body text for known body types" do
33
- let(:json_response) do
34
- m = MiniTest::Mock.new
35
- m.expect :headers, { "content-type" => "application/json" }
36
- m.expect :body, File.read("test/rails-gem.json")
37
- end
38
-
39
- let(:xml_response) do
40
- m = MiniTest::Mock.new
41
- m.expect :headers, { "content-type" => "application/atom+xml; charset=UTF-8" }
42
- m.expect :body, File.read("test/day9.xml")
43
- m
44
- end
45
-
46
- let(:html_response) do
47
- m = MiniTest::Mock.new
48
- m.expect :headers, { "content-type" => "text/html" }
49
- m.expect :body, <<-HTML
50
- <html>
51
- <head><title>Win</title></head>
52
- <body>Win</body>
53
- </html>
54
- HTML
55
- m
56
- end
57
-
58
- it "parses JSON into a hash" do
59
- Cage::Response.new(json_response).body.must_be_instance_of Hash
60
- end
61
-
62
- it "parses XML into a Nokogiri::XML::Document" do
63
- Cage::Response.new(xml_response).body.must_be_instance_of(
64
- Nokogiri::XML::Document)
65
- end
66
-
67
- it "keeps the original body string when the filetype isn't detected" do
68
- Cage::Response.new(html_response).body.must_be_instance_of String
69
- end
70
- end
71
14
  end
72
15
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-27 00:00:00.000000000 Z
12
+ date: 2012-01-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &7681480 !ruby/object:Gem::Requirement
16
+ requirement: &22188940 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *7681480
24
+ version_requirements: *22188940
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: minitest
27
- requirement: &7681040 !ruby/object:Gem::Requirement
27
+ requirement: &22188500 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *7681040
35
+ version_requirements: *22188500
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mustache
38
- requirement: &7680620 !ruby/object:Gem::Requirement
38
+ requirement: &22188080 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *7680620
46
+ version_requirements: *22188080
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: faraday
49
- requirement: &7680200 !ruby/object:Gem::Requirement
49
+ requirement: &22187660 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *7680200
57
+ version_requirements: *22187660
58
58
  - !ruby/object:Gem::Dependency
59
- name: multi_json
60
- requirement: &7679780 !ruby/object:Gem::Requirement
59
+ name: faraday_middleware
60
+ requirement: &22187240 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,32 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *7679780
68
+ version_requirements: *22187240
69
+ - !ruby/object:Gem::Dependency
70
+ name: multi_xml
71
+ requirement: &22186820 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *22186820
80
+ - !ruby/object:Gem::Dependency
81
+ name: json
82
+ requirement: &22186400 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *22186400
69
91
  - !ruby/object:Gem::Dependency
70
92
  name: nokogiri
71
- requirement: &7679360 !ruby/object:Gem::Requirement
93
+ requirement: &22185980 !ruby/object:Gem::Requirement
72
94
  none: false
73
95
  requirements:
74
96
  - - ! '>='
@@ -76,10 +98,10 @@ dependencies:
76
98
  version: '0'
77
99
  type: :runtime
78
100
  prerelease: false
79
- version_requirements: *7679360
101
+ version_requirements: *22185980
80
102
  - !ruby/object:Gem::Dependency
81
103
  name: pry
82
- requirement: &7678940 !ruby/object:Gem::Requirement
104
+ requirement: &22185560 !ruby/object:Gem::Requirement
83
105
  none: false
84
106
  requirements:
85
107
  - - ! '>='
@@ -87,10 +109,10 @@ dependencies:
87
109
  version: '0'
88
110
  type: :runtime
89
111
  prerelease: false
90
- version_requirements: *7678940
112
+ version_requirements: *22185560
91
113
  - !ruby/object:Gem::Dependency
92
114
  name: awesome_print
93
- requirement: &7678520 !ruby/object:Gem::Requirement
115
+ requirement: &22185140 !ruby/object:Gem::Requirement
94
116
  none: false
95
117
  requirements:
96
118
  - - ! '>='
@@ -98,7 +120,7 @@ dependencies:
98
120
  version: '0'
99
121
  type: :runtime
100
122
  prerelease: false
101
- version_requirements: *7678520
123
+ version_requirements: *22185140
102
124
  description: ! 'Curl can be a bit unfriendly, especially to developers just starting
103
125
  out. Cage
104
126
 
@@ -121,6 +143,7 @@ files:
121
143
  - test/day9.xml
122
144
  - test/rails-gem.json
123
145
  - test/response_test.rb
146
+ - test/console_test.rb
124
147
  - bin/cage
125
148
  homepage: https://github.com/nuclearsandwich/cage
126
149
  licenses: []
@@ -150,3 +173,4 @@ test_files:
150
173
  - test/day9.xml
151
174
  - test/rails-gem.json
152
175
  - test/response_test.rb
176
+ - test/console_test.rb