amrita2 1.9.6 → 2.0.0

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 (112) hide show
  1. data/README +112 -0
  2. data/init.rb +6 -0
  3. data/lib/amrita2/gettext.rb +116 -0
  4. data/lib/amrita2/macro.rb +153 -0
  5. data/lib/amrita2/rails_bridge.rb +172 -26
  6. data/lib/amrita2/template.rb +2634 -234
  7. data/lib/amrita2/testsupport.rb +171 -0
  8. data/lib/amrita2/version.rb +3 -3
  9. data/lib/amrita2.rb +1 -0
  10. data/sample/depot/app/controllers/admin_controller.rb +59 -0
  11. data/sample/depot/app/controllers/application.rb +20 -0
  12. data/sample/depot/app/controllers/info_controller.rb +19 -0
  13. data/sample/depot/app/controllers/login_controller.rb +85 -0
  14. data/sample/depot/app/controllers/store_controller.rb +68 -0
  15. data/sample/depot/app/helpers/admin_helper.rb +7 -0
  16. data/sample/depot/app/helpers/application_helper.rb +10 -0
  17. data/sample/depot/app/helpers/ar_form.rb +169 -0
  18. data/sample/depot/app/helpers/form_tag.rb +24 -0
  19. data/sample/depot/app/helpers/info_helper.rb +7 -0
  20. data/sample/depot/app/helpers/standard_form.rb +73 -0
  21. data/sample/depot/app/helpers/store_helper.rb +14 -0
  22. data/sample/depot/app/models/cart.rb +36 -0
  23. data/sample/depot/app/models/cart_item.rb +26 -0
  24. data/sample/depot/app/models/line_item.rb +34 -0
  25. data/sample/depot/app/models/order.rb +57 -0
  26. data/sample/depot/app/models/product.rb +41 -0
  27. data/sample/depot/app/models/user.rb +83 -0
  28. data/sample/depot/config/boot.rb +49 -0
  29. data/sample/depot/config/environment.rb +83 -0
  30. data/sample/depot/config/environments/development.rb +24 -0
  31. data/sample/depot/config/environments/production.rb +24 -0
  32. data/sample/depot/config/environments/test.rb +24 -0
  33. data/sample/depot/config/routes.rb +10 -0
  34. data/sample/depot/db/migrate/001_create_products.rb +18 -0
  35. data/sample/depot/db/migrate/002_add_price.rb +14 -0
  36. data/sample/depot/db/migrate/003_add_test_data.rb +68 -0
  37. data/sample/depot/db/migrate/004_add_sessions.rb +20 -0
  38. data/sample/depot/db/migrate/005_create_orders.rb +21 -0
  39. data/sample/depot/db/migrate/006_create_line_items.rb +27 -0
  40. data/sample/depot/db/migrate/007_create_users.rb +18 -0
  41. data/sample/depot/db/schema.rb +45 -0
  42. data/sample/depot/public/dispatch.rb +15 -0
  43. data/sample/depot/test/functional/admin_controller_test.rb +54 -0
  44. data/sample/depot/test/functional/info_controller_test.rb +23 -0
  45. data/sample/depot/test/functional/login_controller_test.rb +74 -0
  46. data/sample/depot/test/functional/store_controller_test.rb +57 -0
  47. data/sample/depot/test/integration/dsl_user_stories_test.rb +126 -0
  48. data/sample/depot/test/integration/user_stories_test.rb +70 -0
  49. data/sample/depot/test/performance/order_speed_test.rb +58 -0
  50. data/sample/depot/test/test_helper.rb +16 -0
  51. data/sample/depot/test/unit/cart_test.rb +39 -0
  52. data/sample/depot/test/unit/cart_test1.rb +31 -0
  53. data/sample/depot/test/unit/line_item_test.rb +15 -0
  54. data/sample/depot/test/unit/order_test.rb +15 -0
  55. data/sample/depot/test/unit/product_test.rb +98 -0
  56. data/sample/depot/vendor/plugins/amrita2/init.rb +6 -0
  57. data/sample/hello/hello.rb +22 -0
  58. data/sample/login_engine/app/controllers/application.rb +16 -0
  59. data/sample/login_engine/app/controllers/user_controller.rb +265 -0
  60. data/sample/login_engine/app/helpers/application_helper.rb +3 -0
  61. data/sample/login_engine/app/helpers/form_tag.rb +16 -0
  62. data/sample/login_engine/app/helpers/two_columns.rb +24 -0
  63. data/sample/login_engine/app/helpers/two_columns_form.rb +47 -0
  64. data/sample/login_engine/app/helpers/user_helper.rb +88 -0
  65. data/sample/login_engine/app/models/user.rb +7 -0
  66. data/sample/login_engine/app/models/user_notify.rb +75 -0
  67. data/sample/login_engine/config/boot.rb +45 -0
  68. data/sample/login_engine/config/environment.rb +140 -0
  69. data/sample/login_engine/config/environments/development.rb +21 -0
  70. data/sample/login_engine/config/environments/production.rb +18 -0
  71. data/sample/login_engine/config/environments/test.rb +19 -0
  72. data/sample/login_engine/config/routes.rb +23 -0
  73. data/sample/login_engine/db/migrate/001_create_users.rb +25 -0
  74. data/sample/login_engine/db/schema.rb +25 -0
  75. data/sample/login_engine/lib/config.rb +113 -0
  76. data/sample/login_engine/lib/hpricot_test_extension.rb +80 -0
  77. data/sample/login_engine/lib/login_engine/authenticated_system.rb +113 -0
  78. data/sample/login_engine/lib/login_engine/authenticated_user.rb +155 -0
  79. data/sample/login_engine/lib/login_engine.rb +62 -0
  80. data/sample/login_engine/public/dispatch.rb +10 -0
  81. data/sample/login_engine/test/functional/amrita2_test.rb +267 -0
  82. data/sample/login_engine/test/functional/user_controller_test.rb +544 -0
  83. data/sample/login_engine/test/mocks/mail.rb +14 -0
  84. data/sample/login_engine/test/mocks/time.rb +19 -0
  85. data/sample/login_engine/test/test_helper.rb +31 -0
  86. data/sample/login_engine/test/unit/user_test.rb +116 -0
  87. data/sample/login_engine/vendor/plugins/amrita2/init.rb +6 -0
  88. data/specs/attribute.rb +201 -0
  89. data/specs/datatypes.rb +231 -0
  90. data/specs/dictionary.rb +68 -0
  91. data/specs/erb_cdata.rb +187 -0
  92. data/specs/filters.rb +513 -0
  93. data/specs/gettext/erb_gettext.rb +42 -0
  94. data/specs/gettext/gettext_util.rb +65 -0
  95. data/specs/gettext/static_text.rb +103 -0
  96. data/specs/impl/code_generator.rb +87 -0
  97. data/specs/impl/dynamic_element.rb +92 -0
  98. data/specs/impl/hash_delegator.rb +57 -0
  99. data/specs/impl/parse_opt.rb +34 -0
  100. data/specs/impl/preprocess.rb +823 -0
  101. data/specs/impl/testsupport.rb +89 -0
  102. data/specs/inlineruby.rb +429 -0
  103. data/specs/intro.rb +654 -0
  104. data/specs/loop.rb +203 -0
  105. data/specs/macro.rb +532 -0
  106. data/specs/sample.rb +34 -0
  107. data/specs/sanitize.rb +110 -0
  108. data/specs/template.rb +189 -0
  109. data/specs/trace.rb +97 -0
  110. metadata +138 -19
  111. data/lib/amrita2/core.rb +0 -1897
  112. data/lib/amrita2/rd.rb +0 -314
