command-set 0.8.3 → 0.8.4

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/doc/GUIDED_TOUR ADDED
@@ -0,0 +1,24 @@
1
+ The quickest way to get a handle on what CommandSet can do for you is to
2
+ look at the various pieces and get a handle on how they work together.
3
+
4
+ The rough sketch is that you enumerate a series of commands, which you then
5
+ feed to an interpreter. The interpreter will set you up with a template for
6
+ your porgram's subject, which you fill in with some defaults. Then, give
7
+ the filled in subject back to the interpreter and let it run.
8
+
9
+ Here's the appropriate places to get started:
10
+
11
+ 0. DSL (Read thoroughly - especially the sub modules)
12
+ 0. BaseInterpreter#subject_template
13
+ 0. BaseInterpreter#subject=
14
+ 0. TextInterpreter#go
15
+
16
+ A couple of handy tricks can be found at
17
+
18
+ 0. BaseInterpreter#process_input
19
+ 0. StandardCommands
20
+ 0. QuickInterpreter
21
+
22
+ More advanced stuff that worth learning once your app is off the ground:
23
+
24
+ 0. Results
data/doc/Specifications CHANGED
@@ -1,4 +1,9 @@
1
1
 
2
+ CommandSet::require_commands
3
+ - should absorb commands from a module
4
+ - should absorb a single command from a module
5
+ - should fail when module doesn't define commands
6
+
2
7
  Empty command set
3
8
  - should_not be nil
4
9
  - should be a CommandSet
@@ -23,6 +28,7 @@ Command::DSL::Argument
23
28
  - should raise a typeerror on an unhandled type
24
29
  - should raise ArgumentError with missing based_on
25
30
  - should decorate arguments as optional
31
+ - should document it's own commands
26
32
 
27
33
  A NumberArgument
28
34
  - should complete arguments in range
@@ -32,20 +38,32 @@ A NumberArgument
32
38
  - should not validate non-numeric input
33
39
  - should consume arguments properly
34
40
 
35
- A FileArgument
41
+ Command::FileArgument
36
42
  - should complete with me
43
+ - should complete with relative path
44
+ - should complete with relative dir
45
+ - should complete at root dir
37
46
  - should complete with list if prefix empty
38
47
  - should validate me
39
48
  - should validate absolute paths
40
49
  - should not validate garbage
41
50
  - should not validate directory
42
51
 
52
+ Command::FileArgument
53
+ - should be able to create with a block
54
+
43
55
  A ArrayArgument
44
56
  - should consume legitimate values
45
57
 
58
+ Command::RestOfLineArgument
59
+ - should consume the rest of the line
60
+
46
61
  A MultiArgument
47
62
  - Should consume what it can, and put the rest back
48
63
 
64
+ Command::Repeating
65
+ - should eat many terms, but not all
66
+
49
67
  Command::AlternatingArgument
50
68
  - should consume to array
51
69
  - should consume to number
@@ -77,12 +95,22 @@ Command::TextInterpreter
77
95
 
78
96
  Command::TextInterpreter all set up
79
97
  - should complete words in the commmand-line
80
- - should process a command-line
98
+ - should fail on missing commands on the commmand-line
99
+ - should fail on ambiguous commands on the commmand-line
100
+ - should complete words from user
101
+ - should process a single command-line
102
+ - should process commands from user
103
+ - should prompt the user and return their answer
81
104
 
82
105
  Command::TextInterpreter with a command with a named argument
83
106
  - should complete words in the commmand-line
84
107
  - should process a command-line
85
108
 
109
+ Command::TextInterpreter with serious problems
110
+ - should ask the user to quit instead of Ctrl-C
111
+ - should catch command errors and continue
112
+ - should catch exceptions and quit
113
+
86
114
  A fresh Subject
87
115
  - should allow a field to be required
88
116
  - should allow multiple fields to be required
@@ -149,10 +177,6 @@ Command::Results::Formatter
149
177
  - should mark up items as directed by Command#format_advice
150
178
 
151
179
  Command::Results::StrategyFormatter
152
- 1
153
- Two
154
- Whoa!
155
- missing
156
180
  - should
157
181
 
158
182
  A command set with the Set command
@@ -176,6 +200,12 @@ A CommandSet with Help
176
200
  - should gracefully recover if a command has nil documentation
177
201
  - should cope with nil command names in full help listing
178
202
 
203
+ #<Command::CommandSet:0xb75fe940>
204
+ - should enter and leave a mode
205
+
206
+ Command::StandardCommand::Resume
207
+ - should pause and resume
208
+
179
209
  Command::OutputStandin undispatched
180
210
  - should return the base IO from getobj
181
211
  - should pass puts unmolested
@@ -214,6 +244,18 @@ Command::Results::Presenter driving a Formatter
214
244
  Command::Results::Presenter driving a strict Formatter
215
245
  - should send notifications in correct order
216
246
 
217
- Finished in 0.24242 seconds
247
+ Command::Results::XMLFormatter
248
+ - should format two lists
249
+
250
+ Command::Results::StrategyFormatter with indent strategy
251
+ - should format two lists
252
+
253
+ Command::Results::StrategyFormatter with chatty strategy
254
+ - should format two lists
255
+
256
+ Command::Results::StrategyFormatter with progress strategy
257
+ - should format two lists
258
+
259
+ Finished in 0.304894 seconds
218
260
 
219
- 137 examples, 0 failures
261
+ 161 examples, 0 failures
@@ -94,7 +94,7 @@ Command::wrap_stdout
94
94
  # automatically gets a command line version, for testing or administrator's
95
95
  # convenience.
96
96
  #
97
- #:include: GUIDED_TOUR
97
+ #:include: doc/GUIDED_TOUR
98
98
  module Command
