uttk 0.3.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 (276) hide show
  1. data/AUTHORS +36 -0
  2. data/COPYING +18 -0
  3. data/ChangeLog +7673 -0
  4. data/GUIDELINES +86 -0
  5. data/LGPL +504 -0
  6. data/NEWS +158 -0
  7. data/NORM +137 -0
  8. data/README +180 -0
  9. data/Rakefile +8 -0
  10. data/SPEC.gemspec +15 -0
  11. data/SPEC.yml +60 -0
  12. data/TODO +23 -0
  13. data/TODO.old +31 -0
  14. data/VERSION +5 -0
  15. data/bin/getopts/uttk.rb +390 -0
  16. data/bin/uttk +188 -0
  17. data/bin/uttk-unit +125 -0
  18. data/lib/uttk.rb +288 -0
  19. data/lib/uttk/dumpers/Basic.rb +23 -0
  20. data/lib/uttk/dumpers/BasicColor.rb +35 -0
  21. data/lib/uttk/dumpers/Dumper.rb +77 -0
  22. data/lib/uttk/dumpers/Html.rb +271 -0
  23. data/lib/uttk/dumpers/Path.rb +24 -0
  24. data/lib/uttk/dumpers/Xml.rb +88 -0
  25. data/lib/uttk/dumpers/Yaml.rb +138 -0
  26. data/lib/uttk/filters.rb +128 -0
  27. data/lib/uttk/filters/Buffer.rb +119 -0
  28. data/lib/uttk/filters/Compact.rb +75 -0
  29. data/lib/uttk/filters/Default.rb +27 -0
  30. data/lib/uttk/filters/DefaultColor.rb +27 -0
  31. data/lib/uttk/filters/Filter.rb +53 -0
  32. data/lib/uttk/filters/Id.rb +30 -0
  33. data/lib/uttk/filters/JustStatus.rb +25 -0
  34. data/lib/uttk/filters/KeepSkipBased.rb +38 -0
  35. data/lib/uttk/filters/NodeCut.rb +97 -0
  36. data/lib/uttk/filters/RPathFilter.rb +134 -0
  37. data/lib/uttk/filters/Saver.rb +53 -0
  38. data/lib/uttk/filters/TextFilter.rb +69 -0
  39. data/lib/uttk/generators/dumper_generator.rb +28 -0
  40. data/lib/uttk/generators/filter_generator.rb +28 -0
  41. data/lib/uttk/generators/generator.rb +86 -0
  42. data/lib/uttk/generators/generator_generator.rb +26 -0
  43. data/lib/uttk/generators/loader_generator.rb +28 -0
  44. data/lib/uttk/generators/path_filter_generator.rb +28 -0
  45. data/lib/uttk/generators/strategy_generator.rb +28 -0
  46. data/lib/uttk/generators/templates/dumper.rb +50 -0
  47. data/lib/uttk/generators/templates/filter.rb +50 -0
  48. data/lib/uttk/generators/templates/generator.rb +28 -0
  49. data/lib/uttk/generators/templates/loader.rb +26 -0
  50. data/lib/uttk/generators/templates/path_filter.rb +28 -0
  51. data/lib/uttk/generators/templates/strategy.rb +59 -0
  52. data/lib/uttk/generators/templates/strategy.yml +28 -0
  53. data/lib/uttk/generators/templates/unit_test.rb +46 -0
  54. data/lib/uttk/loaders/Loader.rb +180 -0
  55. data/lib/uttk/loaders/Ruby.rb +28 -0
  56. data/lib/uttk/loaders/Yaml.rb +98 -0
  57. data/lib/uttk/logger.rb +306 -0
  58. data/lib/uttk/logger/backend.rb +170 -0
  59. data/lib/uttk/logger/path.rb +202 -0
  60. data/lib/uttk/logger/section_node.rb +214 -0
  61. data/lib/uttk/logger/severity.rb +63 -0
  62. data/lib/uttk/logger/to_uttk_log.rb +127 -0
  63. data/lib/uttk/logger/verbosity.rb +61 -0
  64. data/lib/uttk/logger_factory.rb +55 -0
  65. data/lib/uttk/path_filters/ColorStatus.rb +57 -0
  66. data/lib/uttk/path_filters/PathFilter.rb +27 -0
  67. data/lib/uttk/path_filters/RemoveTypes.rb +25 -0
  68. data/lib/uttk/status.rb +146 -0
  69. data/lib/uttk/strategies/Abort.rb +24 -0
  70. data/lib/uttk/strategies/Assert.rb +44 -0
  71. data/lib/uttk/strategies/Authors.rb +45 -0
  72. data/lib/uttk/strategies/Block.rb +113 -0
  73. data/lib/uttk/strategies/Bootstrap.rb +55 -0
  74. data/lib/uttk/strategies/Checkout.rb +64 -0
  75. data/lib/uttk/strategies/Clean.rb +29 -0
  76. data/lib/uttk/strategies/Cmd.rb +60 -0
  77. data/lib/uttk/strategies/CmdBase.rb +130 -0
  78. data/lib/uttk/strategies/Collection.rb +158 -0
  79. data/lib/uttk/strategies/Compile.rb +59 -0
  80. data/lib/uttk/strategies/Composite.rb +201 -0
  81. data/lib/uttk/strategies/Composite/contents_eval.rb +40 -0
  82. data/lib/uttk/strategies/Configure.rb +66 -0
  83. data/lib/uttk/strategies/Error.rb +23 -0
  84. data/lib/uttk/strategies/Fail.rb +26 -0
  85. data/lib/uttk/strategies/IOBased.rb +159 -0
  86. data/lib/uttk/strategies/Import.rb +60 -0
  87. data/lib/uttk/strategies/Iterate.rb +139 -0
  88. data/lib/uttk/strategies/JUnit.rb +205 -0
  89. data/lib/uttk/strategies/KillAll.rb +62 -0
  90. data/lib/uttk/strategies/Make.rb +94 -0
  91. data/lib/uttk/strategies/Package.rb +129 -0
  92. data/lib/uttk/strategies/PackageCollection.rb +78 -0
  93. data/lib/uttk/strategies/Pass.rb +24 -0
  94. data/lib/uttk/strategies/Pool.rb +104 -0
  95. data/lib/uttk/strategies/ProbabilityThreshold.rb +46 -0
  96. data/lib/uttk/strategies/Proxy.rb +42 -0
  97. data/lib/uttk/strategies/RMatch.rb +92 -0
  98. data/lib/uttk/strategies/RUnit.rb +132 -0
  99. data/lib/uttk/strategies/SignalCmd.rb +85 -0
  100. data/lib/uttk/strategies/Sleep.rb +36 -0
  101. data/lib/uttk/strategies/SqlQuery.rb +120 -0
  102. data/lib/uttk/strategies/Strategy.rb +683 -0
  103. data/lib/uttk/strategies/Stub.rb +37 -0
  104. data/lib/uttk/strategies/SubCmd.rb +77 -0
  105. data/lib/uttk/strategies/Suite.rb +71 -0
  106. data/lib/uttk/strategies/Test.rb +89 -0
  107. data/lib/uttk/streams.rb +69 -0
  108. data/lib/uttk/streams/Diff.rb +60 -0
  109. data/lib/uttk/streams/HexaDiff.rb +35 -0
  110. data/lib/uttk/streams/Stream.rb +76 -0
  111. data/lib/uttk/weights.rb +17 -0
  112. data/lib/uttk/weights/WExpr.rb +68 -0
  113. data/lib/uttk/weights/WFloat.rb +23 -0
  114. data/lib/uttk/weights/WMin.rb +22 -0
  115. data/lib/uttk/weights/Weight.rb +105 -0
  116. data/lib/www/javascripts/uttk.js +185 -0
  117. data/misc/expandtab.rb +29 -0
  118. data/misc/header.rb +44 -0
  119. data/misc/renaming +57 -0
  120. data/misc/textile_compiler +194 -0
  121. data/misc/uttk-grep.sh +8 -0
  122. data/misc/uttk-line-count.rb +143 -0
  123. data/test/examples-suite.yml +8 -0
  124. data/test/examples/README +68 -0
  125. data/test/examples/basic.rb +10 -0
  126. data/test/examples/basic.yml +9 -0
  127. data/test/examples/cache/cache_and_fatal.yml +5 -0
  128. data/test/examples/cache/simple.yml +30 -0
  129. data/test/examples/sql/basic.yml +24 -0
  130. data/test/examples/students-suite.yml +9 -0
  131. data/test/examples/students/ball.yml +11 -0
  132. data/test/examples/students/glob_stud.yml +20 -0
  133. data/test/examples/students/mini-lib.yml +61 -0
  134. data/test/examples/students/pool_stud.yml +31 -0
  135. data/test/examples/students/stud.yml +21 -0
  136. data/test/fixtures/ball/20040804-exam_a1-zapngo-tessar_m.tar.gz +0 -0
  137. data/test/fixtures/ball/Makefile +24 -0
  138. data/test/fixtures/ball/bar_p-mini-lib.tar.bz2 +0 -0
  139. data/test/fixtures/ball/bar_p-mini-lib/Makefile +20 -0
  140. data/test/fixtures/ball/bar_p-mini-lib/my_strlen.c +13 -0
  141. data/test/fixtures/ball/foo_s-mini-lib.tar.bz2 +0 -0
  142. data/test/fixtures/ball/foo_s-mini-lib/Makefile +20 -0
  143. data/test/fixtures/ball/foo_s-mini-lib/configure +2 -0
  144. data/test/fixtures/ball/foo_s-mini-lib/my_strlen.c +10 -0
  145. data/test/fixtures/ball/hello.tar.bz2 +0 -0
  146. data/test/fixtures/ball/hello.tar.gz +0 -0
  147. data/test/fixtures/ball/hello/Makefile +14 -0
  148. data/test/fixtures/ball/hello/hello.c +7 -0
  149. data/test/fixtures/ball/jack-exit.tar.bz2 +0 -0
  150. data/test/fixtures/ball/jack-exit/Makefile +14 -0
  151. data/test/fixtures/ball/jack-exit/exit.c +16 -0
  152. data/test/fixtures/ball/joe-exit.tar.bz2 +0 -0
  153. data/test/fixtures/ball/joe-exit/Makefile +14 -0
  154. data/test/fixtures/ball/joe-exit/exit.c +8 -0
  155. data/test/fixtures/ball/joe_i-mini-lib.tar.bz2 +0 -0
  156. data/test/fixtures/ball/joe_i-mini-lib/Makefile +20 -0
  157. data/test/fixtures/ball/joe_i-mini-lib/configure +2 -0
  158. data/test/fixtures/ball/joe_i-mini-lib/my_strlen.c +10 -0
  159. data/test/fixtures/ball/john-exit.tar.bz2 +0 -0
  160. data/test/fixtures/ball/john-exit/Makefile +14 -0
  161. data/test/fixtures/ball/john-exit/exit.c +6 -0
  162. data/test/fixtures/ball/qux_j-mini-lib.tar.bz2 +0 -0
  163. data/test/fixtures/ball/qux_j-mini-lib/Makefile +20 -0
  164. data/test/fixtures/ball/qux_j-mini-lib/my_strlen.c +12 -0
  165. data/test/fixtures/binaries/segv +0 -0
  166. data/test/fixtures/binaries/segv.c +10 -0
  167. data/test/fixtures/binaries/segv.rb +2 -0
  168. data/test/fixtures/demo/command-tutorial/steps/1/check.yml +5 -0
  169. data/test/fixtures/demo/command-tutorial/steps/1/pluralizer.rb +10 -0
  170. data/test/fixtures/demo/command-tutorial/steps/2/bad_check.yml +7 -0
  171. data/test/fixtures/demo/command-tutorial/steps/2/check.yml +7 -0
  172. data/test/fixtures/demo/command-tutorial/steps/2/pluralizer.rb +10 -0
  173. data/test/fixtures/demo/command-tutorial/steps/3.1/check.yml +12 -0
  174. data/test/fixtures/demo/command-tutorial/steps/3/check.yml +14 -0
  175. data/test/fixtures/demo/command-tutorial/steps/4.1/bird.txt +1 -0
  176. data/test/fixtures/demo/command-tutorial/steps/4.1/check.yml +12 -0
  177. data/test/fixtures/demo/command-tutorial/steps/4/check.yml +12 -0
  178. data/test/fixtures/demo/command-tutorial/steps/4/pluralizer.rb +12 -0
  179. data/test/fixtures/demo/command-tutorial/steps/5.1/bird.txt +1 -0
  180. data/test/fixtures/demo/command-tutorial/steps/5.1/check.yml +17 -0
  181. data/test/fixtures/demo/command-tutorial/steps/5.1/pluralizer.rb +17 -0
  182. data/test/fixtures/demo/command-tutorial/steps/5/bird.txt +1 -0
  183. data/test/fixtures/demo/command-tutorial/steps/5/check.yml +16 -0
  184. data/test/fixtures/demo/command-tutorial/steps/5/pluralizer.rb +16 -0
  185. data/test/fixtures/demo/command-tutorial/steps/6.1/bird.txt +1 -0
  186. data/test/fixtures/demo/command-tutorial/steps/6.1/check.yml +22 -0
  187. data/test/fixtures/demo/command-tutorial/steps/6.1/pluralizer.rb +17 -0
  188. data/test/fixtures/demo/command-tutorial/steps/6/bird.txt +1 -0
  189. data/test/fixtures/demo/command-tutorial/steps/6/check.yml +21 -0
  190. data/test/fixtures/demo/command-tutorial/steps/6/pluralizer.rb +17 -0
  191. data/test/fixtures/demo/command-tutorial/steps/7/bird.txt +1 -0
  192. data/test/fixtures/demo/command-tutorial/steps/7/check.yml +22 -0
  193. data/test/fixtures/demo/command-tutorial/steps/7/pluralizer.rb +17 -0
  194. data/test/fixtures/demo/filter-tutorial/check.yml +20 -0
  195. data/test/fixtures/demo/filter-tutorial/filters/CutSkip100.rb +19 -0
  196. data/test/fixtures/demo/filter-tutorial/pluralizer.rb +17 -0
  197. data/test/fixtures/java/unit/MultiRight/Foo/Foo.java +11 -0
  198. data/test/fixtures/java/unit/MultiRight/Foo/FooTest.java +15 -0
  199. data/test/fixtures/java/unit/MultiRight/MultiRight.java +13 -0
  200. data/test/fixtures/java/unit/MultiRight/MultiRightTest.java +12 -0
  201. data/test/fixtures/java/unit/MultiRight/bar/Bar.java +11 -0
  202. data/test/fixtures/java/unit/MultiRight/bar/BarTest.java +21 -0
  203. data/test/fixtures/java/unit/MultiRight/build.sh +7 -0
  204. data/test/fixtures/java/unit/SimpleException/SimpleExceptionTest.java +11 -0
  205. data/test/fixtures/java/unit/SimpleException/build.sh +4 -0
  206. data/test/fixtures/java/unit/build.sh +9 -0
  207. data/test/fixtures/java/unit/multibar.yml +6 -0
  208. data/test/fixtures/java/unit/multifoo.yml +6 -0
  209. data/test/fixtures/java/unit/multiright.yml +8 -0
  210. data/test/fixtures/java/unit/simple_exception.yml +6 -0
  211. data/test/fixtures/mini-lib/Makefile +9 -0
  212. data/test/fixtures/mini-lib/strlen.c +15 -0
  213. data/test/fixtures/package/pkg_foo.tar.gz +0 -0
  214. data/test/fixtures/package/pkg_foo/Makefile +20 -0
  215. data/test/fixtures/package/pkg_foo/bootstrap +3 -0
  216. data/test/fixtures/package/pkg_foo/configure +3 -0
  217. data/test/fixtures/package/pkg_foo/foo.sh +2 -0
  218. data/test/fixtures/text/1.txt +4 -0
  219. data/test/fixtures/unit/bad.rb +26 -0
  220. data/test/fixtures/unit/error.rb +6 -0
  221. data/test/fixtures/unit/good.rb +26 -0
  222. data/test/functional-suite.yml +10 -0
  223. data/test/functional/author.yml +11 -0
  224. data/test/functional/base.yml +119 -0
  225. data/test/functional/base_pool.yml +13 -0
  226. data/test/functional/block.yml +13 -0
  227. data/test/functional/cat.yml +16 -0
  228. data/test/functional/cmd.yml +17 -0
  229. data/test/functional/diff.yml +27 -0
  230. data/test/functional/env_cmd.yml +53 -0
  231. data/test/functional/exit.yml +15 -0
  232. data/test/functional/fatal.yml +23 -0
  233. data/test/functional/glob.yml +11 -0
  234. data/test/functional/hexa-diff.yml +25 -0
  235. data/test/functional/import.yml +41 -0
  236. data/test/functional/iterate.yml +99 -0
  237. data/test/functional/killall.yml +31 -0
  238. data/test/functional/pkg.yml +14 -0
  239. data/test/functional/probability_threshold.yml +35 -0
  240. data/test/functional/r_unit.yml +26 -0
  241. data/test/functional/rmatch.yml +122 -0
  242. data/test/functional/signal_cmd.yml +22 -0
  243. data/test/functional/sub.yml +15 -0
  244. data/test/functional/test.yml +25 -0
  245. data/test/functional/timeout.yml +20 -0
  246. data/test/functional/wc.yml +26 -0
  247. data/test/functional/weight.yml +152 -0
  248. data/test/pkg-suite.yml +8 -0
  249. data/test/pkg/cmdline.yml +80 -0
  250. data/test/pool-suite.yml +8 -0
  251. data/test/pool/base.yml +12 -0
  252. data/test/pool/pool.yml +25 -0
  253. data/test/ruby-suite.rb +10 -0
  254. data/test/ruby-suite.yml +5 -0
  255. data/test/ruby/base.rb +119 -0
  256. data/test/ruby/iterate.rb +21 -0
  257. data/test/ruby/wc.rb +43 -0
  258. data/test/unit-suite.yml +10 -0
  259. data/test/unit/dumpers/path_test.rb +46 -0
  260. data/test/unit/dumpers/xml_test.rb +65 -0
  261. data/test/unit/dumpers/yaml_test.rb +65 -0
  262. data/test/unit/filters/buffer_test.rb +168 -0
  263. data/test/unit/filters/keep_skip_based_test.rb +46 -0
  264. data/test/unit/filters/node_cut_test.rb +72 -0
  265. data/test/unit/filters/rpath_filter_test.rb +191 -0
  266. data/test/unit/filters/text_filter_test.rb +46 -0
  267. data/test/unit/filters_test.rb +119 -0
  268. data/test/unit/logger/section_node_test.rb +120 -0
  269. data/test/unit/logger/severity_test.rb +37 -0
  270. data/test/unit/logger/to_uttk_log_test.rb +113 -0
  271. data/test/unit/logger/verbosity_test.rb +44 -0
  272. data/test/unit/logger_test.rb +203 -0
  273. data/test/unit/strategies/suite_test.rb +151 -0
  274. data/test/uttk-check.yml +8 -0
  275. data/test/uttk-distcheck.yml +18 -0
  276. metadata +399 -0
