ruby_ex 0.1.2 → 0.2.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/ChangeLog +693 -0
- data/NEWS +74 -0
- data/SPEC.dyn.yml +6 -6
- data/SPEC.gemspec +14 -0
- data/SPEC.yml +4 -4
- data/lib/abstract.rb +2 -4
- data/lib/abstract_node.rb +1 -2
- data/lib/algorithms/simulated_annealing.rb +50 -29
- data/lib/attributed_class.rb +50 -21
- data/lib/auto_object.rb +102 -0
- data/lib/blank_slate.rb +102 -0
- data/lib/cache.rb +1 -2
- data/lib/choose.rb +165 -163
- data/lib/commands.rb +2 -3
- data/lib/commands/command.rb +47 -20
- data/lib/commands/datas.rb +1 -1
- data/lib/commands/datas/composite.rb +5 -1
- data/lib/commands/datas/data.rb +102 -5
- data/lib/commands/datas/factory.rb +13 -6
- data/lib/commands/datas/temp.rb +3 -5
- data/lib/commands/factory.rb +1 -1
- data/lib/commands/helpers.rb +1 -1
- data/lib/commands/pipe.rb +10 -1
- data/lib/commands/runners.rb +1 -1
- data/lib/commands/runners/exec.rb +1 -1
- data/lib/commands/runners/fork.rb +3 -16
- data/lib/commands/runners/mock.rb +67 -0
- data/lib/commands/runners/runner.rb +5 -3
- data/lib/commands/runners/system.rb +1 -1
- data/lib/commands/seq.rb +2 -1
- data/lib/config_file.rb +10 -2
- data/lib/const_regexp.rb +1 -2
- data/lib/{dlogger.rb → d_logger.rb} +1 -2
- data/lib/daemon.rb +1 -2
- data/lib/diff.rb +1 -2
- data/lib/drb/drb_observable.rb +1 -2
- data/lib/drb/drb_observable_pool.rb +2 -2
- data/lib/drb/drb_service.rb +1 -2
- data/lib/drb/drb_undumped_attributes.rb +1 -2
- data/lib/drb/drb_undumped_indexed_object.rb +1 -2
- data/lib/drb/insecure_protected_methods.rb +1 -2
- data/lib/drb_ex.rb +2 -2
- data/lib/file_type.rb +466 -0
- data/lib/generate_id.rb +12 -6
- data/lib/genpasswd.rb +22 -0
- data/lib/hash_eval.rb +83 -0
- data/lib/histogram.rb +1 -2
- data/lib/hookable.rb +3 -4
- data/lib/hooker.rb +1 -3
- data/lib/html_encode.rb +191 -0
- data/lib/indexed_node.rb +0 -1
- data/lib/io_marshal.rb +4 -2
- data/lib/ioo.rb +3 -2
- data/lib/kill_all.rb +46 -0
- data/lib/labeled_node.rb +0 -1
- data/lib/logger_observer.rb +8 -4
- data/lib/md5sum.rb +3 -3
- data/lib/meta_factory.rb +99 -0
- data/lib/method_call.rb +87 -0
- data/lib/mocks.rb +12 -0
- data/lib/mocks/assertions.rb +50 -0
- data/lib/mocks/method_logger.rb +40 -0
- data/lib/mocks/mock.rb +64 -0
- data/lib/mocks/object.rb +47 -0
- data/lib/mocks/observer.rb +38 -0
- data/lib/module/autoload_tree.rb +30 -29
- data/lib/module/hierarchy.rb +176 -171
- data/lib/module/instance_method_visibility.rb +39 -38
- data/lib/node.rb +0 -1
- data/lib/object_monitor.rb +1 -2
- data/lib/object_monitor_activity.rb +1 -2
- data/lib/observable.rb +1 -2
- data/lib/observable_pool.rb +1 -2
- data/lib/{orderedhash.rb → ordered_hash.rb} +41 -5
- data/lib/pp_hierarchy.rb +7 -2
- data/lib/r_path.rb +307 -0
- data/lib/random_generators.rb +7 -20
- data/lib/random_generators/random_generator.rb +2 -4
- data/lib/random_generators/ruby.rb +4 -2
- data/lib/regex_path.rb +124 -0
- data/lib/ruby_ex.rb +28 -98
- data/lib/safe_eval.rb +1 -2
- data/lib/sendmail.rb +14 -17
- data/lib/service_manager.rb +1 -2
- data/lib/shuffle.rb +6 -2
- data/lib/spring.rb +1 -2
- data/lib/spring_set.rb +1 -2
- data/lib/{symtbl.rb → sym_tbl.rb} +90 -5
- data/lib/sym_tbl_gsub.rb +227 -0
- data/lib/{synflow.rb → syn_flow.rb} +1 -2
- data/lib/text.rb +218 -0
- data/lib/timeout_ex.rb +1 -2
- data/lib/trace.rb +9 -8
- data/lib/uri/druby.rb +1 -2
- data/lib/uri/file.rb +1 -1
- data/lib/uri/ftp_ex.rb +1 -1
- data/lib/uri/http_ex.rb +1 -1
- data/lib/uri/mysql.rb +121 -0
- data/lib/uri/pgsql.rb +19 -38
- data/lib/uri/svn.rb +1 -2
- data/lib/uri_ex.rb +45 -3
- data/lib/verbose_object.rb +181 -38
- data/lib/yaml/chop_header.rb +19 -11
- data/lib/yaml/transform.rb +17 -11
- data/lib/yaml/yregexpath.rb +11 -5
- data/test/algorithms/simulated_annealing_test.rb +2 -2
- data/test/resources/foo.tar.gz +0 -0
- data/test/resources/tar.gz.log +49 -0
- data/test/sanity-suite.yml +5 -7
- data/test/sanity/multiple-requires.yml +17 -7
- data/test/sanity/single-requires.yml +38 -20
- data/test/stress-tests/threads_and_exceptions.yml +13 -0
- data/test/test-unit-setup.rb +3 -1
- data/test/unit-suite.yml +7 -8
- metadata +42 -31
- data/lib/algorithms.rb +0 -12
- data/lib/ask.rb +0 -100
- data/lib/checkout.rb +0 -12
- data/lib/dumpable_proc.rb +0 -57
- data/lib/filetype.rb +0 -229
- data/lib/thread_mutex.rb +0 -11
- data/lib/yaml/basenode_ext.rb +0 -63
data/lib/random_generators.rb
CHANGED
@@ -1,29 +1,16 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: random_generators.rb
|
4
|
+
# Revision:: $Id: random_generators.rb 339 2005-09-06 23:27:27Z ertai $
|
5
5
|
|
6
|
-
require '
|
7
|
-
require 'module/autoload_tree'
|
8
|
-
require 'abstract'
|
6
|
+
require 'active_support/module_attribute_accessors'
|
9
7
|
|
10
|
-
|
11
|
-
|
12
|
-
autoloaded_module(__FILE__)
|
13
|
-
|
14
|
-
module_function
|
8
|
+
RandomGenerators.import!
|
15
9
|
|
16
|
-
|
17
|
-
class << self
|
18
|
-
def default
|
19
|
-
@@default
|
20
|
-
end
|
21
|
-
end
|
22
|
-
@@default = Ruby.new
|
23
|
-
end
|
10
|
+
module RandomGenerators
|
24
11
|
|
25
|
-
|
26
|
-
@@default = aClass
|
27
|
-
end
|
12
|
+
mattr_accessor :default
|
28
13
|
|
29
14
|
end # module RandomGenerators
|
15
|
+
|
16
|
+
require 'random_generators/ruby'
|
@@ -1,14 +1,12 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: random_generator.rb
|
5
|
-
|
6
|
-
require 'random_generators'
|
4
|
+
# Revision:: $Id: random_generator.rb 339 2005-09-06 23:27:27Z ertai $
|
7
5
|
|
8
6
|
module RandomGenerators
|
9
7
|
|
10
8
|
class RandomGenerator
|
11
|
-
|
9
|
+
include Abstract # FIXME perhaps `is Abstract' `act_as Abstract'
|
12
10
|
|
13
11
|
def check_choose_integer ( n )
|
14
12
|
unless n.is_a? Integer
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
2
2
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
3
3
|
# License:: GNU General Public License (GPL).
|
4
|
-
# Revision:: $Id: ruby.rb
|
4
|
+
# Revision:: $Id: ruby.rb 339 2005-09-06 23:27:27Z ertai $
|
5
5
|
|
6
|
-
|
6
|
+
RandomGenerators.import!
|
7
7
|
|
8
8
|
module RandomGenerators
|
9
9
|
|
@@ -22,4 +22,6 @@ module RandomGenerators
|
|
22
22
|
|
23
23
|
end # class Ruby
|
24
24
|
|
25
|
+
self.default = Ruby.new
|
26
|
+
|
25
27
|
end # module RandomGenerators
|
data/lib/regex_path.rb
ADDED
@@ -0,0 +1,124 @@
|
|
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: regex_path.rb 339 2005-09-06 23:27:27Z ertai $
|
5
|
+
|
6
|
+
|
7
|
+
class RegexPath
|
8
|
+
|
9
|
+
|
10
|
+
class Segment
|
11
|
+
|
12
|
+
attr_reader :re
|
13
|
+
|
14
|
+
def initialize ( re, starred=false )
|
15
|
+
@re = Regexp.new(re)
|
16
|
+
@starred = starred
|
17
|
+
end
|
18
|
+
|
19
|
+
def =~ ( value )
|
20
|
+
@re.match(value)
|
21
|
+
end
|
22
|
+
|
23
|
+
def starred?
|
24
|
+
@starred
|
25
|
+
end
|
26
|
+
|
27
|
+
def eql? ( rhs )
|
28
|
+
@re.eql?(rhs.re) and @starred.eql?(rhs.starred?)
|
29
|
+
end
|
30
|
+
|
31
|
+
def == ( rhs )
|
32
|
+
eql?(rhs)
|
33
|
+
end
|
34
|
+
|
35
|
+
end # class Segment
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
attr_reader :segments
|
40
|
+
|
41
|
+
def initialize ( str )
|
42
|
+
raise ArgumentError, 'Argument must be a string' unless str.is_a?(String)
|
43
|
+
@segments = []
|
44
|
+
@root = (str[0] == ?/)
|
45
|
+
str = '/' + str unless @root
|
46
|
+
@final = (str[-1] == ?\Z)
|
47
|
+
str.sub!(/\\Z$/, '')
|
48
|
+
while str =~ /^\/(\*?)((?:(?:\\.)|[^\\\/])+)?/
|
49
|
+
sep, key, = $1, $2
|
50
|
+
@segments << Segment.new((key.nil?)? '' : key, sep == "*")
|
51
|
+
str = $'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def initialize_copy ( rhs )
|
56
|
+
@segments = rhs.segments.dup
|
57
|
+
@root = rhs.root?
|
58
|
+
end
|
59
|
+
|
60
|
+
def starred?
|
61
|
+
! @segments.empty? and @segments.first.starred?
|
62
|
+
end
|
63
|
+
|
64
|
+
def root?
|
65
|
+
@root
|
66
|
+
end
|
67
|
+
|
68
|
+
def final?
|
69
|
+
@final
|
70
|
+
end
|
71
|
+
|
72
|
+
def empty?
|
73
|
+
@segments.empty?
|
74
|
+
end
|
75
|
+
|
76
|
+
def split
|
77
|
+
copy = dup
|
78
|
+
[copy.segments.shift, copy]
|
79
|
+
end
|
80
|
+
|
81
|
+
end # class RegexPath
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
test_section __FILE__ do
|
86
|
+
|
87
|
+
class RegexPathTest < Test::Unit::TestCase
|
88
|
+
|
89
|
+
Seg = RegexPath::Segment
|
90
|
+
|
91
|
+
def compare(str, tab)
|
92
|
+
tab.collect! do |e|
|
93
|
+
(e.is_a? Seg)? e : Seg.new(e)
|
94
|
+
end
|
95
|
+
desc = "Compare #{str} with #{tab}."
|
96
|
+
assert_equal(tab, RegexPath.new(str).segments, desc)
|
97
|
+
end
|
98
|
+
|
99
|
+
def testit
|
100
|
+
compare('mho', [ 'mho' ])
|
101
|
+
compare('mho\\', [ 'mho' ])
|
102
|
+
compare('/mho', [ 'mho' ])
|
103
|
+
compare('/mho/42', [ 'mho', '42' ])
|
104
|
+
compare('/mho/[0-9]+', [ 'mho', '[0-9]+' ])
|
105
|
+
compare('m\/ho', [ 'm\/ho' ])
|
106
|
+
compare('mho/foo', [ 'mho', 'foo' ])
|
107
|
+
compare('mho/35/foo/test', [ 'mho', '35', 'foo' , 'test' ])
|
108
|
+
compare('test/*status/PASS', [ 'test', Seg.new('status', true), 'PASS' ])
|
109
|
+
compare('/*mho', [ Seg.new('mho', true) ])
|
110
|
+
compare('mho/*', [ 'mho', Seg.new('', true) ])
|
111
|
+
compare('/*mho/*', [ Seg.new('mho', true), Seg.new('', true) ])
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_final?
|
115
|
+
assert(RegexPath.new('/foo/bar\Z').final?)
|
116
|
+
assert(! RegexPath.new('/foo/bar').final?)
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_errors
|
120
|
+
assert_raise(ArgumentError) { RegexPath.new(42) }
|
121
|
+
end
|
122
|
+
|
123
|
+
end # class RegexPathTest
|
124
|
+
end
|
data/lib/ruby_ex.rb
CHANGED
@@ -1,124 +1,54 @@
|
|
1
1
|
# Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
|
2
2
|
# Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
|
3
3
|
# License:: Gnu General Public License.
|
4
|
-
# Revision:: $Id: ruby_ex.rb
|
4
|
+
# Revision:: $Id: ruby_ex.rb 359 2005-09-16 10:05:22Z ertai $
|
5
5
|
|
6
|
-
|
7
|
-
require 'rubygems'
|
8
|
-
require_gem 'core_ex' # FIXME version
|
9
|
-
require 'core_ex'
|
10
|
-
rescue LoadError => ex
|
11
|
-
core_ex = @@dir.parent + 'core_ex/lib/core_ex'
|
12
|
-
if core_ex.exists? and not $".include? 'core_ex.rb'
|
13
|
-
require core_ex.to_s
|
14
|
-
else
|
15
|
-
raise ex
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
6
|
+
require 'pathname'
|
19
7
|
|
20
8
|
module DRb
|
21
9
|
end
|
22
10
|
|
23
|
-
module Algorithms
|
24
|
-
end
|
25
|
-
|
26
11
|
module RubyEx
|
27
12
|
|
28
|
-
@@dir = Pathname.new(__FILE__).dirname.expand_path
|
29
|
-
$: << @@dir.to_s
|
30
|
-
|
31
13
|
module_function
|
32
14
|
|
33
|
-
def
|
34
|
-
@@
|
35
|
-
%[
|
36
|
-
abstract.rb Abstract Concrete Class
|
37
|
-
abstract_node.rb AbstractNode
|
38
|
-
algorithms.rb Algorithms
|
39
|
-
attributed_class.rb AttributedClass
|
40
|
-
cache.rb Cache
|
41
|
-
config_file.rb ConfigFile
|
42
|
-
const_regexp.rb ConstRegexp
|
43
|
-
daemon.rb Daemon
|
44
|
-
diff.rb Diff
|
45
|
-
dlogger.rb DLogger
|
46
|
-
drb.rb DRb
|
47
|
-
dumpable_proc.rb DumpableProc
|
48
|
-
filetype.rb FileType
|
49
|
-
histogram.rb Histogram
|
50
|
-
hookable.rb Hookable
|
51
|
-
hooker.rb Hooker
|
52
|
-
inactive_timeout.rb InactiveTimeout
|
53
|
-
indexed_node.rb IndexedNode
|
54
|
-
ioo.rb IOO IOOTCPSocket
|
55
|
-
killall.rb KillAll
|
56
|
-
labeled_node.rb LabeledNode
|
57
|
-
node.rb Node
|
58
|
-
object_monitor.rb ObjectMonitor
|
59
|
-
object_monitor_activity.rb ObjectMonitorActivity
|
60
|
-
observable.rb Observable
|
61
|
-
observable_pool.rb ObservablePool
|
62
|
-
orderedhash.rb OrderedHash_ext OHash
|
63
|
-
pseudo_cache.rb PseudoCache
|
64
|
-
random_generators.rb RandomGenerators
|
65
|
-
timeout_ex.rb TimeoutEx
|
66
|
-
verbose_object.rb VerboseObject
|
67
|
-
spring.rb Spring
|
68
|
-
spring_set.rb SpringSet
|
69
|
-
symtbl.rb SymTbl
|
70
|
-
synflow.rb SynFlowFactory SynFlow
|
71
|
-
safe_eval.rb SafeEval
|
72
|
-
sendmail.rb Sendmail
|
73
|
-
service_manager.rb ServiceManager
|
74
|
-
test/unit/ui/yaml/testrunner.rb Test::Unit::UI::Yaml::TestRunner
|
75
|
-
# drb/session_manager.rb DRb::SessionManager
|
76
|
-
# drb/dispatcher.rb DRb::Dispatcher
|
77
|
-
].split(/\n/).each do |line|
|
78
|
-
line.sub!(/#.*$/, '')
|
79
|
-
line.strip!
|
80
|
-
next if line =~ /^\s*$/
|
81
|
-
file, *names = line.split(/\s+/)
|
82
|
-
@@contents[@@dir + file] = names
|
83
|
-
end
|
84
|
-
@@contents.freeze
|
85
|
-
|
86
|
-
@@sources = FileList[@@dir + '**/*.rb'].exclude(/\bsession\/error.rb\b/)
|
87
|
-
|
88
|
-
class << self
|
89
|
-
def sources
|
90
|
-
@@sources
|
91
|
-
end
|
92
|
-
end
|
93
|
-
@@sources
|
15
|
+
def file_list
|
16
|
+
@@file_list ||= PathList[dir + '(**/*).rb'].exclude(/\bsession\/error.rb\b/)
|
94
17
|
end
|
95
18
|
|
96
19
|
def dir
|
97
|
-
@@dir
|
20
|
+
@@dir ||= Pathname.new(__FILE__).dirname.expand_path
|
98
21
|
end
|
99
22
|
|
100
23
|
def each ( &block )
|
101
|
-
|
102
|
-
block[file, @@contents[file]]
|
103
|
-
end
|
24
|
+
file_list.each(&block)
|
104
25
|
self
|
105
26
|
end
|
106
27
|
|
107
|
-
def
|
108
|
-
|
109
|
-
names.each do |name|
|
110
|
-
name = name.split(/::/).first
|
111
|
-
Kernel.autoload(name, file.to_s)
|
112
|
-
end
|
113
|
-
end
|
28
|
+
def import_all!
|
29
|
+
file_list.import!
|
114
30
|
end
|
115
31
|
|
116
|
-
def
|
117
|
-
|
32
|
+
def skip ( file )
|
33
|
+
file.to_s =~ /drb/
|
118
34
|
end
|
119
35
|
|
120
|
-
end # module RubyEx
|
121
36
|
|
122
|
-
|
123
|
-
|
124
|
-
|
37
|
+
unless defined? CoreEx
|
38
|
+
file = Pathname.glob("#{dir}/../{core_ex/lib/core_ex,vendor/core_ex*/lib/core_ex}").first
|
39
|
+
if file.nil?
|
40
|
+
require 'rubygems'
|
41
|
+
require_gem 'core_ex'
|
42
|
+
require 'core_ex'
|
43
|
+
else
|
44
|
+
require file
|
45
|
+
end
|
46
|
+
end
|
47
|
+
suppress(LoadError) { core_ex_require 'highline' }
|
48
|
+
|
49
|
+
dir.load_path!
|
50
|
+
(dir + 'module').load_path!
|
51
|
+
|
52
|
+
Controllers::Algorithms.import!
|
53
|
+
|
54
|
+
end # module RubyEx
|
data/lib/safe_eval.rb
CHANGED
data/lib/sendmail.rb
CHANGED
@@ -7,17 +7,13 @@
|
|
7
7
|
require 'pathname'
|
8
8
|
require 'ostruct'
|
9
9
|
require 'optparse'
|
10
|
+
Yaml::ChopHeader.import!
|
10
11
|
|
11
12
|
|
12
13
|
class Sendmail
|
13
14
|
|
14
15
|
MAIL_FILE = Pathname.new(',mail')
|
15
16
|
|
16
|
-
def initialize
|
17
|
-
require 'ruby_ex'
|
18
|
-
require 'yaml/chop_header'
|
19
|
-
end
|
20
|
-
|
21
17
|
def parse_mail_options ( *args )
|
22
18
|
email = (defined? EMAIL)? EMAIL : ENV['EMAIL']
|
23
19
|
full_name = (defined? FULLNAME)? FULLNAME : ENV['FULLNAME']
|
@@ -57,8 +53,8 @@ class Sendmail
|
|
57
53
|
opts.on('--passphrase FILE', 'the passphrase file') do |aFile|
|
58
54
|
options.pass = Pathname.new(aFile)
|
59
55
|
end
|
60
|
-
opts.on('-a', '--[no-]
|
61
|
-
options.
|
56
|
+
opts.on('-a', '--[no-]confirm', 'Ask a confirmation before sending') do |confirm|
|
57
|
+
options.confirm = confirm
|
62
58
|
end
|
63
59
|
opts.on('--comment STRING', 'Choose a comment for GPG') do |aComment|
|
64
60
|
options.comment = aComment
|
@@ -103,17 +99,17 @@ class Sendmail
|
|
103
99
|
STDERR.puts "Smtp Server: #{server}"
|
104
100
|
|
105
101
|
#
|
106
|
-
#
|
102
|
+
# confirm the user
|
107
103
|
#
|
108
|
-
if opts.
|
109
|
-
|
104
|
+
if opts.confirm
|
105
|
+
raise 'HighLine is unavailable' unless defined? HighLine
|
110
106
|
question = %Q[
|
111
107
|
|Send a mail, with this subject: #{opts.subject}
|
112
108
|
| to #{opts.to.join(', ')}
|
113
109
|
| from #{opts.from_name}
|
114
110
|
| #{(opts.signed.nil?)? 'not signed !' : 'signed by ' + opts.from}
|
115
|
-
|Are you sure?].head_cut!
|
116
|
-
raise 'Aborting'
|
111
|
+
|Are you sure? (y/n)].head_cut!
|
112
|
+
raise 'Aborting' unless HighLine.new.agree question, true
|
117
113
|
end
|
118
114
|
|
119
115
|
require 'net/smtp'
|
@@ -127,8 +123,8 @@ class Sendmail
|
|
127
123
|
mail_body.open('w') do |out|
|
128
124
|
if opts.mime
|
129
125
|
out.puts '
|
130
|
-
|Content-Type: text/plain; charset=
|
131
|
-
|Content-Transfer-Encoding:
|
126
|
+
|Content-Type: text/plain; charset="us-ascii"
|
127
|
+
|Content-Transfer-Encoding: 7bit
|
132
128
|
|
|
133
129
|
|'.head_cut!
|
134
130
|
end
|
@@ -151,7 +147,7 @@ class Sendmail
|
|
151
147
|
|
152
148
|
|
153
149
|
def sign_wrap ( opts, body )
|
154
|
-
id = "
|
150
|
+
id = "===============Vcs#{new_id 10}==" if opts.mime
|
155
151
|
|
156
152
|
TempPath.new do |tmp_name|
|
157
153
|
tmp_name.open('w') do |tmp|
|
@@ -160,8 +156,9 @@ class Sendmail
|
|
160
156
|
|MIME-Version: 1.0
|
161
157
|
|Content-Type: multipart/signed; micalg=pgp-sha1;
|
162
158
|
| protocol="application/pgp-signature";
|
163
|
-
| boundary="#{id}"
|
164
|
-
|
|
159
|
+
| boundary="#{id}";
|
160
|
+
| charset="us-ascii"
|
161
|
+
|Content-Transfer-Encoding: 7bit
|
165
162
|
|
|
166
163
|
|This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
|
167
164
|
|--#{id}
|
data/lib/service_manager.rb
CHANGED
@@ -3,9 +3,8 @@
|
|
3
3
|
# License: Gnu General Public License.
|
4
4
|
|
5
5
|
# $LastChangedBy: ertai $
|
6
|
-
# $Id: service_manager.rb
|
6
|
+
# $Id: service_manager.rb 339 2005-09-06 23:27:27Z ertai $
|
7
7
|
|
8
|
-
require 'ruby_ex'
|
9
8
|
require 'drb/drb'
|
10
9
|
|
11
10
|
# A service must implement at least:
|