gli 1.5.1 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/gli.rb CHANGED
@@ -29,6 +29,7 @@ module GLI
29
29
  @@program_desc = nil
30
30
  @@skips_pre = false
31
31
  @@skips_post = false
32
+ @@default_command = :help
32
33
 
33
34
  # Override the device of stderr; exposed only for testing
34
35
  def error_device=(e) #:nodoc:
@@ -44,12 +45,24 @@ module GLI
44
45
  @@config_file = nil
45
46
  @@use_openstruct = false
46
47
  @@prog_desc = nil
48
+ @@default_command = :help
47
49
  clear_nexts
48
50
 
49
51
  desc 'Show this message'
50
52
  switch :help
51
53
  end
52
54
 
55
+ # Sets a default command to run when none is specified on the command line. Note that
56
+ # if you use this, you won't be able to pass arguments, flags, or switches
57
+ # to the command when run in default mode. All flags and switches are treated
58
+ # as global, and any argument will be interpretted as the command name and likely
59
+ # fail.
60
+ #
61
+ # +command+:: Command to run as default
62
+ def default_command(command)
63
+ @@default_command = command.to_sym
64
+ end
65
+
53
66
  # Describe the next switch, flag, or command. This should be a
54
67
  # short, one-line description
55
68
  #
@@ -60,7 +73,7 @@ module GLI
60
73
  # of what your program does that will appear in the help output.
61
74
  #
62
75
  # +description+:: A String of the short description of your program's purpose
63
- def program_desc(description=nil)
76
+ def program_desc(description=nil)
64
77
  if description
65
78
  @@program_desc = description
66
79
  end
@@ -140,7 +153,7 @@ module GLI
140
153
  clear_nexts
141
154
  end
142
155
 
143
- # Sets that this app uses a config file as well as the name of the config file.
156
+ # Sets that this app uses a config file as well as the name of the config file.
144
157
  #
145
158
  # +filename+:: A String representing the path to the file to use for the config file. If it's an absolute
146
159
  # path, this is treated as the path to the file. If it's *not*, it's treated as relative to the user's home
@@ -187,7 +200,7 @@ module GLI
187
200
  # Define a block to run if an error occurs.
188
201
  # The block will receive any Exception that was caught.
189
202
  # It should evaluate to false to avoid the built-in error handling (which basically just
190
- # prints out a message). GLI uses a variety of exceptions that you can use to find out what
203
+ # prints out a message). GLI uses a variety of exceptions that you can use to find out what
191
204
  # errors might've occurred during command-line parsing:
192
205
  # * GLI::CustomExit
193
206
  # * GLI::UnknownCommandArgument
@@ -200,7 +213,7 @@ module GLI
200
213
 
201
214
  # Indicate the version of your application
202
215
  #
203
- # +version+:: String containing the version of your application.
216
+ # +version+:: String containing the version of your application.
204
217
  def version(version)
205
218
  @@version = version
206
219
  end
@@ -215,7 +228,7 @@ module GLI
215
228
  @@use_openstruct = use_openstruct
216
229
  end
217
230
 
218
- # Runs whatever command is needed based on the arguments.
231
+ # Runs whatever command is needed based on the arguments.
219
232
  #
220
233
  # +args+:: the command line ARGV array
221
234
  #
@@ -233,7 +246,7 @@ module GLI
233
246
  global_options = convert_to_openstruct?(global_options)
234
247
  options = convert_to_openstruct?(options)
235
248
  if proceed?(global_options,command,options,arguments)
236
- command = commands[:help] if !command
249
+ command = commands[@@default_command] if !command
237
250
  command.execute(global_options,options,arguments)
238
251
  if !command.skips_post && @@post_block
239
252
  @@post_block.call(global_options,command,options,arguments)
@@ -258,8 +271,8 @@ module GLI
258
271
  def proceed?(global_options,command,options,arguments) #:nodoc:
259
272
  if command && command.skips_pre
260
273
  true
261
- elsif @@pre_block
262
- @@pre_block.call(global_options,command,options,arguments)
274
+ elsif @@pre_block
275
+ @@pre_block.call(global_options,command,options,arguments)
263
276
  else
264
277
  true
