cage 0.0.1
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 +4 -0
- data/Gemfile +4 -0
- data/README.md +75 -0
- data/Rakefile +1 -0
- data/bin/cage +5 -0
- data/cage.gemspec +27 -0
- data/lib/cage.rb +6 -0
- data/lib/cage/console.rb +46 -0
- data/lib/cage/version.rb +3 -0
- metadata +106 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
Cage
|
2
|
+
====
|
3
|
+
|
4
|
+
*A Faraday Cage for your HTTP Interactions.*
|
5
|
+
|
6
|
+
|
7
|
+
Getting It
|
8
|
+
----------
|
9
|
+
|
10
|
+
Once Cage hits 0.1.0, it will be released as a gem. Then you can install it
|
11
|
+
globally with `gem install cage`. Better still, add it to the `Gemfile` of your
|
12
|
+
project.
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
group :development do
|
16
|
+
gem "cage"
|
17
|
+
end
|
18
|
+
```
|
19
|
+
|
20
|
+
Using It
|
21
|
+
--------
|
22
|
+
|
23
|
+
Running `cage` will begin a console session. Cage is like a specialized IRB, but
|
24
|
+
for HTTP interactions. Imagine that you are working on an API. [Rack::Test][rt]
|
25
|
+
is an awesome tool but when you try to use it interactively you get an
|
26
|
+
interesting display of fireworks(read: stacktraces). Cage is based on a utility
|
27
|
+
script I wrote while working on a REST API. Some days, you just want to monkey
|
28
|
+
around with your work.
|
29
|
+
|
30
|
+
When you run Cage, you're dropped into a special Pry terminal with HTTP related
|
31
|
+
commands available.
|
32
|
+
|
33
|
+
```
|
34
|
+
[
|
35
|
+
[0] 200,
|
36
|
+
[1] {
|
37
|
+
"server" => "nginx",
|
38
|
+
"date" => "Thu, 26 Jan 2012 19:56:30 GMT",
|
39
|
+
"content-type" => "application/x-javascript; charset=UTF-8",
|
40
|
+
"transfer-encoding" => "chunked",
|
41
|
+
"connection" => "close",
|
42
|
+
"expires" => "Thu, 26 Jan 2012 19:56:31 GMT",
|
43
|
+
"cache-control" => "max-age=1"
|
44
|
+
},
|
45
|
+
[2] "{\"Definition\":\"Hackers do *not* generally use this to mean FUBAR..."
|
46
|
+
]
|
47
|
+
```
|
48
|
+
|
49
|
+
Configuring It
|
50
|
+
--------------
|
51
|
+
|
52
|
+
Cage will look first for a global `~/.cagerc.rb` file, then for a localr
|
53
|
+
`./cagerc.rb` in the working directory. Both are essentially instance_eval'd
|
54
|
+
into your new Cage console so anything that works in Cage will work in a config.
|
55
|
+
The global one is run first, so you can overload it with a local config. The
|
56
|
+
local config is for setting up project defaults, you can even automate your
|
57
|
+
initial authentication if you want.
|
58
|
+
|
59
|
+
Roadmap
|
60
|
+
-------
|
61
|
+
|
62
|
+
- 0.0.1 Have a working, if ugly and hacky console.
|
63
|
+
|
64
|
+
- 0.0.2 Write tests for whatever I can.
|
65
|
+
|
66
|
+
- 0.1.0 Clean up the prompt and solidify the command set. Support .cagerc files.
|
67
|
+
|
68
|
+
- 0.2.0 Use decorators to pretty print responses.
|
69
|
+
|
70
|
+
- 0.3.0 Auto detect and parse incoming body types like XML, JSON, wwwurlencode.
|
71
|
+
|
72
|
+
- 0.4.0 Make it easier to send XML, YAML, and JSON formatted bodies.
|
73
|
+
|
74
|
+
- 0.5.0 ???
|
75
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/cage
ADDED
data/cage.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "cage/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "cage"
|
7
|
+
s.version = Cage::VERSION
|
8
|
+
s.authors = ["Steven! Ragnarök"]
|
9
|
+
s.email = ["steven@nuclearsandwich.com"]
|
10
|
+
s.homepage = "https://github.com/nuclearsandwich/cage"
|
11
|
+
s.summary = "A Faraday Cage for your HTTP Interactions."
|
12
|
+
s.description = <<-DESC
|
13
|
+
Curl can be a bit unfriendly, especially to developers just starting out. Cage
|
14
|
+
wraps Faraday and Pry in order to provide an attractive and helpful interface to
|
15
|
+
the web APIs in your life.
|
16
|
+
DESC
|
17
|
+
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
|
23
|
+
s.add_development_dependency "minitest"
|
24
|
+
s.add_runtime_dependency "faraday"
|
25
|
+
s.add_runtime_dependency "pry"
|
26
|
+
s.add_runtime_dependency "awesome_print"
|
27
|
+
end
|
data/lib/cage.rb
ADDED
data/lib/cage/console.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
module Cage
|
2
|
+
class Console
|
3
|
+
CONNECTION_VARIABLES = [:scheme, :domain, :prefix, :headers]
|
4
|
+
|
5
|
+
attr_reader :connection, :last_response, *CONNECTION_VARIABLES
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@scheme = "http"
|
9
|
+
@domain = "duckduckgo.com"
|
10
|
+
@prefix = "?q="
|
11
|
+
reinitialize_connection
|
12
|
+
end
|
13
|
+
|
14
|
+
def reinitialize_connection
|
15
|
+
@connection = Faraday::Connection.new "#{scheme}://#{domain}/#{prefix}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def method_missing sym, *args, &block
|
19
|
+
if sym =~ /^(?:get|post|put|delete)$/i
|
20
|
+
http sym, *args, &block
|
21
|
+
else
|
22
|
+
super
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def print_response
|
27
|
+
ap [ last_response.status, last_response.headers, last_response.body ]
|
28
|
+
end
|
29
|
+
|
30
|
+
def http method, *args, &block
|
31
|
+
@last_response = connection.send method, *args, &block
|
32
|
+
print_response
|
33
|
+
end
|
34
|
+
|
35
|
+
def set convar, value
|
36
|
+
instance_variable_set :"@#{convar}", value
|
37
|
+
reinitialize_connection
|
38
|
+
value
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.start!
|
42
|
+
new.pry
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
data/lib/cage/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cage
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Steven! Ragnarök
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-01-26 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: minitest
|
16
|
+
requirement: &10129200 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *10129200
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: faraday
|
27
|
+
requirement: &10126820 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *10126820
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: pry
|
38
|
+
requirement: &10125360 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *10125360
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: awesome_print
|
49
|
+
requirement: &10124020 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *10124020
|
58
|
+
description: ! 'Curl can be a bit unfriendly, especially to developers just starting
|
59
|
+
out. Cage
|
60
|
+
|
61
|
+
wraps Faraday and Pry in order to provide an attractive and helpful interface to
|
62
|
+
|
63
|
+
the web APIs in your life.
|
64
|
+
|
65
|
+
'
|
66
|
+
email:
|
67
|
+
- steven@nuclearsandwich.com
|
68
|
+
executables:
|
69
|
+
- cage
|
70
|
+
extensions: []
|
71
|
+
extra_rdoc_files: []
|
72
|
+
files:
|
73
|
+
- .gitignore
|
74
|
+
- Gemfile
|
75
|
+
- README.md
|
76
|
+
- Rakefile
|
77
|
+
- bin/cage
|
78
|
+
- cage.gemspec
|
79
|
+
- lib/cage.rb
|
80
|
+
- lib/cage/console.rb
|
81
|
+
- lib/cage/version.rb
|
82
|
+
homepage: https://github.com/nuclearsandwich/cage
|
83
|
+
licenses: []
|
84
|
+
post_install_message:
|
85
|
+
rdoc_options: []
|
86
|
+
require_paths:
|
87
|
+
- lib
|
88
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ! '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
requirements: []
|
101
|
+
rubyforge_project:
|
102
|
+
rubygems_version: 1.8.10
|
103
|
+
signing_key:
|
104
|
+
specification_version: 3
|
105
|
+
summary: A Faraday Cage for your HTTP Interactions.
|
106
|
+
test_files: []
|