cond 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.rdoc +12 -0
- data/MANIFEST +39 -0
- data/{README → README.rdoc} +23 -28
- data/Rakefile +23 -180
- data/devel/jumpstart.rb +970 -0
- data/install.rb +2 -3
- data/lib/cond.rb +38 -453
- data/lib/cond/code_section.rb +51 -0
- data/lib/cond/cond.rb +159 -0
- data/lib/cond/defaults.rb +73 -0
- data/lib/cond/dsl.rb +2 -0
- data/lib/cond/dsl_definition.rb +74 -0
- data/lib/cond/error.rb +17 -0
- data/lib/cond/handler.rb +10 -0
- data/lib/cond/handling_section.rb +12 -0
- data/lib/cond/kernel_raise.rb +59 -0
- data/lib/cond/message_proc.rb +15 -0
- data/lib/cond/restart.rb +10 -0
- data/lib/cond/restartable_section.rb +12 -0
- data/lib/cond/symbol_generator.rb +41 -0
- data/lib/cond/thread_local.rb +71 -0
- data/lib/cond/wrapping.rb +45 -0
- data/readmes/restarts.rb +1 -2
- data/readmes/seibel_pcl.rb +1 -2
- data/{examples/bad_example.rb → spec/bad_spec.rb} +2 -2
- data/spec/basic_spec.rb +2 -2
- data/{examples/calc_example.rb → spec/calc_spec.rb} +2 -2
- data/spec/{common.rb → cond_spec_base.rb} +3 -20
- data/spec/error_spec.rb +2 -2
- data/spec/leave_again_spec.rb +10 -10
- data/spec/matching_spec.rb +1 -1
- data/spec/raise_spec.rb +1 -1
- data/spec/readme_spec.rb +10 -0
- data/spec/reraise_spec.rb +2 -2
- data/{examples/restarts_example.rb → spec/restarts_spec.rb} +7 -4
- data/{examples/seibel_example.rb → spec/seibel_spec.rb} +4 -6
- data/spec/symbols_spec.rb +2 -2
- data/spec/thread_local_spec.rb +8 -8
- data/spec/wrapping_spec.rb +2 -2
- metadata +110 -42
- data/cond.gemspec +0 -37
- data/examples/readme_example.rb +0 -27
- data/lib/cond/cond_private/defaults.rb +0 -78
- data/lib/cond/cond_private/symbol_generator.rb +0 -45
- data/lib/cond/cond_private/thread_local.rb +0 -77
- data/spec/specs_spec.rb +0 -16
- data/support/quix/ruby.rb +0 -51
- data/support/quix/simple_installer.rb +0 -88
@@ -1,77 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'thread'
|
3
|
-
require 'cond/cond_private/symbol_generator'
|
4
|
-
|
5
|
-
module Cond
|
6
|
-
module CondPrivate
|
7
|
-
#
|
8
|
-
# Thread-local variable.
|
9
|
-
#
|
10
|
-
class ThreadLocal
|
11
|
-
include SymbolGenerator
|
12
|
-
|
13
|
-
#
|
14
|
-
# If +value+ is called before +value=+ then the result of
|
15
|
-
# &default is used.
|
16
|
-
#
|
17
|
-
# &default normally creates a new object, otherwise the returned
|
18
|
-
# object will be shared across threads.
|
19
|
-
#
|
20
|
-
def initialize(&default)
|
21
|
-
@name = gensym
|
22
|
-
@accessed = gensym
|
23
|
-
@default = default
|
24
|
-
SymbolGenerator.track(self, [@name, @accessed])
|
25
|
-
end
|
26
|
-
|
27
|
-
#
|
28
|
-
# Reset to just-initialized state for all threads.
|
29
|
-
#
|
30
|
-
def clear(&default)
|
31
|
-
Thread.exclusive {
|
32
|
-
@default = default
|
33
|
-
Thread.list.each { |thread|
|
34
|
-
thread[@accessed] = nil
|
35
|
-
thread[@name] = nil
|
36
|
-
}
|
37
|
-
}
|
38
|
-
end
|
39
|
-
|
40
|
-
def value
|
41
|
-
unless Thread.current[@accessed]
|
42
|
-
if @default
|
43
|
-
Thread.current[@name] = @default.call
|
44
|
-
end
|
45
|
-
Thread.current[@accessed] = true
|
46
|
-
end
|
47
|
-
Thread.current[@name]
|
48
|
-
end
|
49
|
-
|
50
|
-
def value=(value)
|
51
|
-
Thread.current[@accessed] = true
|
52
|
-
Thread.current[@name] = value
|
53
|
-
end
|
54
|
-
|
55
|
-
class << self
|
56
|
-
def accessor_module(name, subclass = self, &block)
|
57
|
-
var = subclass.new(&block)
|
58
|
-
Module.new {
|
59
|
-
define_method(name) {
|
60
|
-
var.value
|
61
|
-
}
|
62
|
-
define_method("#{name}=") { |value|
|
63
|
-
var.value = value
|
64
|
-
}
|
65
|
-
}
|
66
|
-
end
|
67
|
-
|
68
|
-
def reader_module(name, subclass = self, &block)
|
69
|
-
accessor_module(name, subclass, &block).instance_eval {
|
70
|
-
remove_method "#{name}="
|
71
|
-
self
|
72
|
-
}
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
data/spec/specs_spec.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
here = File.dirname(__FILE__)
|
2
|
-
require here + "/common"
|
3
|
-
|
4
|
-
require 'quix/ruby'
|
5
|
-
|
6
|
-
describe "specs" do
|
7
|
-
it "should run individually" do
|
8
|
-
(Dir["#{here}/*_spec.rb"] + Dir["#{here}/../examples/*_example.rb"]).each {
|
9
|
-
|spec|
|
10
|
-
unless File.basename(spec) == File.basename(__FILE__)
|
11
|
-
`"#{Quix::Ruby::EXECUTABLE}" "#{spec}"`
|
12
|
-
$?.exitstatus.should == 0
|
13
|
-
end
|
14
|
-
}
|
15
|
-
end
|
16
|
-
end
|
data/support/quix/ruby.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rbconfig'
|
3
|
-
|
4
|
-
module Quix
|
5
|
-
module Ruby
|
6
|
-
EXECUTABLE = lambda {
|
7
|
-
name = File.join(
|
8
|
-
Config::CONFIG["bindir"],
|
9
|
-
Config::CONFIG["RUBY_INSTALL_NAME"]
|
10
|
-
)
|
11
|
-
|
12
|
-
if Config::CONFIG["host"] =~ %r!(mswin|cygwin|mingw)! and
|
13
|
-
File.basename(name) !~ %r!\.(exe|com|bat|cmd)\Z!i
|
14
|
-
name + ".exe"
|
15
|
-
else
|
16
|
-
name
|
17
|
-
end
|
18
|
-
}.call
|
19
|
-
|
20
|
-
class << self
|
21
|
-
def run(*args)
|
22
|
-
system(EXECUTABLE, *args)
|
23
|
-
end
|
24
|
-
|
25
|
-
def run_or_raise(*args)
|
26
|
-
cmd = [EXECUTABLE, *args]
|
27
|
-
unless system(*cmd)
|
28
|
-
msg = (
|
29
|
-
"failed to launch ruby: " +
|
30
|
-
"system(*#{cmd.inspect}) failed with status #{$?.exitstatus}"
|
31
|
-
)
|
32
|
-
raise msg
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def with_warnings(value = true)
|
37
|
-
previous = $VERBOSE
|
38
|
-
$VERBOSE = value
|
39
|
-
begin
|
40
|
-
yield
|
41
|
-
ensure
|
42
|
-
$VERBOSE = previous
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def no_warnings(&block)
|
47
|
-
with_warnings(false, &block)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,88 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rbconfig'
|
3
|
-
require 'fileutils'
|
4
|
-
require 'find'
|
5
|
-
|
6
|
-
module Quix
|
7
|
-
class SimpleInstaller
|
8
|
-
def initialize
|
9
|
-
dest_root = Config::CONFIG["sitelibdir"]
|
10
|
-
sources = []
|
11
|
-
Find.find("./lib") { |source|
|
12
|
-
if install_file?(source)
|
13
|
-
sources << source
|
14
|
-
end
|
15
|
-
}
|
16
|
-
@spec = sources.inject(Array.new) { |acc, source|
|
17
|
-
if source == "./lib"
|
18
|
-
acc
|
19
|
-
else
|
20
|
-
dest = File.join(dest_root, source.sub(%r!\A\./lib!, ""))
|
21
|
-
|
22
|
-
install = lambda {
|
23
|
-
if File.directory?(source)
|
24
|
-
unless File.directory?(dest)
|
25
|
-
puts "mkdir #{dest}"
|
26
|
-
FileUtils.mkdir(dest)
|
27
|
-
end
|
28
|
-
else
|
29
|
-
puts "install #{source} --> #{dest}"
|
30
|
-
FileUtils.install(source, dest)
|
31
|
-
end
|
32
|
-
}
|
33
|
-
|
34
|
-
uninstall = lambda {
|
35
|
-
if File.directory?(source)
|
36
|
-
if File.directory?(dest)
|
37
|
-
puts "rmdir #{dest}"
|
38
|
-
FileUtils.rmdir(dest)
|
39
|
-
end
|
40
|
-
else
|
41
|
-
if File.file?(dest)
|
42
|
-
puts "rm #{dest}"
|
43
|
-
FileUtils.rm(dest)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
}
|
47
|
-
|
48
|
-
acc << {
|
49
|
-
:source => source,
|
50
|
-
:dest => dest,
|
51
|
-
:install => install,
|
52
|
-
:uninstall => uninstall,
|
53
|
-
}
|
54
|
-
end
|
55
|
-
}
|
56
|
-
end
|
57
|
-
|
58
|
-
def install_file?(source)
|
59
|
-
!File.symlink?(source) and
|
60
|
-
(File.directory?(source) or
|
61
|
-
(File.file?(source) and File.extname(source) == ".rb"))
|
62
|
-
end
|
63
|
-
|
64
|
-
attr_accessor :spec
|
65
|
-
|
66
|
-
def install
|
67
|
-
@spec.each { |entry|
|
68
|
-
entry[:install].call
|
69
|
-
}
|
70
|
-
end
|
71
|
-
|
72
|
-
def uninstall
|
73
|
-
@spec.reverse.each { |entry|
|
74
|
-
entry[:uninstall].call
|
75
|
-
}
|
76
|
-
end
|
77
|
-
|
78
|
-
def run(args = ARGV)
|
79
|
-
if args.empty? or (args.size == 1 and args.first == "install")
|
80
|
-
install
|
81
|
-
elsif args.size == 1 and args.first == "--uninstall"
|
82
|
-
uninstall
|
83
|
-
else
|
84
|
-
raise "unrecognized arguments: #{args.inspect}"
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|