thunder 0.5.2 → 0.5.3

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.
data/README.md CHANGED
@@ -7,6 +7,10 @@ Usage
7
7
 
8
8
  gem install thunder
9
9
 
10
+ or if you're running [ruby 1.8.7](http://www.ruby-lang.org/en/news/2011/10/06/plans-for-1-8-7):
11
+
12
+ gem install thunder-1.8.7
13
+
10
14
  see '[sample](http://github.com/stevenkaras/thunder/blob/master/sample)' for a quick overview of all features
11
15
 
12
16
  Philosophy
@@ -21,13 +25,13 @@ Goals
21
25
  -----
22
26
  Provide a simple, DRY syntatic sugar library that provides the necessary services to create command line mappings to ruby methods. It will not provide any other services.
23
27
 
24
- Development Phases
28
+ Notable features as of the current release:
25
29
 
26
- 1. call a method from the command line
27
- 2. provide options and arguments
28
- 3. provide help/banner formatter
29
- 4. provide yardoc integration
30
- 5. provide a bash-completion script
30
+ * options parsing for commands
31
+ * default commands
32
+ * subcommands (ala git)
33
+ * integrated help system
34
+ * bash completion script generator
31
35
 
32
36
  Development
33
37
  -----------
@@ -35,4 +39,4 @@ If you'd like to contribute, fork, commit, and request a pull. I'll get around t
35
39
 
36
40
  License
37
41
  -------
38
- MIT License
42
+ MIT License
@@ -3,8 +3,8 @@
3
3
  require 'thunder'
4
4
  require 'erb'
5
5
 
6
- def thunder_commands(bolt)
7
- bolt[:commands].map(&:first).map(&:to_s)
6
+ def thunder_commands(spec)
7
+ spec[:commands].map(&:first).map(&:to_s)
8
8
  end
9
9
 
10
10
  def thunder_options(command)
@@ -19,53 +19,63 @@ def thunder_options(command)
19
19
  return result
20
20
  end
21
21
 
22
- module Thunder
23
- def start(args=ARGV.dup, options={})
24
- template = ERB.new <<-TEMPLATE, nil, "%"
25
- #!/bin/bash
22
+ def indent(text, amount, indent=" ")
23
+ result = ""
24
+ text.lines do |line|
25
+ result << indent * amount + line
26
+ end
27
+ return result
28
+ end
26
29
 
27
- % progname = File.basename(ARGV.first)
28
- __<%= progname %>_commands() {
29
- echo "<%= thunder_commands(thunder).join(" ") %>"
30
- }
31
- % thunder[:commands].each do |name, command|
30
+ def thunder_completion(depth, spec)
31
+ template = ERB.new <<-TEMPLATE, nil, "%>"
32
+ if ((COMP_CWORD == <%= depth+1 %>)); then
33
+ # display only commands
34
+ words="<%= thunder_commands(spec).join(" ") %>"
35
+ else
36
+ case ${COMP_WORDS[<%= depth+1 %>]} in
37
+ % spec[:commands].each do |name, command|
32
38
  % name = name.to_s
39
+ <%= name %>)
40
+ % if name == "help"
41
+ words="<%= thunder_commands(spec).join(" ") %>"
42
+ % end
33
43
  % if command[:options]
34
-
35
- __<%= progname %>_<%= name %>_options() {
36
- echo "<%= thunder_options(command).join(" ") %>"
37
- }
44
+ if [[ ${COMP_WORDS[COMP_CWORD]:0:1} == "-" ]]; then
45
+ words="<%= thunder_options(command).join(" ") %>"
46
+ fi
47
+ % end
48
+ % if command[:subcommand]
49
+ <%= indent(thunder_completion(depth+1, command[:subcommand].class.thunder), 8) %>
38
50
  % end
51
+ ;;
39
52
  % end
53
+ esac
54
+ fi
55
+ TEMPLATE
56
+ return template.result(binding)
57
+ end
40
58
 
41
- __<%= progname %>_complete() {
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
59
+ module Thunder
60
+ def start(args=ARGV.dup, options={})
61
+ template = ERB.new <<-TEMPLATE, nil, "%>"
62
+ #!/bin/bash
63
+
64
+ % progname = File.basename(ARGV.first)
65
+ __<%= progname %>_completion() {
66
+ local words=""
67
+ <%= indent(thunder_completion(0, self.class.thunder), 4) %>
54
68
  COMPREPLY=($(compgen -W "$words" -- ${COMP_WORDS[COMP_CWORD]}))
55
69
  }
56
70
 
57
- complete -o default -o nospace -F __<%= progname %>_complete <%= progname %>
58
-
71
+ complete -o default -o nospace -F __<%= progname %>_completion <%= progname %>
59
72
  TEMPLATE
60
- context = (proc { |thiz, thunder|
61
- binding
62
- }).call(self, self.class.thunder)
63
- puts template.result(context)
73
+ puts template.result(binding)
64
74
  end
65
75
  end
66
76
 
67
77
  if ARGV.size != 1
68
- puts "Usage: thunder-completion THUNDER_SCRIPT"
78
+ puts "Usage: #{File.basename(__FILE__)} THUNDER_SCRIPT"
69
79
  puts
70
80
  puts "Prints out the suggested template for a bash completion script for the given thunder script"
71
81
  exit 1
@@ -18,7 +18,7 @@ def renderThunderSpec(spec)
18
18
  end
19
19
 
20
20
  if ARGV.size != 1
21
- puts "Usage: thunder-spec THUNDER_SCRIPT"
21
+ puts "Usage: #{File.basename(__FILE__)} THUNDER_SCRIPT"
22
22
  puts
23
23
  puts "Dumps the thunder spec to the command line for debugging and analysis"
24
24
  exit 1
@@ -54,7 +54,7 @@ Usage:
54
54
  end
55
55
 
56
56
  # determine the preamble
57
- #
57
+ #
58
58
  # @return [String] the preamble
59
59
  def determine_preamble
60
60
  preamble = "#{File.basename($0)}"
@@ -80,15 +80,15 @@ Usage:
80
80
  # @param separator [String]
81
81
  # @return [String] a two-column table
82
82
  def render_table(data, separator = " # ")
83
- column_width = data.group_by do |data|
84
- data.first.size
83
+ column_width = data.group_by do |row|
84
+ row.first.size
85
85
  end.max.first
86
86
  "".tap do |output|
87
- data.each do |line|
88
- output << "%-#{column_width}s#{separator}%s\n" % line
87
+ data.each do |row|
88
+ output << "%-#{column_width}s#{separator}%s\n" % row
89
89
  end
90
90
  end
91
91
  end
92
92
  end
93
93
  end
94
- end
94
+ end
@@ -1,4 +1,4 @@
1
1
  module Thunder
2
2
  # Version string for gemspec
3
- VERSION = "0.5.2"
3
+ VERSION = "0.5.3"
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.2
4
+ version: 0.5.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-01 00:00:00.000000000 Z
12
+ date: 2013-01-02 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