etapper 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.0.1
data/lib/etapper.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'rubygems'
2
-
3
1
  # Pull stuff out of vendor/gems
4
2
  Dir.glob(File.dirname(__FILE__) + "/../vendor/gems/*").each do |path|
5
3
  gem_name = File.basename(path.gsub(/-[\d\.]+$/, ''))
@@ -1,4 +1,3 @@
1
- require 'rubygems'
2
1
  require 'soap/rpc/driver'
3
2
  require 'soap/filter/streamhandler'
4
3
 
@@ -9,325 +9,312 @@
9
9
  module SOAP
10
10
 
11
11
 
12
- # Property stream format:
13
- #
14
- # line separator is \r?\n. 1 line per a property.
15
- # line which begins with '#' is a comment line. empty line is ignored, too.
16
- # key/value separator is ':' or '='.
17
- # '\' as escape character. but line separator cannot be escaped.
18
- # \s at the head/tail of key/value are trimmed.
19
- #
20
- # '[' + key + ']' indicates property section. for example,
21
- #
22
- # [aaa.bbb]
23
- # ccc = ddd
24
- # eee.fff = ggg
25
- # []
26
- # aaa.hhh = iii
27
- #
28
- # is the same as;
29
- #
30
- # aaa.bbb.ccc = ddd
31
- # aaa.bbb.eee.fff = ggg
32
- # aaa.hhh = iii
33
- #
34
- class Property
35
- FrozenError = (RUBY_VERSION >= "1.9.0") ? RuntimeError : TypeError
36
-
37
- include Enumerable
38
-
39
- module Util
40
- def const_from_name(fqname)
41
- fqname.split("::").inject(Kernel) { |klass, name| klass.const_get(name) }
42
- end
43
- module_function :const_from_name
12
+ # Property stream format:
13
+ #
14
+ # line separator is \r?\n. 1 line per a property.
15
+ # line which begins with '#' is a comment line. empty line is ignored, too.
16
+ # key/value separator is ':' or '='.
17
+ # '\' as escape character. but line separator cannot be escaped.
18
+ # \s at the head/tail of key/value are trimmed.
19
+ #
20
+ # '[' + key + ']' indicates property section. for example,
21
+ #
22
+ # [aaa.bbb]
23
+ # ccc = ddd
24
+ # eee.fff = ggg
25
+ # []
26
+ # aaa.hhh = iii
27
+ #
28
+ # is the same as;
29
+ #
30
+ # aaa.bbb.ccc = ddd
31
+ # aaa.bbb.eee.fff = ggg
32
+ # aaa.hhh = iii
33
+ #
34
+ class Property
35
+ FrozenError = (RUBY_VERSION >= "1.9.0") ? RuntimeError : TypeError
36
+
37
+ include Enumerable
38
+
39
+ module Util
40
+ def const_from_name(fqname)
41
+ fqname.split("::").inject(Kernel) { |klass, name| klass.const_get(name) }
42
+ end
43
+ module_function :const_from_name
44
44
 
45
- def require_from_name(fqname)
46
- require File.join(fqname.split("::").collect { |ele| ele.downcase })
45
+ def require_from_name(fqname)
46
+ require File.join(fqname.split("::").collect { |ele| ele.downcase })
47
+ end
48
+ module_function :require_from_name
47
49
  end
48
- module_function :require_from_name
49
- end
50
50
 
51
- def self.load(stream)
52
- new.load(stream)
53
- end
51
+ def self.load(stream)
52
+ new.load(stream)
53
+ end
54
54
 
55
- def self.loadproperty(propname)
56
- new.loadproperty(propname)
57
- end
55
+ def self.loadproperty(propname)
56
+ new.loadproperty(propname)
57
+ end
58
58
 
59
- def initialize
60
- @store = Hash.new
61
- @hook = Hash.new
62
- @self_hook = Array.new
63
- @locked = false
64
- end
59
+ def initialize
60
+ @store = Hash.new
61
+ @hook = Hash.new
62
+ @self_hook = Array.new
63
+ @locked = false
64
+ end
65
65
 
