plz 0.0.5 → 0.0.6

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: f5260f7a973909cd914441eb5b29d5611e6a1aff
4
- data.tar.gz: 501f2095a5c66ff2b40ec1ebe742f6ded54f3f4e
3
+ metadata.gz: 6fed69be3c08f69644d4a0324f6cb595922227b5
4
+ data.tar.gz: 5b55fa2b2532c5179af56a384188aabfe995ee84
5
5
  SHA512:
6
- metadata.gz: f29827446649900133e5fd58ce91086434fbd4a3f0d7454876b6d298ca83dc4a3b35a9f94665caae6875139f636015f4556f8b81ab7bf112c804aa5bfbe3e689
7
- data.tar.gz: 0432bc2eb51b8efc96ca242a612d05d3d64a568aa99f2594834bbbe0232f6f832d3fbd8782aa0cdb3de737c3a56d6ae62db1f09e14ec31dec6a8d5f47ea19a17
6
+ metadata.gz: f1f9b49e49ed042fffc77b83416ffb977c12c4977cb8048475bad1184366a8d8d94fe8627dc84569457e3c2ee7ad1ea58107498e302940d6185114e29ef3f80b
7
+ data.tar.gz: 616d398921414557c4da80cc82163ff2c3cbaac42f814185ed3abe86bbbf5fd48edbafdc9af5b058a54e7d3d08be421dcc29900e93952b7a71afc5bcd6d54ccb
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 0.0.6
2
+ * Better error handling
3
+ * Add some command line options
4
+ * `--help`
5
+ * `--no-color`
6
+ * `--no-response-header`
7
+ * `--no-response-body`
8
+
1
9
  ## 0.0.5
2
10
  * Support URI Template in API path
3
11
 
data/lib/plz.rb CHANGED
@@ -11,6 +11,7 @@ require "pathname"
11
11
  require "rack"
12
12
  require "rainbow"
13
13
  require "rouge"
14
+ require "slop"
14
15
  require "yaml"
15
16
 
16
17
  require "plz/error"
@@ -18,5 +19,5 @@ require "plz/arguments"
18
19
  require "plz/command"
19
20
  require "plz/command_builder"
20
21
  require "plz/error_command"
21
- require "plz/response"
22
+ require "plz/response_renderer"
22
23
  require "plz/version"
data/lib/plz/command.rb CHANGED
@@ -5,18 +5,29 @@ module Plz
5
5
  # @param method [String]
6
6
  # @param base_url [String]
7
7
  # @param path [String]
8
- def initialize(headers: nil, params: nil, method: nil, base_url: nil, path: nil)
8
+ # @param options [Hash]
9
+ def initialize(headers: nil, params: nil, method: nil, base_url: nil, path: nil, options: nil)
9
10
  @headers = headers
10
11
  @params = params
11
12
  @method = method
12
13
  @base_url = base_url
13
14
  @path = path
15
+ @options = options
14
16
  end
15
17
 
16
18
  # Sends an HTTP request and logs out the response
17
19
  def call
18
- raw = client.send(@method.downcase, @path, @params, @headers)
19
- puts Response.new(raw).render
20
+ response = client.send(@method.downcase, @path, @params, @headers)
21
+ print ResponseRenderer.call(
22
+ status: response.status,
23
+ headers: response.headers,
24
+ body: response.body,
25
+ response_header: flag_to_show_response_header,
26
+ response_body: flag_to_show_response_body,
27
+ color: flag_to_color_response,
28
+ )
29
+ rescue Faraday::ConnectionFailed => exception
30
+ puts exception
20
31
  end
21
32
 
22
33
  private
@@ -29,5 +40,20 @@ module Plz
29
40
  connection.adapter :net_http
30
41
  end
31
42
  end
43
+
44
+ # @return [true, false]
45
+ def flag_to_show_response_header
46
+ !@options[:"no-response-header"]
47
+ end
48
+
49
+ # @return [true, false]
50
+ def flag_to_show_response_body
51
+ !@options[:"no-response-body"]
52
+ end
53
+
54
+ # @return [true, false]
55
+ def flag_to_color_response
56
+ !@options[:"no-color"]
57
+ end
32
58
  end
