console_utils 0.6.2 → 0.7.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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/console_utils.gemspec +1 -1
- data/lib/console_utils/other_utils.rb +2 -2
- data/lib/console_utils/request_utils/auth_automators.rb +0 -1
- data/lib/console_utils/request_utils/exap.rb +9 -6
- data/lib/console_utils/request_utils/remo.rb +92 -16
- data/lib/console_utils/request_utils/requester.rb +28 -8
- data/lib/console_utils/version.rb +1 -1
- data/lib/console_utils.rb +5 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf9d61e130700afa5abe8e93c11b6fada2eb6cb4
|
4
|
+
data.tar.gz: e406176372e604f376c6806cc5d48c0141b46241
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab3c2fd6ebbed1a16715e688e28ca54179fd091e3ca49a93031b3cf6b612f7e59771c8ff9dcd01fe8be898677328d4af1b839fc871f554773b4be2390149ffa9
|
7
|
+
data.tar.gz: 21b6aa7cc8c3bf5fe6aa5a5d1952256ee7153915ad595b80170639d909617fea473f05fa27252bcda6903d5d9cbfdcf3d3926c5fefc0edaefd625527d0cda211
|
data/README.md
CHANGED
@@ -184,7 +184,7 @@ Also provides shorthand to find any user by id: `usr(id)`
|
|
184
184
|
## OtherUtils
|
185
185
|
|
186
186
|
#### clr()
|
187
|
-
|
187
|
+
[Pastel](https://github.com/piotrmurach/pastel) shorthand
|
188
188
|
|
189
189
|
#### shutting(:engine_key[, to: logger_level]) {}
|
190
190
|
Shuts up the logger of a specified Rails engine for a given key (`:rails`, `:record`, `:controller` or `:view`).
|
data/console_utils.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.required_ruby_version = ">= 2.1"
|
22
22
|
|
23
23
|
spec.add_dependency "activesupport", ">= 4.1", "< 6"
|
24
|
-
spec.add_dependency "
|
24
|
+
spec.add_dependency "pastel"
|
25
25
|
spec.add_dependency "awesome_print"
|
26
26
|
spec.add_dependency "benchmark-ips"
|
27
27
|
spec.add_dependency "pry-rails"
|
@@ -4,12 +4,15 @@ module ConsoleUtils::RequestUtils #:nodoc:
|
|
4
4
|
class Exap < Requester
|
5
5
|
INSPECT_FORMAT = "<Local: %s (%s)>".freeze
|
6
6
|
|
7
|
-
ConsoleUtils.request_methods.each do |
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
ConsoleUtils.request_methods.each do |request_method|
|
8
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
9
|
+
def #{request_method}(url, *args)
|
10
|
+
@url = url
|
11
|
+
@_args = args
|
12
|
+
app.#{request_method}(@url, *normalize_args)
|
13
|
+
self
|
14
|
+
end
|
15
|
+
RUBY
|
13
16
|
end
|
14
17
|
|
15
18
|
def to_s
|
@@ -1,21 +1,24 @@
|
|
1
1
|
require 'uri'
|
2
|
-
require
|
2
|
+
require 'open3'
|
3
|
+
require 'shellwords'
|
4
|
+
require 'console_utils/request_utils/requester'
|
3
5
|
|
4
6
|
module ConsoleUtils::RequestUtils #:nodoc:
|
5
7
|
class Remo < Requester
|
6
|
-
OUT_FORMAT = "\n%{size_download}\n%{time_total}".freeze
|
7
8
|
INSPECT_FORMAT = "<Remote: %s in %s ms>".freeze
|
8
9
|
INSPECT_NOTHING = "<Remote: nothing>".freeze
|
9
10
|
|
10
11
|
attr_reader :request_method
|
11
12
|
|
12
|
-
ConsoleUtils.request_methods.each do |
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
ConsoleUtils.request_methods.each do |request_method|
|
14
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
15
|
+
def #{request_method}(url, *args)
|
16
|
+
@_args = args
|
17
|
+
@url = urlify(url, *normalize_args)
|
18
|
+
@request_method = "#{request_method.to_s.upcase}"
|
19
|
+
perform
|
20
|
+
end
|
21
|
+
RUBY
|
19
22
|
end
|
20
23
|
|
21
24
|
def inspect
|
@@ -30,30 +33,103 @@ module ConsoleUtils::RequestUtils #:nodoc:
|
|
30
33
|
@_body
|
31
34
|
end
|
32
35
|
|
36
|
+
attr_reader :_result
|
37
|
+
|
33
38
|
protected
|
34
39
|
|
35
40
|
def perform
|
36
|
-
|
41
|
+
Curl.(request_method, url) do |result, payload|
|
42
|
+
@_result = result
|
43
|
+
set_payload!(payload)
|
44
|
+
end
|
37
45
|
end
|
38
46
|
|
39
47
|
private
|
40
48
|
|
41
|
-
def set_payload!((*body_lines,
|
49
|
+
def set_payload!((*body_lines, code, time, size))
|
42
50
|
@_body = body_lines.join
|
51
|
+
@_code = code.to_i
|
43
52
|
@_size = size.to_f
|
44
53
|
@_time = time.tr(?,, ?.).to_f
|
45
54
|
self
|
46
55
|
end
|
47
56
|
|
48
|
-
def curl_command
|
49
|
-
%W(#{ConsoleUtils.curl_bin} --silent --write-out #{OUT_FORMAT} -X #{request_method} #{url}).
|
50
|
-
tap { |cmd| puts "# #{cmd.shelljoin.inspect}" unless ConsoleUtils.curl_silence }
|
51
|
-
end
|
52
|
-
|
53
57
|
def urlify(*args)
|
54
58
|
options = args.extract_options!
|
55
59
|
URI.join(ConsoleUtils.remote_endpoint, *args).
|
56
60
|
tap { |uri| uri.query = options.to_query }.to_s
|
57
61
|
end
|
62
|
+
|
63
|
+
class Curl
|
64
|
+
OUT_FORMAT = "\n%{http_code}\n%{time_total}\n%{size_download}".freeze
|
65
|
+
|
66
|
+
def self.call(*args)
|
67
|
+
result = new(*args)
|
68
|
+
yield(result.to_h, result.payload)
|
69
|
+
end
|
70
|
+
|
71
|
+
attr_reader :request, :response, :payload
|
72
|
+
|
73
|
+
def initialize(request_method, url)
|
74
|
+
cmd = %W(#{ConsoleUtils.curl_bin} --silent -v --write-out #{OUT_FORMAT} -X #{request_method} #{url})
|
75
|
+
puts "# #{cmd.shelljoin.inspect}" unless ConsoleUtils.curl_silence
|
76
|
+
|
77
|
+
@response = {}
|
78
|
+
@request = {}
|
79
|
+
@payload = []
|
80
|
+
|
81
|
+
Open3.popen3(Shellwords.join(cmd)) do |stdin, stdout, stderr, thr|
|
82
|
+
# stdin.close
|
83
|
+
{ stderr: stderr, stdin: stdout }.each do |key, io|
|
84
|
+
Thread.new do
|
85
|
+
while line = io.gets
|
86
|
+
key == :stderr ? process_stderr(line) : @payload << line
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
thr.join
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
KEY_MAP = { ">" => :request, "<" => :response }
|
95
|
+
|
96
|
+
def process_stderr(line)
|
97
|
+
# warn(line)
|
98
|
+
if type = KEY_MAP[line.chr]
|
99
|
+
line = line[2, line.size-1].strip
|
100
|
+
|
101
|
+
return if line.size == 0
|
102
|
+
|
103
|
+
case type
|
104
|
+
when :request; set_request(line)
|
105
|
+
when :response; set_response(line)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def set_request(line)
|
111
|
+
# warn("Request: #{line}")
|
112
|
+
if !@request.key?(:http_version) && line =~ /^(GET|POST|PUT|PATCH|HEAD|OPTION|DELETE) (.+?) HTTP\/(.+)$/
|
113
|
+
@request.merge!(method: $1, url: $2, http_version: $3)
|
114
|
+
else
|
115
|
+
header, value = line.split(": ", 2)
|
116
|
+
@request[header] = value
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def set_response(line)
|
121
|
+
# warn("Response: #{line}")
|
122
|
+
if !@response.key?(:http_version) && line =~ /^HTTP\/(.+) (\d+?) (.+)$/
|
123
|
+
@response.merge!(http_version: $1, http_code: $2, http_status: $3)
|
124
|
+
else
|
125
|
+
header, value = line.split(": ", 2)
|
126
|
+
@response[header] = value
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def to_h
|
131
|
+
{ response: @response, request: @request }
|
132
|
+
end
|
133
|
+
end
|
58
134
|
end
|
59
135
|
end
|
@@ -5,10 +5,8 @@ module ConsoleUtils::RequestUtils #:nodoc:
|
|
5
5
|
class Requester < SimpleDelegator
|
6
6
|
INFO_HASH_FIELDS = %i(url size time human_size human_time).freeze
|
7
7
|
INFO_FORMAT = "%#-.50{url} | %#10{human_size} | %#10{human_time}\n".freeze
|
8
|
-
NO_RESPONSE =
|
9
|
-
PBCOPY_MESSAGE =
|
10
|
-
COMPLETE_IN = Term::ANSIColor.green("Complete in %s").freeze
|
11
|
-
TRANSFERED = Term::ANSIColor.cyan("Transfered: %s").freeze
|
8
|
+
NO_RESPONSE = ConsoleUtils.pastel.red(" \u27A7 Empty response's body.").freeze
|
9
|
+
PBCOPY_MESSAGE = ConsoleUtils.pastel.green(" \u27A4 Response body copied to pasteboard\n").freeze
|
12
10
|
|
13
11
|
class_attribute :default_params, instance_writer: false
|
14
12
|
attr_reader :url
|
@@ -54,7 +52,9 @@ module ConsoleUtils::RequestUtils #:nodoc:
|
|
54
52
|
end
|
55
53
|
|
56
54
|
def to_info_hash
|
57
|
-
|
55
|
+
hsh = {}
|
56
|
+
INFO_HASH_FIELDS.each { |field| hsh[field] = public_send(field) }
|
57
|
+
hsh
|
58
58
|
end
|
59
59
|
|
60
60
|
protected
|
@@ -69,18 +69,38 @@ module ConsoleUtils::RequestUtils #:nodoc:
|
|
69
69
|
|
70
70
|
def show_complete_in!(reset = true)
|
71
71
|
return if @_time.nil?
|
72
|
-
|
72
|
+
if @_code && status_code = Rack::Utils::HTTP_STATUS_CODES[@_code]
|
73
|
+
print "=> ", pastel.public_send(status_color(@_code), "Completed ", pastel.bold("#{@_code} #{status_code}"), " in #{time_ms}"), "\n"
|
74
|
+
else
|
75
|
+
puts "=> #{pastel.green("Completed in #{time_ms}")}"
|
76
|
+
end
|
77
|
+
ensure
|
78
|
+
@_code = nil
|
73
79
|
@_time = nil
|
74
80
|
end
|
75
81
|
|
82
|
+
def pastel
|
83
|
+
ConsoleUtils.pastel
|
84
|
+
end
|
85
|
+
|
76
86
|
def show_transfered!(reset = true)
|
77
87
|
return if @_size.nil?
|
78
|
-
|
88
|
+
print "=> ", pastel.cyan("Transferred: #{size_downloaded}"), "\n"
|
89
|
+
ensure
|
79
90
|
@_size = nil
|
80
91
|
end
|
81
92
|
|
93
|
+
def status_color(code)
|
94
|
+
case code
|
95
|
+
when 200...400; :green
|
96
|
+
when 400...500; :red
|
97
|
+
when 500...600; :intense_red
|
98
|
+
else :yellow
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
82
102
|
private_constant :PBCOPY_MESSAGE,
|
83
|
-
:NO_RESPONSE,
|
103
|
+
:NO_RESPONSE,
|
84
104
|
:INFO_FORMAT
|
85
105
|
end
|
86
106
|
end
|
data/lib/console_utils.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'active_support'
|
2
2
|
require 'active_support/core_ext'
|
3
3
|
require 'active_support/tagged_logging'
|
4
|
-
require '
|
4
|
+
require 'pastel'
|
5
5
|
require 'console_utils/core_ext/array_to_proc'
|
6
6
|
require 'console_utils/core_ext/local_values'
|
7
7
|
require 'console_utils/version'
|
@@ -201,6 +201,10 @@ module ConsoleUtils
|
|
201
201
|
def setup_modules_to(context = nil)
|
202
202
|
ReplState.setup(context)
|
203
203
|
end
|
204
|
+
|
205
|
+
def pastel
|
206
|
+
@pastel ||= Pastel.new
|
207
|
+
end
|
204
208
|
end
|
205
209
|
|
206
210
|
ActiveSupport.run_load_hooks(:console_utils, self)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: console_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '6'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
34
|
+
name: pastel
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - ">="
|