265
278
  end
@@ -290,7 +303,7 @@ module GLI
290
303
  msg
291
304
  end
292
305
 
293
- # Simpler means of exiting with a custom exit code. This will
306
+ # Simpler means of exiting with a custom exit code. This will
294
307
  # raise a CustomExit with the given message and exit code, which will ultimatley
295
308
  # cause your application to exit with the given exit_code as its exit status
296
309
  def exit_now!(message,exit_code)
@@ -343,7 +356,7 @@ module GLI
343
356
 
344
357
  # Returns an array of four values:
345
358
  # * global options (as a Hash)
346
- # * Command
359
+ # * Command
347
360
  # * command options (as a Hash)
348
361
  # * arguments (as an Array)
349
362
  def parse_options(args) # :nodoc:
@@ -442,7 +455,7 @@ module GLI
442
455
  try_me = args[0..non_flag_i]
443
456
  rest = args[(non_flag_i+1)..args.length]
444
457
  if all_flags
445
- try_me = args
458
+ try_me = args
446
459
  rest = []
447
460
  end
448
461
 
@@ -468,7 +481,7 @@ module GLI
468
481
  # it, we want to override it with the real value.
469
482
  # HOWEVER, sometimes this happens in reverse, so we want to err on taking the
470
483
  # user-provided, non-default value where possible.
471
- if value
484
+ if value
472
485
  if options[name]
473
486
  options[name] = value if options[name] == flag.default_value
474
487
  else
@@ -485,13 +498,13 @@ module GLI
485
498
  else
486
499
  if command
487
500
  check = rest
488
- check = rest + try_me if all_flags
489
- check.each() do |arg|
501
+ check = rest + try_me if all_flags
502
+ check.each() do |arg|
490
503
  if arg =~ /^\-\-$/
491
504
  try_me.delete arg
492
- break
505
+ break
493
506
  end
494
- raise UnknownCommandArgument.new("Unknown option #{arg}",command) if arg =~ /^\-/
507
+ raise UnknownCommandArgument.new("Unknown option #{arg}",command) if arg =~ /^\-/
495
508
  end
496
509
  return [global_options,command,command_options,try_me + rest]
497
510
  else
data/lib/gli_version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module GLI
2
- VERSION = '1.5.1'
2
+ VERSION = '1.6.0'
3
3
  end
data/lib/support/help.rb CHANGED
@@ -150,32 +150,30 @@ module GLI
150
150
  line_length = Terminal.instance.size[0]
151
151
  end
152
152
  line_padding = sprintf("%#{pad_length}s",'')
153
- words = line.split(/\s+/)
154
- return line if !words || words.empty?
155
- wrapped = ''
156
- while wrapped.length + line_padding.length < line_length
157
- wrapped += ' ' if wrapped.length > 0
158
- word = words.shift
159
- if (wrapped.length + line_padding.length + word.length > line_length)
160
- words.unshift word
161
- break;
162
- end
163
- wrapped += word
164
- return wrapped if words.empty?
153
+ paragraphs = line.split("\n\n").map { |l| l.chomp }.reject { |l| l.empty? }
154
+ wrapped = paragraphs.map do |para|
155
+ paragraph_lines(para, line_length - pad_length).join("\n#{line_padding}")
165
156
  end
166
- wrapped += "\n"
167
- this_line = line_padding
168
- words.each do |word|
169
- if this_line.length + word.length >= line_length
170
- wrapped += this_line
171
- wrapped += "\n"
172
- this_line = line_padding + word
157
+ wrapped.join("\n\n#{line_padding}")
158
+ end
159
+
160
+ # Creates lines of the given column length using the words from the
161
+ # provided paragraph.
162
+ def paragraph_lines(paragraph,line_length)
163
+ lines = []
164
+ this_line = ''
165
+
166
+ paragraph.split(/\s+/).each do |word|
167
+ if this_line.length + word.length + 1 > line_length
168
+ lines << this_line
169
+ this_line = word
173
170
  else
174
- this_line += ' ' if this_line.length > line_padding.length
171
+ this_line += ' ' unless this_line.empty?
175
172
  this_line += word
176
173
  end
177
174
  end