33
59
  end
@@ -3,7 +3,8 @@ module Plz
3
3
  SCHEMA_FILE_PATH_PATTERN = "schema.{json,yml}"
4
4
 
5
5
  # Builds callable command object from given ARGV
6
- # @return [Plz::Command]
6
+ # @return [Plz::Command, Plz::ErrorCommand]
7
+ # @note This is a shortcut for #call method
7
8
  # @example
8
9
  # Plz::CommandBuilder.call(ARGV).call
9
10
  def self.call(arguments)
@@ -25,6 +26,7 @@ module Plz
25
26
 
26
27
  # @return [Plz::Command] Callable command object
27
28
  def call
29
+ exit_if_help
28
30
  validate!
29
31
  Command.new(
30
32
  method: method,
@@ -32,6 +34,7 @@ module Plz
32
34
  path: path,
33
35
  headers: headers,
34
36
  params: request_params,
37
+ options: options,
35
38
  )
36
39
  rescue Error => error
37
40
  ErrorCommand.new(error)
@@ -199,5 +202,20 @@ module Plz
199
202
  def arguments
200
203
  @arguments ||= Arguments.new(@argv)
201
204
  end
205
+
206
+ # @return [Hash] Command line options
207
+ def options
208
+ @options ||= Slop.parse!(@argv, help: true) do
209
+ banner Error::USAGE
210
+ on "no-response-header", "Hide response header"
211
+ on "no-response-body", "Hide response body"
212
+ on "no-color", "Disable coloring output"
213
+ end.to_hash
214
+ end
215
+
216
+ # Display the help message and exits the program if --help or -h given
217
+ def exit_if_help
218
+ options
219
+ end
202
220
  end
203
221
  end
data/lib/plz/error.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Plz
2
2
  class Error < StandardError
3
- USAGE = "Usage: plz <action> <target> [headers|params]"
3
+ USAGE = "Usage: plz <action> <target> [headers|params] [options]"
4
4
  end
5
5
 
6
6
  class NoActionName < Error
@@ -0,0 +1,97 @@
1
+ module Plz
2
+ class ResponseRenderer
3
+ # Shortcut for #call method
4
+ def self.call(*args)
5
+ new(*args).call
6
+ end
7
+
8
+ # @param status [Fixnum] Status code
9
+ # @param headers [Hash] Response header fields
10
+ # @param body [Array, Hash] JSON decoded response body
11
+ # @param response_header [true, false] Flag to show response header
12
+ # @param response_body [true, false] Flag to show response body
13
+ # @param color [true, false] Flag to color response body
14
+ def initialize(status: nil, headers: nil, body: nil, response_header: nil, response_body: nil, color: nil)
15
+ @status = status
16
+ @headers = headers
17
+ @body = body
18
+ @show_response_header = response_header
19
+ @show_response_body = response_body
20
+ @color_response = color
21
+ end
22
+
23
+ # Renders response with given options
24
+ # @return [String] Rendered output
25
+ def call
26
+ template % {
27
+ status: status,
28
+ headers: headers,
29
+ body: body,
30
+ }
31
+ end
32
+
33
+ private
34
+
35
+ # @return [String] Template for embedding variables, changing by options
36
+ def template
37
+ str = ""
38
+ str << <<-EOS.strip_heredoc if @show_response_header
39
+ HTTP/1.1 %{status}
40
+ %{headers}
41
+ EOS
42
+ str << "\n" if @show_response_header && @show_response_body
43
+ str << "%{body}" if @show_response_body
44
+ str
45
+ end
46
+
47
+ # @return [String]
48
+ # @example
49
+ # headers #=> ["Content-Type: application/json"]
50
+ def headers
51
+ @headers.sort_by do |key, value|
52
+ key
53
+ end.map do |key, value|
54
+ "%{key}: %{value}" % {
55
+ key: Rainbow(key.split("-").map(&:camelize).join("-")).underline,
56
+ value: Rainbow(value).green,
57
+ }
58
+ end.join("\n")
59
+ end
60
+
61
+ # @return [String]
62
+ def status
63
+ Rainbow("#{@status} #{status_in_words}").bright
64
+ end
65
+
66
+ # @return [String] Words for its status code
67
+ def status_in_words
68
+ Rack::Utils::HTTP_STATUS_CODES[@status]
69
+ end
70
+
71
+ # @return [String]
72
+ def body
73
+ if @color_response
74
+ Rouge::Formatters::Terminal256.format(
75
+ Rouge::Lexers::Javascript.new.lex(plain_body),
76
+ theme: "github"
77
+ )
78
+ else
79
+ plain_body
80
+ end
81
+ end
82
+
83
+ # @return [String] Pretty-printed JSON body
84
+ def plain_body
85
+ JSON.pretty_generate(@body) + "\n"
86
+ end
87
+
88
+ # Overridden to disable coloring
89
+ def Rainbow(str)
90
+ if @color_response
91
+ super
92
+ else
93
+ Rainbow::NullPresenter.new(str.to_s)
94
+ end
95
+ end
96
+ end
97
+ end
data/lib/plz/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Plz
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
data/plz.gemspec CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency "rack"
24
24
  spec.add_dependency "rainbow"