66
- KEY_REGSRC = '([^=:\\\\]*(?:\\\\.[^=:\\\\]*)*)'
67
- DEF_REGSRC = '\\s*' + KEY_REGSRC + '\\s*[=:]\\s*(.*)'
68
- COMMENT_REGEXP = Regexp.new("^(?:#.*|)$")
69
- CATDEF_REGEXP = Regexp.new("^\\[\\s*#{KEY_REGSRC}\\s*\\]$")
70
- LINE_REGEXP = Regexp.new("^#{DEF_REGSRC}$")
71
- def load(stream)
72
- key_prefix = ""
73
- stream.each_line.each_with_index do |line, lineno|
74
- line.sub!(/\r?\n\z/u, '')
75
- case line
76
- when COMMENT_REGEXP
77
- next
78
- when CATDEF_REGEXP
79
- key_prefix = $1.strip
80
- when LINE_REGEXP
81
- key, value = $1.strip, $2.strip
82
- key = "#{key_prefix}.#{key}" unless key_prefix.empty?
83
- key, value = loadstr(key), loadstr(value)
84
- self[key] = value
85
- else
86
- raise TypeError.new(
87
- "property format error at line #{lineno + 1}: `#{line}'")
66
+ KEY_REGSRC = '([^=:\\\\]*(?:\\\\.[^=:\\\\]*)*)'
67
+ DEF_REGSRC = '\\s*' + KEY_REGSRC + '\\s*[=:]\\s*(.*)'
68
+ COMMENT_REGEXP = Regexp.new("^(?:#.*|)$")
69
+ CATDEF_REGEXP = Regexp.new("^\\[\\s*#{KEY_REGSRC}\\s*\\]$")
70
+ LINE_REGEXP = Regexp.new("^#{DEF_REGSRC}$")
71
+ def load(stream)
72
+ key_prefix = ""
73
+ stream.each_line.each_with_index do |line, lineno|
74
+ line.sub!(/\r?\n\z/u, '')
75
+ case line
76
+ when COMMENT_REGEXP
77
+ next
78
+ when CATDEF_REGEXP
79
+ key_prefix = $1.strip
80
+ when LINE_REGEXP
81
+ key, value = $1.strip, $2.strip
82
+ key = "#{key_prefix}.#{key}" unless key_prefix.empty?
83
+ key, value = loadstr(key), loadstr(value)
84
+ self[key] = value
85
+ else
86
+ raise TypeError.new(
87
+ "property format error at line #{lineno + 1}: `#{line}'")
88
+ end
88
89
  end
90
+ self
89
91
  end
90
- self
91
- end
92
92
 
93
- # find property from $:.
94
- def loadproperty(propname)
95
- return loadpropertyfile(propname) if File.file?(propname)
96
- $:.each do |path|
97
- if File.file?(file = File.join(path, propname))
98
- return loadpropertyfile(file)
93
+ # find property from $:.
94
+ def loadproperty(propname)
95
+ return loadpropertyfile(propname) if File.file?(propname)
96
+ $:.each do |path|
97
+ if File.file?(file = File.join(path, propname))
98
+ return loadpropertyfile(file)
99
+ end
99
100
  end
101
+ nil
100
102
  end
101
- nil
102
- end
103
103
 
104
- # name: a Symbol, String or an Array
105
- def [](name)
106
- referent(name_to_a(name))
107
- end
108
-
109
- # name: a Symbol, String or an Array
110
- # value: an Object
111
- def []=(name, value)
112
- name_pair = name_to_a(name).freeze
113
- hooks = assign(name_pair, value)
114
- hooks.each do |hook|
115
- hook.call(name_pair, value)
104
+ # name: a Symbol, String or an Array
105
+ def [](name)
106
+ referent(name_to_a(name))
116
107
  end
