ruby_ex 0.3.0 → 0.4.1.2

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.
Files changed (115) hide show
  1. data/ChangeLog +324 -0
  2. data/NEWS +17 -0
  3. data/README +1 -1
  4. data/SPEC.yml +9 -9
  5. data/lib/abstract.rb +3 -38
  6. data/lib/abstract_node.rb +2 -4
  7. data/lib/algorithms/simulated_annealing.rb +26 -3
  8. data/lib/attributed_class.rb +2 -2
  9. data/lib/auto_object.rb +2 -6
  10. data/lib/blank_slate.rb +1 -1
  11. data/lib/cache.rb +4 -4
  12. data/lib/choose.rb +3 -5
  13. data/lib/commands/command.rb +53 -27
  14. data/lib/commands/datas/composite.rb +2 -4
  15. data/lib/commands/datas/data.rb +13 -16
  16. data/lib/commands/datas/factory.rb +2 -4
  17. data/lib/commands/datas/pipe.rb +52 -0
  18. data/lib/commands/datas/temp.rb +2 -2
  19. data/lib/commands/datas.rb +1 -6
  20. data/lib/commands/factory.rb +1 -3
  21. data/lib/commands/helpers.rb +6 -11
  22. data/lib/commands/pipe.rb +4 -6
  23. data/lib/commands/runners/exec.rb +2 -6
  24. data/lib/commands/runners/fork.rb +3 -20
  25. data/lib/commands/runners/mockable.rb +4 -7
  26. data/lib/commands/runners/no_run.rb +44 -0
  27. data/lib/commands/runners/popen.rb +49 -0
  28. data/lib/commands/runners/runner.rb +29 -6
  29. data/lib/commands/runners/system.rb +1 -4
  30. data/lib/commands/runners.rb +1 -6
  31. data/lib/commands/seq.rb +1 -3
  32. data/lib/commands.rb +3 -13
  33. data/lib/concrete.rb +38 -0
  34. data/lib/config_file.rb +2 -3
  35. data/lib/const_regexp.rb +1 -1
  36. data/lib/d_logger.rb +1 -1
  37. data/lib/daemon.rb +2 -3
  38. data/lib/diff.rb +1 -1
  39. data/lib/diff_tools.rb +1 -3
  40. data/lib/drb/drb_observable.rb +1 -1
  41. data/lib/drb/drb_observable_pool.rb +1 -1
  42. data/lib/drb/drb_service.rb +1 -1
  43. data/lib/drb/drb_undumped_attributes.rb +1 -1
  44. data/lib/drb/drb_undumped_indexed_object.rb +1 -1
  45. data/lib/drb/insecure_protected_methods.rb +1 -1
  46. data/lib/drb_ex.rb +1 -1
  47. data/lib/file_type.rb +2 -2
  48. data/lib/generate_id.rb +1 -1
  49. data/lib/genpasswd.rb +1 -1
  50. data/lib/hash_eval.rb +1 -1
  51. data/lib/histogram.rb +1 -1
  52. data/lib/hookable.rb +1 -4
  53. data/lib/hooker.rb +1 -1
  54. data/lib/html_encode.rb +1 -1
  55. data/lib/indexed_node.rb +0 -3
  56. data/lib/io_marshal.rb +1 -1
  57. data/lib/ioo.rb +1 -1
  58. data/lib/kill_all.rb +2 -2
  59. data/lib/labeled_node.rb +0 -3
  60. data/lib/logger_observer.rb +1 -1
  61. data/lib/md5sum.rb +1 -1
  62. data/lib/meta_factory.rb +1 -1
  63. data/lib/method_call.rb +1 -1
  64. data/lib/mocks/assertions.rb +1 -1
  65. data/lib/mocks/method_logger.rb +1 -3
  66. data/lib/mocks/mock.rb +2 -4
  67. data/lib/mocks/object.rb +1 -4
  68. data/lib/mocks/observer.rb +1 -3
  69. data/lib/mocks.rb +1 -6
  70. data/lib/module/autoload_tree.rb +1 -1
  71. data/lib/module/hierarchy.rb +1 -1
  72. data/lib/module/instance_method_visibility.rb +17 -16
  73. data/lib/object_monitor.rb +1 -1
  74. data/lib/object_monitor_activity.rb +1 -1
  75. data/lib/observable.rb +1 -1
  76. data/lib/observable_pool.rb +1 -1
  77. data/lib/ordered_hash.rb +1 -1
  78. data/lib/r_path.rb +44 -23
  79. data/lib/random_generators/random_generator.rb +1 -1
  80. data/lib/random_generators/ruby.rb +1 -5
  81. data/lib/random_generators.rb +20 -5
  82. data/lib/regex_list.rb +2 -5
  83. data/lib/regex_path.rb +64 -23
  84. data/lib/ruby_ex.rb +11 -2
  85. data/lib/safe_eval.rb +6 -15
  86. data/lib/sendmail.rb +41 -17
  87. data/lib/service_manager.rb +1 -1
  88. data/lib/shuffle.rb +3 -1
  89. data/lib/spring.rb +1 -1
  90. data/lib/spring_set.rb +1 -1
  91. data/lib/sym_tbl.rb +14 -8
  92. data/lib/sym_tbl_gsub.rb +88 -23
  93. data/lib/text.rb +1 -1
  94. data/lib/timeout_ex.rb +1 -1
  95. data/lib/trace.rb +1 -1
  96. data/lib/uri/druby.rb +3 -6
  97. data/lib/uri/file.rb +32 -18
  98. data/lib/uri/ftp_ex.rb +8 -3
  99. data/lib/uri/generic_ex.rb +158 -0
  100. data/lib/uri/http_ex.rb +9 -4
  101. data/lib/uri/mysql.rb +7 -15
  102. data/lib/uri/pgsql.rb +6 -14
  103. data/lib/uri/rsync.rb +77 -0
  104. data/lib/uri/ssh.rb +55 -27
  105. data/lib/uri/svn.rb +22 -76
  106. data/lib/verbose_object.rb +1 -5
  107. data/lib/yaml/transform.rb +1 -1
  108. data/lib/yaml/yregexpath.rb +1 -1
  109. data/test/algorithms/simulated_annealing_test.rb +79 -80
  110. data/test/unit-suite.yml +5 -3
  111. metadata +179 -172
  112. data/SPEC.dyn.yml +0 -10
  113. data/SPEC.gemspec +0 -14
  114. data/lib/uri_ex.rb +0 -110
  115. data/test/test-unit-setup.rb +0 -10
