amrita2 1.9.6 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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