117
- value
118
- end
119
108
 
120
- # value: an Object
121
- # key is generated by property
122
- def <<(value)
123
- self[generate_new_key] = value
124
- end
125
-
126
- # name: a Symbol, String or an Array; nil means hook to the root
127
- # cascade: true/false; for cascading hook of sub key
128
- # hook: block which will be called with 2 args, name and value
129
- def add_hook(name = nil, cascade = false, &hook)
130
- if name == nil or name == true or name == false
131
- cascade = name
132
- assign_self_hook(cascade, &hook)
133
- else
134
- assign_hook(name_to_a(name), cascade, &hook)
109
+ # name: a Symbol, String or an Array
110
+ # value: an Object
111
+ def []=(name, value)
112
+ name_pair = name_to_a(name).freeze
113
+ hooks = assign(name_pair, value)
114
+ hooks.each do |hook|
115
+ hook.call(name_pair, value)
116
+ end
117
+ value
135
118
  end
136
- end
137
119
 
138
- def each
139
- @store.each do |key, value|
140
- yield(key, value)
120
+ # value: an Object
121
+ # key is generated by property
122
+ def <<(value)
123
+ self[generate_new_key] = value
141
124
  end
142
- end
143
125
 
144
- def empty?
145
- @store.empty?
146
- end
147
-
148
- def keys
149
- @store.keys
150
- end
151
-
152
- def values
153
- @store.values
154
- end
155
-
156
- def lock(cascade = false)
157
- if cascade
158
- each_key do |key|
159
- key.lock(cascade)
126
+ # name: a Symbol, String or an Array; nil means hook to the root
127
+ # cascade: true/false; for cascading hook of sub key
128
+ # hook: block which will be called with 2 args, name and value
129
+ def add_hook(name = nil, cascade = false, &hook)
130
+ if name == nil or name == true or name == false
131
+ cascade = name
132
+ assign_self_hook(cascade, &hook)
133
+ else
134
+ assign_hook(name_to_a(name), cascade, &hook)
160
135
  end
161
136
  end
162
- @locked = true
163
- self
164
- end
165
137
 
166
- def unlock(cascade = false)
167
- @locked = false
168
- if cascade
169
- each_key do |key|
170
- key.unlock(cascade)
138
+ def each
139
+ @store.each do |key, value|
140
+ yield(key, value)
171
141
  end
172
142
  end
173
- self
174
- end
175
143
 
176
- def locked?
177
- @locked
178
- end
144
+ def empty?
145
+ @store.empty?
146
+ end
179
147
 
180
- protected
148
+ def keys
149
+ @store.keys
150
+ end
181
151
 
182
- def deref_key(key)
183
- check_lock(key)
184
- ref = @store[key] ||= self.class.new
185
- unless propkey?(ref)
186
- raise ArgumentError.new("key `#{key}' already defined as a value")
152
+ def values
153
+ @store.values
187
154
  end
188
- ref
189
- end
190
155
 
191
- def local_referent(key)
192
- check_lock(key)
193
- if propkey?(@store[key]) and @store[key].locked?
194
- raise FrozenError.new("cannot split any key from locked property")
156
+ def lock(cascade = false)
157
+ if cascade
158
+ each_key do |key|
159
+ key.lock(cascade)
160
+ end
161
+ end
162
+ @locked = true
163
+ self
195
164
  end
196
- @store[key]
197
- end
198
165
 
199
- def local_assign(key, value)
200
- check_lock(key)
201
- if @locked
202
- if propkey?(value)
203
- raise FrozenError.new("cannot add any key to locked property")
204
- elsif propkey?(@store[key])
205
- raise FrozenError.new("cannot override any key in locked property")
166
+ def unlock(cascade = false)
167
+ @locked = false
168
+ if cascade
169
+ each_key do |key|
170
+ key.unlock(cascade)
171
+ end
206
172
  end
173
+ self
207
174
  end
208
- @store[key] = value
209
- end
210
175
 