25
25
  spec.add_dependency "rouge"
26
+ spec.add_dependency "slop"
26
27
  spec.add_development_dependency "bundler", "~> 1.6"
27
28
  spec.add_development_dependency "rake"
28
29
  spec.add_development_dependency "rspec", "2.14.1"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-13 00:00:00.000000000 Z
11
+ date: 2014-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: slop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: bundler
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -186,7 +200,7 @@ files:
186
200
  - lib/plz/command_builder.rb
187
201
  - lib/plz/error.rb
188
202
  - lib/plz/error_command.rb
189
- - lib/plz/response.rb
203
+ - lib/plz/response_renderer.rb
190
204
  - lib/plz/version.rb
191
205
  - plz.gemspec
192
206
  - schema.yml
data/lib/plz/response.rb DELETED
@@ -1,68 +0,0 @@
1
- module Plz
2
- class Response
3
- TEMPLATE = <<-EOS.strip_heredoc
4
- HTTP/1.1 %{status}
5
- %{headers}
6
-
7
- %{body}
8
- EOS
9
-
10
- # @param [Faraday::Response]
11
- def initialize(raw)
12
- @raw = raw
13
- end
14
-
15
- # @return [String]
16
- def render
17
- TEMPLATE % {
18
- status: status,
19
- headers: headers.join("\n"),
20
- body: body,
21
- }
22
- end
23
-
24
- private
25
-
26
- # @return [Array<String>]
27
- # @example
28
- # headers #=> ["Content-Type: application/json"]
29
- def headers
30
- @raw.headers.sort_by do |key, value|
31
- key
32
- end.map do |key, value|
33
- "%{key}: %{value}" % {
34
- key: Rainbow(key.split("-").map(&:camelize).join("-")).underline,
35
- value: Rainbow(value).green,
36
- }
37
- end
38
- end
39
-
40
- # @return [String]
41
- def status
42
- Rainbow("#{status_code} #{status_in_words}").bright
43
- end
44
-
45
- # @return [Fixnum]
46
- def status_code
47
- @raw.status
48
- end
49
-
50
- # @return [String] Words for its status code
51
- def status_in_words
52
- Rack::Utils::HTTP_STATUS_CODES[@raw.status]
53
- end
54
-
55
- # @return [String]
56
- def body
57
- Rouge::Formatters::Terminal256.format(
58
- Rouge::Lexers::Javascript.new.lex(plain_body),
59
- theme: "github"
60
- )
61
- end
62
-
63
- # @return [String] Pretty-printed JSON body
64
- def plain_body
65
- JSON.pretty_generate(@raw.body)
66
- end
67
- end
68
- end