arrow 1.0.7

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 (198) hide show
  1. data/ChangeLog +1590 -0
  2. data/LICENSE +28 -0
  3. data/README +75 -0
  4. data/Rakefile +366 -0
  5. data/Rakefile.local +63 -0
  6. data/data/arrow/applets/TEMPLATE.rb.tpl +53 -0
  7. data/data/arrow/applets/args.rb +50 -0
  8. data/data/arrow/applets/config.rb +55 -0
  9. data/data/arrow/applets/error.rb +63 -0
  10. data/data/arrow/applets/files.rb +46 -0
  11. data/data/arrow/applets/inspect.rb +46 -0
  12. data/data/arrow/applets/nosuchapplet.rb +31 -0
  13. data/data/arrow/applets/status.rb +92 -0
  14. data/data/arrow/applets/test.rb +133 -0
  15. data/data/arrow/applets/tutorial/counter.rb +96 -0
  16. data/data/arrow/applets/tutorial/dingus.rb +67 -0
  17. data/data/arrow/applets/tutorial/hello.rb +34 -0
  18. data/data/arrow/applets/tutorial/hello2.rb +73 -0
  19. data/data/arrow/applets/tutorial/imgtext.rb +90 -0
  20. data/data/arrow/applets/tutorial/imgtext2.rb +286 -0
  21. data/data/arrow/applets/tutorial/index.rb +36 -0
  22. data/data/arrow/applets/tutorial/logo.rb +98 -0
  23. data/data/arrow/applets/tutorial/memcache.rb +61 -0
  24. data/data/arrow/applets/tutorial/missing.rb +37 -0
  25. data/data/arrow/applets/tutorial/protected.rb +100 -0
  26. data/data/arrow/applets/tutorial/redirector.rb +52 -0
  27. data/data/arrow/applets/tutorial/rndimages.rb +159 -0
  28. data/data/arrow/applets/tutorial/sharenotes.rb +83 -0
  29. data/data/arrow/applets/tutorial/subclassed-hello.rb +32 -0
  30. data/data/arrow/applets/tutorial/superhello.rb +72 -0
  31. data/data/arrow/applets/tutorial/timeclock.rb +78 -0
  32. data/data/arrow/applets/view-applet.rb +123 -0
  33. data/data/arrow/applets/view-template.rb +85 -0
  34. data/data/arrow/applets/wiki.rb +274 -0
  35. data/data/arrow/templates/TEMPLATE.tmpl.tpl +36 -0
  36. data/data/arrow/templates/applet-status.tmpl +153 -0
  37. data/data/arrow/templates/args-display.tmpl +120 -0
  38. data/data/arrow/templates/config/display-table.tmpl +36 -0
  39. data/data/arrow/templates/config/display.tmpl +36 -0
  40. data/data/arrow/templates/counter-deleted.tmpl +33 -0
  41. data/data/arrow/templates/counter.tmpl +59 -0
  42. data/data/arrow/templates/dingus.tmpl +55 -0
  43. data/data/arrow/templates/enumtable.tmpl +8 -0
  44. data/data/arrow/templates/error-display.tmpl +92 -0
  45. data/data/arrow/templates/filemap.tmpl +89 -0
  46. data/data/arrow/templates/hello-world-src.tmpl +34 -0
  47. data/data/arrow/templates/hello-world.tmpl +60 -0
  48. data/data/arrow/templates/imgtext/fontlist.tmpl +46 -0
  49. data/data/arrow/templates/imgtext/form.tmpl +70 -0
  50. data/data/arrow/templates/imgtext/reload-error.tmpl +40 -0
  51. data/data/arrow/templates/imgtext/reload.tmpl +55 -0
  52. data/data/arrow/templates/inspect/display.tmpl +80 -0
  53. data/data/arrow/templates/loginform.tmpl +64 -0
  54. data/data/arrow/templates/logout.tmpl +32 -0
  55. data/data/arrow/templates/memcache/display.tmpl +41 -0
  56. data/data/arrow/templates/navbar.incl +27 -0
  57. data/data/arrow/templates/nosuchapplet.tmpl +32 -0
  58. data/data/arrow/templates/printsource.tmpl +35 -0
  59. data/data/arrow/templates/protected.tmpl +36 -0
  60. data/data/arrow/templates/rndimages.tmpl +38 -0
  61. data/data/arrow/templates/service-response.tmpl +13 -0
  62. data/data/arrow/templates/sharenotes/display.tmpl +38 -0
  63. data/data/arrow/templates/status.tmpl +120 -0
  64. data/data/arrow/templates/templateviewer.tmpl +43 -0
  65. data/data/arrow/templates/test/harness.tmpl +57 -0
  66. data/data/arrow/templates/test/list.tmpl +48 -0
  67. data/data/arrow/templates/test/problem.tmpl +42 -0
  68. data/data/arrow/templates/tutorial/index.tmpl +37 -0
  69. data/data/arrow/templates/tutorial/missingapplet.tmpl +29 -0
  70. data/data/arrow/templates/view-applet-nosuch.tmpl +32 -0
  71. data/data/arrow/templates/view-applet.tmpl +40 -0
  72. data/data/arrow/templates/view-template.tmpl +83 -0
  73. data/data/arrow/templates/wiki/formerror.tmpl +47 -0
  74. data/data/arrow/templates/wiki/markup_help.incl +6 -0
  75. data/data/arrow/templates/wiki/new.tmpl +56 -0
  76. data/data/arrow/templates/wiki/new_system.tmpl +122 -0
  77. data/data/arrow/templates/wiki/sectionlist.tmpl +43 -0
  78. data/data/arrow/templates/wiki/show.tmpl +34 -0
  79. data/docs/manual/layouts/default.page +43 -0
  80. data/docs/manual/lib/api-filter.rb +81 -0
  81. data/docs/manual/lib/editorial-filter.rb +64 -0
  82. data/docs/manual/lib/examples-filter.rb +244 -0
  83. data/docs/manual/lib/links-filter.rb +117 -0
  84. data/lib/apache/fakerequest.rb +448 -0
  85. data/lib/apache/logger.rb +33 -0
  86. data/lib/arrow.rb +51 -0
  87. data/lib/arrow/acceptparam.rb +207 -0
  88. data/lib/arrow/applet.rb +725 -0
  89. data/lib/arrow/appletmixins.rb +218 -0
  90. data/lib/arrow/appletregistry.rb +590 -0
  91. data/lib/arrow/applettestcase.rb +503 -0
  92. data/lib/arrow/broker.rb +255 -0
  93. data/lib/arrow/cache.rb +176 -0
  94. data/lib/arrow/config-loaders/yaml.rb +75 -0
  95. data/lib/arrow/config.rb +615 -0
  96. data/lib/arrow/constants.rb +24 -0
  97. data/lib/arrow/cookie.rb +359 -0
  98. data/lib/arrow/cookieset.rb +108 -0
  99. data/lib/arrow/dispatcher.rb +368 -0
  100. data/lib/arrow/dispatcherloader.rb +50 -0
  101. data/lib/arrow/exceptions.rb +61 -0
  102. data/lib/arrow/fallbackhandler.rb +48 -0
  103. data/lib/arrow/formvalidator.rb +631 -0
  104. data/lib/arrow/htmltokenizer.rb +343 -0
  105. data/lib/arrow/logger.rb +488 -0
  106. data/lib/arrow/logger/apacheoutputter.rb +69 -0
  107. data/lib/arrow/logger/arrayoutputter.rb +63 -0
  108. data/lib/arrow/logger/coloroutputter.rb +111 -0
  109. data/lib/arrow/logger/fileoutputter.rb +96 -0
  110. data/lib/arrow/logger/htmloutputter.rb +54 -0
  111. data/lib/arrow/logger/outputter.rb +123 -0
  112. data/lib/arrow/mixins.rb +425 -0
  113. data/lib/arrow/monkeypatches.rb +94 -0
  114. data/lib/arrow/object.rb +117 -0
  115. data/lib/arrow/path.rb +196 -0
  116. data/lib/arrow/service.rb +447 -0
  117. data/lib/arrow/session.rb +289 -0
  118. data/lib/arrow/session/dbstore.rb +100 -0
  119. data/lib/arrow/session/filelock.rb +160 -0
  120. data/lib/arrow/session/filestore.rb +132 -0
  121. data/lib/arrow/session/id.rb +98 -0
  122. data/lib/arrow/session/lock.rb +253 -0
  123. data/lib/arrow/session/md5id.rb +42 -0
  124. data/lib/arrow/session/nulllock.rb +42 -0
  125. data/lib/arrow/session/posixlock.rb +166 -0
  126. data/lib/arrow/session/sha1id.rb +54 -0
  127. data/lib/arrow/session/store.rb +366 -0
  128. data/lib/arrow/session/usertrackid.rb +52 -0
  129. data/lib/arrow/spechelpers.rb +73 -0
  130. data/lib/arrow/template.rb +713 -0
  131. data/lib/arrow/template/attr.rb +31 -0
  132. data/lib/arrow/template/call.rb +31 -0
  133. data/lib/arrow/template/comment.rb +33 -0
  134. data/lib/arrow/template/container.rb +118 -0
  135. data/lib/arrow/template/else.rb +41 -0
  136. data/lib/arrow/template/elsif.rb +44 -0
  137. data/lib/arrow/template/escape.rb +53 -0
  138. data/lib/arrow/template/export.rb +87 -0
  139. data/lib/arrow/template/for.rb +145 -0
  140. data/lib/arrow/template/if.rb +78 -0
  141. data/lib/arrow/template/import.rb +119 -0
  142. data/lib/arrow/template/include.rb +206 -0
  143. data/lib/arrow/template/iterator.rb +208 -0
  144. data/lib/arrow/template/nodes.rb +734 -0
  145. data/lib/arrow/template/parser.rb +571 -0
  146. data/lib/arrow/template/prettyprint.rb +53 -0
  147. data/lib/arrow/template/render.rb +191 -0
  148. data/lib/arrow/template/selectlist.rb +94 -0
  149. data/lib/arrow/template/set.rb +87 -0
  150. data/lib/arrow/template/timedelta.rb +81 -0
  151. data/lib/arrow/template/unless.rb +78 -0
  152. data/lib/arrow/template/urlencode.rb +51 -0
  153. data/lib/arrow/template/yield.rb +139 -0
  154. data/lib/arrow/templatefactory.rb +125 -0
  155. data/lib/arrow/testcase.rb +567 -0
  156. data/lib/arrow/transaction.rb +608 -0
  157. data/rake/191_compat.rb +26 -0
  158. data/rake/dependencies.rb +76 -0
  159. data/rake/documentation.rb +114 -0
  160. data/rake/helpers.rb +502 -0
  161. data/rake/hg.rb +282 -0
  162. data/rake/manual.rb +787 -0
  163. data/rake/packaging.rb +129 -0
  164. data/rake/publishing.rb +278 -0
  165. data/rake/style.rb +62 -0
  166. data/rake/svn.rb +668 -0
  167. data/rake/testing.rb +187 -0
  168. data/rake/verifytask.rb +64 -0
  169. data/spec/arrow/acceptparam_spec.rb +157 -0
  170. data/spec/arrow/applet_spec.rb +575 -0
  171. data/spec/arrow/appletmixins_spec.rb +409 -0
  172. data/spec/arrow/appletregistry_spec.rb +294 -0
  173. data/spec/arrow/broker_spec.rb +153 -0
  174. data/spec/arrow/config_spec.rb +224 -0
  175. data/spec/arrow/cookieset_spec.rb +164 -0
  176. data/spec/arrow/dispatcher_spec.rb +137 -0
  177. data/spec/arrow/dispatcherloader_spec.rb +65 -0
  178. data/spec/arrow/formvalidator_spec.rb +781 -0
  179. data/spec/arrow/logger_spec.rb +346 -0
  180. data/spec/arrow/mixins_spec.rb +120 -0
  181. data/spec/arrow/service_spec.rb +645 -0
  182. data/spec/arrow/session_spec.rb +121 -0
  183. data/spec/arrow/template/iterator_spec.rb +222 -0
  184. data/spec/arrow/templatefactory_spec.rb +185 -0
  185. data/spec/arrow/transaction_spec.rb +319 -0
  186. data/spec/arrow_spec.rb +37 -0
  187. data/spec/lib/appletmatchers.rb +281 -0
  188. data/spec/lib/constants.rb +77 -0
  189. data/spec/lib/helpers.rb +41 -0
  190. data/spec/lib/matchers.rb +44 -0
  191. data/tests/cookie.tests.rb +310 -0
  192. data/tests/path.tests.rb +157 -0
  193. data/tests/session.tests.rb +111 -0
  194. data/tests/session_id.tests.rb +82 -0
  195. data/tests/session_lock.tests.rb +191 -0
  196. data/tests/session_store.tests.rb +53 -0
  197. data/tests/template.tests.rb +1360 -0
  198. metadata +339 -0
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'arrow/exceptions'
4
+ require 'arrow/path'
5
+ require 'arrow/template/nodes'
6
+
7
+ # The Arrow::Arrow::Template::AttrDirective class, a derivative of Arrow::Directive.
8
+ # This is the class which defines the behaviour of the 'attr' template directive.
9
+ #
10
+ # == Syntax
11
+ #
12
+ # <?attr foo ?>
13
+ # <?attr "%0.2f" % foo ?>
14
+ #
15
+ # == Authors
16
+ #
17
+ # * Michael Granger <ged@FaerieMUD.org>
18
+ #
19
+ # Please see the file LICENSE in the top-level directory for licensing details.
20
+ #
21
+ class Arrow::Template::AttrDirective < Arrow::Template::AttributeDirective # :nodoc:
22
+
23
+ # SVN Revision
24
+ SVNRev = %q$Rev$
25
+
26
+ # SVN Id
27
+ SVNId = %q$Id$
28
+
29
+
30
+ end # class Arrow::Template::AttrDirective
31
+
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'arrow/exceptions'
4
+ require 'arrow/path'
5
+ require 'arrow/template/nodes'
6
+
7
+ # The Arrow::Template::CallDirective class, a derivative of
8
+ # Arrow::Template::AttributeDirective. This is the class which defines the
9
+ # behaviour of the 'call' template directive.
10
+ #
11
+ # == Syntax
12
+ #
13
+ # <?call foo.to_html ?>
14
+ # <?call var.any(other_var.method).chain ?>
15
+ # <?call "$%0.2f" % var.any(other_var.method).chain ?>
16
+ #
17
+ # == Authors
18
+ #
19
+ # * Michael Granger <ged@FaerieMUD.org>
20
+ #
21
+ # Please see the file LICENSE in the top-level directory for licensing details.
22
+ #
23
+ class Arrow::Template::CallDirective < Arrow::Template::AttributeDirective # :nodoc:
24
+
25
+ # SVN Revision
26
+ SVNRev = %q$Rev$
27
+
28
+ # SVN Id
29
+ SVNId = %q$Id$
30
+
31
+ end # class Arrow::Template::CallDirective
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'arrow/exceptions'
4
+ require 'arrow/path'
5
+ require 'arrow/template/nodes'
6
+
7
+ # The Arrow::Template::Comment class, a derivative of
8
+ # Arrow::Template::AttributeDirective. This is the class which defines
9
+ # the behaviour of the 'comment' template directive.
10
+ #
11
+ # == VCS Id
12
+ #
13
+ # $Id$
14
+ #
15
+ # == Authors
16
+ #
17
+ # * Mahlon E. Smith <mahlon@martini.nu>
18
+ #
19
+ # Please see the file LICENSE in the top-level directory for licensing details.
20
+ #
21
+ class Arrow::Template::CommentDirective < Arrow::Template::AttributeDirective # :nodoc:
22
+
23
+ ######
24
+ public
25
+ ######
26
+
27
+ ### Return an empty string instead of rendering anything within
28
+ ### a comment directive.
29
+ def render( template, scope )
30
+ return ''
31
+ end
32
+
33
+ end # class Arrow::Template::CommentDirective
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'forwardable'
4
+
5
+ require 'arrow/exceptions'
6
+ require 'arrow/path'
7
+
8
+ # The Arrow::Template::Container class, a derivative of
9
+ # Arrow::Object. Instances of this class are stateful containers for
10
+ # ContainerDirective nodes .
11
+ #
12
+ # == Authors
13
+ #
14
+ # * Michael Granger <ged@FaerieMUD.org>
15
+ #
16
+ # Please see the file LICENSE in the top-level directory for licensing details.
17
+ #
18
+ class Arrow::Template::Container < Arrow::Object
19
+ extend Forwardable
20
+ include Enumerable
21
+
22
+ # SVN Revision
23
+ SVNRev = %q$Rev$
24
+
25
+ # SVN Id
26
+ SVNId = %q$Id$
27
+
28
+ # The methods of collections which are delegated to their contents Array
29
+ DelegatedMethods =
30
+ ( (Array.instance_methods(false) | Enumerable.instance_methods(false)) -
31
+ %w{<<} )
32
+
33
+ #############################################################
34
+ ### I N S T A N C E M E T H O D S
35
+ #############################################################
36
+
37
+ ### Create a new Arrow::Template::Container object with the given +name+
38
+ ### and +contents+.
39
+ def initialize( name, *contents )
40
+ @name = name
41
+ @contents = contents
42
+
43
+ @sortblock = nil
44
+ @filters = []
45
+
46
+ super()
47
+ end
48
+
49
+
50
+
51
+ ######
52
+ public
53
+ ######
54
+
55
+ # Delegate index methods to contents
56
+ def_delegators :@contents, *DelegatedMethods
57
+
58
+ # The contents of the container
59
+ attr_accessor :contents
60
+
61
+ # The name of the container
62
+ attr_reader :name
63
+
64
+ # The Array of transform functions applied to this container at render
65
+ # time, in the order in which they will be applied.
66
+ attr_reader :filters
67
+
68
+ # The sort block associated with the container.
69
+ attr_reader :sortblock
70
+
71
+
72
+ ### Add the given object/s to this container.
73
+ def <<( object )
74
+ @contents << object
75
+ return self
76
+ end
77
+
78
+
79
+ ### Add the specified filter +block+ to the container. When the
80
+ ### container is used in a render, the filter block will be called once
81
+ ### for each contained object and whatever it returns will be used
82
+ ### instead of the original.
83
+ def addFilter( &block )
84
+ @filters << block
85
+ end
86
+
87
+
88
+ ### Add the specified sort +block+ to the container. When the container
89
+ ### is used in a render, its contents will be used in the order returned
90
+ ### from the sort block.
91
+ def setSort( &block )
92
+ @sortblock = block
93
+ end
94
+
95
+
96
+ ### Iterate over the contents of this container after applying filters,
97
+ ### sort blocks, etc. to them.
98
+ def each( &block )
99
+ raise LocalJumpError, "no block given" unless block_given?
100
+
101
+ contents = @contents.dup
102
+ contents.sort!( &@sortblock ) if @sortblock
103
+ @filters.each {|filter|
104
+ contents = contents.collect( &filter )
105
+ }
106
+
107
+ Arrow::Template::Iterator.new( *contents ).each( &block )
108
+ end
109
+
110
+
111
+ ### Return the last value to be set in this container
112
+ def last
113
+ @contents.last
114
+ end
115
+
116
+ end # class Arrow::Template::Container
117
+
118
+
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'arrow/exceptions'
4
+ require 'arrow/path'
5
+ require 'arrow/template/nodes'
6
+
7
+ # The Arrow::Template::ElseDirective class, a derivative of
8
+ # Arrow::Template::Directive. This is the class which defines the behaviour of
9
+ # the 'else' template directive.
10
+ #
11
+ # == Authors
12
+ #
13
+ # * Michael Granger <ged@FaerieMUD.org>
14
+ #
15
+ # Please see the file LICENSE in the top-level directory for licensing details.
16
+ #
17
+ class Arrow::Template::ElseDirective < Arrow::Template::Directive # :nodoc:
18
+
19
+ # SVN Revision
20
+ SVNRev = %q$Rev$
21
+
22
+ # SVN Id
23
+ SVNId = %q$Id$
24
+
25
+
26
+ #############################################################
27
+ ### I N S T A N C E M E T H O D S
28
+ #############################################################
29
+
30
+ ### Create a new Arrow::Template::ElsifDirective object.
31
+ def initialize( body, parser, state )
32
+ unless state.current_branch_node.is_a?( Arrow::Template::ConditionalDirective )
33
+ raise Arrow::TemplateError,
34
+ "else outside of conditional directive (%p)" %
35
+ state.current_branch_node
36
+ end
37
+
38
+ super
39
+ end
40
+
41
+ end # class Arrow::Template::ElseDirective
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'arrow/exceptions'
4
+ require 'arrow/path'
5
+ require 'arrow/template/nodes'
6
+
7
+ # The Arrow::Template::ElsifDirective class, a derivative of
8
+ # Arrow::Template::Directive. This is the class which defines the behaviour of
9
+ # the 'elsif' template directive.
10
+ #
11
+ # == Authors
12
+ #
13
+ # * Michael Granger <ged@FaerieMUD.org>
14
+ #
15
+ # Please see the file LICENSE in the top-level directory for licensing details.
16
+ #
17
+ class Arrow::Template::ElsifDirective < Arrow::Template::AttributeDirective # :nodoc:
18
+ include Arrow::Template::ConditionalDirective
19
+
20
+ # SVN Revision
21
+ SVNRev = %q$Rev$
22
+
23
+ # SVN Id
24
+ SVNId = %q$Id$
25
+
26
+
27
+ #############################################################
28
+ ### I N S T A N C E M E T H O D S
29
+ #############################################################
30
+
31
+ ### Create a new Arrow::Template::ElsifDirective object.
32
+ def initialize( body, parser, state )
33
+ unless state.current_branch_node.is_a?( Arrow::Template::ConditionalDirective )
34
+ raise Arrow::TemplateError,
35
+ "elsif outside of conditional directive (%p)" %
36
+ state.current_branch_node
37
+ end
38
+
39
+ super
40
+ end
41
+
42
+
43
+ end # class Arrow::Template::Elsif
44
+
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'arrow/exceptions'
4
+ require 'arrow/path'
5
+ require 'arrow/template/call'
6
+
7
+ # The Arrow::Template::EscapeDirective class, a derivative of
8
+ # Arrow::Template::CallDirective. This is the class which defines the behaviour
9
+ # of the 'escape' template directive., which HTML escapes the stringified
10
+ # version of its associated attribute/s.
11
+ #
12
+ # == Syntax
13
+ #
14
+ # <pre><?escape data.to_yaml?></pre>
15
+ # <?escape some_string_with_htmlish_bits?>
16
+ #
17
+ # == Authors
18
+ #
19
+ # * Michael Granger <ged@FaerieMUD.org>
20
+ #
21
+ # Please see the file LICENSE in the top-level directory for licensing details.
22
+ #
23
+ class Arrow::Template::EscapeDirective < Arrow::Template::CallDirective # :nodoc:
24
+
25
+ # SVN Revision
26
+ SVNRev = %q$Rev$
27
+
28
+ # SVN Id
29
+ SVNId = %q$Id$
30
+
31
+
32
+ ### Render the content and return it as HTML-escaped text.
33
+ def render( template, scope )
34
+ rawary = super
35
+ rary = []
36
+
37
+ # Try our best to skip debugging comments
38
+ if template._config[:debuggingComments]
39
+ rary.push( rawary.shift ) if /^<!--.*-->$/ =~ rawary.first
40
+ end
41
+
42
+ rawary.each do |line|
43
+ rary << line.to_s.
44
+ gsub( /&/, '&amp;' ).
45
+ gsub( /</, '&lt;' ).
46
+ gsub( />/, '&gt;' ).
47
+ gsub( /"/, '&quot;' )
48
+ end
49
+
50
+ return rary
51
+ end
52
+
53
+ end # class Arrow::Template::Escape
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'arrow/exceptions'
4
+ require 'arrow/path'
5
+ require 'arrow/template/nodes'
6
+
7
+ #
8
+ # The Arrow::Template::ExportDirective class, a derivative of
9
+ # Arrow::Template::BracketingDirective. This is the class which defines the
10
+ # behaviour of the 'export' template directive.
11
+ #
12
+ # == Syntax
13
+ #
14
+ # <?export foo ?>
15
+ # <!-- Some content for 'foo' attributes of enclosing templates. -->
16
+ # <?end?>
17
+ #
18
+ # == VCS Id
19
+ #
20
+ # $Id$
21
+ #
22
+ # == Authors
23
+ #
24
+ # * Michael Granger <ged@FaerieMUD.org>
25
+ #
26
+ # Please see the file LICENSE in the top-level directory for licensing details.
27
+ #
28
+ class Arrow::Template::ExportDirective < Arrow::Template::BracketingDirective # :nodoc:
29
+ include Arrow::Template::Parser::Patterns
30
+
31
+ # SVN Revision
32
+ SVNRev = %q$Rev$
33
+
34
+ # SVN Id
35
+ SVNId = %q$Id$
36
+
37
+
38
+
39
+ #############################################################
40
+ ### C L A S S M E T H O D S
41
+ #############################################################
42
+
43
+ ### Disallow formats and methodchains
44
+ def self::allows_format?; false; end
45
+ def self::allows_method_chains?; false; end
46
+
47
+
48
+ #############################################################
49
+ ### I N S T A N C E M E T H O D S
50
+ #############################################################
51
+
52
+ ### Add the imported attributes when this node is rendered.
53
+ def before_rendering( template )
54
+ st = template
55
+
56
+ while st = st._enclosing_template
57
+ surrogate = template.class.new( self.subnodes )
58
+
59
+ # :TODO: Does appending to the attribute make more sense?
60
+ st._attributes[ self.name ] = surrogate
61
+ end
62
+ end
63
+
64
+
65
+ ### Add attributes contained by subnodes, but not the attribute
66
+ ### for this node itself, which will be looked for in the
67
+ ### enclosing template.
68
+ def add_to_template( template ) # :nodoc:
69
+ self.subnodes.each do |node|
70
+ template.install_node( node )
71
+ end
72
+ end
73
+
74
+
75
+ #########
76
+ protected
77
+ #########
78
+
79
+ ### Override the default behavior, which is to render subnodes. Since the
80
+ ### whole point of this directive is to give content to a containing
81
+ ### template, this becomes a no-op.
82
+ def render_contents( template, scope )
83
+ return []
84
+ end
85
+
86
+
87
+ end # class Arrow::Template::ExportDirective