178
- wrapped.chomp!
179
- wrapped + "\n" + this_line
175
+
176
+ lines << this_line
180
177
  end
178
+
181
179
  end
@@ -51,6 +51,7 @@ spec = Gem::Specification.new do |s|
51
51
  # Add your other files here if you make them
52
52
  s.files = %w(
53
53
  bin/#{project_name}
54
+ lib/#{project_name}_version.rb
54
55
  )
55
56
  s.require_paths << 'lib'
56
57
  s.has_rdoc = true
@@ -60,6 +61,7 @@ bin/#{project_name}
60
61
  s.executables << '#{project_name}'
61
62
  s.add_development_dependency('rake')
62
63
  s.add_development_dependency('rdoc')
64
+ s.add_runtime_dependency('gli')
63
65
  end
64
66
  EOS
65
67
  end
metadata CHANGED
@@ -1,188 +1,133 @@
1
1
  --- !ruby/object:Gem::Specification
2
- name: !binary |-
3
- Z2xp
2
+ name: gli
4
3
  version: !ruby/object:Gem::Version
5
- version: 1.5.1
4
+ version: 1.6.0
6
5
  prerelease:
7
6
  platform: ruby
8
7
  authors:
9
- - !binary |-
10
- RGF2aWQgQ29wZWxhbmQ=
8
+ - David Copeland
11
9
  autorequire:
12
- bindir: !binary |-
13
- Ymlu
10
+ bindir: bin
14
11
  cert_chain: []
15
- date: 2012-02-07 00:00:00.000000000 Z
12
+ date: 2012-04-09 00:00:00.000000000Z
16
13
  dependencies:
17
14
  - !ruby/object:Gem::Dependency
18
- name: !binary |-
19
- cmFrZQ==
20
- requirement: &70298245125980 !ruby/object:Gem::Requirement
15
+ name: rake
16
+ requirement: &70269061967140 !ruby/object:Gem::Requirement
21
17
  none: false
22
18
  requirements:
23
- - - !binary |-
24
- fj4=
19
+ - - ~>
25
20
  - !ruby/object:Gem::Version
26
- version: !binary |-
27
- MC45LjIuMg==
21
+ version: 0.9.2.2
28
22
  type: :development
29
23
  prerelease: false
30
- version_requirements: *70298245125980
24
+ version_requirements: *70269061967140
31
25
  - !ruby/object:Gem::Dependency
32
- name: !binary |-
33
- cmRvYw==
34
- requirement: &70298245125280 !ruby/object:Gem::Requirement
26
+ name: rdoc
27
+ requirement: &70269061966560 !ruby/object:Gem::Requirement
35
28
  none: false
36
29
  requirements:
37
- - - !binary |-
38
- fj4=
30
+ - - ~>
39
31
  - !ruby/object:Gem::Version
40
- version: !binary |-
41
- My4xMQ==
32
+ version: '3.11'
42
33
  type: :development
43
34
  prerelease: false
44
- version_requirements: *70298245125280
35
+ version_requirements: *70269061966560
45
36
  - !ruby/object:Gem::Dependency
46
- name: !binary |-
47
- cmVlaw==
48
- requirement: &70298245124700 !ruby/object:Gem::Requirement
37
+ name: reek
38
+ requirement: &70269061965940 !ruby/object:Gem::Requirement
49
39
  none: false
50
40
  requirements:
51
- - - !binary |-
52
- fj4=
41
+ - - ~>
53
42
  - !ruby/object:Gem::Version
54
- version: !binary |-
55
- MS4yLjA=
43
+ version: 1.2.0
56
44
  type: :development
57
45
  prerelease: false
58
- version_requirements: *70298245124700
46
+ version_requirements: *70269061965940
59
47
  - !ruby/object:Gem::Dependency
60
- name: !binary |-
61
- cm9vZGk=
62
- requirement: &70298245123940 !ruby/object:Gem::Requirement
48
+ name: roodi
49
+ requirement: &70269061965300 !ruby/object:Gem::Requirement
63
50
  none: false
64
51
  requirements:
65
- - - !binary |-
66
- fj4=
52
+ - - ~>
67
53
  - !ruby/object:Gem::Version
