cage 0.0.2 → 0.1.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.
@@ -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