extract-curves 0.1.1-i586-linux

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 (135) hide show
  1. data/Changelog +21 -0
  2. data/bin/ec_rect2polar +22 -0
  3. data/bin/ec_rect2polar.rb +22 -0
  4. data/bin/ec_rev_lines +5 -0
  5. data/bin/ec_rev_lines.rb +5 -0
  6. data/bin/ec_sph_area +30 -0
  7. data/bin/ec_sph_area.rb +30 -0
  8. data/bin/extract_curves +1670 -0
  9. data/bin/extract_curves.rb +1670 -0
  10. data/ruby_ext/pav/extconf.rb +22 -0
  11. data/ruby_ext/pav/pav.so +0 -0
  12. data/ruby_libs/pav/attr_cache.rb +211 -0
  13. data/ruby_libs/pav/attr_cache.t1.rb +32 -0
  14. data/ruby_libs/pav/cache.rb +31 -0
  15. data/ruby_libs/pav/collection/std.rb +58 -0
  16. data/ruby_libs/pav/dbg_log.rb +458 -0
  17. data/ruby_libs/pav/floatsio.rb +53 -0
  18. data/ruby_libs/pav/generator_cache.rb +165 -0
  19. data/ruby_libs/pav/graph/node.rb +602 -0
  20. data/ruby_libs/pav/graph/node_grp.rb +865 -0
  21. data/ruby_libs/pav/gtk.rb +6 -0
  22. data/ruby_libs/pav/gtk/button.rb +118 -0
  23. data/ruby_libs/pav/gtk/dialog.rb +29 -0
  24. data/ruby_libs/pav/gtk/guiobj.rb +772 -0
  25. data/ruby_libs/pav/gtk/icons.rb +124 -0
  26. data/ruby_libs/pav/gtk/rulers.rb +264 -0
  27. data/ruby_libs/pav/gtk/toolbar.rb +189 -0
  28. data/ruby_libs/pav/guiobj.rb +2 -0
  29. data/ruby_libs/pav/guiobj/info_asm.rb +41 -0
  30. data/ruby_libs/pav/guiobj/method.rb +211 -0
  31. data/ruby_libs/pav/guiobj/obj.rb +134 -0
  32. data/ruby_libs/pav/guiobj/signals.rb +9 -0
  33. data/ruby_libs/pav/heap.rb +54 -0
  34. data/ruby_libs/pav/icons/alt_handle.xpm +3832 -0
  35. data/ruby_libs/pav/icons/alt_handle_hover.xpm +3368 -0
  36. data/ruby_libs/pav/icons/alt_handle_pressed.xpm +3828 -0
  37. data/ruby_libs/pav/icons/blob.gif +0 -0
  38. data/ruby_libs/pav/icons/contour.gif +0 -0
  39. data/ruby_libs/pav/icons/contour_carpet.gif +0 -0
  40. data/ruby_libs/pav/icons/curve.gif +0 -0
  41. data/ruby_libs/pav/icons/curve_carpet.gif +0 -0
  42. data/ruby_libs/pav/icons/expand_closed.xpm +1791 -0
  43. data/ruby_libs/pav/icons/expand_closed_hover.xpm +1775 -0
  44. data/ruby_libs/pav/icons/expand_open.xpm +1788 -0
  45. data/ruby_libs/pav/icons/expand_open_hover.xpm +1752 -0
  46. data/ruby_libs/pav/icons/extract_curves/extract_curves-icon-rgb.ppm +14 -0
  47. data/ruby_libs/pav/icons/extract_curves/extract_curves-logo-rgb.gif +0 -0
  48. data/ruby_libs/pav/icons/extract_curves/trace_mark.xpm +38 -0
  49. data/ruby_libs/pav/icons/handle.xpm +213 -0
  50. data/ruby_libs/pav/icons/loop.gif +0 -0
  51. data/ruby_libs/pav/icons/loop_carpet.gif +0 -0
  52. data/ruby_libs/pav/icons/next.xpm +29 -0
  53. data/ruby_libs/pav/icons/next_hover.xpm +315 -0
  54. data/ruby_libs/pav/icons/next_pressed.xpm +144 -0
  55. data/ruby_libs/pav/icons/prev.xpm +29 -0
  56. data/ruby_libs/pav/icons/prev_hover.xpm +315 -0
  57. data/ruby_libs/pav/icons/prev_pressed.xpm +144 -0
  58. data/ruby_libs/pav/icons/shaved-core.gif +0 -0
  59. data/ruby_libs/pav/icons/vnext.xpm +29 -0
  60. data/ruby_libs/pav/icons/vprev.xpm +29 -0
  61. data/ruby_libs/pav/numeric/ext.rb +21 -0
  62. data/ruby_libs/pav/patterns/hsep.gif +0 -0
  63. data/ruby_libs/pav/patterns/tnode.gif +0 -0
  64. data/ruby_libs/pav/patterns/tnode_w_link.gif +0 -0
  65. data/ruby_libs/pav/patterns/vlink.gif +0 -0
  66. data/ruby_libs/pav/patterns/vsep.gif +0 -0
  67. data/ruby_libs/pav/patterns/yg_hrope.xpm +492 -0
  68. data/ruby_libs/pav/patterns/yg_hrope_thick.xpm +1904 -0
  69. data/ruby_libs/pav/patterns/yg_hrope_thin.xpm +130 -0
  70. data/ruby_libs/pav/patterns/yg_tnode.xpm +180 -0
  71. data/ruby_libs/pav/patterns/yg_tnode_thick.xpm +615 -0
  72. data/ruby_libs/pav/patterns/yg_tnode_thin.xpm +55 -0
  73. data/ruby_libs/pav/patterns/yg_tnode_w_link.xpm +190 -0
  74. data/ruby_libs/pav/patterns/yg_tnode_w_link_thick.xpm +676 -0
  75. data/ruby_libs/pav/patterns/yg_tnode_w_link_thin.xpm +62 -0
  76. data/ruby_libs/pav/patterns/yg_vrope.xpm +563 -0
  77. data/ruby_libs/pav/patterns/yg_vrope_thick.xpm +2047 -0
  78. data/ruby_libs/pav/patterns/yg_vrope_thin.xpm +166 -0
  79. data/ruby_libs/pav/pav_find.rb +90 -0
  80. data/ruby_libs/pav/pix.rb +402 -0
  81. data/ruby_libs/pav/pix/aapix.rb +378 -0
  82. data/ruby_libs/pav/pix/blob.rb +678 -0
  83. data/ruby_libs/pav/pix/circle.rb +73 -0
  84. data/ruby_libs/pav/pix/contour.rb +676 -0
  85. data/ruby_libs/pav/pix/contour/calc_situations.rb +9 -0
  86. data/ruby_libs/pav/pix/contour/carp_calc.rb +212 -0
  87. data/ruby_libs/pav/pix/contour/situations.dmp +0 -0
  88. data/ruby_libs/pav/pix/contour/situations.rb +21 -0
  89. data/ruby_libs/pav/pix/curve.rb +1544 -0
  90. data/ruby_libs/pav/pix/img_obj.rb +865 -0
  91. data/ruby_libs/pav/pix/node.rb +159 -0
  92. data/ruby_libs/pav/pix/shaved_core.rb +697 -0
  93. data/ruby_libs/pav/pix/subpix.rb +212 -0
  94. data/ruby_libs/pav/rand_accessible.rb +16 -0
  95. data/ruby_libs/pav/rangeset.rb +63 -0
  96. data/ruby_libs/pav/search.rb +210 -0
  97. data/ruby_libs/pav/set.rb +130 -0
  98. data/ruby_libs/pav/string/bits.rb +523 -0
  99. data/ruby_libs/pav/string/ext.rb +58 -0
  100. data/ruby_libs/pav/string/observable.rb +155 -0
  101. data/ruby_libs/pav/string/text.rb +79 -0
  102. data/ruby_libs/pav/string/words.rb +42 -0
  103. data/ruby_libs/pav/sub_arr.rb +56 -0
  104. data/ruby_libs/pav/traced_obj.rb +79 -0
  105. data/web/index.html +280 -0
  106. data/web/media/icons/alt_handle.xpm +3832 -0
  107. data/web/media/icons/alt_handle_hover.xpm +3368 -0
  108. data/web/media/icons/alt_handle_pressed.xpm +3828 -0
  109. data/web/media/icons/blob.gif +0 -0
  110. data/web/media/icons/contour.gif +0 -0
  111. data/web/media/icons/contour_carpet.gif +0 -0
  112. data/web/media/icons/curve.gif +0 -0
  113. data/web/media/icons/curve_carpet.gif +0 -0
  114. data/web/media/icons/expand_closed.xpm +1791 -0
  115. data/web/media/icons/expand_closed_hover.xpm +1775 -0
  116. data/web/media/icons/expand_open.xpm +1788 -0
  117. data/web/media/icons/expand_open_hover.xpm +1752 -0
  118. data/web/media/icons/extract_curves/extract_curves-icon-rgb.ppm +14 -0
  119. data/web/media/icons/extract_curves/extract_curves-logo-rgb.gif +0 -0
  120. data/web/media/icons/extract_curves/trace_mark.xpm +38 -0
  121. data/web/media/icons/handle.xpm +213 -0
  122. data/web/media/icons/loop.gif +0 -0
  123. data/web/media/icons/loop_carpet.gif +0 -0
  124. data/web/media/icons/next.xpm +29 -0
  125. data/web/media/icons/next_hover.xpm +315 -0
  126. data/web/media/icons/next_pressed.xpm +144 -0
  127. data/web/media/icons/prev.xpm +29 -0
  128. data/web/media/icons/prev_hover.xpm +315 -0
  129. data/web/media/icons/prev_pressed.xpm +144 -0
  130. data/web/media/icons/shaved-core.gif +0 -0
  131. data/web/media/icons/vnext.xpm +29 -0
  132. data/web/media/icons/vprev.xpm +29 -0
  133. data/web/media/title.jpeg +0 -0
  134. data/web/stylesheets/default.css +20 -0
  135. metadata +192 -0