211
- def local_hook(key, direct)
212
- hooks = []
213
- (@self_hook + (@hook[key] || NO_HOOK)).each do |hook, cascade|
214
- hooks << hook if direct or cascade
176
+ def locked?
177
+ @locked
215
178
  end
216
- hooks
217
- end
218
179
 
219
- def local_assign_hook(key, cascade, &hook)
220
- check_lock(key)
221
- @store[key] ||= nil
222
- (@hook[key] ||= []) << [hook, cascade]
223
- end
180
+ protected
224
181
 
225
- private
182
+ def deref_key(key)
183
+ check_lock(key)
184
+ ref = @store[key] ||= self.class.new
185
+ unless propkey?(ref)
186
+ raise ArgumentError.new("key `#{key}' already defined as a value")
187
+ end
188
+ ref
189
+ end
226
190
 
227
- NO_HOOK = [].freeze
191
+ def local_referent(key)
192
+ check_lock(key)
193
+ if propkey?(@store[key]) and @store[key].locked?
194
+ raise FrozenError.new("cannot split any key from locked property")
195
+ end
196
+ @store[key]
197
+ end
228
198
 
229
- def referent(ary)
230
- ary[0..-2].inject(self) { |ref, name|
231
- ref.deref_key(to_key(name))
232
- }.local_referent(to_key(ary.last))
233
- end
199
+ def local_assign(key, value)
200
+ check_lock(key)
201
+ if @locked
202
+ if propkey?(value)
203
+ raise FrozenError.new("cannot add any key to locked property")
204
+ elsif propkey?(@store[key])
205
+ raise FrozenError.new("cannot override any key in locked property")
206
+ end
207
+ end
208
+ @store[key] = value
209
+ end
234
210
 
235
- def assign(ary, value)
236
- ref = self
237
- hook = NO_HOOK
238
- ary[0..-2].each do |name|
239
- key = to_key(name)
240
- hook += ref.local_hook(key, false)
241
- ref = ref.deref_key(key)
242
- end
243
- last_key = to_key(ary.last)
244
- ref.local_assign(last_key, value)
245
- hook + ref.local_hook(last_key, true)
246
- end
211
+ def local_hook(key, direct)
212
+ hooks = []
213
+ (@self_hook + (@hook[key] || NO_HOOK)).each do |hook, cascade|
214
+ hooks << hook if direct or cascade
215
+ end
216
+ hooks
217
+ end
247
218
 
248
- def assign_hook(ary, cascade, &hook)
249
- ary[0..-2].inject(self) { |ref, name|
250
- ref.deref_key(to_key(name))
251
- }.local_assign_hook(to_key(ary.last), cascade, &hook)
252
- end
219
+ def local_assign_hook(key, cascade, &hook)
220
+ check_lock(key)
221
+ @store[key] ||= nil
222
+ (@hook[key] ||= []) << [hook, cascade]
223
+ end
253
224
 
254
- def assign_self_hook(cascade, &hook)
255
- check_lock(nil)
256
- @self_hook << [hook, cascade]
257
- end
225
+ private
258
226
 
259
- def each_key
260
- self.each do |key, value|
261
- if propkey?(value)
262
- yield(value)
227
+ NO_HOOK = [].freeze
228
+
229
+ def referent(ary)
230
+ ary[0..-2].inject(self) { |ref, name|
231
+ ref.deref_key(to_key(name))
232
+ }.local_referent(to_key(ary.last))
263
233
  end
264
- end
265
- end
266
234
 
267
- def check_lock(key)
268
- if @locked and (key.nil? or !@store.key?(key))
269
- raise FrozenError.new("cannot add any key to locked property")
270
- end
271
- end
235
+ def assign(ary, value)
236
+ ref = self
237
+ hook = NO_HOOK
238
+ ary[0..-2].each do |name|
239
+ key = to_key(name)
240
+ hook += ref.local_hook(key, false)
241
+ ref = ref.deref_key(key)
242
+ end
243
+ last_key = to_key(ary.last)
244
+ ref.local_assign(last_key, value)
245
+ hook + ref.local_hook(last_key, true)
246
+ end
272
247
 