68
- version: !binary |-
69
- Mi4xLjA=
54
+ version: 2.1.0
70
55
  type: :development
71
56
  prerelease: false
72
- version_requirements: *70298245123940
57
+ version_requirements: *70269061965300
73
58
  - !ruby/object:Gem::Dependency
74
- name: !binary |-
75
- Z3JhbmNoZXI=
76
- requirement: &70298245123160 !ruby/object:Gem::Requirement
59
+ name: grancher
60
+ requirement: &70269061964780 !ruby/object:Gem::Requirement
77
61
  none: false
78
62
  requirements:
79
- - - !binary |-
80
- fj4=
63
+ - - ~>
81
64
  - !ruby/object:Gem::Version
82
- version: !binary |-
83
- MC4xLjU=
65
+ version: 0.1.5
84
66
  type: :development
85
67
  prerelease: false
86
- version_requirements: *70298245123160
68
+ version_requirements: *70269061964780
87
69
  - !ruby/object:Gem::Dependency
88
- name: !binary |-
89
- cmFpbmJvdw==
90
- requirement: &70298245122480 !ruby/object:Gem::Requirement
70
+ name: rainbow
71
+ requirement: &70269061964240 !ruby/object:Gem::Requirement
91
72
  none: false
92
73
  requirements:
93
- - - !binary |-
94
- fj4=
74
+ - - ~>
95
75
  - !ruby/object:Gem::Version
96
- version: !binary |-
97
- MS4xLjE=
76
+ version: 1.1.1
98
77
  type: :development
99
78
  prerelease: false
100
- version_requirements: *70298245122480
79
+ version_requirements: *70269061964240
101
80
  - !ruby/object:Gem::Dependency
102
- name: !binary |-
103
- YXJ1YmE=
104
- requirement: &70298245121760 !ruby/object:Gem::Requirement
81
+ name: aruba
82
+ requirement: &70269061896020 !ruby/object:Gem::Requirement
105
83
  none: false
106
84
  requirements:
107
- - - !binary |-
108
- fj4=
85
+ - - ~>
109
86
  - !ruby/object:Gem::Version
110
- version: !binary |-
111
- MC40Ljc=
87
+ version: 0.4.7
112
88
  type: :development
113
89
  prerelease: false
114
- version_requirements: *70298245121760
115
- description: !binary |-
116
- QW4gYXBwbGljYXRpb24gYW5kIEFQSSBmb3IgZGVzY3JpYmluZyBjb21tYW5k
117
- IGxpbmUgaW50ZXJmYWNlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHF1aWNrbHkg
118
- Y3JlYXRlIGEgc2hlbGwgZm9yIGV4ZWN1dGluZyBjb21tYW5kLWxpbmUgdGFz
119
- a3MuICBUaGUgY29tbWFuZCBsaW5lIHVzZXIgaW50ZXJmYWNlIGlzIHNpbWls
120
- YXIgdG8gR2l0cywgaW4gdGhhdCBpdCB0YWtlcyBnbG9iYWwgb3B0aW9ucywg
121
- YSBjb21tYW5kLCBjb21tYW5kLXNwZWNpZmljIG9wdGlvbnMsIGFuZCBhcmd1
122
- bWVudHM=
123
- email: !binary |-
124
- ZGF2aWRjb3BlbGFuZEBuYWlsZHJpdmluNS5jb20=
90
+ version_requirements: *70269061896020
91
+ description: An application and API for describing command line interfaces that can
92
+ be used to quickly create a shell for executing command-line tasks. The command
93
+ line user interface is similar to Gits, in that it takes global options, a command,
94
+ command-specific options, and arguments
95
+ email: davidcopeland@naildrivin5.com
125
96
  executables:
126
- - !binary |-
127
- Z2xp
97
+ - gli
128
98
  extensions: []
129
99
  extra_rdoc_files:
130
- - !binary |-
131
- UkVBRE1FLnJkb2M=
132
- - !binary |-
133
- Z2xpLnJkb2M=
100
+ - README.rdoc
101
+ - gli.rdoc
134
102
  files:
135
- - !binary |-
136
- bGliL2dsaS9jb21tYW5kLnJi
137
- - !binary |-
138
- bGliL2dsaS9jb21tYW5kX2xpbmVfdG9rZW4ucmI=
139
- - !binary |-
140
- bGliL2dsaS9jb3B5X29wdGlvbnNfdG9fYWxpYXNlcy5yYg==
141
- - !binary |-
142
- bGliL2dsaS9mbGFnLnJi
143
- - !binary |-
144
- bGliL2dsaS9zd2l0Y2gucmI=
145
- - !binary |-
146
- bGliL2dsaS9vcHRpb25zLnJi
147
- - !binary |-
148
- bGliL2dsaS9leGNlcHRpb25zLnJi
149
- - !binary |-
150
- bGliL2dsaS90ZXJtaW5hbC5yYg==
151
- - !binary |-
152
- bGliL2dsaS5yYg==
153
- - !binary |-
154
- bGliL2dsaV92ZXJzaW9uLnJi
155
- - !binary |-
156
- bGliL3N1cHBvcnQvaGVscC5yYg==
157
- - !binary |-
158
- bGliL3N1cHBvcnQvcmRvYy5yYg==
159
- - !binary |-
160
- bGliL3N1cHBvcnQvc2NhZmZvbGQucmI=
161
- - !binary |-
162
- bGliL3N1cHBvcnQvaW5pdGNvbmZpZy5yYg==
163
- - !binary |-
164
- YmluL2dsaQ==
165
- - !binary |-
166
- UkVBRE1FLnJkb2M=
167
- - !binary |-
168
- Z2xpLnJkb2M=
169
- homepage: !binary |-
170
- aHR0cDovL2RhdmV0cm9uNTAwMC5naXRodWIuY29tL2dsaQ==
103
+ - lib/gli/command.rb
104
+ - lib/gli/command_line_token.rb
105
+ - lib/gli/copy_options_to_aliases.rb
106
+ - lib/gli/flag.rb
107
+ - lib/gli/switch.rb
108
+ - lib/gli/options.rb
109
+ - lib/gli/exceptions.rb
110
+ - lib/gli/terminal.rb
111
+ - lib/gli.rb
112
+ - lib/gli_version.rb
113
+ - lib/support/help.rb
114
+ - lib/support/rdoc.rb
115
+ - lib/support/scaffold.rb
116
+ - lib/support/initconfig.rb
117
+ - bin/gli
118
+ - README.rdoc
119
+ - gli.rdoc
120
+ homepage: http://davetron5000.github.com/gli
171
121
  licenses: []
172
122
  post_install_message:
173
123
  rdoc_options:
174
- - !binary |-
175
- LS10aXRsZQ==
176
- - !binary |-
177
- R2l0IExpa2UgSW50ZXJmYWNl
178
- - !binary |-
179
- LS1tYWlu
180
- - !binary |-
181
- UkVBRE1FLnJkb2M=
124
+ - --title
125
+ - Git Like Interface
126
+ - --main
127
+ - README.rdoc
182
128
  require_paths:
183
129
  - lib
184
- - !binary |-
185
- bGli
130
+ - lib
186
131
  required_ruby_version: !ruby/object:Gem::Requirement
187
132
  none: false
188
133
  requirements:
@@ -191,7 +136,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
191
136
  version: '0'
192
137
  segments:
193
138
  - 0
194
- hash: 2888494682899839059
139
+ hash: -3214351787275830697
195
140
  required_rubygems_version: !ruby/object:Gem::Requirement
196
141
  none: false
197
142
  requirements:
@@ -200,14 +145,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
145
  version: '0'
201
146
  segments:
202
147
  - 0
203
- hash: 2888494682899839059
148
+ hash: -3214351787275830697
204
149
  requirements: []
205
- rubyforge_project: !binary |-
206
- Z2xp
150
+ rubyforge_project: gli
207
151
  rubygems_version: 1.8.10
208
152
  signing_key:
209
153
  specification_version: 3
210
- summary: !binary |-
211
- QSBHaXQgTGlrZSBJbnRlcmZhY2UgZm9yIGJ1aWxkaW5nIGNvbW1hbmQgbGlu
212
- ZSBhcHBz
154
+ summary: A Git Like Interface for building command line apps
213
155
  test_files: []