data/lib/amrita2/rd.rb DELETED
@@ -1,314 +0,0 @@
1
- require "rd/rd2html-lib"
2
- require 'rd/rdfmt'
3
- require 'amrita2/template'
4
-
5
- module Amrita2
6
- include Amrita2
7
- RDTmpl = TemplateText.new <<-END
8
- <html>
9
- <head id='header'>
10
- <title id='title' />
11
- <link id='css' rel="stylesheet" type="text/css" />
12
- <meta id='lang' content="text/html; charset=euc-jp" http-equiv="content-type" />
13
- </head>
14
- <body id='document'>
15
- <span id='output'></span>
16
- <div id='block'>
17
- <h1 id='header1'> header</h1>
18
- <h2 id='header2'> header</h2>
19
- <h3 id='header3'> header</h3>
20
- <p id='textblock'> </p>
21
- <ul id='list'><li id='item'></li></ul>
22
- <ol id='enumlist'><li id='item'></li></ol>
23
- <dl id='desclist'><dt id='term' /><dd id='description' /></dl>
24
- </div>
25
- <div id='inline'>
26
- <em id='emphasis'>*<span id='text'></span>*</em>
27
- <code id='code'><span id='text'></span></code>
28
- <var id='var'><span id='text'></span></var>
29
- <kbd id='kbd'><span id='text'></span></kbd>
30
- <a id='link_to_url'></a>
31
- </div>
32
- </body>
33
- </html>
34
- END
35
- RDTmpl.define_parts(:block=>[:header1, :header2, :header3, :textblock,
36
- { :list=>:item },
37
- { :enumlist=>:item } ,
38
- { :desclist=>[:term, :description] } ],
39
- :inline=>[:emphasis, :code, :var, :kbd, :link_to_url])
40
-
41
- class Amrita2Visitor < RD::RD2HTMLVisitor
42
- include Amrita2
43
- include Amrita2::Runtime
44
- include Amrita2::Core
45
-
46
- attr_accessor :option
47
- def initialize(doctmpl, blocktmpl, inlinetmpl, extention_processor, option=nil)
48
- @doctmpl, @blocktmpl, @inlinetmpl, @extention_processor =
49
- doctmpl, blocktmpl, inlinetmpl, extention_processor
50
- @option = option
51
- end
52
-
53
- def visit_DocumentElement(element)
54
- @doctmpl.expand(out="") do |m|
55
- if @option
56
- m.header do |mh|
57
- mh.title(@option[:title]) if @option[:title]
58
- mh.css(nil,:href=>@option[:css]) if @option[:css]
59
- mh.lang(nil,:content=>"text/html; charset=#{@option[:lang]}") if @option[:lang]
60
- end
61
- end
62
- m.document do |md|
63
- md.output(visit_children(element))
64
- end
65
- end
66
- out
67
- end
68
-
69
- def visit_children(element)
70
- SanitizedString[super.to_s]
71
- end
72
-
73
- def visit_TextBlock(element)
74
- if (is_this_textblock_only_one_block_of_parent_listitem?(element) or
75
- is_this_textblock_only_one_block_other_than_sublists_in_parent_listitem?(element))
76
- visit_children(element).gsub(/\s/, " ")
77
- else
78
- @blocktmpl[:textblock][visit_children(element)]
79
- end
80
- end
81
- HeadlineMethods = [
82
- nil,
83
- :header1,
84
- :header2,
85
- :header3,
86
- :header4,
87
- :header5,
88
- :header6,
89
- nil
90
- ]
91
-
92
- def visit_Headline(element)
93
- c = visit_children(element)
94
- @blocktmpl[HeadlineMethods[element.level]][c]
95
- end
96
-
97
- def visit_ItemList(element)
98
- @blocktmpl[:list][visit_children(element)]
99
- end
100
-
101
- def visit_ItemListItem(element)
102
- @blocktmpl[:list][:item][visit_children(element)]
103
- end
104
-
105
- def visit_EnumList(element)
106
- @blocktmpl[:enumlist][visit_children(element)]
107
- end
108
-
109
- def apply_to_EnumListItem(element, content)
110
- @blocktmpl[:enumlist][:item][content]
111
- end
112
-
113
- def visit_DescList(element)
114
- @blocktmpl[:desclist][visit_children(element)]
115
- end
116
-
117
- def apply_to_DescListItem(element, term, description)
118
- @blocktmpl[:desclist][:term][term] +
119
- @blocktmpl[:desclist][:description][description]
120
- end
121
-
122
- def visit_StringElement(element)
123
- element.to_label.amrita_sanitize
124
- end
125
-
126
- def visit_Emphasis(element)
127
- @inlinetmpl[:emphasis][:text=>visit_children(element)]
128
- end
129
-
130
- def visit_Code(element)
131
- @inlinetmpl[:code][:text=>visit_children(element)]
132
- end
133
-
134
- def visit_Var(element)
135
- @inlinetmpl[:var][:text=>visit_children(element)]
136
- end
137
-
138
- def visit_Keyboard(element)
139
- #@inlinetmpl[:kbd][:text=>visit_children(element)]
140
- name, *a = visit_children(element).split(' ')
141
- process_ext(name, a)
142
- end
143
-
144
- def visit_Reference(element)
145
- case element.label
146
- when RD::Reference::RDLabel
147
- name, *a = element.to_label.split(':')
148
- process_ext(name, *a)
149
- when RD::Reference::URL
150
- @inlinetmpl[:link_to_url][
151
- a(:href=>element.label.url) do
152
- visit_children(element)
153
- end
154
- ]
155
- else
156
- raise "can't happen"
157
- end
158
- end
159
-
160
- def apply_to_MethodListItem(element, term, content)
161
- name, *args = split_MethodListparams(term)
162
- args.unshift content
163
- @extention_processor.send(name.intern, args)
164
- end
165
-
166
- def split_MethodListparams(term)
167
- ret = []
168
- while term.size > 0
169
- case term
170
- when /^\s*\"([^"]+)\"(.*)/ #'"
171
- ret << $1
172
- term = $2
173
- when /^\s*(\S+)(.*)/
174
- ret << $1
175
- term = $2
176
- else
177
- raise 'can not happen'
178
- end
179
- end
180
- ret
181
- end
182
-
183
- def apply_to_MethodList(element, items)
184
- items
185
- end
186
-
187
- def process_ext(name, *args)
188
- @extention_processor.send(name.intern, *args)
189
- end
190
- end
191
-
192
- class RDAStandardExtention
193
- include Amrita2
194
- include Amrita2::Core
195
- include Amrita2::Runtime
196
- extend Amrita2::Runtime
197
-
198
- EXTTMPL = TemplateText.new <<-END
199
- <div>
200
- <a id='rubytalk' href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/$1">[ruby-talk:$1]</a>
201
- <a id='raa' href="http://raa.ruby-lang.org/list.rhtml?name=$1">[$2]</a>]
202
- <div id='include'><pre>$1$0</pre></div>
203
- <amrita:erb id='blockquote'>
204
- <blockquote cite='<%= $_[1] %>'>
205
- <p><%= $_[0] %></p><p>(<a href='<%= $_[1] %>'><%= $_[2] %></a>)</p>
206
- </blockquote>
207
- </amrita:erb>
208
- </div>
209
- END
210
-
211
- EXTTMPL.use_erb(binding)
212
- EXTTMPL.element_option[:rubytalk] = :use_args
213
- EXTTMPL.element_option[:raa] = :use_args
214
- EXTTMPL.element_option[:include] = :use_args
215
- EXTTMPL.define_parts(:rubytalk, :raa, :blockquote, :include)
216
-
217
- def initialize(exttmpl=nil)
218
- @exttmpl = (exttmpl || EXTTMPL)
219
- end
220
-
221
- def table(name, cols, *args)
222
- content = yield
223
- cols = cols.to_i
224
- items = content.split
225
- ret = self.send(name) do |mt|
226
- mt.header do |mh|
227
- cols.times do |i|
228
- mh.header_item(items.shift)
229
- end
230
- end
231
- lines = items.size/cols
232
- lines.times do |i|
233
- mt.detail(i) do |md|
234
- md.header_item(items.shift)
235
- (cols-1).times do |j|
236
- md.item(items.shift)
237
- end
238
- end
239
- end
240
- end
241
- ret
242
- end
243
-
244
- def include(name, title=name)
245
- super("--- #{title} ---\n") { File::open(name).read }
246
- end
247
-
248
- def method_missing(sym , *arg, &block)
249
- arg = t(*arg)
250
- tmpl = @exttmpl[sym]
251
- raise "extention template element #{sym} not found" unless tmpl
252
- tmpl.expand(out="") do |m|
253
- meth = m.method(sym)
254
- begin
255
- meth.call(*arg, &block)
256
- end
257
- end
258
- end
259
-
260
- def method_missing_x(sym , *arg, &block)
261
- arg = t(*arg)
262
- tmpl = @exttmpl[sym]
263
- raise "extention template element #{sym} not found" unless tmpl
264
- if block_given?
265
- if arg.size == 0
266
- tmpl.expand(out="") do |m|
267
- m.send(sym, arg.first, &block)
268
- end
269
- out
270
- else
271
- tmpl.expand(out="") do |m|
272
- m.send(sym, *arg, &block)
273
- end
274
- out
275
- end
276
- else
277
- if arg.size == 0
278
- tmpl[arg.first]
279
- else
280
- tmpl[arg]
281
- end
282
- end
283
- end
284
- end
285
-
286
- class RDAProcessor
287
- include Amrita2
288
- def self.compile_rd(path, out=nil, opts={})
289
- out = path + ".html" unless out
290
- css = opts[:css]
291
- File::open(path) do |i|
292
- File::open(out, "w") do |out|
293
- src = i.read
294
- ret = Amrita2::RDAProcessor.new(opts).process(src, opts)
295
- out.print ret
296
- end
297
- end
298
- end
299
-
300
- def initialize(opts={})
301
- doc = opts[:doc_template] || RDTmpl
302
- block = opts[:block_template] || RDTmpl[:block]
303
- inline = opts[:inline_template] || RDTmpl[:inline]
304
- ext = opts[:extention_processor] || RDAStandardExtention.new(opts[:exttmpl])
305
- @visitor = Amrita2Visitor.new(doc, block, inline, ext)
306
- end
307
-
308
- def process(rdtext, opt=nil)
309
- tree = RD::RDTree.new("=begin\n#{rdtext}\n=end\n\n")
310
- @visitor.option = opt
311
- @visitor.visit(tree)
312
- end
313
- end
314
- end