99
99
  class CommandError < ScriptError; end
100
100
  class CommandException < StandardError
@@ -246,23 +246,6 @@ module Command
246
246
  optional.argument(arg, values, &get_values)
247
247
  end
248
248
 
249
- def optional_arguments(name, &block)
250
- optional.multiword_argument(name, block)
251
- end
252
-
253
- def no_more_required_arguments(*args) #:nodoc:
254
- raise NoMethodError, "Can't define required arguments after optionals"
255
- end
256
- private :no_more_required_arguments
257
-
258
- def stop_requireds #:nodoc:
259
- class << self
260
- alias_method :argument, :no_more_required_arguments
261
- def stop_requireds
262
- end
263
- end
264
- end
265
- private :stop_requireds
266
249
  end
267
250
 
268
251
  extend DSL::CommandDefinition
@@ -282,7 +265,7 @@ module Command
282
265
  @validation_problem = CommandException.new("No arguments provided!")
283
266
  @last_completed_task = DontResume
284
267
  @resume_from = resume
285
- @main_collector = collector
268
+ @main_collector = nil
286
269
  end
287
270
 
288
271
  attr_reader :arg_hash
@@ -443,9 +426,6 @@ module Command
443
426
  return nil
444
427
  end
445
428
 
446
- def collector
447
- end
448
-
449
429
  def validate_arguments
450
430
  raise @validation_problem if Exception === @validation_problem
451
431
  required_arguments.each do |argument|
@@ -418,6 +418,15 @@ Action:: utility functions within the command action block
418
418
  def item(name, options={})
419
419
  @main_collector.item(name, options)
420
420
  end
421
+
422
+ #This returns a new Results::Collector, which can allow for some very
423
+ #sophisticated command output. Specifically, it can allow a command
424
+ #to loop over a large amount of data once, depositing output in
425
+ #multiple lists at once, for instance a status list (with hashmarks)
426
+ #and results(with useful data) list.
427
+ def sub_collector
428
+ @main_collector.dup
429
+ end
421
430
  end
422
431
 
423
432
  #The methods available within the DSL::CommandDefinition#action method
@@ -514,15 +523,6 @@ Action:: utility functions within the command action block
514
523
  raise CommandException, "#{@name} cannot be undone"
515
524
  end
516
525
 
517
- #This returns a new Results::Collector, which can allow for some very
518
- #sophisticated command output. Specifically, it can allow a command
519
- #to loop over a large amount of data once, depositing output in
520
- #multiple lists at once, for instance a status list (with hashmarks)
521
- #and results(with useful data) list.
522
- def sub_collector
523
- @main_collector.dup
524
- end
525
-
526
526
  #This method is deprecated but remains as a nicety. As it stands, any
527
527
  #command can be interrupted at the command line with Ctrl-C, and
528
528
  #return to the prompt.
@@ -248,9 +248,9 @@ module StdCmd
248
248
  @@set = nil
249
249
  def self.define_commands
250
250
  return @@set ||= Command::CommandSet.define_commands do
251
- include_commands Quit
252
- include_commands Undo
253
- include_commands Help
251
+ require_commands Quit
252
+ require_commands Undo
253
+ require_commands Help
254
254
  end
255
255
  end
256
256
  end
@@ -79,6 +79,10 @@ module Command
79
79
  end
80
80
 
81
81
  line = readline(get_prompt, true)
82
+ if line.nil?
83
+ puts
84
+ break
85
+ end
82
86
  next if line.empty?
83
87
  process_line(line)
84
88
  rescue Interrupt
@@ -89,7 +93,9 @@ module Command
89
93
  output_exception("Exception", e)
90
94
  pause_before_dying
91
95
  ensure
92
- set_readline_completion(&old_proc)
96
+ unless old_proc.nil?
97
+ set_readline_completion(&old_proc)
98
+ end
93
99
  end until @stop
94
100
  end
95
101
 
@@ -204,7 +210,7 @@ module Command
204
210
  protected
205
211
  def set_readline_completion(&block)
206
212
  old_proc = Readline.completion_proc
207
- Readline.completion_proc = block
213
+ Readline.completion_proc = proc &block
208
214
  return old_proc
209
215
  end
210
216
 
metadata CHANGED
@@ -3,12 +3,12 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: command-set
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.8.3
7
- date: 2007-12-19 00:00:00 -08:00
6
+ version: 0.8.4
7
+ date: 2007-12-20 00:00:00 -08:00
8
8
  summary: Framework for interactive programs focused around a DSL for commands
9
9
  require_paths:
10
10
  - lib
11
- email: judson@redfivellc.com
11
+ email: nyarly@gmail.com
12
12
  homepage:
13
13
  rubyforge_project:
14
14
  description: CommandSet is a interactive program framework. Its focus is a DSL for defining commands, much like Rake or RSpec. The actual interpreter is left as an open question, although a default readline based terminal interpreter is included, it could very well be adapted to interact with CGI or a GUI.
@@ -45,6 +45,7 @@ files:
45
45
  - lib/command-set/quick-interpreter.rb
46
46
  - lib/command-set/batch-interpreter.rb
47
47
  - doc/README
48
+ - doc/GUIDED_TOUR
48
49
  - doc/Specifications
49
50
  - doc/argumentDSL
50
51
  test_files: []
@@ -55,8 +56,11 @@ rdoc_options:
55
56
  - --main
56
57
  - Command
57
58
  - --title
58
- - command-set-0.8.3 RDoc
59
+ - command-set-0.8.4 RDoc
59
60
  extra_rdoc_files:
61
+ - doc/README
62
+ - doc/GUIDED_TOUR
63
+ - doc/Specifications
60
64
  - doc/argumentDSL
61
65
  executables: []
62
66