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.
- data/lib/cage.rb +3 -2
- data/lib/cage/console.rb +9 -3
- data/lib/cage/response.rb +7 -25
- data/lib/cage/version.rb +1 -1
- data/test/console_test.rb +33 -0
- data/test/response_test.rb +0 -57
- metadata +43 -19
data/lib/cage.rb
CHANGED
data/lib/cage/console.rb
CHANGED
@@ -15,8 +15,13 @@ module Cage
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def reinitialize_connection
|
18
|
-
@connection = Faraday
|
19
|
-
|
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,
|
44
|
+
@last_response = Cage::Response.new connection.send method.downcase,
|
45
|
+
*args, &block
|
40
46
|
end
|
41
47
|
|
42
48
|
def set convar, value
|
data/lib/cage/response.rb
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
module Cage
|
2
2
|
class Response
|
3
|
-
|
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
|
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
|
24
|
-
|
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: #{
|
28
|
+
Status: #{status}
|
47
29
|
|
48
30
|
Headers:
|
49
|
-
#{
|
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
|
data/lib/cage/version.rb
CHANGED
@@ -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
|
+
|
data/test/response_test.rb
CHANGED
@@ -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
|
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-
|
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: &
|
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: *
|
24
|
+
version_requirements: *22188940
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: minitest
|
27
|
-
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: *
|
35
|
+
version_requirements: *22188500
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: mustache
|
38
|
-
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: *
|
46
|
+
version_requirements: *22188080
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: faraday
|
49
|
-
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: *
|
57
|
+
version_requirements: *22187660
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
60
|
-
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: *
|
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: &
|
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: *
|
101
|
+
version_requirements: *22185980
|
80
102
|
- !ruby/object:Gem::Dependency
|
81
103
|
name: pry
|
82
|
-
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: *
|
112
|
+
version_requirements: *22185560
|
91
113
|
- !ruby/object:Gem::Dependency
|
92
114
|
name: awesome_print
|
93
|
-
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: *
|
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
|