thunder 0.5.1 → 0.5.2

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.
@@ -25,20 +25,33 @@ module Thunder
25
25
  #!/bin/bash
26
26
 
27
27
  % progname = File.basename(ARGV.first)
28
- __<%= progname %>_command_list() {
29
- echo "<%= thunder_commands(thunder).join(" ") %>"
28
+ __<%= progname %>_commands() {
29
+ echo "<%= thunder_commands(thunder).join(" ") %>"
30
30
  }
31
-
32
- #TODO: get the options to be completed as well
33
31
  % thunder[:commands].each do |name, command|
34
- % next unless command[:options]
35
- __<%= progname %>_<%= name.to_s %>_options_list() {
36
- echo "<%= thunder_options(command).join(" ") %>"
32
+ % name = name.to_s
33
+ % if command[:options]
34
+
35
+ __<%= progname %>_<%= name %>_options() {
36
+ echo "<%= thunder_options(command).join(" ") %>"
37
37
  }
38
+ % end
38
39
  % end
39
40
 
40
41
  __<%= progname %>_complete() {
41
- COMPREPLY=($(compgen -W "$(__<%= progname %>_command_list)" -- ${COMP_WORDS[COMP_CWORD]}))
42
+ local words=""
43
+ if [[ ${COMP_WORDS[COMP_CWORD]:0:1} == "-" ]]; then
44
+ if ((COMP_CWORD == 1)); then
45
+ words=
46
+ else
47
+ local command="__<%= progname %>_${COMP_WORDS[1]}_options"
48
+ words=$($command)
49
+ fi
50
+ elif ((COMP_CWORD == 1)); then
51
+ # display only commands
52
+ words=$(__<%= progname %>_commands)
53
+ fi
54
+ COMPREPLY=($(compgen -W "$words" -- ${COMP_WORDS[COMP_CWORD]}))
42
55
  }
43
56
 
44
57
  complete -o default -o nospace -F __<%= progname %>_complete <%= progname %>
data/bin/thunder-spec ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'thunder'
4
+ require 'pp'
5
+
6
+ module Thunder
7
+ def start(args=ARGV.dup, options={})
8
+ spec = self.class.thunder
9
+ pp renderThunderSpec(spec)
10
+ end
11
+ end
12
+
13
+ def renderThunderSpec(spec)
14
+ spec[:commands].each do |name, command|
15
+ command[:subcommand] = renderThunderSpec(command[:subcommand].class.thunder) if command[:subcommand]
16
+ end
17
+ spec
18
+ end
19
+
20
+ if ARGV.size != 1
21
+ puts "Usage: thunder-spec THUNDER_SCRIPT"
22
+ puts
23
+ puts "Dumps the thunder spec to the command line for debugging and analysis"
24
+ exit 1
25
+ end
26
+
27
+ load File.expand_path(ARGV.first)
data/lib/thunder.rb CHANGED
@@ -134,15 +134,8 @@ module Thunder
134
134
  # @api private
135
135
  # Registers a method as a thunder task
136
136
  def method_added(method)
137
- attributes = [:usage, :description, :options, :long_description]
138
- return unless attributes.reduce(nil) { |a, key| a || thunder[key] }
139
- thunder[:commands][method] = {
140
- name: method,
141
- }
142
- attributes.each do |key|
143
- thunder[:commands][method][key] = thunder[key]
144
- thunder[key] = nil
145
- end
137
+ add_command(method.to_sym)
138
+ thunder[:commands][method][:params] = instance_method(method).parameters
146
139
  end
147
140
 
148
141
  # Set the options processor.
@@ -196,7 +189,6 @@ module Thunder
196
189
  # @example
197
190
  # option "verbose", desc: "print extra information"
198
191
  def option(name, options={})
199
- #TODO: have this generate YARDoc for the option (as it should match a method option)
200
192
  name = name.to_sym
201
193
  options[:name] = name
202
194
  options[:short] ||= name[0]
@@ -211,9 +203,20 @@ module Thunder
211
203
  # @param command [Symbol,String] the command that transfers processing to the provided handler
212
204
  # @param handler [Thunder] the handler that processes the request
213
205
  def subcommand(command, handler)
214
- method_added(command.to_sym)
206
+ add_command(command.to_sym)
215
207
  thunder[:commands][command.to_sym][:subcommand] = handler
216
208
  end
217
209
 
210
+ private
211
+ def add_command(command)
212
+ attributes = [:usage, :description, :options, :long_description]
213
+ return unless attributes.reduce(nil) { |a, key| a || thunder[key] }
214
+ thunder[:commands][command] = {
215
+ name: command,
216
+ }
217
+ attributes.each do |key|
218
+ thunder[:commands][command][key] = thunder.delete(key)
219
+ end
220
+ end
218
221
  end
219
222
  end
@@ -1,4 +1,4 @@
1
1
  module Thunder
2
2
  # Version string for gemspec
3
- VERSION = "0.5.1"
3
+ VERSION = "0.5.2"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thunder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-31 00:00:00.000000000 Z
12
+ date: 2013-01-01 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Thunder does command line interfaces. Nothing more, nothing less.
15
15
  email: steven.karas@gmail.com
16
16
  executables:
17
+ - thunder-spec
17
18
  - thunder-completion
18
19
  extensions: []
19
20
  extra_rdoc_files: []
@@ -27,6 +28,7 @@ files:
27
28
  - Rakefile
28
29
  - DESIGN.md
29
30
  - README.md
31
+ - bin/thunder-spec
30
32
  - bin/thunder-completion
31
33
  homepage: http://stevenkaras.github.com/thunder
32
34
  licenses: []