hanami-cli 0.2.0.beta1 → 0.2.0.beta2
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/CHANGELOG.md +7 -0
- data/Gemfile +1 -1
- data/hanami-cli.gemspec +1 -1
- data/lib/hanami/cli.rb +2 -2
- data/lib/hanami/cli/errors.rb +16 -0
- data/lib/hanami/cli/registry.rb +140 -6
- data/lib/hanami/cli/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c3fd112b3dc098cba00e1ef4b617afb7b32194584f9108a2de44e94be16d1d2
|
4
|
+
data.tar.gz: 034f35aff9557f17a1f28353f177ced498ee1479d631584e9fbc55eeee007f5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e09e61536293649735e70ffcffcd2868d1c41754055ab6e56ac8cfaf2e6c6e0b9dd70e10bdc5906078e821264103c3aea96bc6c498c1f52e9fd79df08e931bbf
|
7
|
+
data.tar.gz: 2320bac7acf1ff217a97e5b2f27810b5d939488961ed6668e8791793c75f4c33ea1720b56b1fbd95ae1cf362bbbd5ffd5cf4507695872fd0401a3f590e4949d2
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
# Hanami::CLI
|
2
2
|
General purpose Command Line Interface (CLI) framework for Ruby
|
3
3
|
|
4
|
+
## v0.2.0.beta2 - 2018-03-23
|
5
|
+
### Added
|
6
|
+
- [Anton Davydov & Luca Guidi] Support objects as callbacks
|
7
|
+
|
8
|
+
### Fixed
|
9
|
+
- [Anton Davydov & Luca Guidi] Ensure callbacks' context of execution (aka `self`) to be the command that is being executed
|
10
|
+
|
4
11
|
## v0.2.0.beta1 - 2018-02-28
|
5
12
|
### Added
|
6
13
|
- [Anton Davydov] Register `before`/`after` callbacks for commands
|
data/Gemfile
CHANGED
@@ -6,6 +6,6 @@ unless ENV['TRAVIS']
|
|
6
6
|
gem 'yard', require: false
|
7
7
|
end
|
8
8
|
|
9
|
-
gem 'hanami-utils', '1.2.0.
|
9
|
+
gem 'hanami-utils', '1.2.0.beta2', require: false, git: 'https://github.com/hanami/utils.git', branch: 'develop'
|
10
10
|
|
11
11
|
gem 'hanami-devtools', require: false, git: 'https://github.com/hanami/devtools.git'
|
data/hanami-cli.gemspec
CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
f.match(%r{^(test|spec|features)/})
|
26
26
|
end
|
27
27
|
|
28
|
-
spec.add_dependency "hanami-utils", "1.2.0.
|
28
|
+
spec.add_dependency "hanami-utils", "1.2.0.beta2"
|
29
29
|
spec.add_dependency "concurrent-ruby", "~> 1.0"
|
30
30
|
|
31
31
|
spec.add_development_dependency "bundler"
|
data/lib/hanami/cli.rb
CHANGED
@@ -53,9 +53,9 @@ module Hanami
|
|
53
53
|
if result.found?
|
54
54
|
command, args = parse(result, out)
|
55
55
|
|
56
|
-
result.before_callbacks.run(
|
56
|
+
result.before_callbacks.run(command, args)
|
57
57
|
command.call(args)
|
58
|
-
result.after_callbacks.run(
|
58
|
+
result.after_callbacks.run(command, args)
|
59
59
|
else
|
60
60
|
usage(result, out)
|
61
61
|
end
|
data/lib/hanami/cli/errors.rb
CHANGED
@@ -12,5 +12,21 @@ module Hanami
|
|
12
12
|
super("unknown command: `#{command_name}'")
|
13
13
|
end
|
14
14
|
end
|
15
|
+
|
16
|
+
# @since 0.2.0
|
17
|
+
class InvalidCallbackError < Error
|
18
|
+
# @since 0.2.0
|
19
|
+
# @api private
|
20
|
+
def initialize(callback)
|
21
|
+
message = case callback
|
22
|
+
when Class
|
23
|
+
"expected `#{callback.inspect}' to respond to `#initialize' with arity 0"
|
24
|
+
else
|
25
|
+
"expected `#{callback.inspect}' to respond to `#call'"
|
26
|
+
end
|
27
|
+
|
28
|
+
super(message)
|
29
|
+
end
|
30
|
+
end
|
15
31
|
end
|
16
32
|
end
|
data/lib/hanami/cli/registry.rb
CHANGED
@@ -83,9 +83,13 @@ module Hanami
|
|
83
83
|
# Register a before callback.
|
84
84
|
#
|
85
85
|
# @param command_name [String] the name used for command registration
|
86
|
-
# @param callback [
|
86
|
+
# @param callback [Class, #call] the callback object. If a class is given,
|
87
|
+
# it MUST respond to `#call`.
|
88
|
+
# @param blk [Proc] the callback espressed as a block
|
87
89
|
#
|
88
90
|
# @raise [Hanami::CLI::UnkwnownCommandError] if the command isn't registered
|
91
|
+
# @raise [Hanami::CLI::InvalidCallbackError] if the given callback doesn't
|
92
|
+
# implement the required interface
|
89
93
|
#
|
90
94
|
# @since 0.2.0
|
91
95
|
#
|
@@ -106,16 +110,72 @@ module Hanami
|
|
106
110
|
# before "hello", -> { puts "I'm about to say.." }
|
107
111
|
# end
|
108
112
|
# end
|
109
|
-
|
110
|
-
|
113
|
+
#
|
114
|
+
# @example Register an object as callback
|
115
|
+
# require "hanami/cli"
|
116
|
+
#
|
117
|
+
# module Callbacks
|
118
|
+
# class Hello
|
119
|
+
# def call(*)
|
120
|
+
# puts "world"
|
121
|
+
# end
|
122
|
+
# end
|
123
|
+
# end
|
124
|
+
#
|
125
|
+
# module Foo
|
126
|
+
# module Commands
|
127
|
+
# extend Hanami::CLI::Registry
|
128
|
+
#
|
129
|
+
# class Hello < Hanami::CLI::Command
|
130
|
+
# def call(*)
|
131
|
+
# puts "I'm about to say.."
|
132
|
+
# end
|
133
|
+
# end
|
134
|
+
#
|
135
|
+
# register "hello", Hello
|
136
|
+
# before "hello", Callbacks::Hello.new
|
137
|
+
# end
|
138
|
+
# end
|
139
|
+
#
|
140
|
+
# @example Register a class as callback
|
141
|
+
# require "hanami/cli"
|
142
|
+
#
|
143
|
+
# module Callbacks
|
144
|
+
# class Hello
|
145
|
+
# def call(*)
|
146
|
+
# puts "world"
|
147
|
+
# end
|
148
|
+
# end
|
149
|
+
# end
|
150
|
+
#
|
151
|
+
# module Foo
|
152
|
+
# module Commands
|
153
|
+
# extend Hanami::CLI::Registry
|
154
|
+
#
|
155
|
+
# class Hello < Hanami::CLI::Command
|
156
|
+
# def call(*)
|
157
|
+
# puts "I'm about to say.."
|
158
|
+
# end
|
159
|
+
# end
|
160
|
+
#
|
161
|
+
# register "hello", Hello
|
162
|
+
# before "hello", Callbacks::Hello
|
163
|
+
# end
|
164
|
+
# end
|
165
|
+
def before(command_name, callback = nil, &blk)
|
166
|
+
command(command_name).before_callbacks.append(&_callback(callback, blk))
|
111
167
|
end
|
112
168
|
|
113
169
|
# Register an after callback.
|
114
170
|
#
|
115
171
|
# @param command_name [String] the name used for command registration
|
116
|
-
# @param callback [
|
172
|
+
# @param callback [Class, #call] the callback object. If a class is given,
|
173
|
+
# it MUST respond to `#call`.
|
174
|
+
# @param blk [Proc] the callback espressed as a block
|
117
175
|
#
|
118
176
|
# @raise [Hanami::CLI::UnkwnownCommandError] if the command isn't registered
|
177
|
+
# @raise [Hanami::CLI::InvalidCallbackError] if the given callback doesn't
|
178
|
+
# implement the required interface
|
119
179
|
#
|
120
180
|
# @since 0.2.0
|
121
181
|
#
|
@@ -136,8 +196,60 @@ module Hanami
|
|
136
196
|
# after "hello", -> { puts "world" }
|
137
197
|
# end
|
138
198
|
# end
|
139
|
-
|
140
|
-
|
199
|
+
#
|
200
|
+
# @example Register an object as callback
|
201
|
+
# require "hanami/cli"
|
202
|
+
#
|
203
|
+
# module Callbacks
|
204
|
+
# class World
|
205
|
+
# def call(*)
|
206
|
+
# puts "world"
|
207
|
+
# end
|
208
|
+
# end
|
209
|
+
# end
|
210
|
+
#
|
211
|
+
# module Foo
|
212
|
+
# module Commands
|
213
|
+
# extend Hanami::CLI::Registry
|
214
|
+
#
|
215
|
+
# class Hello < Hanami::CLI::Command
|
216
|
+
# def call(*)
|
217
|
+
# puts "hello"
|
218
|
+
# end
|
219
|
+
# end
|
220
|
+
#
|
221
|
+
# register "hello", Hello
|
222
|
+
# after "hello", Callbacks::World.new
|
223
|
+
# end
|
224
|
+
# end
|
225
|
+
#
|
226
|
+
# @example Register a class as callback
|
227
|
+
# require "hanami/cli"
|
228
|
+
#
|
229
|
+
# module Callbacks
|
230
|
+
# class World
|
231
|
+
# def call(*)
|
232
|
+
# puts "world"
|
233
|
+
# end
|
234
|
+
# end
|
235
|
+
# end
|
236
|
+
#
|
237
|
+
# module Foo
|
238
|
+
# module Commands
|
239
|
+
# extend Hanami::CLI::Registry
|
240
|
+
#
|
241
|
+
# class Hello < Hanami::CLI::Command
|
242
|
+
# def call(*)
|
243
|
+
# puts "hello"
|
244
|
+
# end
|
245
|
+
# end
|
246
|
+
#
|
247
|
+
# register "hello", Hello
|
248
|
+
# after "hello", Callbacks::World
|
249
|
+
# end
|
250
|
+
# end
|
251
|
+
def after(command_name, callback = nil, &blk)
|
252
|
+
command(command_name).after_callbacks.append(&_callback(callback, blk))
|
141
253
|
end
|
142
254
|
|
143
255
|
# @since 0.1.0
|
@@ -158,6 +270,28 @@ module Hanami
|
|
158
270
|
end
|
159
271
|
end
|
160
272
|
|
273
|
+
# @since 0.2.0
|
274
|
+
# @api private
|
275
|
+
#
|
276
|
+
# rubocop:disable Metrics/MethodLength
|
277
|
+
def _callback(callback, blk)
|
278
|
+
return blk if blk.respond_to?(:to_proc)
|
279
|
+
|
280
|
+
case callback
|
281
|
+
when ->(c) { c.respond_to?(:call) }
|
282
|
+
callback.method(:call)
|
283
|
+
when Class
|
284
|
+
begin
|
285
|
+
_callback(callback.new, blk)
|
286
|
+
rescue ArgumentError
|
287
|
+
raise InvalidCallbackError.new(callback)
|
288
|
+
end
|
289
|
+
else
|
290
|
+
raise InvalidCallbackError.new(callback)
|
291
|
+
end
|
292
|
+
end
|
293
|
+
# rubocop:enable Metrics/MethodLength
|
294
|
+
|
161
295
|
# Command name prefix
|
162
296
|
#
|
163
297
|
# @since 0.1.0
|
data/lib/hanami/cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanami-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.0.
|
4
|
+
version: 0.2.0.beta2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hanami-utils
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.2.0.
|
19
|
+
version: 1.2.0.beta2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.2.0.
|
26
|
+
version: 1.2.0.beta2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: concurrent-ruby
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|