data/lib/sendmail.rb CHANGED
@@ -4,7 +4,6 @@
4
4
  # License:: GNU General Public License (GPL).
5
5
  # Revision:: $Id: header 98 2004-09-29 12:07:43Z ertai $
6
6
 
7
- require 'pathname'
8
7
  require 'ostruct'
9
8
  require 'optparse'
10
9
  Yaml::ChopHeader.import!
@@ -15,12 +14,9 @@ class Sendmail
15
14
  MAIL_FILE = Pathname.new(',mail')
16
15
 
17
16
  def parse_mail_options ( *args )
18
- email = (defined? EMAIL)? EMAIL : ENV['EMAIL']
19
- full_name = (defined? FULLNAME)? FULLNAME : ENV['FULLNAME']
20
- full_email = (defined? FULL_EMAIL)? FULL_EMAIL : "#{full_name} <#{email}>"
21
17
  options = OpenStruct.new(
22
- :from_name => full_email,
23
- :from => email,
18
+ :from => (defined? EMAIL)? EMAIL : ENV['EMAIL'],
19
+ :from_name => (defined? FULLNAME)? FULLNAME : ENV['FULLNAME'],
24
20
  :to => [],
25
21
  :server => ENV['SMTPSERVER'] || 'localhost:25',
26
22
  :header => {},
@@ -29,8 +25,21 @@ class Sendmail
29
25
  string_args, hash_args = args.partition { |x| x.is_a?(String) }
30
26
  hash_args.each do |hash|
31
27
  raise ArgumentError, "Bad argument #{hash}" unless hash.is_a?(Hash)
28
+ if hash[:header].is_a? String
29
+ options.header.merge! YAML.load(hash[:header]).symbolize_keys
30
+ hash.delete :header
31
+ end
32
+ if hash[:subject]
33
+ options.header[:Subject] = hash[:subject]
34
+ hash.delete :subject
35
+ end
32
36
  hash.each do |k,v|
33
- options.send("#{k}=", v)
37
+ x = options.send(k)
38
+ case x
39
+ when Hash then v.each { |kk, vv| x[kk.to_sym] = vv }
40
+ when Array then x.concat v
41
+ else options.send("#{k}=", v)
42
+ end
34
43
  end
35
44
  end
36
45
  OptionParser.new do |opts|
@@ -38,6 +47,9 @@ class Sendmail
38
47
  opts.on('-b', '--body FILE', 'Choose a file for the mail body') do |aFile|
39
48
  options.body = File.open(aFile)
40
49
  end
50
+ opts.on('-f', '--mail-from NAME <EMAIL>', 'Choose the From address') do |aString|
51
+ options.from = aString
52
+ end
41
53
  opts.on('-t', '--mail-to NAME', 'Choose a recipient') do |aString|
42
54
  options.to << aString
43
55
  end
@@ -46,7 +58,7 @@ class Sendmail
46
58
  options.port ||= 25
47
59
  end
48
60
  opts.on('-S', '--subject NAME', 'Choose your mail subject') do |aString|
49
- options.subject = aString.sub(/\.?$/, '.')
61
+ options.header[:Subject] = aString.sub(/\.?$/, '.')
50
62
  end
51
63
  opts.on('--[no-]sign', 'Sign the message with gpg') do |signed|
52
64
  options.signed = signed
@@ -61,7 +73,7 @@ class Sendmail
61
73
  options.comment = aComment
62
74
  end
63
75
  opts.on('--header STRING', 'Add some header fields (Yaml syntax)') do |s|
64
- options.header = YAML.load(s)
76
+ options.header.merge! YAML.load(s)
65
77
  end
66
78
  opts.on('-m', '--[no-]mime', 'Choose the mime protocole') do |mime|
67
79
  options.mime = mime
@@ -71,6 +83,15 @@ class Sendmail
71
83
  exit
72
84
  end
73
85
  end.parse!(string_args)
86
+ options.header[:To] ||= options.to.join ', '
87
+ from = options.header[:From] || options.from
88
+ if from.to_s =~ /<(.*)>/
89
+ options.header[:From] = from
90
+ options.from = $1
91
+ else
92
+ options.header[:From] = "#{options.from_name} <#{from}>"
93
+ options.from = from
94
+ end
74
95
  check_mail_options(options)
75
96
  options
76
97
  end
@@ -79,7 +100,7 @@ class Sendmail
79
100
  def check_mail_options ( options )
80
101
  raise ArgumentError, 'No recipents' if options.to.empty?
81
102
  raise ArgumentError, 'No mail server' if options.server.nil?
82
- raise ArgumentError, 'No mail subject' if options.subject.nil?
103
+ raise ArgumentError, 'No mail subject' if options.header[:Subject].nil?
83
104
  end
84
105
 
85
106
  #
@@ -98,6 +119,7 @@ class Sendmail
98
119
  opts = parse_mail_options(*args)
99
120
  body = (opts.body.nil?)? '' : opts.body.read
100
121
  end
122
+ opts.header.symbolize_keys!
101
123
  server, port = opts.server.split(/:/)
102
124
  port ||= 25
103
125
  STDERR.puts "Smtp Server: #{server}"
@@ -108,9 +130,9 @@ class Sendmail
108
130
  if opts.confirm
109
131
  raise 'HighLine is unavailable' unless defined? HighLine
110
132
  question = %Q[
111
- |Send a mail, with this subject: #{opts.subject}
112
- | to #{opts.to.join(', ')}
113
- | from #{opts.from_name}
133
+ |Send a mail, with this subject: #{opts.header[:Subject]}
134
+ | to #{opts.header[:To]}
135
+ | from #{opts.header[:From]}
114
136
  | #{(opts.signed)? 'signed by ' + opts.from : 'not signed !'}
115
137
  |Are you sure? (y/n)].head_cut!
116
138
  raise 'Aborting' unless HighLine.new.agree question, true
@@ -119,11 +141,13 @@ class Sendmail
119
141
  require 'net/smtp'
120
142
  Net::SMTP.start(server, port) do |smtp|
121
143
  smtp.open_message_stream(opts.from, opts.to) do |f|
122
- f.print %Q[From: #{opts.from_name}
123
- |Subject: #{opts.subject}
124
- |To: #{opts.to.join(', ')}\n].head_cut!
144
+ f.print "From: #{opts.header[:From]}\n"
145
+ f.print "To: #{opts.header[:To]}\n"
146
+ f.print "Subject: #{opts.header[:Subject]}\n"
125
147
  opts.header.each do |k, v|
126
- f.puts "#{k}: #{v}"
148
+ next if [:From, :To, :Subject].include? k
149
+ k = $1 if k.to_s =~ /^"(.*)"$/
150
+ f.print "#{k}: #{v}\n"
127
151
  end
128
152
  if opts.signed
129
153
  TempPath.new do |mail_body|
@@ -3,7 +3,7 @@
3
3
  # License: Gnu General Public License.
4
4
 
5
5
  # $LastChangedBy: ertai $
6
- # $Id: service_manager.rb 339 2005-09-06 23:27:27Z ertai $
6
+ # $Id: /w/fey/ruby_ex/trunk/lib/service_manager.rb 7944 2005-09-06T23:27:27.929371Z ertai $
7
7
 
8
8
  require 'drb/drb'
9
9
 
data/lib/shuffle.rb CHANGED
@@ -1,7 +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: shuffle.rb 339 2005-09-06 23:27:27Z ertai $
4
+ # Revision:: $Id: /w/fey/ruby_ex/trunk/lib/shuffle.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
5
+
6
+ Choose.import!
5
7
 
6
8
  module Shuffle
7
9
 
data/lib/spring.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  # License: Gnu General Public License.
4
4
 
5
5
  # $LastChangedBy: ertai $
6
- # $Id: spring.rb 339 2005-09-06 23:27:27Z ertai $
6
+ # $Id: /w/fey/ruby_ex/trunk/lib/spring.rb 7944 2005-09-06T23:27:27.929371Z ertai $
7
7
 
8
8
 
9
9
  require 'thread'
data/lib/spring_set.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  # License: Gnu General Public License.
4
4
 
5
5
  # $LastChangedBy: ertai $
6
- # $Id: spring_set.rb 339 2005-09-06 23:27:27Z ertai $
6
+ # $Id: /w/fey/ruby_ex/trunk/lib/spring_set.rb 7944 2005-09-06T23:27:27.929371Z ertai $
7
7
 
8
8
 
9
9
 
data/lib/sym_tbl.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  # License: Ruby license.
4
4
 
5
5
  # $LastChangedBy: ertai $
6
- # $Id: sym_tbl.rb 339 2005-09-06 23:27:27Z ertai $
6
+ # $Id: /w/fey/ruby_ex/trunk/lib/sym_tbl.rb 8016 2005-10-26T18:58:00.073495Z ertai $
7
7
 
8
8
  require 'set'
9
9
 
@@ -31,13 +31,16 @@ class SymTbl
31
31
  def [] ( aKey )
32
32
  return nil if aKey == ''
33
33
  aKey = key_convert(aKey)
34
- if @local.has_key? aKey
35
- @local[aKey]
36
- elsif @father.nil?
37
- @local.default
38
- else
39
- @father[aKey]
40
- end
34
+ result =
35
+ if @local.has_key? aKey
36
+ @local[aKey]
37
+ elsif @father.nil?
38
+ @local.default
39
+ else
40
+ @father[aKey]
41
+ end
42
+ result = result[] if result.is_a? Trigger
43
+ result
41
44
  end
42
45
 
43
46
  def []= ( aKey, aValue )
@@ -110,6 +113,9 @@ class SymTbl
110
113
  self.class.new(self)
111
114
  end
112
115
 
116
+ class Trigger < Proc
117
+ end # class Trigger
118
+
113
119
  end # class SymTbl
114
120
 
115
121
 
data/lib/sym_tbl_gsub.rb CHANGED
@@ -1,21 +1,53 @@
1
1
  # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
2
  # Copyright:: Copyright (c) 2005 Nicolas Pouillard. All rights reserved.
3
3
  # License:: Ruby License
4
- # Revision:: $Id: sym_tbl_gsub.rb 376 2005-09-29 21:46:32Z ertai $
4
+ # Revision:: $Id: /w/fey/ruby_ex/trunk/lib/sym_tbl_gsub.rb 21868 2006-02-18T18:09:17.837831Z pouillar $
5
+
6
+ module SymTblGsub
7
+
8
+ module Assertions
9
+
10
+ attr_accessor :symtbl
11
+
12
+ def assert_symtbl ( my, ref )
13
+ assert_equal ref, my.do_symtbl_gsub(symtbl)
14
+ end
15
+
16
+ def assert_symtbl_nil ( my )
17
+ assert_nil my.symtbl_gsub(symtbl)
18
+ end
19
+
20
+ end # module Assertions
21
+
22
+ end # module SymTblGsub
5
23
 
6
- require 'sym_tbl'
7
24
 
8
25
  class Object
9
26
 
27
+ def symtbl_gsub! ( symtbl )
28
+ nil
29
+ end
30
+
10
31
  def symtbl_gsub ( symtbl )
11
32
  nil
12
33
  end
13
34
 
14
35
  def do_symtbl_gsub ( symtbl )
36
+ unless symtbl.is_a? SymTbl
37
+ raise ArgumentError, "need a SymTbl not: #{symtbl.inspect}"
38
+ end
15
39
  result = symtbl_gsub(symtbl)
16
40
  return (result.nil?)? self : result
17
41
  end
18
42
 
43
+ def do_symtbl_gsub! ( symtbl )
44
+ unless symtbl.is_a? SymTbl
45
+ raise ArgumentError, "need a SymTbl not: #{symtbl.inspect}"
46
+ end
47
+ result = symtbl_gsub!(symtbl)
48
+ return (result.nil?)? self : result
49
+ end
50
+
19
51
  def symtbl_to_s
20
52
  to_s
21
53
  end
@@ -67,8 +99,7 @@ class Array
67
99
  end # class Array
68
100
 
69
101
 
70
-
71
- class SymTbl
102
+ SymTbl.class_eval do
72
103
 
73
104
  def symtbl_gsub! ( symtbl )
74
105
  new_local = @local.symtbl_gsub(symtbl)
@@ -87,9 +118,12 @@ end # class SymTbl
87
118
 
88
119
  class Pathname
89
120
 
121
+ def symtbl_gsub! ( symtbl )
122
+ self unless @path.symtbl_gsub!(symtbl).nil?
123
+ end
124
+
90
125
  def symtbl_gsub ( symtbl )
91
- res = to_s.symtbl_gsub(symtbl)
92
- return self.class.new(res) unless res.nil?
126
+ dup.symtbl_gsub!(symtbl)
93
127
  end
94
128
 
95
129
  end # class Pathname
@@ -115,6 +149,10 @@ class Symbol
115
149
  return res.to_sym unless res.nil?
116
150
  end
117
151
 
152
+ def symtbl_gsub! ( symtbl )
153
+ raise TypeError, 'can\'t modify a symbol'
154
+ end
155
+
118
156
  end # class Symbol
119
157
 
120
158
 
@@ -122,23 +160,31 @@ end # class Symbol
122
160
  class String
123
161
 
124
162
  def symtbl_gsub ( symtbl )
125
- return nil unless self =~ /<<(.*)>>/
126
- cur, last = self, nil
127
- while cur != last
128
- last = cur
129
- cur = cur.gsub(/<<([^<>]*)>>/) do
163
+ return nil unless self =~ /<<.*>>/
164
+ dup.symtbl_gsub! symtbl
165
+ end
166
+
167
+ @@tag ||= "|#{rand.to_i}|"
168
+
169
+ def symtbl_gsub! ( symtbl )
170
+ have_changed = nil
171
+ while (
172
+ gsub!(/<<([^<>]*)>>/) do
130
173
  s = symtbl[$1]
131
- (s.nil?)? $& : s.symtbl_to_s
174
+ have_changed ||= s
175
+ (s.nil?)? "<#{@@tag}<#$1>#{@@tag}>" : s.symtbl_to_s
132
176
  end
177
+ ) do
133
178
  end
134
- (cur == self)? nil : cur
179
+ gsub! @@tag, ''
180
+ return nil if have_changed.nil?
181
+ self
135
182
  end
136
183
 
137
184
  end # class String
138
185
 
139
186
 
140
- PathList.import!
141
- class PathList
187
+ PathList.class_eval do
142
188
  attr_accessor :symtbl
143
189
 
144
190
  alias_method :add_matching_without_expand, :add_matching
@@ -173,13 +219,33 @@ class PathList
173
219
  end # class PathList
174
220
 
175
221
 
222
+ class File
223
+
224
+ def symtbl_gsub! ( symtbl )
225
+ contents = read
226
+ result = contents.symtbl_gsub! symtbl
227
+ if result
228
+ truncate 0
229
+ write contents
230
+ end
231
+ result
232
+ end
233
+
234
+ def symtbl_gsub ( symtbl )
235
+ contents = read
236
+ contents.symtbl_gsub! symtbl
237
+ end
238
+
239
+ end # class File
240
+
176
241
 
177
242
  module SymTblGsub
178
243
 
179
244
  test_section __FILE__ do
180
245
  class SymTblGsubTest < Test::Unit::TestCase
246
+ include SymTblGsub::Assertions
181
247
  def setup
182
- @s = SymTbl.new(
248
+ self.symtbl = SymTbl.new(
183
249
  :foo => :bar,
184
250
  :bar => [1, 2],
185
251
  3 => 'foo',
@@ -189,13 +255,10 @@ module SymTblGsub
189
255
  :test => '<<pwd>>/../test'
190
256
  )
191
257
  end
192
- def assert_symtbl ( my, ref=nil )
193
- assert_equal ref, my.symtbl_gsub(@s)
194
- end
195
258
  def test_string
196
259
  assert_symtbl '<<foo>>', 'bar'
197
260
  assert_symtbl '<<foo>><<3>> >> <<', 'barfoo >> <<'
198
- assert_symtbl '<<<<>>>>%%><<>>^#^#'
261
+ assert_symtbl_nil '<<<<>>>>%%><<>>^#^#'
199
262
  assert_symtbl '<<<<bar>>>>', '<<[1, 2]>>'
200
263
  assert_symtbl '%<<<<foo>>>>#', '%[1, 2]#'
201
264
  assert_symtbl "_\n\t\000_<<i>>__", "_\n\t\000_foo__"
@@ -205,7 +268,9 @@ module SymTblGsub
205
268
  class Foo
206
269
  end
207
270
  def test_object
208
- assert_symtbl Foo.new
271
+ f = Foo.new
272
+ assert_symtbl f, f
273
+ assert_symtbl_nil f
209
274
  end
210
275
  def test_hash
211
276
  assert_symtbl({'<<foo>>' => '<<i>>', 'barbar' => '<<3>>' },
@@ -230,7 +295,7 @@ module SymTblGsub
230
295
  ls2 = '<<pwd>>/../test'.to_path + 'fixtures/autoload_tree/*.rb'
231
296
  ls3 = '<<test>>'.to_path + 'fixtures/foo.{tar*,bz*}'
232
297
  pathlist << ls2 << ls1 << ls3
233
- my = PathList[pathlist].symtbl_gsub(@s).map! { |x| x.basename }
298
+ my = PathList[pathlist].symtbl_gsub(symtbl).map! { |x| x.basename }
234
299
  my.all? { |x| assert_kind_of(Pathname, x) }
235
300
  ref = %w[ bar foo A.rb B.rb foo.bz2 foo.tar foo.tar.bz2 foo.tar.gz ]
236
301
  assert_equal ref.to_set, my.map!{ |x| x.to_s }.to_set
@@ -242,7 +307,7 @@ module SymTblGsub
242
307
  pathlist << '<<test>>'.to_path + 'fixtures/foo.{tar*,bz*}'
243
308
  pathlist = PathList[pathlist]
244
309
  assert_equal(['<<foo>>'.to_path, '<<i>>'.to_path], pathlist)
245
- my = pathlist.symtbl_gsub(@s).map! { |x| x.basename }
310
+ my = pathlist.symtbl_gsub(symtbl).map! { |x| x.basename }
246
311
  my.all? { |x| assert_kind_of(Pathname, x) }
247
312
  ref = %w[ bar foo A.rb B.rb foo.bz2 foo.tar foo.tar.bz2 foo.tar.gz ]
248
313
  assert_equal ref.to_set, my.map!{ |x| x.to_s }.to_set
data/lib/text.rb CHANGED
@@ -1,7 +1,7 @@
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: text.rb 359 2005-09-16 10:05:22Z ertai $
4
+ # Revision:: $Id: /w/fey/ruby_ex/trunk/lib/text.rb 7964 2005-09-16T10:05:22.743435Z ertai $
5
5
 
6
6
  class Text
7
7
 
data/lib/timeout_ex.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  # License: Gnu General Public License.
4
4
 
5
5
  # $LastChangedBy: ertai $
6
- # $Id: timeout_ex.rb 339 2005-09-06 23:27:27Z ertai $
6
+ # $Id: /w/fey/ruby_ex/trunk/lib/timeout_ex.rb 7944 2005-09-06T23:27:27.929371Z ertai $
7
7
 
8
8
 
9
9
  require 'thread'
data/lib/trace.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # Copyright:: Copyright (c) 2004, 2005 Nicolas Despres. All rights reserved.
2
2
  # Author:: Nicolas Despres <polrop@lrde.epita.fr>.
3
3
  # License:: Gnu General Public License.
4
- # Revision:: $Id: trace.rb 339 2005-09-06 23:27:27Z ertai $
4
+ # Revision:: $Id: /w/fey/ruby_ex/trunk/lib/trace.rb 7944 2005-09-06T23:27:27.929371Z ertai $
5
5
 
6
6
  module Trace
7
7
 
data/lib/uri/druby.rb CHANGED
@@ -2,15 +2,12 @@
2
2
  # Author: Nicolas Despres <polrop@lrde.epita.fr>.
3
3
  # License: Gnu General Public License.
4
4
 
5
- # $LastChangedBy: ertai $
6
- # $Id: druby.rb 339 2005-09-06 23:27:27Z ertai $
7
-
8
- require 'uri_ex'
9
-
5
+ # $LastChangedBy: pouillar $
6
+ # $Id: /w/fey/ruby_ex/trunk/lib/uri/druby.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
10
7
 
11
8
  module URI
12
9
 
13
- class DRuby < Generic
10
+ class DRuby < GenericEx
14
11
 
15
12
  SCHEME = 'druby'
16
13
  DEFAULT_HOST = 'localhost'
data/lib/uri/file.rb CHANGED
@@ -2,40 +2,37 @@
2
2
  # Author: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
3
  # License: Gnu General Public License.
4
4
 
5
- # $LastChangedBy: ertai $
6
- # $Id: file.rb 385 2005-10-02 17:05:35Z ertai $
5
+ # $LastChangedBy: pouillar $
6
+ # $Id: /w/fey/ruby_ex/trunk/lib/uri/file.rb 21865 2006-02-18T17:13:28.680350Z pouillar $
7
7
 
8
- require 'uri_ex'
8
+
9
+ require 'md5'
9
10
 
10
11
  module URI
11
12
 
12
- class File < Generic
13
+ class File < GenericEx
13
14
 
14
15
  COMPONENT = [
15
16
  :scheme,
16
17
  :path
17
18
  ].freeze
18
- TAR = 'tar'.to_cmd.freeze
19
- GZIP = 'gzip'.to_cmd.freeze
19
+ cattr_reader :tar, :gzip
20
+ @@tar = 'tar'.to_cmd.freeze
21
+ @@gzip = 'gzip'.to_cmd.freeze
20
22
 
21
23
 
22
24
  def initialize ( *args )
23
25
  super
24
26
  unless @host.nil? or @host.empty?
25
- raise ArgumentError,
27
+ raise ArgumentError,
26
28
  "You cannot neither setup a host (#{@host}), nor a relative path"
27
29
  end
28
30
  end
29
31
 
30
- def self.build ( args )
31
- tmp = Util::make_components_hash(self, args)
32
- return super(tmp)
33
- end
34
-
35
32
  def checkout
36
- p = self.pathname
33
+ p = pathname
37
34
  raise CheckoutError, to_s unless p.exist?
38
- p
35
+ [p, nil]
39
36
  end
40
37
 
41
38
  def commit ( aPath )
@@ -43,19 +40,36 @@ module URI
43
40
  end
44
41
 
45
42
  def save
46
- p = self.pathname
43
+ p = pathname
47
44
  raise SaveError, to_s unless p.exist?
48
45
  if p.directory?
49
46
  out = TempPath.new('save', "#{p.basename}.tar.gz")
50
- cmd = TAR['czf', out, p]
47
+ cmd = tar['czf', out, p]
51
48
  else
52
49
  out = TempPath.new('save', "#{p.basename}.gz")
53
- cmd = GZIP['-c', p] > out
50
+ cmd = gzip['-c', p] > out
54
51
  end
55
- cmd.run(self.runner)
52
+ cmd.run(runner)
56
53
  [out, nil]
57
54
  end
58
55
 
56
+ def fingerprint
57
+ digest = Digest::MD5.new
58
+ if pathname.directory?
59
+ pathname.find do |path|
60
+ next if path.directory?
61
+ digest << path.read
62
+ end
63
+ else
64
+ digest << pathname.read
65
+ end
66
+ digest.to_s
67
+ end
68
+
69
+ def to_s
70
+ super.sub(/^(file:\/)([^\/])/, '\1//\2')
71
+ end
72
+
59
73
  end # class File
60
74
 
61
75
  @@schemes['FILE'] = File
data/lib/uri/ftp_ex.rb CHANGED
@@ -2,15 +2,15 @@
2
2
  # Author: Nicolas Pouillard <ertai@lrde.epita.fr>.
3
3
  # License: Gnu General Public License.
4
4
 
5
- # $LastChangedBy: ertai $
6
- # $Id: ftp_ex.rb 385 2005-10-02 17:05:35Z ertai $
5
+ # $LastChangedBy: pouillar $
6
+ # $Id: /w/fey/ruby_ex/trunk/lib/uri/ftp_ex.rb 22058 2006-02-20T21:41:08.060925Z pouillar $
7
7
 
8
- require 'uri_ex'
9
8
  require 'uri/ftp'
10
9
  require 'net/ftp'
11
10
 
12
11
  module URI
13
12
 
13
+ GenericEx.import!
14
14
  class FTP
15
15
 
16
16
  def checkout
@@ -33,4 +33,9 @@ module URI
33
33
 
34
34
  end # class FTP
35
35
 
36
+ class FtpEx
37
+ end
38
+ class FTPEx
39
+ end
40
+
36
41
  end # module URI