plz 0.0.5 → 0.0.6

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: 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