@@ -0,0 +1,58 @@
1
+ class String
2
+ def starts_with(str)
3
+ self[0, str.length] == str
4
+ end
5
+
6
+ def ends_with(str)
7
+ self[-str.length, str.length] == str
8
+ end
9
+
10
+ def expand_tabs(tab_stop=8)
11
+ self.gsub(/([^\t]{#{tab_stop}})|([^\t]*)\t/n) {
12
+ [$+].pack("A#{tab_stop}") }
13
+ end
14
+
15
+ def expand_tabs!(tab_stop=8)
16
+ self.gsub!(/([^\t]{#{tab_stop}})|([^\t]*)\t/n) {
17
+ [$+].pack("A#{tab_stop}") }
18
+ end
19
+
20
+ def eval_backspace(bs="\b")
21
+ self.gsub(/([^#{bs}]*)(#{bs}+)/n) { $1[0, $1.length-$2.length] }
22
+ end
23
+
24
+ def eval_backspace!(bs="\b")
25
+ self.gsub!(/([^#{bs}]*)(#{bs}+)/n){ $1[0, $1.length-$2.length] }
26
+ end
27
+
28
+ def cap_first
29
+ return "" if self.length < 1
30
+ self[0,1].upcase + self[1, self.length-1]
31
+ end
32
+
33
+ def downcase_first
34
+ return "" if self.length < 1
35
+ self[0,1].downcase + self[1, self.length-1]
36
+ end
37
+
38
+ def ^(other)
39
+ res = self.dup
40
+ 0.upto([self.length, other.length].min - 1) { |i|
41
+ res[i] ^= other[i]
42
+ }
43
+ res
44
+ end
45
+
46
+ def xor!(mask_str)
47
+ 0.upto([self.length, mask_str.length].min - 1) { |i|
48
+ self[i] ^= mask_str[i]
49
+ }
50
+ self
51
+ end
52
+
53
+ def bits_to_i
54
+ res = 0
55
+ self.each_byte { |b| res = (res << 8) + b }
56
+ res
57
+ end
58
+ end
@@ -0,0 +1,155 @@
1
+ require 'observer'
2
+ #require 'irb/frame'
3
+
4
+ class PMethName
5
+
6
+ # Is +name+ the name of a method that usually changes the object?
7
+ def self.obj_changer?(name)
8
+ name[-1,1] == "!" ||
9
+ (name.length > 1 && name[-1,1] == "=" &&
10
+ !["=", ">", "<", "+", "-", "*", "/"].member?(name[-2,1])) ||
11
+ name == "<<"
12
+ end
13
+
14
+ end
15
+
16
+ # If the only way to change a string is through the built-in string changing
17
+ # functions, we don't need to be so dynamic.
18
+
19
+ class String
20
+ include Observable
21
+
22
+ alias_method :__add_observer_o__, :add_observer
23
+
24
+ def wrap_changer_meth(id)
25
+ # if method wrapped in self's anonymous class:
26
+ if self.respond_to?("__pso_#{id.to_i}_o__")
27
+ return
28
+ end
29
+ eval <<-"end_eval"
30
+ class <<self
31
+ def #{id.id2name}(*args, &block)
32
+ tc = Thread::critical=(true)
33
+ begin
34
+ res= super(*args,&block)
35
+ ensure
36
+ Thread::critical = tc
37
+ end
38
+ self.changed(true)
39
+ self.notify_observers(self,
40
+ #{id.id2name.inspect}, args,
41
+ block)
42
+ res
43
+ end
44
+ end
45
+ end_eval
46
+ end
47
+
48
+ def add_observer(obj)
49
+ tc = Thread::critical=(true)
50
+ if !self.respond_to?(:__add_observer_o__)
51
+ Thread::critical = tc
52
+ return self.add_observer(obj)
53
+ end
54
+ class <<self
55
+ @@__pso_adding_meth__ = false
56
+ alias_method :add_observer, :__add_observer_o__
57
+ private :__add_observer_o__
58
+ # if self.public_instance_methods.member? "extend_object"
59
+ # alias_method :__pso_extend_object_o__,
60
+ # :extend_object unless
61
+ # respond_to? :__pso_extend_object_o__
62
+ # def self.extend_object(id)
63
+ # Thread::critical =
64
+ # (tc = Thread::critical) || true
65
+ # if PMethName::obj_changer?(id.id2name)&&
66
+ # !@@__pso_adding_meth__
67
+ # @@__pso_adding_meth__ = true
68
+ # module_eval <<-"end_eval"
69
+ # alias_method :__pso_#{id.to_i}_o__,
70
+ # #{id.inspect}
71
+ # def #{id.id2name}(*args, &block)
72
+ # Thread::critical =
73
+ # (tc = Thread::critical) || true
74
+ # begin
75
+ # res = __pso_#{id.to_i}_o__(
76
+ # *args, &block)
77
+ # ensure
78
+ # Thread::critical = tc
79
+ # end
80
+ # self.changed(true)
81
+ # self.notify_observers(self,
82
+ # #{id.id2name.inspect},
83
+ # args, block)
84
+ # res
85
+ # end
86
+ # end_eval
87
+ # @@__pso_adding_meth__ = false
88
+ # end
89
+ # Thread::critical = tc
90
+ # __pso_method_added_o__(id)
91
+ # end
92
+ # else
93
+ # def self.extend_object(id)
94
+ # Thread::critical =
95
+ # (tc = Thread::critical) || true
96
+ # if PMethName::obj_changer?(id.id2name)&&
97
+ # !@@__pso_adding_meth__
98
+ # @@__pso_adding_meth__ = true
99
+ # module_eval <<-"end_eval"
100
+ # alias_method :__pso_#{id.to_i}_o__,
101
+ # #{id.inspect}
102
+ # def #{id.id2name}(*args, &block)
103
+ # Thread::critical =
104
+ # (tc = Thread::critical) || true
105
+ # begin
106
+ # res = __pso_#{id.to_i}_o__(
107
+ # *args, &block)
108
+ # ensure
109
+ # Thread::critical = tc
110
+ # end
111
+ # self.changed(true)
112
+ # self.notify_observers(self,
113
+ # #{id.id2name.inspect},
114
+ # args, block)
115
+ # res
116
+ # end
117
+ # end_eval
118
+ # @@__pso_adding_meth__ = false
119
+ # end
120
+ # Thread::critical = tc
121
+ # end
122
+ # end
123
+ end
124
+ for m in self.methods.delete_if{|m| !PMethName::obj_changer?(m)}
125
+ self.wrap_changer_meth(m.to_sym)
126
+ end
127
+ Thread::critical = tc
128
+ self.add_observer(obj)
129
+ end
130
+
131
+ # if respond_to? :method_added
132
+ # alias_method :__pso_m_method_added_o__, :method_added unless
133
+ # respond_to? :__pso_m_method_added_o__
134
+ # def self.method_added(id)
135
+ # if PMethName.obj_changer?(id.id2name)
136
+ # ObjectSpace.each_object(self) { |o|
137
+ # if !o.respond_to? :__add_observer_o__
138
+ # o.wrap_changer_meth(id)
139
+ # end
140
+ # }
141
+ # end
142
+ # self.__pso_m_method_added_o__(id)
143
+ # end
144
+ # else
145
+ # def self.method_added(id)
146
+ # if PMethName.obj_changer?(id.id2name)
147
+ # ObjectSpace.each_object(self) { |o|
148
+ # if !o.respond_to? :__add_observer_o__
149
+ # o.wrap_changer_meth(id)
150
+ # end
151
+ # }
152
+ # end
153
+ # end
154
+ # end
155
+ end
@@ -0,0 +1,79 @@
1
+ require 'pav/string/ext'
2
+ require 'pav/string/observable'
3
+
4
+ class StringLns
5
+ attr_reader :ln_start_idxs, :str
6
+
7
+ include Enumerable
8
+
9
+ def initialize(str)
10
+ @str = str
11
+ @ln_start_idxs = []
12
+ i = 0
13
+ str.each_line { |ln|
14
+ @ln_start_idxs << i
15
+ i += ln.length
16
+ }
17
+ @ln_start_idxs << i
18
+ end
19
+
20
+ def [](*args)
21
+ if args.length == 1
22
+ is = args
23
+ elsif args.length == 2
24
+ is = args[0]..args[0]+args[1]-1
25
+ else
26
+ raise ArgumentError, "Unknown number of arguments"
27
+ end
28
+ res = is.collect{ |i|
29
+ if i < 0
30
+ if i <= -@ln_start_idxs.length
31
+ nil
32
+ else
33
+ @str[@ln_start_idxs[i-1]...
34
+ @ln_start_idxs[i]]
35
+ end
36
+ else
37
+ if i+1 >= @ln_start_idxs.length
38
+ nil
39
+ else
40
+ @str[@ln_start_idxs[i]...
41
+ @ln_start_idxs[i+1]]
42
+ end
43
+ end
44
+ }
45
+ if args.length == 1 && args[0].kind_of?(Numeric) then res[0]
46
+ else res end
47
+ end
48
+
49
+ def each
50
+ [0..@ln_start_idxs-1].each { |i|
51
+ yield @str[@ln_start_idxs[i]..@ln_start_idxs[i+1]]
52
+ }
53
+ end
54
+
55
+ def length
56
+ @ln_start_idxs.length - 1
57
+ end
58
+ end
59
+
60
+ class StringLnsObserver
61
+ def self.update(str, meth, args, block)
62
+ str.kill_lns
63
+ end
64
+ end
65
+
66
+ class String
67
+ def lns
68
+ self.add_observer(StringLnsObserver)
69
+ def lns
70
+ @lns = StringLns.new(self) unless @lns
71
+ @lns
72
+ end
73
+ self.lns
74
+ end
75
+
76
+ def kill_lns
77
+ @lns = nil
78
+ end
79
+ end
@@ -0,0 +1,42 @@
1
+ require 'pav/string/ext'
2
+
3
+ class String
4
+ PLURAL_ES = %w[tomatoes potatoes branches ses zes xes]
5
+ PLURAL_EN = %w[oxen]
6
+ PLURAL_VES_F = %w[dwarves shelves elves]
7
+ PLURAL_VES_FE = %w[lives knives]
8
+ PLURAL_ICES_EX = %w[indices vertices vortices]
9
+
10
+ PLURAL_TRANSFORMS = self.constants.find_all { |c|
11
+ c.starts_with("PLURAL_") }.collect { |c|
12
+ to, from = *c["PLURAL_".length...c.length].split("_")
13
+ to.downcase!
14
+ if from then from.downcase! else from = ""; end
15
+ [to, from, self.const_get(c)]
16
+ }
17
+ SINGULAR_TRANSFORMS = PLURAL_TRANSFORMS.collect { |pl_t|
18
+ [pl_t[1], pl_t[0], pl_t[2].collect{|w| w[0,w.length-pl_t[0].length].
19
+ concat(pl_t[1])}]
20
+ }
21
+
22
+ def singular
23
+ dn_case = self.downcase
24
+ PLURAL_TRANSFORMS.each { |t| t[2].each { |word|
25
+ return self[0, self.length-t[0].length].concat(t[1]) if
26
+ dn_case.ends_with(word)
27
+ }}
28
+ if dn_case.ends_with("s")
29
+ return self[0, self.length-1]
30
+ end
31
+ self.dup
32
+ end
33
+
34
+ def plural
35
+ dn_case = self.downcase
36
+ SINGULAR_TRANSFORMS.each { |t| t[2].each { |word|
37
+ return self[0, self.length-t[0].length].concat(t[1]) if
38
+ dn_case.ends_with(word)
39
+ }}
40
+ self + "s"
41
+ end
42
+ end
@@ -0,0 +1,56 @@
1
+ require 'pav/dbg_log'
2
+ require 'pav/numeric/ext'
3
+ require 'pav/rand_accessible'
4
+
5
+ class SubArr
6
+ include RandomlyReadable
7
+ include Enumerable
8
+
9
+ attr_reader :arr
10
+ attr_accessor :start_i, :end_i
11
+
12
+ def initialize(arr, start_i=0, end_i=nil)
13
+ @arr = arr
14
+ @start_i = start_i
15
+ @end_i = end_i ? end_i : @arr.length
16
+ end
17
+
18
+ def at(i)
19
+ i = self.length + i if i < 0
20
+ i += @start_i
21
+ return nil if i < @start_i || i >= @end_i
22
+ @arr.at(i % @arr.length)
23
+ end
24
+
25
+ def length
26
+ end_i - start_i
27
+ end
28
+
29
+ def empty?
30
+ self.length < 1
31
+ end
32
+
33
+ def first
34
+ self.at(0)
35
+ end
36
+
37
+ def each
38
+ return if @arr.empty?
39
+ for i in @start_i...@end_i
40
+ yield(@arr.at(i % @arr.length))
41
+ end
42
+ end
43
+
44
+ def to_a
45
+ res = Array.new(self.length)
46
+ self.each_with_index { |lm, i| res[i] = lm }
47
+ res
48
+ end
49
+
50
+ def to_s(expand_arr=false)
51
+ "<#{self.class.name}:#{self.object_id.mem_hex} @start_i=#{
52
+ @start_i}, @end_i=#{end_i} @arr: #{expand_arr&&expand_arr!=0 ?
53
+ @arr.inspect : @arr.length.to_s + " element" +
54
+ (@arr.length==1 ? "" : "s")}>"
55
+ end
56
+ end
@@ -0,0 +1,79 @@
1
+ require 'pav/dbg_log'
2
+
3
+ class TracedObj
4
+ attr_reader :__to_filters__, :__to_obj__
5
+ attr_accessor :__to_processor__
6
+
7
+ def initialize(obj, excl_meths=[])
8
+ @__to_obj__ = obj
9
+ if excl_meths && !excl_meths.empty?
10
+ @__to_filters__ = [ proc { |obj, id, args, block|
11
+ !excl_meths.include?(id) } ]
12
+ else
13
+ @__to_filters__ = []
14
+ end
15
+ @__to_processor__ = proc { |obj, id, args, block|
16
+ $PDbgLog.sig_call(self)
17
+ $PDbgLog.puts_msg "#{obj.class.name}#{(
18
+ obj.kind_of?(Class) || obj.kind_of?(Module)) ? "#" :
19
+ "."}#{id}(#{args.collect {|a| a.inspect}.join(", ")
20
+ }) #{caller(2).join("\n")}"
21
+ res = obj.send(id, *args, &block)
22
+ $PDbgLog.sig_return(res.inspect)
23
+ res
24
+ }
25
+ end
26
+
27
+ def method_missing(id, *args, &block)
28
+ for filt in @__to_filters__
29
+ return @__to_obj__.send(id, *args, &block) unless
30
+ filt.call(@__to_obj__, id, args, block)
31
+ end
32
+ @__to_processor__.call(@__to_obj__, id, args, block)
33
+ end
34
+
35
+ def __to_add_filter__(block=Proc.new)
36
+ if block
37
+ @__to_filters__.push(block)
38
+ @__to_filters__.length-1
39
+ else
40
+ nil
41
+ end
42
+ end
43
+
44
+ def to_s(*args, &block)
45
+ id = "to_s"
46
+ for filt in @__to_filters__
47
+ return @__to_obj__.send(id, *args, &block) unless
48
+ filt.call(@__to_obj__, id, args, block)
49
+ end
50
+ @__to_processor__.call(@__to_obj__, id, args, block)
51
+ end
52
+
53
+ def to_a(*args, &block)
54
+ id = "to_a"
55
+ for filt in @__to_filters__
56
+ return @__to_obj__.send(id, *args, &block) unless
57
+ filt.call(@__to_obj__, id, args, block)
58
+ end
59
+ @__to_processor__.call(@__to_obj__, id, args, block)
60
+ end
61
+
62
+ def inspect(*args, &block)
63
+ id = "inspect"
64
+ for filt in @__to_filters__
65
+ return @__to_obj__.send(id, *args, &block) unless
66
+ filt.call(@__to_obj__, id, args, block)
67
+ end
68
+ @__to_processor__.call(@__to_obj__, id, args, block)
69
+ end
70
+
71
+ def hash(*args, &block)
72
+ id = "hash"
73
+ for filt in @__to_filters__
74
+ return @__to_obj__.send(id, *args, &block) unless
75
+ filt.call(@__to_obj__, id, args, block)
76
+ end
77
+ @__to_processor__.call(@__to_obj__, id, args, block)
78
+ end
79
+ end