h2o 0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,55 @@
1
+ module H2o
2
+ module Tags
3
+ # Recurse tag allows rendering of tree structures. The template should look something like this:
4
+ # {% recurse all_categories with children as category %}
5
+ # <ul>
6
+ # {% loop %}
7
+ # <li>
8
+ # <h{{ level }}>{{ category.title }}</h{{ level }}>
9
+ # {% children %}
10
+ # </li>
11
+ # {% endloop %}
12
+ # </ul>
13
+ # {% endrecurse %}
14
+ class Recurse < Tag
15
+
16
+ Syntax = /(#{H2o::NAME_RE})\s+with\s+(#{H2o::IDENTIFIER_RE})\s+as\s+(#{H2o::IDENTIFIER_RE})/
17
+
18
+ def initialize(parser, argstring)
19
+ @body = parser.parse(:loop, :children, :endloop, :endrecurse)
20
+ @child = parser.parse(:children, :endloop, :endrecurse) if parser.token && parser.token.include?('loop')
21
+ @enditem = parser.parse(:endloop, :endrecurse) if parser.token && parser.token.include?('children')
22
+ @end = parser.parse(:endrecurse) if parser.token && parser.token.include?('endloop')
23
+ if argstring =~ Syntax
24
+ @collection_id = $1.to_sym
25
+ @children_method = $2.to_sym
26
+ @item_id = $3.to_sym
27
+ else
28
+ raise SyntaxError, "Invalid recurse syntax "
29
+ end
30
+ end
31
+
32
+ def render(context, stream)
33
+ collection = context.resolve(@collection_id)
34
+ @body.render(context, stream)
35
+ context.stack do
36
+ level = context[:level] || 1
37
+ collection.each do |item|
38
+ context[@item_id] = item
39
+ context[:level] = level
40
+ @child.render(context, stream)
41
+ children = item.respond_to?(@children_method) ? item.send(@children_method) : item[@children_method]
42
+ unless children.empty?
43
+ stream << self.render(Context.new({@collection_id => children, :level => (level + 1)}), [])
44
+ end
45
+ @enditem.render(context, stream)
46
+ end
47
+ end
48
+ @end.render(context, stream)
49
+ end
50
+
51
+ Tags.register(self, :recurse)
52
+
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,28 @@
1
+ module H2o
2
+ module Tags
3
+ class With < Tag
4
+ Syntax = /(#{NAME_RE})\s+as\s+(#{NAME_RE})/
5
+
6
+ def initialize(parser, argstring)
7
+ @body = parser.parse(:endwith)
8
+
9
+ if argstring =~ Syntax
10
+ @name = $1.to_sym
11
+ @shortcut = $2.to_sym
12
+ else
13
+ raise SyntaxError, "Invalid with syntax "
14
+ end
15
+ end
16
+
17
+ def render(context, stream)
18
+ object = context.resolve(@name)
19
+ context.stack do
20
+ context[@shortcut] = object
21
+ @body.render(context, stream)
22
+ end
23
+ end
24
+ Tags.register(self, :with)
25
+ end
26
+
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: h2o
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.2"
5
+ platform: ruby
6
+ authors:
7
+ - Taylor Luk
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-09-05 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: h2o is a django inspired template that offers natural template syntax and easy to integrate.
17
+ email: taylor.luk@idealian.net
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.md
24
+ files:
25
+ - README.md
26
+ - h2o.gemspec
27
+ - lib/h2o.rb
28
+ - lib/h2o/constants.rb
29
+ - lib/h2o/context.rb
30
+ - lib/h2o/datatype.rb
31
+ - lib/h2o/errors.rb
32
+ - lib/h2o/filters.rb
33
+ - lib/h2o/filters/default.rb
34
+ - lib/h2o/nodes.rb
35
+ - lib/h2o/parser.rb
36
+ - lib/h2o/tags.rb
37
+ - lib/h2o/tags/block.rb
38
+ - lib/h2o/tags/for.rb
39
+ - lib/h2o/tags/if.rb
40
+ - lib/h2o/tags/with.rb
41
+ - lib/h2o/tags/recurse.rb
42
+ - lib/core_ext/object.rb
43
+ - example/server.rb
44
+ - example/run.rb
45
+ - example/server
46
+ - example/server.bat
47
+ - example/request.html
48
+ - example/erb/base.html
49
+ - example/h2o/base.html
50
+ - example/h2o/inherit.html
51
+ - example/liquid/base.html
52
+ has_rdoc: true
53
+ homepage: http://github.com/speedmax/h2o
54
+ licenses: []
55
+
56
+ post_install_message:
57
+ rdoc_options:
58
+ - --main
59
+ - README.md
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: "0"
67
+ version:
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ version:
74
+ requirements: []
75
+
76
+ rubyforge_project:
77
+ rubygems_version: 1.3.5
78
+ signing_key:
79
+ specification_version: 3
80
+ summary: Django inspired template markup
81
+ test_files: []
82
+