zurl 0.0.2
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 +7 -0
- data/Gemfile +2 -0
- data/README.md +44 -0
- data/bin/zurl +140 -0
- data/zurl.gemspec +11 -0
- metadata +76 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4385ae367f873be64bff1e48b7d8656f769a8d4c
|
4
|
+
data.tar.gz: 8231ffd39a0e672317e41eb3c837f5cebff1fc8b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c85aa2cf5619a9c91b60abe7657064f50d2785c11e188a2944f53aa345f9d1d2eeba70e7db6aa44fa8b685fccc5459c0a3496444996a56191a01eede9b52bb41
|
7
|
+
data.tar.gz: 01073cd9f9adca141bb24748283f3161112f005ba10139f9925e989a500a48852d1141e6e7f67b706b78dacc9d3054fdf0186930ca4b38bf951ad7cf50e3d6d2
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# zurl!
|
2
|
+
|
3
|
+
brazen, ripoff/rewrite of [curly](https://github.com/aaronpk/curly).
|
4
|
+
|
5
|
+
adds json content-type header, posts json bodies, parses/awesomeprints json
|
6
|
+
responses, colors headers.
|
7
|
+
|
8
|
+
## changes
|
9
|
+
|
10
|
+
#### -d
|
11
|
+
|
12
|
+
* accepts formencoded, translates to json
|
13
|
+
* accepts rubyish hash or array syntax, translates to json
|
14
|
+
|
15
|
+
##### examples
|
16
|
+
|
17
|
+
`$ zurl -d foo=bar -d 'aaa=bbb&ccc=54321' -d 'baz: 123, bat: true' http://example.com`
|
18
|
+
|
19
|
+
this would post the following body:
|
20
|
+
|
21
|
+
```javascript
|
22
|
+
{
|
23
|
+
"foo": "bar",
|
24
|
+
"aaa": "bbb",
|
25
|
+
"ccc": "54321",
|
26
|
+
"baz": 123,
|
27
|
+
"bat": true
|
28
|
+
}
|
29
|
+
```
|
30
|
+
|
31
|
+
n.b. - if you want to post integers or booleans, use rubyish hash syntax as formencoded
|
32
|
+
assumes strings.
|
33
|
+
|
34
|
+
#### -W
|
35
|
+
|
36
|
+
show formatted version of json post body
|
37
|
+
|
38
|
+
#### -Z
|
39
|
+
|
40
|
+
show starred lines from curl -v output
|
41
|
+
|
42
|
+
#### -oauth [token]
|
43
|
+
|
44
|
+
add `Authorization: Bearer [token]` header
|
data/bin/zurl
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
CURL = `which curl`.chomp
|
4
|
+
exit 1 if CURL.empty?
|
5
|
+
|
6
|
+
require 'awesome_print'
|
7
|
+
require 'colored'
|
8
|
+
require 'json'
|
9
|
+
require 'open3'
|
10
|
+
|
11
|
+
CMD = [
|
12
|
+
CURL,
|
13
|
+
'-v',
|
14
|
+
'-s'
|
15
|
+
]
|
16
|
+
|
17
|
+
RUBYISH = /\S+(:|\s*=>)\s*\S+/
|
18
|
+
FORM_ENCODED_KEY_VALUE = /^([^=]+?)=([^=]+?)$/
|
19
|
+
|
20
|
+
class PostData
|
21
|
+
|
22
|
+
attr_reader :data
|
23
|
+
|
24
|
+
def data?
|
25
|
+
!!@data
|
26
|
+
end
|
27
|
+
|
28
|
+
def parse_data s
|
29
|
+
case
|
30
|
+
|
31
|
+
when m = RUBYISH.match(s)
|
32
|
+
tried_hash = false
|
33
|
+
begin
|
34
|
+
d = eval s
|
35
|
+
rescue SyntaxError => se
|
36
|
+
if tried_hash
|
37
|
+
d = nil
|
38
|
+
raise se
|
39
|
+
else
|
40
|
+
s = '{' + s + '}'
|
41
|
+
tried_hash = true
|
42
|
+
retry
|
43
|
+
end
|
44
|
+
end
|
45
|
+
if @data.nil?
|
46
|
+
@data = d
|
47
|
+
else
|
48
|
+
@data.merge! d
|
49
|
+
end
|
50
|
+
|
51
|
+
when m = FORM_ENCODED_KEY_VALUE.match(s)
|
52
|
+
@data ||= {}
|
53
|
+
@data[m[1]] = m[2]
|
54
|
+
|
55
|
+
when s.index(',')
|
56
|
+
case @data
|
57
|
+
when Array
|
58
|
+
@data += s.split(',')
|
59
|
+
when Hash
|
60
|
+
raise ArgumentError.new 'adding array to existing object'
|
61
|
+
else
|
62
|
+
@data = s.split(',')
|
63
|
+
end
|
64
|
+
|
65
|
+
when s.index('&')
|
66
|
+
s.split('&').each{|kv| parse_data(kv)}
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def to_json
|
72
|
+
@data.to_json
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
args = []
|
78
|
+
pd = PostData.new
|
79
|
+
post_data_flag = false
|
80
|
+
oauth_token_flag = false
|
81
|
+
show_post_data = false
|
82
|
+
show_starred_lines = false
|
83
|
+
|
84
|
+
ARGV.each do |a|
|
85
|
+
if post_data_flag
|
86
|
+
if a[0] == '@'
|
87
|
+
args += ['-d', a]
|
88
|
+
else
|
89
|
+
pd.parse_data a
|
90
|
+
post_data_flag = false
|
91
|
+
end
|
92
|
+
elsif oauth_token_flag
|
93
|
+
args.push '-H', "Authorization: Bearer #{a}"
|
94
|
+
oauth_token_flag = false
|
95
|
+
else
|
96
|
+
case a
|
97
|
+
when '-d'
|
98
|
+
post_data_flag = true
|
99
|
+
when '-oauth'
|
100
|
+
oauth_token_flag = true
|
101
|
+
when '-W'
|
102
|
+
show_post_data = true
|
103
|
+
when '-Z'
|
104
|
+
show_starred_lines = true
|
105
|
+
else
|
106
|
+
args << a
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
if pd.data?
|
112
|
+
args.push '-H', 'Content-Type: application/json',
|
113
|
+
'-d', pd.to_json
|
114
|
+
|
115
|
+
if show_post_data
|
116
|
+
puts 'posting:'
|
117
|
+
puts JSON.pretty_generate(pd.data).red
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
out,err = Open3.capture3 *(CMD + args)
|
122
|
+
|
123
|
+
err.split("\n").each do |e|
|
124
|
+
if e[0] == '*'
|
125
|
+
puts e.purple if show_starred_lines
|
126
|
+
else
|
127
|
+
puts e.__send__ case e[0]
|
128
|
+
when '>'; :cyan
|
129
|
+
when '<'; :yellow
|
130
|
+
when '{', '}'; :black
|
131
|
+
else; :blue
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
begin
|
137
|
+
ap JSON.parse out
|
138
|
+
rescue
|
139
|
+
puts out
|
140
|
+
end
|
data/zurl.gemspec
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
Gem::Specification.new do |gem|
|
2
|
+
gem.authors = ["Kenichi Nakamura"]
|
3
|
+
gem.email = ["kenichi.nakamura@gmail.com"]
|
4
|
+
gem.description = gem.summary = "A wrapper for curl which pretty-prints JSON output"
|
5
|
+
gem.executables = ['zurl']
|
6
|
+
gem.files = `git ls-files | grep -v .gitignore`.split("\n")
|
7
|
+
gem.name = "zurl"
|
8
|
+
gem.version = '0.0.2'
|
9
|
+
gem.add_dependency 'colored'
|
10
|
+
gem.add_dependency 'awesome_print'
|
11
|
+
end
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: zurl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kenichi Nakamura
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colored
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: awesome_print
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: A wrapper for curl which pretty-prints JSON output
|
42
|
+
email:
|
43
|
+
- kenichi.nakamura@gmail.com
|
44
|
+
executables:
|
45
|
+
- zurl
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- Gemfile
|
50
|
+
- README.md
|
51
|
+
- bin/zurl
|
52
|
+
- zurl.gemspec
|
53
|
+
homepage:
|
54
|
+
licenses: []
|
55
|
+
metadata: {}
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
requirements: []
|
71
|
+
rubyforge_project:
|
72
|
+
rubygems_version: 2.4.5
|
73
|
+
signing_key:
|
74
|
+
specification_version: 4
|
75
|
+
summary: A wrapper for curl which pretty-prints JSON output
|
76
|
+
test_files: []
|