console_utils 0.6.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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
  - - ">="