@@ -0,0 +1,138 @@
1
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
+ # Copyright:: Copyright (c) 2004, 2005 Uttk team. All rights reserved.
3
+ # License:: LGPL
4
+ # $Id: /w/fey/uttk/trunk/lib/uttk/dumpers/Yaml.rb 21970 2006-02-19T22:15:36.271512Z pouillar $
5
+
6
+ class Symbol
7
+ alias_method :old_to_yaml, :to_yaml
8
+ def to_yaml ( opts={} )
9
+ if YAML.have_option? opts, :uttk
10
+ self.to_s.to_yaml(opts)
11
+ else
12
+ old_to_yaml(opts)
13
+ end
14
+ end
15
+ end
16
+
17
+ class OHash
18
+ def to_yaml ( opts={} )
19
+ if YAML.have_option? opts, :uttk
20
+ YAML::quick_emit(self.object_id, opts) do |out|
21
+ out.seq('') do |seq|
22
+ self.each do |k,v|
23
+ seq.add( { k => v } )
24
+ end
25
+ end
26
+ end
27
+ else
28
+ super
29
+ end
30
+ end
31
+ end
32
+
33
+
34
+ module Uttk
35
+
36
+ module Dumpers
37
+
38
+ class Yaml < Dumper
39
+ include Concrete
40
+
41
+ MAP_INDENT = 2
42
+ MAP_SHIFT = ' ' * MAP_INDENT
43
+ OMAP_SHIFT = ' ' * 4
44
+
45
+ def initialize ( *a, &b )
46
+ super
47
+ @indent = ''
48
+ @stack_indent = []
49
+ @endl = true
50
+ puts '---'
51
+ @opts = {:uttk => true, :Inline => true}
52
+ end
53
+
54
+
55
+ def new_node ( path, node )
56
+ super
57
+ options = nil
58
+ if ! path.nil? and ! path.empty?
59
+ options = path.last.options
60
+ end
61
+ puts unless @endl
62
+ @stack_indent << @indent
63
+ self << @indent
64
+ if options.nil? or not options[:ordered]
65
+ @indent += MAP_SHIFT
66
+ else
67
+ self << '- '
68
+ @indent += OMAP_SHIFT
69
+ end
70
+ self << clean_to_yaml(node.segment) << ':'
71
+ if type = node.options[:type]
72
+ if type.is_a? Class
73
+ # FIXME handle this better
74
+ if HAVE_YAML_TAGURI
75
+ self << ' !' << type.taguri.sub(/^tag:.*?:/, '')
76
+ else
77
+ self << ' ' << type.to_yaml_type
78
+ end
79
+ else
80
+ self << ' !' << type.to_s
81
+ end
82
+ end
83
+ @endl = false
84
+ end
85
+ protected :new_node
86
+
87
+
88
+ def new_leaf ( path, leaf )
89
+ super
90
+ val = leaf
91
+ return if val.respond_to?(:hidden)
92
+ if val.is_a?(String) and val =~ /\n/
93
+ if val =~ /\A[ \t]/
94
+ val = "|#{MAP_INDENT}\n#{val}"
95
+ else
96
+ val = "|\n#{val}"
97
+ end
98
+ val.chomp!
99
+ else
100
+ val = clean_to_yaml(val)
101
+ val = "\n" + val if val =~ /\n/ and val !~ /^\n/
102
+ end
103
+ val.gsub!(/[ \t]*\n/, "\n#@indent")
104
+ print ' ', val, "\n"
105
+ @endl = true
106
+ end
107
+ protected :new_leaf
108
+
109
+
110
+ def up ( path )
111
+ super
112
+ @indent = @stack_indent.pop || ''
113
+ end
114
+ protected :up
115
+
116
+
117
+ def clean_to_yaml ( val )
118
+ val = val.to_yaml(@opts)
119
+ val.sub!(/^--- /, '')
120
+ val.chomp!
121
+ val.gsub!(/(^\s*)- \n\s+([^\s-])/, '\1- \2')
122
+ val = '""' if val == "''"
123
+ val
124
+ end
125
+ private :clean_to_yaml
126
+
127
+
128
+ def update ( *a, &b )
129
+ super
130
+ flush
131
+ end
132
+
133
+ end # class Yaml
134
+
135
+ end # module Dumpers
136
+
137
+ end # module Uttk
138
+
@@ -0,0 +1,128 @@
1
+ # Author:: Nicolas Despr�s <nicolas.despres@lrde.epita.fr>.
2
+ # Copyright:: Copyright (c) 2005 Uttk Team. All rights reserved.
3
+ # License:: LGPL
4
+ # $Id: /w/fey/uttk/trunk/lib/uttk/filters.rb 22057 2006-02-20T21:40:27.185401Z pouillar $
5
+
6
+
7
+ module Uttk
8
+
9
+ module Filters
10
+
11
+ def self.[] ( *yaml_desc )
12
+ joined_yaml_desc = yaml_desc.join(', ')
13
+ joined_yaml_desc.sub!(/^\s+/, '')
14
+ if joined_yaml_desc[0,1] != '{' and joined_yaml_desc[0,1] != '['
15
+ full_doc = "--- {#{joined_yaml_desc}}"
16
+ else
17
+ full_doc = "--- #{joined_yaml_desc}"
18
+ end
19
+ create_backend(YAML.load(full_doc)).flatten
20
+ end
21
+
22
+ def Symbol.yaml_load ( val )
23
+ val.to_sym
24
+ end
25
+
26
+ def Integer.yaml_load ( val )
27
+ val.to_i
28
+ end
29
+
30
+ class FilterOption
31
+ attr_reader :option
32
+ def initialize ( anObject )
33
+ @option = anObject
34
+ end
35
+ def to_hash
36
+ { self.class.name.demodulize.underscore.to_sym => option }
37
+ end
38
+ def self.yaml_load ( anObject )
39
+ new(superclass.name.demodulize.sub(/Option$/, '').constantize.yaml_load(anObject))
40
+ end
41
+ end
42
+
43
+ class SymbolOption < FilterOption
44
+ end
45
+
46
+ class RegexpOption < FilterOption
47
+ end # class RegexpOption
48
+
49
+ class IntegerOption < FilterOption
50
+ end # class IntegerOption
51
+
52
+ class BooleanOption < FilterOption
53
+ def self.yaml_load ( anObject )
54
+ new(anObject)
55
+ end
56
+ end # class BooleanOption
57
+
58
+ class Action < SymbolOption
59
+ have YamlExtension
60
+ end
61
+
62
+ class Keep < RegexpOption
63
+ have YamlExtension
64
+ end # class Keep
65
+
66
+ class Skip < RegexpOption
67
+ have YamlExtension
68
+ end # class Skip
69
+
70
+ class Width < IntegerOption
71
+ have YamlExtension
72
+ end # class Width
73
+
74
+ class Prune < BooleanOption
75
+ have YamlExtension
76
+ end # class Prune
77
+
78
+ class << self
79
+ def create_backend ( desc )
80
+ case desc
81
+ when Array
82
+ desc.map { |elt| create_backend(elt) }
83
+ when String
84
+ [create_backend_leaf(desc, STDOUT)]
85
+ when Hash
86
+ desc.map do |k, v|
87
+ create_backend_leaf(k, *create_backend(v).flatten)
88
+ end
89
+ when FilterOption
90
+ [desc]
91
+ when nil
92
+ [STDOUT]
93
+ else
94
+ raise OptionParser::InvalidArgument,
95
+ "need a string or a hash not #{desc.inspect}"
96
+ end
97
+ end
98
+ private :create_backend
99
+
100
+ def create_backend_leaf ( aConst, *args )
101
+ unless aConst.is_a? String
102
+ raise OptionParser::InvalidArgument,
103
+ "need a string not #{aConst.inspect}"
104
+ end
105
+ if aConst =~ ConstRegexp::RB_CONST
106
+ if Dumpers.const_defined? aConst
107
+ return Dumpers.const_get(aConst).new(*args)
108
+ else
109
+ if Filters.const_defined? aConst
110
+ mod = Filters
111
+ elsif PathFilters.const_defined? aConst
112
+ mod = PathFilters
113
+ else
114
+ return aConst.to_path.open('w')
115
+ end
116
+ options, observers = args.partition { |arg| arg.is_a? FilterOption }
117
+ options = options.inject({}) { |accu, opt| accu.merge! opt.to_hash }
118
+ return mod.const_get(aConst).new(observers, options)
119
+ end
120
+ end
121
+ aConst.to_path.open('w')
122
+ end
123
+ private :create_backend_leaf
124
+ end
125
+
126
+ end # module Filters
127
+
128
+ end # module Uttk
@@ -0,0 +1,119 @@
1
+ # Author:: Yannick Lacaute <lacaut_y@epita.fr>
2
+ # Copyright:: Copyright (c) 2004, 2005 Uttk team. All rights reserved.
3
+ # License:: LGPL
4
+ # $Id: Buffer.rb 645 2005-07-11 21:52:01 thor $
5
+
6
+
7
+ module Uttk
8
+
9
+ module Filters
10
+
11
+ #
12
+ # This basic filter observe a logger and
13
+ # bufferize all received messages, with a tree formatting.
14
+ # The buffer can be flushed when the data are not usefull
15
+ # anymore. That imply that another entity, a kind of controller,
16
+ # should always be connected to this class.
17
+ #
18
+ # The buffer is simple, all notified datas are directly putted inside,
19
+ # and when a flush is needed (or asked) it erases all datas. So, it
20
+ # is possible to think to a new class, derived from this one, which
21
+ # examin more precisely the notifications, and stock into the buffer
22
+ # just the desired. It could do the same for flush the buffer, just clear
23
+ # some part of the buffer. The tool Rpath could be very usefull to do that.
24
+ #
25
+ # The messages are putted into the buffer in order to make a tree,
26
+ # only with Hash and OHash objects. So, that tree could be given at
27
+ # any time.
28
+ #
29
+ # The main utiliy of this class is to provide exactly all the
30
+ # datas that another entity want. Moreover, that ones are given
31
+ # under a tree form, which allow simple navigation inside, especialy
32
+ # with the Rpath tool.
33
+ #
34
+ class Buffer < Filter
35
+ include Concrete
36
+
37
+ attr_reader :buffer
38
+
39
+ def initialize(*a, &b)
40
+ super
41
+ reset
42
+ end
43
+
44
+ def reset
45
+ @buffer = {}
46
+ @path = [@buffer]
47
+ @last_node = nil
48
+ @reset_planned = false
49
+ end
50
+
51
+ alias :clear :reset
52
+
53
+ def new_node ( path, node )
54
+ super
55
+ value = (node.options[:ordered]) ? OHash.new : {}
56
+ value[:strategy] = node.options[:type] if node.options.has_key? :type
57
+ @path.last[node.segment] = value
58
+ @path << value
59
+ @last_node = node.segment
60
+ end
61
+ protected :new_node
62
+
63
+ def new_leaf ( path, leaf )
64
+ super
65
+ if @last_node.nil?
66
+ @buffer = leaf
67
+ @path = [@buffer]
68
+ else
69
+ father = @path[-2]
70
+ if father[@last_node].is_a? Hash
71
+ father[@last_node] = leaf
72
+ else
73
+ father[@last_node] = [father[@last_node], leaf]
74
+ end
75
+ end
76
+ end
77
+ protected :new_leaf
78
+
79
+ def up ( path )
80
+ super
81
+ @path.pop if @path.size > 1
82
+ end
83
+ protected :up
84
+
85
+ def close
86
+ super
87
+ notif :new_leaf, [], @buffer
88
+ @reset_planned = true
89
+ end
90
+ protected :close
91
+
92
+ def update ( *a, &b )
93
+ reset if @reset_planned
94
+ super
95
+ end
96
+
97
+ def empty?
98
+ @buffer.is_a? Hash and @buffer.empty?
99
+ end
100
+
101
+ module Assertions
102
+
103
+ attr_accessor :buffer
104
+
105
+ def assert_buffer ( ref )
106
+ assert_equal(ref, @buffer.buffer)
107
+ end
108
+
109
+ def assert_not_buffer ( ref )
110
+ assert_not_equal(ref, @buffer.buffer)
111
+ end
112
+
113
+ end # module Assertions
114
+
115
+ end # class Buffer
116
+
117
+ end # module Filters
118
+
119
+ end # Uttk
@@ -0,0 +1,75 @@
1
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
+ # Copyright:: Copyright (c) 2005 Uttk Team. All rights reserved.
3
+ # License:: LGPL
4
+ # Revision:: $Id: /w/fey/uttk/trunk/lib/uttk/filters/Compact.rb 21844 2006-02-17T17:26:59.771162Z pouillar $
5
+
6
+
7
+ module Uttk
8
+
9
+ module Filters
10
+
11
+ class Compact < Id
12
+ include Concrete
13
+
14
+ class InternalError < Exception
15
+ end
16
+
17
+ def initialize ( *a, &b )
18
+ super
19
+ @record = {}
20
+ end
21
+
22
+
23
+ def new_node ( path, node )
24
+ if type = node.options[:type]
25
+ unless type.is_a? Class
26
+ if type.is_a? String and type =~ /^[A-Z]([a-zA-Z_]|::)*$/
27
+ type = eval type
28
+ else
29
+ raise ArgumentError, "bad type name #{type} : #{type.class}"
30
+ end
31
+ end
32
+ # We record the flow if the type is NOT a subclass of Composite nor
33
+ # a subclass of SubCmd (SubCmd and Composite included)
34
+ unless type <= Strategies::Composite or type <= Strategies::SubCmd
35
+ @record[path.to_s] = [Buffer.new, node]
36
+ end
37
+ end
38
+ if node.segment == :attributes
39
+ @record[path.to_s] = [Buffer.new, node]
40
+ end
41
+ end
42
+ protected :new_node
43
+
44
+
45
+ def up ( path )
46
+ if buf = @record[path.to_s] # If this path was recorded
47
+ @record.delete path.to_s
48
+ path << buf.last
49
+ # We dump it as leaf
50
+ leaf = buf.first.buffer.rpath_find(:first, path.to_regex_path_string)
51
+ raise InternalError, 'in Compact#up the leaf cannot be nil' if leaf.nil?
52
+ notif :new_leaf, path, leaf
53
+ end
54
+ super
55
+ end
56
+ protected :up
57
+
58
+
59
+ def new_leaf ( path, leaf )
60
+ if @record.empty?
61
+ # We are recording nothing so we transmit the message as is.
62
+ super
63
+ else
64
+ # Each buffer receive the message
65
+ @record.each do |path_s, buf|
66
+ buf.first.update(:new_leaf, path, leaf)
67
+ end
68
+ end
69
+ end
70
+
71
+ end # class Compact
72
+
73
+ end # module Filters
74
+
75
+ end # module Uttk