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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b8ff5ade51bb1eeb010dd6c9bb40afcbd54ac9d
4
- data.tar.gz: d94d2684a740245b6d3e541c812ab03785cdc23c
3
+ metadata.gz: cf9d61e130700afa5abe8e93c11b6fada2eb6cb4
4
+ data.tar.gz: e406176372e604f376c6806cc5d48c0141b46241
5
5
  SHA512:
6
- metadata.gz: 59bee05607a89edf2b91ec1730f2b25ca544f61cb9cccc3253eadd93ffe76e01fba31012a13076fbea7ed721934ecff9cd31bb9c6a02474fe92346faf3ece8cf
7
- data.tar.gz: 33b2f85d32e419a10707081436867634d5c87edb8f177a3c9206cfe15c5ecea447049f6da5ad05801033e4ee18e4758e7f4af246ffd8fbc62dcde4017f9695bb
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
- Term::ANSIColor shorthand
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`).
@@ -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 "term-ansicolor"
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"
@@ -1,8 +1,8 @@
1
1
  module ConsoleUtils #:nodoc:
2
2
  module OtherUtils
3
- # <tt>Term::ANSIColor</tt> shorthand
3
+ # <tt>Pastel</tt> shorthand
4
4
  def clr
5
- Term::ANSIColor
5
+ ConsoleUtils.pastel
6
6
  end
7
7
 
8
8
  # :call-seq:
@@ -1,7 +1,6 @@
1
1
  module ConsoleUtils::RequestUtils
2
2
  class DefaultAuthAutomator
3
3
  def self.call(rq)
4
- p rq
5
4
  if rq.can_auto_auth?
6
5
  rq.params[ConsoleUtils.token_param] ||= ConsoleUtils.default_token.presence || ConsoleUtils.auto_token_for(rq.uid)
7
6
  end
@@ -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 |reqm|
8
- define_method(reqm) do |*args|
9
- @url, *@_args = args
10
- app.public_send(reqm, @url, *normalize_args)
11
- self
12
- end
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 "console_utils/request_utils/requester"
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 |reqm|
13
- define_method(reqm) do |url, *args|
14
- @_args = args
15
- @url = urlify(url, *normalize_args)
16
- @request_method = reqm.to_s.upcase
17
- perform
18
- end
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
- IO.popen(curl_command, "r+") { |io| set_payload!(io.readlines) }
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, size, time))
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 = Term::ANSIColor.red(" \u27A7 Empty response's body.").freeze
9
- PBCOPY_MESSAGE = Term::ANSIColor.green(" \u27A4 Response body copied to pasteboard\n").freeze
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
- INFO_HASH_FIELDS.zip(INFO_HASH_FIELDS.map(&method(:public_send))).to_h
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
- puts "=> #{COMPLETE_IN % [time_ms]}"
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
- puts "=> #{TRANSFERED % [size_downloaded]}"
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, :COMPLETE_IN, :TRANSFERED,
103
+ :NO_RESPONSE,
84
104
  :INFO_FORMAT
85
105
  end
86
106
  end
@@ -1,3 +1,3 @@
1
1
  module ConsoleUtils
2
- VERSION = "0.6.2"
2
+ VERSION = "0.7.0"
3
3
  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 'term/ansicolor'
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.6.2
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-08 00:00:00.000000000 Z
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: term-ansicolor
34
+ name: pastel
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="