curlyrest 0.1.11 → 0.1.12
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 +4 -4
- data/.rubocop.yml +24 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +1 -0
- data/Rakefile +3 -3
- data/curlyrest.gemspec +21 -17
- data/lib/curlyrest/version.rb +1 -1
- data/lib/curlyrest.rb +119 -70
- metadata +14 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54902872b74e49ac70c0bd17b7926201b3c2cad5
|
4
|
+
data.tar.gz: b2aac6b7a50b8e8486dda7371ada5595c33f28a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46e7d713f5b9734cded5088f7621cd3b8a0e7e83d52f1a898f3610acd74b3f013ea81c4a7de3f705e0e9d50f43cf14af260327655108573c10cd05ffbdbb3bf4
|
7
|
+
data.tar.gz: e82472c2182851627e2261abe82628f9140862c0a3f492636d54c36262df2443b40315bf81549c0aee9c2c245768845c4055af3d5744287d3cdbd47819d3deb9
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
Style/FrozenStringLiteralComment:
|
2
|
+
Enabled: false
|
3
|
+
|
4
|
+
Metrics/BlockLength:
|
5
|
+
Exclude:
|
6
|
+
- 'Rakefile'
|
7
|
+
- '**/*.rake'
|
8
|
+
- 'spec/**/*.rb'
|
9
|
+
- '*.gemspec'
|
10
|
+
|
11
|
+
Metrics/MethodLength:
|
12
|
+
Exclude:
|
13
|
+
- 'bin/*'
|
14
|
+
|
15
|
+
Metrics/ModuleLength:
|
16
|
+
Exclude:
|
17
|
+
- 'Rakefile'
|
18
|
+
- '**/*.rake'
|
19
|
+
- 'spec/**/*.rb'
|
20
|
+
- 'bin/*'
|
21
|
+
|
22
|
+
Metrics/ClassLength:
|
23
|
+
Exclude:
|
24
|
+
- 'bin/*'
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
curlyrest
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.4.1
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/curlyrest.gemspec
CHANGED
@@ -1,27 +1,31 @@
|
|
1
|
-
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
require 'curlyrest/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
6
|
+
spec.name = 'curlyrest'
|
8
7
|
spec.version = Curlyrest::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
8
|
+
spec.authors = ['Keith Williams']
|
9
|
+
spec.email = ['keithrw@comcast.net']
|
11
10
|
|
12
|
-
spec.summary =
|
13
|
-
|
14
|
-
spec.
|
15
|
-
|
11
|
+
spec.summary =
|
12
|
+
'gem extending rest-client, allowing use/debug of curl for request'
|
13
|
+
spec.description =
|
14
|
+
'gem extending rest-client, allowing use/debug of curl for request'
|
15
|
+
spec.homepage = 'https://github.com/keithrw54/curlyrest.git'
|
16
|
+
spec.license = 'MIT'
|
16
17
|
|
17
|
-
spec.files =
|
18
|
-
|
18
|
+
spec.files =
|
19
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
20
|
+
f.match(%r{^(test|spec|features)/})
|
21
|
+
end
|
22
|
+
spec.bindir = 'exe'
|
19
23
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
-
spec.require_paths = [
|
24
|
+
spec.require_paths = ['lib']
|
21
25
|
|
22
|
-
spec.add_development_dependency
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
26
|
+
spec.add_development_dependency 'bundler', '~> 1.11'
|
27
|
+
spec.add_development_dependency 'byebug', '~> 2.0'
|
28
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
29
|
+
spec.add_development_dependency 'rest-client', '~> 2.0'
|
30
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
27
31
|
end
|
data/lib/curlyrest/version.rb
CHANGED
data/lib/curlyrest.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require 'curlyrest/version'
|
2
2
|
require 'rest-client'
|
3
3
|
require 'byebug'
|
4
4
|
|
5
|
+
# module extending Rest-Client to optionally do via curl
|
5
6
|
module Curlyrest
|
7
|
+
# class for a constructing a curl response
|
6
8
|
class CurlResponse
|
7
9
|
include Net::HTTPHeader
|
8
10
|
attr_reader :code, :http_version, :message, :headers
|
@@ -15,98 +17,145 @@ module Curlyrest
|
|
15
17
|
@inflate = Zlib::Inflate.new(32 + Zlib::MAX_WBITS)
|
16
18
|
initialize_http_header nil
|
17
19
|
end
|
18
|
-
|
19
|
-
@body = value
|
20
|
-
end
|
20
|
+
|
21
21
|
def unzip_body(gzip)
|
22
22
|
@body = @inflate.inflate(gzip)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
if /^[\r\n]+$/.match(lines[i])
|
46
|
-
t = :body
|
47
|
-
else
|
48
|
-
rem = /^([\w-]+):\s(.*)/.match(lines[i].chop)
|
49
|
-
n[rem[1]] = rem[2]
|
50
|
-
end
|
51
|
-
when :body
|
52
|
-
body << lines[i]
|
26
|
+
# class for parsing curl responses
|
27
|
+
class CurlResponseParser
|
28
|
+
attr_accessor :response
|
29
|
+
def initialize(response)
|
30
|
+
@state = :read_status
|
31
|
+
@response = nil
|
32
|
+
@body = ''
|
33
|
+
parse(response)
|
34
|
+
end
|
35
|
+
|
36
|
+
def parse(response)
|
37
|
+
response.lines.each do |line|
|
38
|
+
parse_line(line)
|
39
|
+
end
|
40
|
+
ce = @response.to_hash.dig('content-encoding')
|
41
|
+
if ce&.include?('gzip')
|
42
|
+
@response.unzip_body(@body)
|
43
|
+
else
|
44
|
+
@response.body = @body
|
53
45
|
end
|
54
|
-
i += 1
|
55
46
|
end
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
47
|
+
|
48
|
+
def parse_status(line)
|
49
|
+
line.chop =~ %r{^HTTP\/(\d+\.\d+) (\d+) (.+)$}
|
50
|
+
return if Regexp.last_match(2) == 100
|
51
|
+
@state = :headers
|
52
|
+
@response = CurlResponse.new(Regexp.last_match(1),
|
53
|
+
Regexp.last_match(2),
|
54
|
+
Regexp.last_match(3))
|
61
55
|
end
|
62
|
-
n
|
63
|
-
end
|
64
56
|
|
65
|
-
|
66
|
-
|
67
|
-
|
57
|
+
def parse_headers(line)
|
58
|
+
if /^\s*$/.match?(line)
|
59
|
+
@state = :body
|
60
|
+
return
|
61
|
+
end
|
62
|
+
line.chop =~ /^([\w-]+):\s(.*)/
|
63
|
+
@response[Regexp.last_match(1)] =
|
64
|
+
Regexp.last_match(2)
|
65
|
+
end
|
68
66
|
|
69
|
-
|
70
|
-
|
67
|
+
def parse_line(line)
|
68
|
+
case @state
|
69
|
+
when :body
|
70
|
+
@body << line
|
71
|
+
when :read_status
|
72
|
+
parse_status(line)
|
73
|
+
when :headers
|
74
|
+
parse_headers(line)
|
75
|
+
else
|
76
|
+
puts "parser error on #{line}"
|
77
|
+
end
|
78
|
+
end
|
71
79
|
end
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
headers
|
76
|
-
|
80
|
+
|
81
|
+
# class for transmitting curl requests
|
82
|
+
class CurlTransmitter
|
83
|
+
attr_accessor :options, :headers, :line
|
84
|
+
def initialize(uri, method, headers, payload)
|
85
|
+
@payload = payload
|
86
|
+
@method = method
|
87
|
+
@uri = uri
|
88
|
+
@headers, @options = calc_options(headers)
|
89
|
+
@line = curl_command
|
90
|
+
end
|
91
|
+
|
92
|
+
def calc_options(headers, options = {})
|
93
|
+
options[:curl] = headers.delete('Use-Curl') ||
|
94
|
+
headers.delete(:use_curl)
|
95
|
+
options[:proxy] = headers.delete('Use-Proxy') ||
|
96
|
+
headers.delete(:use_proxy)
|
97
|
+
headers.delete('No-Restclient-Headers') ||
|
98
|
+
headers.delete(:no_restclient_headers)
|
99
|
+
[headers, options]
|
100
|
+
end
|
101
|
+
|
102
|
+
def curl_data(payload)
|
103
|
+
payload.&to_s
|
104
|
+
end
|
105
|
+
|
106
|
+
def curl_proxy(option)
|
107
|
+
option ? " -x #{option}" : ''
|
108
|
+
end
|
109
|
+
|
110
|
+
def curl_headers(headers)
|
111
|
+
ret_headers = ' '
|
112
|
+
headers.each { |k, v| ret_headers << "-H '#{k}: #{v}' " }
|
113
|
+
ret_headers
|
114
|
+
end
|
115
|
+
|
116
|
+
def curl_command
|
117
|
+
@line = "curl -isS -X #{@method.upcase}#{curl_proxy(@options[:proxy])}"\
|
118
|
+
"#{curl_headers(@headers)}'#{@uri}' -d '#{curl_data(@payload)}'"
|
119
|
+
end
|
77
120
|
end
|
78
121
|
|
79
|
-
def transmit(uri, method, headers, payload
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
r = `#{curl_line}`
|
86
|
-
puts r if curlyrest_option == 'debug'
|
87
|
-
parse_response(r)
|
122
|
+
def transmit(uri, method, headers, payload)
|
123
|
+
ct = CurlTransmitter.new(uri, method, headers, payload)
|
124
|
+
puts ct.line if ct.options[:curl] == 'debug'
|
125
|
+
r = `#{ct.line}`
|
126
|
+
puts r if ct.options[:curl] == 'debug'
|
127
|
+
CurlResponseParser.new(r).response
|
88
128
|
end
|
89
129
|
end
|
90
130
|
|
91
131
|
include Curlyrest
|
92
132
|
|
133
|
+
# restclient monkeypatch
|
93
134
|
module RestClient
|
135
|
+
# restClient request class
|
94
136
|
class Request
|
95
|
-
def execute
|
96
|
-
# With 2.0.0+, net/http accepts URI objects in requests and handles
|
97
|
-
# IPv6 addresses in [] for use in the Host request header.
|
98
|
-
|
99
|
-
|
100
|
-
h = processed_headers['No-Restclient-Headers'] == 'true' ? headers : processed_headers
|
101
|
-
r = Curlyrest.transmit(uri, method, h, payload, &block)
|
102
|
-
RestClient::Response.create(r.body, r, self)
|
137
|
+
def execute(& block)
|
138
|
+
# With 2.0.0+, net/http accepts URI objects in requests and handles
|
139
|
+
# wrapping IPv6 addresses in [] for use in the Host request header.
|
140
|
+
if processed_headers['Use-Curl']
|
141
|
+
curl_execute(& block)
|
103
142
|
else
|
104
|
-
transmit
|
105
|
-
|
106
|
-
|
143
|
+
transmit(uri, net_http_request_class(method)
|
144
|
+
.new(uri, processed_headers),
|
145
|
+
payload, & block)
|
107
146
|
end
|
108
147
|
ensure
|
109
|
-
payload
|
148
|
+
payload&.close
|
149
|
+
end
|
150
|
+
|
151
|
+
def curl_execute(& block)
|
152
|
+
h = if processed_headers['No-Restclient-Headers'] == true
|
153
|
+
headers
|
154
|
+
else
|
155
|
+
processed_headers
|
156
|
+
end
|
157
|
+
r = Curlyrest.transmit(uri, method, h, payload, &block)
|
158
|
+
RestClient::Response.create(r.body, r, self)
|
110
159
|
end
|
111
160
|
end
|
112
161
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: curlyrest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keith Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -25,33 +25,33 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.11'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: byebug
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '2.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '2.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '10.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '10.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rest-client
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,19 +67,19 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '2.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '3.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '3.0'
|
83
83
|
description: gem extending rest-client, allowing use/debug of curl for request
|
84
84
|
email:
|
85
85
|
- keithrw@comcast.net
|
@@ -89,6 +89,9 @@ extra_rdoc_files: []
|
|
89
89
|
files:
|
90
90
|
- ".gitignore"
|
91
91
|
- ".rspec"
|
92
|
+
- ".rubocop.yml"
|
93
|
+
- ".ruby-gemset"
|
94
|
+
- ".ruby-version"
|
92
95
|
- Gemfile
|
93
96
|
- LICENSE.txt
|
94
97
|
- README.md
|