objective_command 0.1.5.0
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/AUTHORS +5 -0
- data/ChangeLog +17 -0
- data/NEWS +3 -0
- data/README +2 -0
- data/Rakefile +8 -0
- data/SPEC.gemspec +15 -0
- data/SPEC.yml +43 -0
- data/bin/ocmd +32 -0
- data/lib/hookable.rb +284 -0
- data/lib/hooker.rb +47 -0
- data/lib/objective_command/all.rb +32 -0
- data/lib/objective_command/commands/command.rb +535 -0
- data/lib/objective_command/commands/factory.rb +69 -0
- data/lib/objective_command/commands/pipe.rb +121 -0
- data/lib/objective_command/commands/seq.rb +35 -0
- data/lib/objective_command/datas/composite.rb +55 -0
- data/lib/objective_command/datas/data.rb +175 -0
- data/lib/objective_command/datas/factory.rb +74 -0
- data/lib/objective_command/datas/pipe.rb +55 -0
- data/lib/objective_command/datas/temp.rb +24 -0
- data/lib/objective_command/datas.rb +11 -0
- data/lib/objective_command/helpers.rb +113 -0
- data/lib/objective_command/runners/exec.rb +46 -0
- data/lib/objective_command/runners/fork.rb +91 -0
- data/lib/objective_command/runners/mockable.rb +62 -0
- data/lib/objective_command/runners/no_run.rb +44 -0
- data/lib/objective_command/runners/popen.rb +49 -0
- data/lib/objective_command/runners/runner.rb +227 -0
- data/lib/objective_command/runners/system.rb +54 -0
- data/lib/objective_command/runners.rb +11 -0
- data/lib/objective_command/shell.rb +173 -0
- data/lib/objective_command/version_id.rb +10 -0
- data/lib/objective_command.rb +54 -0
- data/test/check-objective_command.yml +10 -0
- data/test/check-pkg-objective_command.yml +13 -0
- data/test/sanity/multiple-requires.yml +62 -0
- data/test/sanity/single-requires.yml +40 -0
- data/test/sanity-suite.yml +10 -0
- data/test/unit-suite.yml +14 -0
- metadata +97 -0
data/AUTHORS
ADDED
data/ChangeLog
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
2005-10-05 Nicolas Pouillard <ertai@lrde.epita.fr>
|
2
|
+
|
3
|
+
Initial checkin.
|
4
|
+
|
5
|
+
* test: New.
|
6
|
+
* test/unit: New.
|
7
|
+
* test/functional: New.
|
8
|
+
* test/sanity: New.
|
9
|
+
* test/fixtures: New.
|
10
|
+
* Rakefile: New.
|
11
|
+
* AUTHORS: New.
|
12
|
+
* lib: New.
|
13
|
+
* bin: New.
|
14
|
+
* SPEC.yml: New.
|
15
|
+
* vcs: New.
|
16
|
+
* vcs/commands_vcs.rb: New.
|
17
|
+
|
data/README
ADDED
data/Rakefile
ADDED
data/SPEC.gemspec
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = %q{objective_command}
|
3
|
+
s.version = "0.1.5.0"
|
4
|
+
s.date = %q{2007-01-14}
|
5
|
+
s.summary = %q{ObjectiveCommand}
|
6
|
+
s.email = ["ertai@feydakins.org"]
|
7
|
+
s.homepage = %q{http://api.feydakins.org/objective_command}
|
8
|
+
s.rubyforge_project = %q{objective_command}
|
9
|
+
s.description = %q{}
|
10
|
+
s.default_executable = %q{ocmd}
|
11
|
+
s.authors = ["Nicolas Pouillard"]
|
12
|
+
s.files = ["lib/hookable.rb", "lib/hooker.rb", "lib/objective_command.rb", "lib/objective_command/all.rb", "lib/objective_command/datas.rb", "lib/objective_command/helpers.rb", "lib/objective_command/runners.rb", "lib/objective_command/shell.rb", "lib/objective_command/version_id.rb", "lib/objective_command/commands/command.rb", "lib/objective_command/commands/factory.rb", "lib/objective_command/commands/pipe.rb", "lib/objective_command/commands/seq.rb", "lib/objective_command/datas/composite.rb", "lib/objective_command/datas/data.rb", "lib/objective_command/datas/factory.rb", "lib/objective_command/datas/pipe.rb", "lib/objective_command/datas/temp.rb", "lib/objective_command/runners/exec.rb", "lib/objective_command/runners/fork.rb", "lib/objective_command/runners/mockable.rb", "lib/objective_command/runners/no_run.rb", "lib/objective_command/runners/popen.rb", "lib/objective_command/runners/runner.rb", "lib/objective_command/runners/system.rb", "test/check-objective_command.yml", "test/check-pkg-objective_command.yml", "test/fixtures", "test/functional", "test/sanity", "test/sanity-suite.yml", "test/unit", "test/unit-suite.yml", "test/sanity/multiple-requires.yml", "test/sanity/single-requires.yml", "bin/ocmd", "AUTHORS", "ChangeLog", "NEWS", "Rakefile", "README", "SPEC.gemspec", "SPEC.yml"]
|
13
|
+
s.executables = ["ocmd"]
|
14
|
+
s.add_dependency(%q<core_ex>, ["~> 0.6.5"])
|
15
|
+
end
|
data/SPEC.yml
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
---
|
2
|
+
Author: The Uttk Team
|
3
|
+
License: Ruby License
|
4
|
+
Revision: '$Id$'
|
5
|
+
|
6
|
+
version: !feydakins.org,2006/version dev-ruby/objective_command-0.1
|
7
|
+
|
8
|
+
# XXX also check lib/objective_command/version_id.rb
|
9
|
+
|
10
|
+
title: ObjectiveCommand
|
11
|
+
summary: ObjectiveCommand
|
12
|
+
description: ""
|
13
|
+
homepage: http://api.feydakins.org/objective_command
|
14
|
+
|
15
|
+
user: ertai
|
16
|
+
rubyforge_project: ttk
|
17
|
+
rubyforge_sub_package_name: objective_command
|
18
|
+
|
19
|
+
root_test_suite: test/check-pkg-objective_command.yml
|
20
|
+
rdoc_dir: doc/html
|
21
|
+
tags_url: svn://svn.feydakins.org/objective_command/tags
|
22
|
+
trunk_url: svn://svn.feydakins.org/objective_command/trunk
|
23
|
+
version_id.rb: !path lib/objective_command/version_id.rb
|
24
|
+
|
25
|
+
rdoc_files: !filelist
|
26
|
+
- README
|
27
|
+
- AUTHORS
|
28
|
+
- NEWS
|
29
|
+
- lib/**/*.rb
|
30
|
+
|
31
|
+
pkg_files: !filelist
|
32
|
+
- lib/**/*.rb
|
33
|
+
- test/**/*
|
34
|
+
- bin/**/*
|
35
|
+
- '[A-Z]*'
|
36
|
+
|
37
|
+
dependencies:
|
38
|
+
core_ex:
|
39
|
+
gem : ~> 0.6.5
|
40
|
+
tarball: http://rubyforge.iasi.roedu.net/files/ttk/core_ex-0.6.tar.gz
|
41
|
+
vcs : svn://svn.feydakins.org/ruby_ex/trunk/core_ex
|
42
|
+
|
43
|
+
uttk_version: >= 0.3.6.1
|
data/bin/ocmd
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'pathname'
|
4
|
+
require Pathname.new(__FILE__).dirname.parent + 'lib/objective_command/all'
|
5
|
+
require 'irb'
|
6
|
+
require 'irb/completion'
|
7
|
+
singleton_class.include OCmd::Shell::MethodMissing
|
8
|
+
self.runner = OCmd::Runners::System.new
|
9
|
+
RUNNER = runner
|
10
|
+
runner.subscribe_hook(:before_return) do |_, data|
|
11
|
+
suppress(IOError) { data.display }
|
12
|
+
end
|
13
|
+
module IRB
|
14
|
+
def IRB.start_ocmd
|
15
|
+
IRB.setup(nil)
|
16
|
+
@CONF[:IRB_NAME] = 'ocmd'
|
17
|
+
if @CONF[:SCRIPT]
|
18
|
+
irb = Irb.new(nil, @CONF[:SCRIPT])
|
19
|
+
else
|
20
|
+
irb = Irb.new
|
21
|
+
end
|
22
|
+
@CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
|
23
|
+
@CONF[:MAIN_CONTEXT] = irb.context
|
24
|
+
trap("SIGINT") do
|
25
|
+
irb.signal_handle
|
26
|
+
end
|
27
|
+
catch(:IRB_EXIT) do
|
28
|
+
irb.eval_input
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
IRB.start_ocmd
|
data/lib/hookable.rb
ADDED
@@ -0,0 +1,284 @@
|
|
1
|
+
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
2
|
+
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
3
|
+
# License:: Gnu General Public License.
|
4
|
+
# Revision:: $Id: /w/fey/cmd/trunk/lib/hookable.rb 24388 2006-07-09T17:09:53.202920Z ertai $
|
5
|
+
|
6
|
+
module Hookable
|
7
|
+
|
8
|
+
module Internal
|
9
|
+
module_function
|
10
|
+
def hook_trigger hooker, name, *args, &block
|
11
|
+
if hooker.respond_to?(name)
|
12
|
+
hooker.send(name, *args, &block)
|
13
|
+
else
|
14
|
+
if hooker.respond_to? :default_hook and not hooker.default_hook.nil?
|
15
|
+
hooker.send(hooker.default_hook, name, *args, &block)
|
16
|
+
elsif hooker.respond_to? :method_missing
|
17
|
+
hooker.send(name, *args, &block)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end # module Internal
|
22
|
+
|
23
|
+
|
24
|
+
setup do
|
25
|
+
class_inheritable_array :hooks
|
26
|
+
class_inheritable_array :hookers
|
27
|
+
class_inheritable_array :disabled_hooks
|
28
|
+
inheritable_attributes[:hookers] = []
|
29
|
+
inheritable_attributes[:hooks] = []
|
30
|
+
inheritable_attributes[:disabled_hooks] = []
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def hook_trigger name, *args, &block
|
35
|
+
return if defined? @disabled_hooks and @disabled_hooks.include? name
|
36
|
+
return if disabled_hooks.include? name
|
37
|
+
self.class.hook_trigger(name, *args, &block)
|
38
|
+
return unless defined? @hookers
|
39
|
+
@hookers.each do |hooker|
|
40
|
+
Internal.hook_trigger(hooker, name, *args, &block)
|
41
|
+
end
|
42
|
+
self
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
def hooker_subscribe hooker
|
47
|
+
@hookers ||= []
|
48
|
+
@hookers << hooker
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
def subscribe_hook *hook_names, &block
|
54
|
+
hooker_subscribe ProcHooker.new(*hook_names, &block)
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def disable_hook *hook_names
|
59
|
+
@disabled_hooks ||= []
|
60
|
+
@disabled_hooks += hook_names
|
61
|
+
self
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
module ClassMethods
|
66
|
+
|
67
|
+
def hook_trigger name, *args, &block
|
68
|
+
raise ArgumentError, "Unknown hook #{name}" unless hooks.include? name
|
69
|
+
return if disabled_hooks.include? name
|
70
|
+
hookers.each do |hooker|
|
71
|
+
Internal.hook_trigger(hooker, name, *args, &block)
|
72
|
+
end
|
73
|
+
self
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
def hooker_subscribe hooker
|
78
|
+
self.hookers = [hooker]
|
79
|
+
self
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
def subscribe_hook *hook_names, &block
|
84
|
+
hooker_subscribe ProcHooker.new(*hook_names, &block)
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
def disable_hook *hook_names
|
89
|
+
self.disabled_hooks = hook_names
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
def hook_declare name, *groups # FIXME handle groups
|
94
|
+
self.hooks = [name]
|
95
|
+
end
|
96
|
+
|
97
|
+
end # module ClassMethods
|
98
|
+
|
99
|
+
|
100
|
+
class ProcHooker < Proc
|
101
|
+
include Hooker
|
102
|
+
def initialize *hook_names, &block
|
103
|
+
hook_method :call, *hook_names
|
104
|
+
super(&block)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
end # module Hookable
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
test_section __FILE__ do
|
114
|
+
|
115
|
+
class HookableHookerTest < Test::Unit::TestCase
|
116
|
+
|
117
|
+
class HookerTest
|
118
|
+
include Hooker
|
119
|
+
|
120
|
+
attr_reader :stack
|
121
|
+
|
122
|
+
def log *args
|
123
|
+
@stack ||= []
|
124
|
+
@stack << args
|
125
|
+
end
|
126
|
+
|
127
|
+
def method_missing *a
|
128
|
+
log(:method_missing, *a)
|
129
|
+
end
|
130
|
+
|
131
|
+
def hook1 *a
|
132
|
+
log(:hook1, *a)
|
133
|
+
end
|
134
|
+
|
135
|
+
def reset
|
136
|
+
@stack.clear if defined? @stack and @stack
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
|
141
|
+
STATIC_HOOKER_TEST = HookerTest.new
|
142
|
+
|
143
|
+
|
144
|
+
class HookableTest
|
145
|
+
include Hookable
|
146
|
+
|
147
|
+
hook_declare :hook1
|
148
|
+
|
149
|
+
hook_declare :hook2, :group1
|
150
|
+
|
151
|
+
def run
|
152
|
+
run1
|
153
|
+
run2
|
154
|
+
end
|
155
|
+
|
156
|
+
def run1
|
157
|
+
hook_trigger :hook1
|
158
|
+
end
|
159
|
+
|
160
|
+
def run2
|
161
|
+
hook_trigger :hook2, 42
|
162
|
+
suppress(ArgumentError) { hook_trigger :hook3 }
|
163
|
+
end
|
164
|
+
|
165
|
+
def << hooker
|
166
|
+
hooker_subscribe hooker
|
167
|
+
end
|
168
|
+
|
169
|
+
hooker_subscribe STATIC_HOOKER_TEST
|
170
|
+
|
171
|
+
def self.ref
|
172
|
+
[
|
173
|
+
[[:hook1], [:method_missing, :hook2, 42]],
|
174
|
+
[[:hook1], [:default, :hook2, 42]],
|
175
|
+
[[:hook_1_and_2], [:hook_1_and_2, 42]],
|
176
|
+
[[:hook1], [:method_missing, :default_by_method_missing, :hook2, 42]],
|
177
|
+
[[:hook1], [:hook2, 42]],
|
178
|
+
[[:hook1], [:method_missing, :hook2_by_dynamic_hook_method, 42]]
|
179
|
+
]
|
180
|
+
end
|
181
|
+
|
182
|
+
end
|
183
|
+
|
184
|
+
|
185
|
+
|
186
|
+
class SubHookableTest < HookableTest
|
187
|
+
hook_declare :hook3
|
188
|
+
|
189
|
+
def self.ref
|
190
|
+
[
|
191
|
+
[[:hook1], [:method_missing, :hook2, 42], [:method_missing, :hook3]],
|
192
|
+
[[:hook1], [:default, :hook2, 42], [:default, :hook3]],
|
193
|
+
[[:hook_1_and_2], [:hook_1_and_2, 42], [:method_missing, :hook3]],
|
194
|
+
[[:hook1], [:method_missing, :default_by_method_missing, :hook2, 42],
|
195
|
+
[:method_missing, :default_by_method_missing, :hook3]],
|
196
|
+
[[:hook1], [:hook2, 42], [:default, :hook3]],
|
197
|
+
[[:hook1], [:method_missing, :hook2_by_dynamic_hook_method, 42],
|
198
|
+
[:method_missing, :hook3]]
|
199
|
+
]
|
200
|
+
end
|
201
|
+
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
|
206
|
+
class HookerTest1 < HookerTest
|
207
|
+
def default *a
|
208
|
+
log(:default, *a)
|
209
|
+
end
|
210
|
+
hook_default_method :default
|
211
|
+
end
|
212
|
+
|
213
|
+
|
214
|
+
|
215
|
+
class HookerTest2 < HookerTest
|
216
|
+
def hook_1_and_2 *a
|
217
|
+
log(:hook_1_and_2, *a)
|
218
|
+
end
|
219
|
+
hook_method :hook_1_and_2, :hook1, :hook2
|
220
|
+
end
|
221
|
+
|
222
|
+
|
223
|
+
|
224
|
+
class HookerTest3 < HookerTest
|
225
|
+
hook_default_method :default_by_method_missing
|
226
|
+
end
|
227
|
+
|
228
|
+
|
229
|
+
|
230
|
+
class HookerTest4 < HookerTest
|
231
|
+
end
|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
class HookerTest21 < HookerTest1
|
236
|
+
def hook2 ( *a )
|
237
|
+
log(:hook2, *a)
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
def test_hookable
|
244
|
+
hookable_checker HookableTest.new
|
245
|
+
end
|
246
|
+
|
247
|
+
|
248
|
+
|
249
|
+
def test_sub_hookable
|
250
|
+
hookable_checker SubHookableTest.new
|
251
|
+
end
|
252
|
+
|
253
|
+
|
254
|
+
|
255
|
+
def hookable_checker support
|
256
|
+
hookers = []
|
257
|
+
hookers << HookerTest1.new
|
258
|
+
hookers << HookerTest2.new
|
259
|
+
hookers << HookerTest3.new
|
260
|
+
hookers << HookerTest21.new
|
261
|
+
hooker4 = HookerTest4.new
|
262
|
+
hookers << hooker4
|
263
|
+
hookers.each do |hooker|
|
264
|
+
support << hooker
|
265
|
+
end
|
266
|
+
STATIC_HOOKER_TEST.reset
|
267
|
+
hookers.unshift STATIC_HOOKER_TEST
|
268
|
+
hooker4.hook_method(:hook2_by_dynamic_hook_method, :hook2)
|
269
|
+
@a = []
|
270
|
+
support.subscribe_hook(:hook2) do |*a|
|
271
|
+
assert_nothing_raised do
|
272
|
+
@a << [:proc_hooker_call, :hook2, *a]
|
273
|
+
end
|
274
|
+
end
|
275
|
+
support.run
|
276
|
+
hookers.zip(support.class.ref).each do |hooker, ref|
|
277
|
+
assert_equal(ref, hooker.stack)
|
278
|
+
end
|
279
|
+
assert_equal([[:proc_hooker_call, :hook2, 42]], @a)
|
280
|
+
end
|
281
|
+
|
282
|
+
end
|
283
|
+
|
284
|
+
end
|
data/lib/hooker.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
2
|
+
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
3
|
+
# License:: Gnu General Public License.
|
4
|
+
# Revision:: $Id: /w/fey/cmd/trunk/lib/hooker.rb 24388 2006-07-09T17:09:53.202920Z ertai $
|
5
|
+
|
6
|
+
module Hooker
|
7
|
+
|
8
|
+
setup do
|
9
|
+
class_inheritable_accessor :default_hook
|
10
|
+
end
|
11
|
+
|
12
|
+
def hook_method method, *hook_names
|
13
|
+
raise unless method.is_a? Symbol
|
14
|
+
hook_names.each do |hook_name|
|
15
|
+
raise unless hook_name.is_a? Symbol
|
16
|
+
instance_eval %Q{
|
17
|
+
def #{hook_name} ( *a, &b )
|
18
|
+
#{method}(*a, &b)
|
19
|
+
end
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module ClassMethods
|
25
|
+
|
26
|
+
def hook_default_method method
|
27
|
+
raise unless method.is_a? Symbol
|
28
|
+
self.default_hook = method
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def hook_method method, *hook_names
|
33
|
+
raise unless method.is_a? Symbol
|
34
|
+
hook_names.each do |hook_name|
|
35
|
+
raise unless hook_name.is_a? Symbol
|
36
|
+
module_eval %Q{
|
37
|
+
def #{hook_name} ( *a, &b )
|
38
|
+
#{method}(*a, &b)
|
39
|
+
end
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end # module ClassMethods
|
45
|
+
|
46
|
+
end # module Hooker
|
47
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module ObjectiveCommand
|
2
|
+
module Helpers
|
3
|
+
end
|
4
|
+
module All
|
5
|
+
end
|
6
|
+
end
|
7
|
+
unless embedded_test_mode?
|
8
|
+
$: << File.dirname(File.dirname(__FILE__))
|
9
|
+
require 'objective_command'
|
10
|
+
require 'hookable'
|
11
|
+
require 'hooker'
|
12
|
+
require 'objective_command/runners/runner'
|
13
|
+
require 'objective_command/runners/exec'
|
14
|
+
require 'objective_command/runners/fork'
|
15
|
+
require 'objective_command/runners/system'
|
16
|
+
require 'objective_command/runners/popen'
|
17
|
+
require 'objective_command/runners/mockable'
|
18
|
+
require 'objective_command/runners/no_run'
|
19
|
+
require 'objective_command/runners'
|
20
|
+
require 'objective_command/datas/data'
|
21
|
+
require 'objective_command/datas/temp'
|
22
|
+
require 'objective_command/datas/factory'
|
23
|
+
require 'objective_command/datas/composite'
|
24
|
+
require 'objective_command/datas/pipe'
|
25
|
+
require 'objective_command/datas'
|
26
|
+
require 'objective_command/helpers'
|
27
|
+
require 'objective_command/shell'
|
28
|
+
require 'objective_command/commands/command'
|
29
|
+
require 'objective_command/commands/factory'
|
30
|
+
require 'objective_command/commands/pipe'
|
31
|
+
require 'objective_command/commands/seq'
|
32
|
+
end
|