command-set 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/doc/README +2 -0
- data/doc/Specifications +219 -0
- data/doc/argumentDSL +36 -0
- data/lib/command-set/arguments.rb +547 -0
- data/lib/command-set/batch-interpreter.rb +0 -0
- data/lib/command-set/command-set.rb +282 -0
- data/lib/command-set/command.rb +456 -0
- data/lib/command-set/dsl.rb +526 -0
- data/lib/command-set/interpreter.rb +196 -0
- data/lib/command-set/og.rb +615 -0
- data/lib/command-set/quick-interpreter.rb +91 -0
- data/lib/command-set/result-list.rb +300 -0
- data/lib/command-set/results.rb +754 -0
- data/lib/command-set/standard-commands.rb +243 -0
- data/lib/command-set/subject.rb +91 -0
- data/lib/command-set/text-interpreter.rb +171 -0
- data/lib/command-set.rb +3 -0
- metadata +70 -0
data/doc/README
ADDED
data/doc/Specifications
ADDED
@@ -0,0 +1,219 @@
|
|
1
|
+
|
2
|
+
Empty command set
|
3
|
+
- should_not be nil
|
4
|
+
- should be a CommandSet
|
5
|
+
|
6
|
+
A CommandSet without a root command
|
7
|
+
- should fail on missing commands
|
8
|
+
|
9
|
+
An established command set
|
10
|
+
- should add all properties to subject
|
11
|
+
- should return Command class on configured classes
|
12
|
+
- should find the root command with an argument
|
13
|
+
- should return subcommands
|
14
|
+
- should accept new commands in a subcommand
|
15
|
+
- should add Command objects
|
16
|
+
- should have Commands that know their own paths
|
17
|
+
|
18
|
+
Command::DSL::Argument
|
19
|
+
- should create an ArrayArgument from an array
|
20
|
+
- should create a StringArgument from a string
|
21
|
+
- should create a ProcArgument from a proc
|
22
|
+
- should create a NumberArgument from a range
|
23
|
+
- should raise a typeerror on an unhandled type
|
24
|
+
- should raise ArgumentError with missing based_on
|
25
|
+
- should decorate arguments as optional
|
26
|
+
|
27
|
+
A NumberArgument
|
28
|
+
- should complete arguments in range
|
29
|
+
- should validate zero
|
30
|
+
- should validate numbers
|
31
|
+
- should not validate numbers out of range
|
32
|
+
- should not validate non-numeric input
|
33
|
+
- should consume arguments properly
|
34
|
+
|
35
|
+
A FileArgument
|
36
|
+
- should complete with me
|
37
|
+
- should complete with list if prefix empty
|
38
|
+
- should validate me
|
39
|
+
- should validate absolute paths
|
40
|
+
- should not validate garbage
|
41
|
+
- should not validate directory
|
42
|
+
|
43
|
+
A ArrayArgument
|
44
|
+
- should consume legitimate values
|
45
|
+
|
46
|
+
A MultiArgument
|
47
|
+
- Should consume what it can, and put the rest back
|
48
|
+
|
49
|
+
Command::AlternatingArgument
|
50
|
+
- should consume to array
|
51
|
+
- should consume to number
|
52
|
+
- should raise with invalid arguments
|
53
|
+
|
54
|
+
Command::AlternatingArgument with reused subargument names
|
55
|
+
- should consume to array
|
56
|
+
- should consume to number
|
57
|
+
- should raise with invalid arguments
|
58
|
+
|
59
|
+
Command::CommandSetup
|
60
|
+
- should create Command from complete path
|
61
|
+
- should create Command from command path and arg hash
|
62
|
+
- should create Command from command path and arg hash (string keys)
|
63
|
+
- should create Command from incomplete path and arg hash
|
64
|
+
- should create Command from class and arg hash
|
65
|
+
|
66
|
+
Command::TextInterpreter
|
67
|
+
- should verify and return the subject that it's passed
|
68
|
+
- should set up and verify an actual subject
|
69
|
+
- should return the same command_set it's assigned
|
70
|
+
- should raise Runtime Error if told to start without subject
|
71
|
+
- should split line at spaces
|
72
|
+
- should split around quoted strings
|
73
|
+
- should not split escaped spaces
|
74
|
+
- should safely absorb wrapping spaces
|
75
|
+
- should ignore embedded quotes
|
76
|
+
- should ignore escaped quotes
|
77
|
+
|
78
|
+
Command::TextInterpreter all set up
|
79
|
+
- should complete words in the commmand-line
|
80
|
+
- should process a command-line
|
81
|
+
|
82
|
+
Command::TextInterpreter with a command with a named argument
|
83
|
+
- should complete words in the commmand-line
|
84
|
+
- should process a command-line
|
85
|
+
|
86
|
+
A fresh Subject
|
87
|
+
- should allow a field to be required
|
88
|
+
- should allow multiple fields to be required
|
89
|
+
|
90
|
+
A Subject with required fields
|
91
|
+
- should not verify if fields are not set
|
92
|
+
- should not verify if some fields are not set
|
93
|
+
- should verify if all fields are set
|
94
|
+
- should not respond to field read methods
|
95
|
+
- should spawn SubjectImage objects that do respond to readers
|
96
|
+
|
97
|
+
Command::Results::ListIterator
|
98
|
+
- should traverse list in tree order
|
99
|
+
|
100
|
+
Command::Results::List
|
101
|
+
- should compare to similar lists as similar
|
102
|
+
- should compare to different lists as different
|
103
|
+
- should filter lists by path
|
104
|
+
- should raise NoMatch for unmatched path
|
105
|
+
- should filter lists with wildcard list
|
106
|
+
- should treat lonely double-star as an identity
|
107
|
+
- should filter lists with double-star lists
|
108
|
+
- should filter lists with wildcard item
|
109
|
+
|
110
|
+
A fresh Command
|
111
|
+
- should return name properly
|
112
|
+
- should complete with empty arguments
|
113
|
+
- should raise NoMethodError if a required argument is defined after optionals
|
114
|
+
|
115
|
+
A Command with a required argument
|
116
|
+
- should complain if it's run without having been given arguments
|
117
|
+
- should complain if it's given fewer arguments than it requires
|
118
|
+
- should silently not complete extra arguments
|
119
|
+
|
120
|
+
A Command with a MultiArgument
|
121
|
+
- should complete with empty string
|
122
|
+
- should complete with Multi three times
|
123
|
+
- should complete with Multi and then Proc
|
124
|
+
- should complete with just Proc
|
125
|
+
|
126
|
+
A Command with an alternating argument
|
127
|
+
- should consume to array
|
128
|
+
- should consume to number
|
129
|
+
- should silently not complete extra arguments
|
130
|
+
- should raise with invalid arguments
|
131
|
+
- should successfully consume a hash of arguments
|
132
|
+
|
133
|
+
Command::Command with tasks
|
134
|
+
- should stop and return information for resuming
|
135
|
+
- should resume after the designated task
|
136
|
+
|
137
|
+
A chain of commands
|
138
|
+
- should chain with a complete command path
|
139
|
+
- should chain when an optional argument is omitted
|
140
|
+
- should chain with a path to the command and hashed args
|
141
|
+
- should chain with mixed and overlapping terms
|
142
|
+
- should chain with a class and an arg hash
|
143
|
+
|
144
|
+
Command::Results::Formatter
|
145
|
+
- should process into the correct list
|
146
|
+
- should allow explicit options to come through from command
|
147
|
+
- should allow explicit list options through
|
148
|
+
- should mark up items as directed by Command#format_advice
|
149
|
+
- should mark up items as directed by Command#format_advice
|
150
|
+
|
151
|
+
Command::Results::StrategyFormatter
|
152
|
+
1
|
153
|
+
Two
|
154
|
+
Whoa!
|
155
|
+
missing
|
156
|
+
- should
|
157
|
+
|
158
|
+
A command set with the Set command
|
159
|
+
- should actually have the set command
|
160
|
+
- should reply to empty arguments with first level keys
|
161
|
+
- should reply to key with value
|
162
|
+
- should reply to subkeys with key list
|
163
|
+
- should silently modify values
|
164
|
+
- should modify deep values
|
165
|
+
|
166
|
+
A CommandSet with Set and Undo
|
167
|
+
- should actually have the set and undo commands
|
168
|
+
- should report an error on impossible undo
|
169
|
+
- should return to original value following undo
|
170
|
+
|
171
|
+
A CommandSet with Help
|
172
|
+
- should actually have the help command
|
173
|
+
- should return useful text in response to "help"
|
174
|
+
- should return useful text in response to "help help"
|
175
|
+
- should wrap to 78 characters on "help long_winded"
|
176
|
+
- should gracefully recover if a command has nil documentation
|
177
|
+
- should cope with nil command names in full help listing
|
178
|
+
|
179
|
+
Command::OutputStandin undispatched
|
180
|
+
- should return the base IO from getobj
|
181
|
+
- should pass puts unmolested
|
182
|
+
|
183
|
+
Command::OutputStandin dispatched to a collector
|
184
|
+
- should return the base IO from getobj
|
185
|
+
- should send #puts to the collector
|
186
|
+
- should send #p to the collector
|
187
|
+
- should go back to sending puts to IO if collector removed
|
188
|
+
|
189
|
+
Command::OutputStandin dispatched via thread
|
190
|
+
- should return the base IO from getobj
|
191
|
+
- should send #puts to the collector
|
192
|
+
- should send #p to the collector
|
193
|
+
- should go back to sending puts to IO if collector removed
|
194
|
+
|
195
|
+
Command::Results::Collector
|
196
|
+
- should spawn dispatchers
|
197
|
+
|
198
|
+
Command::Results::Collector sending messages
|
199
|
+
- should send simple #item calls to its presenter
|
200
|
+
- should send begin_list and end list calls to presenter
|
201
|
+
- should prefix items with list nesting
|
202
|
+
|
203
|
+
Command::Results::Presenter
|
204
|
+
- should collect items
|
205
|
+
- should nest lists
|
206
|
+
- should complain about lists not begun
|
207
|
+
- should complain about mis-nested item
|
208
|
+
|
209
|
+
Command::Results::Presenter driving a Formatter
|
210
|
+
- should emit #saw_item before #closed_item
|
211
|
+
- should emit #closed_item within known tree order
|
212
|
+
- should emit #closed_item only once per item
|
213
|
+
|
214
|
+
Command::Results::Presenter driving a strict Formatter
|
215
|
+
- should send notifications in correct order
|
216
|
+
|
217
|
+
Finished in 0.174402 seconds
|
218
|
+
|
219
|
+
137 examples, 0 failures
|
data/doc/argumentDSL
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
There are two kinds of methods available for Command::DSL::Argument.
|
2
|
+
First there are decorators. They mark up arguments with extra
|
3
|
+
meaning, like being optional. The second are actual argument
|
4
|
+
creation calls, which are shorthand for something like
|
5
|
+
argument FiddlyArgument {}
|
6
|
+
|
7
|
+
In general, you'll use these something like
|
8
|
+
|
9
|
+
decorator.decorator.shorthand_argument "name"
|
10
|
+
|
11
|
+
For instance
|
12
|
+
|
13
|
+
named.optional.file_argument "config"
|
14
|
+
|
15
|
+
Decorator methods, and the classes they add:
|
16
|
+
|
17
|
+
+multi+:: AlternatingArgument
|
18
|
+
+named+:: Named
|
19
|
+
+optional+:: Optional
|
20
|
+
+alternating+:: AlternatingArgument
|
21
|
+
|
22
|
+
The shorthand argument methods are:
|
23
|
+
|
24
|
+
+regexp_argument+:: RegexpArgument
|
25
|
+
+multiword_argument+:: MultiArgument
|
26
|
+
+array_argument+:: ArrayArgument
|
27
|
+
+string_argument+:: StringArgument
|
28
|
+
+file_argument+:: FileArgument
|
29
|
+
+any_argument+:: StringArgument
|
30
|
+
+nonvalidating_proc_argument+:: NoValidateProcArgument
|
31
|
+
+number_argument+:: NumberArgument
|
32
|
+
+choose_argument+:: ArrayArgument
|
33
|
+
+proc_argument+:: ProcArgument
|
34
|
+
+regex_argument+:: RegexpArgument
|
35
|
+
|
36
|
+
Don't forget about #alternating_argument and #argument itself!
|