273
- def propkey?(value)
274
- value.is_a?(::SOAP::Property)
275
- end
248
+ def assign_hook(ary, cascade, &hook)
249
+ ary[0..-2].inject(self) { |ref, name|
250
+ ref.deref_key(to_key(name))
251
+ }.local_assign_hook(to_key(ary.last), cascade, &hook)
252
+ end
276
253
 
277
- def name_to_a(name)
278
- case name
279
- when Symbol
280
- [name]
281
- when String
282
- name.scan(/[^.\\]+(?:\\.[^.\\])*/u) # split with unescaped '.'
283
- when Array
284
- name
285
- else
286
- raise ArgumentError.new("Unknown name #{name}(#{name.class})")
287
- end
288
- end
254
+ def assign_self_hook(cascade, &hook)
255
+ check_lock(nil)
256
+ @self_hook << [hook, cascade]
257
+ end
289
258
 
290
- def to_key(name)
291
- name.to_s.downcase
292
- end
259
+ def each_key
260
+ self.each do |key, value|
261
+ if propkey?(value)
262
+ yield(value)
263
+ end
264
+ end
265
+ end
293
266
 
294
- def generate_new_key
295
- if @store.empty?
296
- "0"
297
- else
298
- (key_max + 1).to_s
299
- end
300
- end
267
+ def check_lock(key)
268
+ if @locked and (key.nil? or !@store.key?(key))
269
+ raise FrozenError.new("cannot add any key to locked property")
270
+ end
271
+ end
301
272
 
302
- def key_max
303
- (@store.keys.max { |l, r| l.to_s.to_i <=> r.to_s.to_i }).to_s.to_i
304
- end
273
+ def propkey?(value)
274
+ value.is_a?(::SOAP::Property)
275
+ end
305
276
 
306
- def loadpropertyfile(file)
307
- puts "find property at #{file}" if $DEBUG
308
- File.open(file) do |f|
309
- load(f)
310
- end
311
- end
277
+ def name_to_a(name)
278
+ case name
279
+ when Symbol
280
+ [name]
281
+ when String
282
+ name.scan(/[^.\\]+(?:\\.[^.\\])*/u) # split with unescaped '.'
283
+ when Array
284
+ name
285
+ else
286
+ raise ArgumentError.new("Unknown name #{name}(#{name.class})")
287
+ end
288
+ end
312
289
 
313
- def loadstr(str)
314
- str.gsub(/\\./u) { |c| eval("\"#{c}\"") }
315
- end
316
- end
290
+ def to_key(name)
291
+ name.to_s.downcase
292
+ end
317
293
 
294
+ def generate_new_key
295
+ if @store.empty?
296
+ "0"
297
+ else
298
+ (key_max + 1).to_s
299
+ end
300
+ end
318
301
 
319
- end
302
+ def key_max
303
+ (@store.keys.max { |l, r| l.to_s.to_i <=> r.to_s.to_i }).to_s.to_i
304
+ end
320
305
 
306
+ def loadpropertyfile(file)
307
+ puts "find property at #{file}" if $DEBUG
308
+ File.open(file) do |f|
309
+ load(f)
310
+ end
311
+ end
321
312
 
322
- # for ruby/1.6.
323
- unless Enumerable.instance_methods.include?('inject')
324
- module Enumerable
325
- def inject(init)
326
- result = init
327
- each do |item|
328
- result = yield(result, item)
313
+ def loadstr(str)
314
+ str.gsub(/\\./u) { |c| eval("\"#{c}\"") }
329
315
  end
330
- result
331
- end
332
316
  end
317
+
318
+
333
319
  end
320
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: etapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Eley
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-16 00:00:00 -04:00
12
+ date: 2009-11-13 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency