wlang 0.10.2 → 2.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (269) hide show
  1. data/CHANGELOG.md +3 -121
  2. data/Gemfile +23 -1
  3. data/Gemfile.lock +32 -28
  4. data/LICENCE.md +18 -21
  5. data/Manifest.txt +4 -5
  6. data/README.md +100 -174
  7. data/Rakefile +1 -13
  8. data/bin/wlang +3 -29
  9. data/lib/wlang.rb +21 -394
  10. data/lib/wlang/command.rb +94 -0
  11. data/lib/wlang/compiler.rb +78 -0
  12. data/lib/wlang/compiler/autospacing.rb +60 -0
  13. data/lib/wlang/compiler/dialect_enforcer.rb +91 -0
  14. data/lib/wlang/compiler/filter.rb +32 -0
  15. data/lib/wlang/compiler/grammar.citrus +67 -0
  16. data/lib/wlang/compiler/parser.rb +26 -0
  17. data/lib/wlang/compiler/proc_call_removal.rb +15 -0
  18. data/lib/wlang/compiler/static_merger.rb +28 -0
  19. data/lib/wlang/compiler/strconcat_flattener.rb +25 -0
  20. data/lib/wlang/compiler/to_ruby_abstraction.rb +22 -0
  21. data/lib/wlang/compiler/to_ruby_code.rb +55 -0
  22. data/lib/wlang/dialect.rb +40 -237
  23. data/lib/wlang/dialect/dispatching.rb +51 -0
  24. data/lib/wlang/dialect/evaluation.rb +30 -0
  25. data/lib/wlang/dialect/tags.rb +50 -0
  26. data/lib/wlang/dummy.rb +32 -0
  27. data/lib/wlang/html.rb +106 -0
  28. data/lib/wlang/loader.rb +6 -0
  29. data/lib/wlang/mustang.rb +90 -0
  30. data/lib/wlang/scope.rb +57 -0
  31. data/lib/wlang/scope/binding_scope.rb +18 -0
  32. data/lib/wlang/scope/object_scope.rb +25 -0
  33. data/lib/wlang/scope/proxy_scope.rb +18 -0
  34. data/lib/wlang/scope/root_scope.rb +24 -0
  35. data/lib/wlang/template.rb +16 -86
  36. data/lib/wlang/version.rb +9 -8
  37. data/spec/fixtures/dialect/foobar.rb +31 -0
  38. data/spec/fixtures/dialect/upcasing.rb +13 -0
  39. data/spec/fixtures/templates/hello.tpl +1 -0
  40. data/spec/integration/examples/1-basics.txt +65 -0
  41. data/spec/integration/examples/2-imperative.txt +51 -0
  42. data/spec/integration/examples/3-partials.txt +76 -0
  43. data/spec/integration/examples/4-recursion.txt +16 -0
  44. data/spec/integration/html/test_ampersand.rb +15 -0
  45. data/spec/integration/html/test_bang.rb +38 -0
  46. data/spec/integration/html/test_caret.rb +33 -0
  47. data/spec/integration/html/test_dollar.rb +16 -0
  48. data/spec/integration/html/test_greater.rb +23 -0
  49. data/spec/integration/html/test_modulo.rb +16 -0
  50. data/spec/integration/html/test_plus.rb +48 -0
  51. data/spec/integration/html/test_question.rb +33 -0
  52. data/spec/integration/html/test_sharp.rb +21 -0
  53. data/spec/integration/html/test_slash.rb +16 -0
  54. data/spec/integration/html/test_star.rb +37 -0
  55. data/spec/integration/test_dummy.rb +51 -0
  56. data/spec/integration/test_examples.rb +29 -0
  57. data/spec/integration/test_mustang.rb +120 -0
  58. data/spec/integration/test_readme.rb +56 -0
  59. data/spec/integration/test_upcasing.rb +22 -0
  60. data/spec/spec_helper.rb +62 -1
  61. data/spec/test_wlang.rb +101 -0
  62. data/spec/unit/compiler/autospacing/test_right_strip.rb +30 -0
  63. data/spec/unit/compiler/autospacing/test_unindent.rb +30 -0
  64. data/spec/unit/compiler/test_dialect_enforcer.rb +168 -0
  65. data/spec/unit/compiler/test_grammar.rb +207 -0
  66. data/spec/unit/compiler/test_parser.rb +69 -0
  67. data/spec/unit/compiler/test_proc_call_removal.rb +24 -0
  68. data/spec/unit/compiler/test_static_merger.rb +29 -0
  69. data/spec/unit/compiler/test_strconcat_flattener.rb +30 -0
  70. data/spec/unit/compiler/test_to_ruby_abstraction.rb +59 -0
  71. data/spec/unit/compiler/test_to_ruby_code.rb +24 -0
  72. data/spec/unit/dialect/test_compile.rb +52 -0
  73. data/spec/unit/dialect/test_dispatching.rb +19 -0
  74. data/spec/unit/dialect/test_evaluate.rb +41 -0
  75. data/spec/unit/dialect/test_render.rb +33 -0
  76. data/spec/unit/dialect/test_tags.rb +32 -0
  77. data/spec/unit/dialect/test_with_scope.rb +18 -0
  78. data/spec/unit/scope/test_binding_scope.rb +27 -0
  79. data/spec/unit/scope/test_coerce.rb +22 -0
  80. data/spec/unit/scope/test_object_scope.rb +38 -0
  81. data/spec/unit/scope/test_proxy_scope.rb +22 -0
  82. data/spec/unit/scope/test_root_scope.rb +22 -0
  83. data/spec/unit/test_assumptions.rb +29 -0
  84. data/spec/unit/test_scope.rb +57 -0
  85. data/tasks/debug_mail.rake +42 -45
  86. data/tasks/gem.rake +22 -17
  87. data/tasks/spec_test.rake +9 -17
  88. data/tasks/unit_test.rake +11 -12
  89. data/tasks/yard.rake +13 -13
  90. data/wlang.gemspec +36 -32
  91. data/wlang.noespec +27 -35
  92. metadata +268 -451
  93. data/doc/specification/about.rdoc +0 -61
  94. data/doc/specification/analytics.wtpl +0 -13
  95. data/doc/specification/dialect.wtpl +0 -14
  96. data/doc/specification/dialects.wtpl +0 -3
  97. data/doc/specification/examples.rb +0 -3
  98. data/doc/specification/glossary.wtpl +0 -14
  99. data/doc/specification/hosting.rdoc +0 -0
  100. data/doc/specification/overview.rdoc +0 -116
  101. data/doc/specification/rulesets.wtpl +0 -87
  102. data/doc/specification/specification.css +0 -53
  103. data/doc/specification/specification.html +0 -1690
  104. data/doc/specification/specification.js +0 -8
  105. data/doc/specification/specification.wtpl +0 -42
  106. data/doc/specification/specification.yml +0 -432
  107. data/doc/specification/symbols.wtpl +0 -16
  108. data/lib/wlang/dialect_dsl.rb +0 -141
  109. data/lib/wlang/dialect_loader.rb +0 -74
  110. data/lib/wlang/dialects/bluecloth_dialect.rb +0 -16
  111. data/lib/wlang/dialects/coderay_dialect.rb +0 -45
  112. data/lib/wlang/dialects/hosted_dialect.rb +0 -50
  113. data/lib/wlang/dialects/plain_text_dialect.rb +0 -69
  114. data/lib/wlang/dialects/rdoc_dialect.rb +0 -33
  115. data/lib/wlang/dialects/redcloth_dialect.rb +0 -16
  116. data/lib/wlang/dialects/ruby_dialect.rb +0 -118
  117. data/lib/wlang/dialects/sql_dialect.rb +0 -38
  118. data/lib/wlang/dialects/standard_dialects.rb +0 -181
  119. data/lib/wlang/dialects/xhtml_dialect.rb +0 -63
  120. data/lib/wlang/dialects/yaml_dialect.rb +0 -30
  121. data/lib/wlang/encoder.rb +0 -62
  122. data/lib/wlang/encoder_set.rb +0 -122
  123. data/lib/wlang/errors.rb +0 -80
  124. data/lib/wlang/ext/hash_methodize.rb +0 -13
  125. data/lib/wlang/ext/string.rb +0 -44
  126. data/lib/wlang/hash_scope.rb +0 -89
  127. data/lib/wlang/hosted_language.rb +0 -146
  128. data/lib/wlang/intelligent_buffer.rb +0 -94
  129. data/lib/wlang/parser.rb +0 -332
  130. data/lib/wlang/parser_state.rb +0 -94
  131. data/lib/wlang/rule.rb +0 -66
  132. data/lib/wlang/rule_set.rb +0 -106
  133. data/lib/wlang/rulesets/basic_ruleset.rb +0 -83
  134. data/lib/wlang/rulesets/buffering_ruleset.rb +0 -115
  135. data/lib/wlang/rulesets/context_ruleset.rb +0 -111
  136. data/lib/wlang/rulesets/encoding_ruleset.rb +0 -73
  137. data/lib/wlang/rulesets/imperative_ruleset.rb +0 -132
  138. data/lib/wlang/rulesets/ruleset_utils.rb +0 -317
  139. data/lib/wlang/wlang_command.rb +0 -51
  140. data/lib/wlang/wlang_command_options.rb +0 -163
  141. data/spec/basic_object.spec +0 -40
  142. data/spec/coderay_dialect.spec +0 -8
  143. data/spec/dialect/apply_post_transform.spec +0 -16
  144. data/spec/global_extensions.rb +0 -2
  145. data/spec/hash_scope.spec +0 -76
  146. data/spec/redcloth_dialect.spec +0 -24
  147. data/spec/test_all.rb +0 -8
  148. data/spec/wlang.spec +0 -53
  149. data/spec/wlang_spec.rb +0 -8
  150. data/spec/xhtml_dialect.spec +0 -22
  151. data/tasks/genspec.rake +0 -5
  152. data/test/blackbox/basic/execution_1.exp +0 -1
  153. data/test/blackbox/basic/execution_1.tpl +0 -1
  154. data/test/blackbox/basic/execution_2.exp +0 -1
  155. data/test/blackbox/basic/execution_2.tpl +0 -1
  156. data/test/blackbox/basic/execution_3.exp +0 -1
  157. data/test/blackbox/basic/execution_3.tpl +0 -1
  158. data/test/blackbox/basic/execution_4.exp +0 -1
  159. data/test/blackbox/basic/execution_4.tpl +0 -1
  160. data/test/blackbox/basic/inclusion_1.exp +0 -1
  161. data/test/blackbox/basic/inclusion_1.tpl +0 -1
  162. data/test/blackbox/basic/inclusion_2.exp +0 -1
  163. data/test/blackbox/basic/inclusion_2.tpl +0 -1
  164. data/test/blackbox/basic/injection_1.exp +0 -1
  165. data/test/blackbox/basic/injection_1.tpl +0 -1
  166. data/test/blackbox/basic/injection_2.exp +0 -1
  167. data/test/blackbox/basic/injection_2.tpl +0 -1
  168. data/test/blackbox/basic/modulation_1.exp +0 -1
  169. data/test/blackbox/basic/modulation_1.tpl +0 -1
  170. data/test/blackbox/basic/modulation_2.exp +0 -1
  171. data/test/blackbox/basic/modulation_2.tpl +0 -1
  172. data/test/blackbox/basic/recursive_app_1.exp +0 -1
  173. data/test/blackbox/basic/recursive_app_1.tpl +0 -1
  174. data/test/blackbox/basic/recursive_app_2.exp +0 -1
  175. data/test/blackbox/basic/recursive_app_2.tpl +0 -1
  176. data/test/blackbox/buffering/data_1.rb +0 -1
  177. data/test/blackbox/buffering/data_assignment_1.exp +0 -1
  178. data/test/blackbox/buffering/data_assignment_1.tpl +0 -1
  179. data/test/blackbox/buffering/data_assignment_2.exp +0 -1
  180. data/test/blackbox/buffering/data_assignment_2.tpl +0 -1
  181. data/test/blackbox/buffering/data_assignment_3.exp +0 -1
  182. data/test/blackbox/buffering/data_assignment_3.tpl +0 -1
  183. data/test/blackbox/buffering/data_assignment_4.exp +0 -1
  184. data/test/blackbox/buffering/data_assignment_4.tpl +0 -1
  185. data/test/blackbox/buffering/input_1.exp +0 -1
  186. data/test/blackbox/buffering/input_1.tpl +0 -1
  187. data/test/blackbox/buffering/input_2.exp +0 -1
  188. data/test/blackbox/buffering/input_2.tpl +0 -1
  189. data/test/blackbox/buffering/input_3.exp +0 -1
  190. data/test/blackbox/buffering/input_3.tpl +0 -1
  191. data/test/blackbox/buffering/input_inclusion.exp +0 -1
  192. data/test/blackbox/buffering/input_inclusion.tpl +0 -1
  193. data/test/blackbox/buffering/input_inclusion_1.exp +0 -0
  194. data/test/blackbox/buffering/input_inclusion_1.tpl +0 -1
  195. data/test/blackbox/buffering/input_inclusion_2.exp +0 -1
  196. data/test/blackbox/buffering/input_inclusion_2.tpl +0 -1
  197. data/test/blackbox/buffering/input_inclusion_3.exp +0 -1
  198. data/test/blackbox/buffering/input_inclusion_3.tpl +0 -1
  199. data/test/blackbox/buffering/input_inclusion_4.exp +0 -0
  200. data/test/blackbox/buffering/input_inclusion_4.tpl +0 -1
  201. data/test/blackbox/buffering/input_inclusion_5.exp +0 -1
  202. data/test/blackbox/buffering/input_inclusion_5.tpl +0 -1
  203. data/test/blackbox/buffering/input_inclusion_6.exp +0 -1
  204. data/test/blackbox/buffering/input_inclusion_6.tpl +0 -1
  205. data/test/blackbox/buffering/input_inclusion_7.exp +0 -0
  206. data/test/blackbox/buffering/input_inclusion_7.tpl +0 -1
  207. data/test/blackbox/buffering/text_1.txt +0 -1
  208. data/test/blackbox/buffering/wlang.txt +0 -1
  209. data/test/blackbox/context/assignment_1.exp +0 -1
  210. data/test/blackbox/context/assignment_1.tpl +0 -1
  211. data/test/blackbox/context/assignment_2.exp +0 -1
  212. data/test/blackbox/context/assignment_2.tpl +0 -1
  213. data/test/blackbox/context/assignment_3.exp +0 -2
  214. data/test/blackbox/context/assignment_3.tpl +0 -2
  215. data/test/blackbox/context/assignment_4.exp +0 -1
  216. data/test/blackbox/context/assignment_4.tpl +0 -1
  217. data/test/blackbox/context/block_assignment_1.exp +0 -1
  218. data/test/blackbox/context/block_assignment_1.tpl +0 -1
  219. data/test/blackbox/context/block_assignment_2.exp +0 -1
  220. data/test/blackbox/context/block_assignment_2.tpl +0 -1
  221. data/test/blackbox/context/modulo_assignment_1.exp +0 -1
  222. data/test/blackbox/context/modulo_assignment_1.tpl +0 -1
  223. data/test/blackbox/context/modulo_assignment_2.exp +0 -1
  224. data/test/blackbox/context/modulo_assignment_2.tpl +0 -1
  225. data/test/blackbox/data_1.rb +0 -1
  226. data/test/blackbox/postblock/hello.exp +0 -1
  227. data/test/blackbox/postblock/hello.pre +0 -1
  228. data/test/blackbox/postblock/hello.tpl +0 -1
  229. data/test/blackbox/postblock/hello_input_inclusion.exp +0 -1
  230. data/test/blackbox/postblock/hello_input_inclusion.tpl +0 -1
  231. data/test/blackbox/postblock/hello_to_authors.exp +0 -1
  232. data/test/blackbox/postblock/hello_to_authors.tpl +0 -1
  233. data/test/blackbox/poststring/hello.exp +0 -1
  234. data/test/blackbox/poststring/hello.tpl +0 -1
  235. data/test/blackbox/test_all.rb +0 -70
  236. data/test/standard_dialects/ruby/data.rb +0 -7
  237. data/test/standard_dialects/ruby/inclusion.exp +0 -6
  238. data/test/standard_dialects/ruby/inclusion.tpl +0 -6
  239. data/test/standard_dialects/test_all.rb +0 -29
  240. data/test/standard_dialects/yaml/assumptions_test.rb +0 -13
  241. data/test/standard_dialects/yaml/data.rb +0 -3
  242. data/test/standard_dialects/yaml/inclusion_1.exp +0 -7
  243. data/test/standard_dialects/yaml/inclusion_1.tpl +0 -2
  244. data/test/standard_dialects/yaml/inclusion_2.exp +0 -5
  245. data/test/standard_dialects/yaml/inclusion_2.tpl +0 -3
  246. data/test/unit/test_all.rb +0 -9
  247. data/test/unit/wlang/anagram_bugs_test.rb +0 -111
  248. data/test/unit/wlang/basic_ruleset_test.rb +0 -52
  249. data/test/unit/wlang/buffering_ruleset_test.rb +0 -102
  250. data/test/unit/wlang/buffering_template1.wtpl +0 -1
  251. data/test/unit/wlang/buffering_template2.wtpl +0 -1
  252. data/test/unit/wlang/buffering_template3.wtpl +0 -1
  253. data/test/unit/wlang/buffering_template4.wtpl +0 -1
  254. data/test/unit/wlang/buffering_template5.wtpl +0 -1
  255. data/test/unit/wlang/context_ruleset_test.rb +0 -32
  256. data/test/unit/wlang/data.rb +0 -3
  257. data/test/unit/wlang/encoder_set_test.rb +0 -42
  258. data/test/unit/wlang/imperative_ruleset_test.rb +0 -107
  259. data/test/unit/wlang/intelligent_buffer_test.rb +0 -194
  260. data/test/unit/wlang/othersymbols_test.rb +0 -16
  261. data/test/unit/wlang/parser_test.rb +0 -88
  262. data/test/unit/wlang/plain_text_dialect_test.rb +0 -21
  263. data/test/unit/wlang/ruby_dialect_test.rb +0 -100
  264. data/test/unit/wlang/ruby_expected.rb +0 -3
  265. data/test/unit/wlang/ruby_template.wrb +0 -3
  266. data/test/unit/wlang/ruleset_utils_test.rb +0 -245
  267. data/test/unit/wlang/specification_examples_test.rb +0 -54
  268. data/test/unit/wlang/test_utils.rb +0 -25
  269. data/test/unit/wlang/wlang_test.rb +0 -80
@@ -1,51 +0,0 @@
1
- require 'wlang'
2
- require 'wlang/wlang_command_options'
3
- require 'wlang/dialects/standard_dialects'
4
- module WLang
5
-
6
- #
7
- # Provides the _wlang_ commandline tool. See 'wlang --help' for documentation.
8
- #
9
- class WLangCommand
10
-
11
- # Creates a commandline instance.
12
- def initialize()
13
- end
14
-
15
- # Run _wlang_ commandline on specific arguments
16
- def run(args)
17
- # parse the options
18
- options = Options.new.parse(args)
19
-
20
- # get output buffer
21
- buffer = STDOUT
22
- if options.output_file
23
- buffer = File.new(options.output_file, "w")
24
- end
25
-
26
- source = File.read(options.template_file)
27
- dialect = options.template_dialect
28
- braces = options.template_brace
29
- context = options.context_object
30
- context = {options.context_name => context} unless options.context_name.nil?
31
- template = WLang::file_template(options.template_file, options.template_dialect, braces)
32
-
33
- if options.verbosity>1
34
- puts "Instantiating #{options.template_file}"
35
- puts "Using dialect #{dialect}"
36
- puts "Block delimiters are " << Template::BLOCK_SYMBOLS[braces].inspect
37
- puts "Context is " << context.inspect
38
- end
39
-
40
- buffer << template.instantiate(context || {})
41
-
42
- # Flush and close if needed
43
- if File===buffer
44
- buffer.flush
45
- buffer.close
46
- end
47
- end
48
-
49
- end # class WLang
50
-
51
- end # module WLang
@@ -1,163 +0,0 @@
1
- require 'optparse'
2
- module WLang
3
- class WLangCommand
4
-
5
- #
6
- # Options of the _wlang_ commandline
7
- #
8
- class Options
9
-
10
- # Source template file
11
- attr_reader :template_file
12
-
13
- # Template dialect
14
- attr_reader :template_dialect
15
-
16
- # Which brace kind used in template (:braces, :brackes, :parentheses)
17
- attr_reader :template_brace
18
-
19
- # Context file
20
- attr_reader :context_file
21
-
22
- # Context object
23
- attr_reader :context_object
24
-
25
- # Context kind [:yaml, :ruby, :dsl]
26
- attr_reader :context_kind
27
-
28
- # Name of the context
29
- attr_reader :context_name
30
-
31
- # Output file
32
- attr_reader :output_file
33
-
34
- # Verbose mode?
35
- attr_reader :verbosity
36
-
37
- # Initializes the options with default values
38
- def initialize
39
- @verbosity = 0
40
- @template_brace = :braces
41
- end
42
-
43
- #
44
- # Parses commandline options provided as an array of Strings.
45
- #
46
- def parse(argv)
47
- opts = OptionParser.new do |opt|
48
- opt.program_name = File.basename $0
49
- opt.version = WLang::VERSION
50
- opt.release = nil
51
- opt.summary_indent = ' ' * 4
52
- banner = <<-EOF
53
- # Usage #{opt.program_name} [options] template context-file
54
-
55
- # Template is parsed as a wlang dialect (based on its extension by default) and
56
- # instantiated through a given context file.
57
- EOF
58
- opt.banner = banner.gsub(/[ \t]+# /, "")
59
-
60
- opt.separator nil
61
- opt.separator "Options:"
62
-
63
- opt.on("-d", "--dialect=DIALECT",
64
- "Interpret source template as a given wlang dialect") do |value|
65
- @template_dialect = value
66
- end
67
-
68
- opt.on("-m", "--methodize",
69
- "Use methodization of hashes?") do |value|
70
- Kernel.load('wlang/ext/hash_methodize.rb')
71
- end
72
-
73
- opt.on("-o", "--output=OUTPUT",
74
- "Flush instantiation result in output file") do |value|
75
- @output_file = value
76
- end
77
-
78
- opt.on("--brace=BRACE", ["brace", "parenthesis", "bracket"],
79
- "Block delimiters used by the template file (braces, brackets, parentheses)") do |value|
80
- # handle template brace
81
- case value
82
- when "brace", "braces", "{"
83
- @template_brace = :braces
84
- when "brackets", "bracket", "["
85
- @template_brace = :brackets
86
- when "parentheses", "parenthesis", "("
87
- @template_brace = :parentheses
88
- else
89
- raise "Unknown brace kind #{brace}"
90
- end
91
- end
92
-
93
- opt.on("--context-name=NAME",
94
- "Name of the context object") do |value|
95
- @context_name = value
96
- end
97
-
98
- opt.on("--context-kind=KIND", ["yaml", "ruby", "dsl"],
99
- "Kind of context object (yaml, ruby, dsl)") do |value|
100
- @context_kind = '.' + value
101
- end
102
-
103
- opt.on("--verbose", "-v",
104
- "Display extra progress as we parse.") do |value|
105
- @verbosity = 2
106
- end
107
-
108
- # No argument, shows at tail. This will print an options summary.
109
- # Try it and see!
110
- opt.on_tail("-h", "--help", "Show this message") do
111
- puts opts
112
- exit
113
- end
114
-
115
- # Another typical switch to print the version.
116
- opt.on_tail("--version", "Show version") do
117
- puts "wlang version " << WLang::VERSION << " (c) University of Louvain, Bernard & Louis Lambeau"
118
- exit
119
- end
120
-
121
- opt.separator nil
122
- end
123
-
124
- # handle arguments
125
- rest = opts.parse!(argv)
126
- if rest.length<1 or rest.length>2
127
- puts opts
128
- exit
129
- end
130
-
131
- # handle template file
132
- @template_file = File.expand_path(rest[0])
133
- raise("File '#{@template_file}' not readable")\
134
- unless File.file?(@template_file) and File.readable?(@template_file)
135
-
136
- # handle context file
137
- if rest.length==2
138
- @context_file = rest[1]
139
- raise("File '#{@context_file}' not readable")\
140
- unless File.file?(@context_file) and File.readable?(@context_file)
141
- end
142
-
143
- # handle template dialect
144
- unless @template_dialect
145
- extname = File.extname(@template_file)
146
- @template_dialect = WLang::FILE_EXTENSIONS[extname]
147
- raise("No known dialect for file extension '#{extname}'\n"\
148
- "Known extensions are: " << WLang::FILE_EXTENSIONS.keys.join(", "))\
149
- if @template_dialect.nil?
150
- end
151
-
152
- # handle context object
153
- if @context_file
154
- @context_object = WLang::load_data(@context_file, @context_kind)
155
- end
156
-
157
- return self
158
- end
159
-
160
- end # class Options
161
-
162
- end # class WLangCommand
163
- end # module WLang
@@ -1,40 +0,0 @@
1
- require File.expand_path('../spec_helper', __FILE__)
2
- describe "WLang's version of BasicObject" do
3
-
4
- class A
5
- # Methods that we keep
6
- KEPT_METHODS = ["__send__", "__id__", "instance_eval", "initialize",
7
- "object_id", "nil?", "singleton_method_added", "__clean_scope__",
8
- "singleton_method_undefined"]
9
-
10
- def self.__clean_scope__
11
- # Removes all methods that are not needed to the class
12
- (instance_methods + private_instance_methods).each do |m|
13
- undef_method(m.to_s.to_sym) unless KEPT_METHODS.include?(m.to_s)
14
- end
15
- end
16
- __clean_scope__
17
- end
18
-
19
- it "should not have kernel methods except certain" do
20
- [:puts, :to_s, :hash].each do |sym|
21
- begin
22
- A.new.instance_eval{ __send__(sym, []) }
23
- "Not pass here".should == ""
24
- rescue NoMethodError
25
- true.should == true
26
- end
27
- end
28
- end
29
-
30
- it "should not gain methods when requiring gems" do
31
- Kernel.load(File.join(File.dirname(__FILE__),"global_extensions.rb"))
32
- begin
33
- A.new.__clean_scope__.instance_eval{ hello_world }
34
- "Not pass here".should == ""
35
- rescue NoMethodError
36
- true.should == true
37
- end
38
- end
39
-
40
- end
@@ -1,8 +0,0 @@
1
- require File.expand_path('../spec_helper', __FILE__)
2
- describe("WLang should support coderay encoder") do
3
-
4
- it("should support basic coderay encoding") {
5
- WLang::encode("<h1>This is a title</h1>", "xhtml/coderay/html").should_not be_nil
6
- }
7
-
8
- end
@@ -1,16 +0,0 @@
1
- describe "WLang::Dialect#post_transform" do
2
-
3
- let(:dialect){ WLang::Dialect.new("test", nil) }
4
- subject{ dialect.apply_post_transform("hello") }
5
-
6
- context "when a string has been installed" do
7
- before{ dialect.post_transformer = "plain-text/upcase" }
8
- it{ should == "HELLO" }
9
- end
10
-
11
- context "when a a has been installed" do
12
- before{ dialect.post_transformer = lambda{|txt| "yes!#{txt}"} }
13
- it{ should == "yes!hello" }
14
- end
15
-
16
- end
@@ -1,2 +0,0 @@
1
- def hello_world
2
- end
@@ -1,76 +0,0 @@
1
- require File.expand_path('../spec_helper', __FILE__)
2
- require 'wlang/hash_scope'
3
-
4
- describe ::WLang::HashScope do
5
-
6
- # Builds a new scope instance, with an optional parent and
7
- # initial hash
8
- def newscope(pairing = nil, parent = nil)
9
- ::WLang::HashScope.new(pairing, parent)
10
- end
11
-
12
- it "should act as a basic hash at first glance" do
13
- scope = newscope
14
- scope.has_key?(:hello).should be_false
15
- scope[:hello] = "world"
16
- scope.has_key?(:hello).should be_true
17
- scope[:hello].should == "world"
18
- end
19
-
20
- it "should support a parent" do
21
- parent = newscope(:hello => "world", :mine => false)
22
- child = newscope({:mine => true}, parent)
23
-
24
- child.has_key?(:mine).should be_true
25
- child.has_key?(:hello).should be_true
26
- child[:mine].should be_true
27
- child[:hello].should == "world"
28
- end
29
-
30
- it "should never touch its parent" do
31
- parent = newscope(:hello => "world")
32
- child = newscope(nil, parent)
33
- child[:hello].should == "world"
34
- child[:hello] = "none"
35
- child[:hello].should == "none"
36
- parent[:hello].should == "world"
37
- end
38
-
39
- it "should support branching easily" do
40
- parent = newscope(:hello => "world")
41
- parent.branch do |scope|
42
- scope[:who] = "blambeau"
43
- scope[:who].should == "blambeau"
44
- scope[:hello].should == "world"
45
- scope[:hello] = "none"
46
- end
47
- parent.has_key?(:who).should be_false
48
- parent[:hello].should == "world"
49
- end
50
-
51
- it "should allow push/pop kind of branching" do
52
- scope = newscope(:hello => "world")
53
- scope = scope.branch
54
- scope[:hello].should == "world"
55
- scope[:hello] = "none"
56
- scope[:hello].should == "none"
57
- scope = scope.parent
58
- scope[:hello].should == "world"
59
- end
60
-
61
- it "should respect scoping hierarchy" do
62
- scope = newscope(:hello => "world")
63
- child = newscope({}, scope)
64
- child2 = newscope({}, child)
65
-
66
- scope.parent.should be_nil
67
- scope.root.should == scope
68
-
69
- child.parent.should == scope
70
- child.root.should == scope
71
-
72
- child2.parent.should == child
73
- child2.root.should == scope
74
- end
75
-
76
- end
@@ -1,24 +0,0 @@
1
- require File.expand_path('../spec_helper', __FILE__)
2
- describe("WLang should support redcloth encoder") do
3
-
4
- it("should support basic redcloth encoding") {
5
- expected = "<h1>This is a title</h1>"
6
- WLang::encode("h1. This is a title", "redcloth/xhtml").should == expected
7
- }
8
-
9
- it("should not perturbate template variables with global variables") {
10
- # RedCloth installs a t global method (which becomes a private method
11
- # of Object) which was perturbating the HostedLanguage::DSL class.
12
- # This test acts as a non-regression one.
13
- require 'rubygems'
14
- require 'RedCloth'
15
- "${t}".wlang(:t => 'wlang').should == 'wlang'
16
- begin
17
- "${t}".wlang()
18
- true.should == false
19
- rescue ::WLang::UndefinedVariableError
20
- true.should == true
21
- end
22
- }
23
-
24
- end
@@ -1,8 +0,0 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'lib'))
2
- require 'wlang'
3
- require 'rspec/autorun'
4
- test_files = Dir[File.join(File.dirname(__FILE__), '**/*.spec')]
5
- test_files.each { |file|
6
- load(file)
7
- }
8
-
@@ -1,53 +0,0 @@
1
- require File.expand_path('../spec_helper', __FILE__)
2
- describe ::WLang do
3
-
4
- it("should allow easy use of encoders") {
5
- WLang::encode('&', 'xhtml/entities-encoding').should == '&amp;'
6
- WLang::encode("O'Neil", 'ruby/single-quoting').should == "O\\'Neil"
7
- WLang::encode('O"Neil', 'ruby/double-quoting').should == 'O\\"Neil'
8
- WLang::encode("O'Neil", 'sql/single-quoting').should == "O\\'Neil"
9
- WLang::encode("O'Neil", 'sql/sybase/single-quoting').should == "O''Neil"
10
- }
11
-
12
- it "should allow easy upper camel casing" do
13
- WLang::encode('hello_world', 'plain-text/camel-case').should == "HelloWorld"
14
- WLang::encode('hello_world', 'plain-text/camel').should == "HelloWorld"
15
- WLang::encode('hello_world', 'plain-text/upper-camel').should == "HelloWorld"
16
- WLang::encode('this is another example', 'plain-text/camel-case').should == "ThisIsAnotherExample"
17
- WLang::encode("this is yet \n another example", 'plain-text/camel-case').should == "ThisIsYetAnotherExample"
18
-
19
- WLang::encode('hello_world', 'plain-text/lower-camel').should == "helloWorld"
20
- end
21
-
22
- it "should allow easy ruby method casing" do
23
- WLang::encode('helloWorld', 'ruby/method-case').should == "hello_world"
24
- WLang::encode('HelloWorld', 'ruby/method-case').should == "hello_world"
25
- WLang::encode('hello world', 'ruby/method-case').should == "hello_world"
26
- WLang::encode('Hello123World', 'ruby/method-case').should == "hello123_world"
27
- WLang::encode('HelloWorld_123', 'ruby/method-case').should == "hello_world_123"
28
- WLang::encode('123_HelloWorld', 'ruby/method-case').should == "_123_hello_world"
29
- end
30
-
31
- it "should have correct examples in README.rdoc" do
32
- expected = "Hello world!"
33
- "Hello ${who}!".wlang(:who => 'world').should == expected
34
-
35
- expected = "Hello cruel &amp; world!"
36
- "Hello ${who}!".wlang({:who => 'cruel & world'}, 'wlang/xhtml').should == expected
37
-
38
- expected = "Hello blambeau, llambeau"
39
- "Hello *{authors as a}{${a}}{, }".wlang(:authors => ['blambeau', 'llambeau']).should == expected
40
-
41
- expected = "INSERT INTO people VALUES ('O\\'Neil')"
42
- "INSERT INTO people VALUES ('{who}')".wlang({:who => "O'Neil"}, 'wlang/sql')
43
-
44
- expected = "Hello wlang!"
45
- tpl = "Hello $(${varname})!".wlang(:varname => 'who')
46
- tpl.wlang({:who => 'wlang'}, 'wlang/active-string', :parentheses).should == expected
47
-
48
- context = {:varname => 'who', :who => 'wlang'}
49
- expected = "Hello wlang!"
50
- "Hello ${${varname}}!".wlang(context).should == expected
51
- end
52
-
53
- end