cadenza 0.7.0.rc1

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.
@@ -0,0 +1,90 @@
1
+ require 'stringio'
2
+
3
+ module Cadenza
4
+ class TextRenderer < BaseRenderer
5
+ def self.render(template, context)
6
+ io = StringIO.new
7
+ new(io).render(template, context)
8
+ io.string
9
+ end
10
+
11
+ def render_document(node, context, blocks)
12
+ if node.extends
13
+ # merge the inherited blocks onto this document's blocks to
14
+ # determine what to pass to the layout template
15
+ blocks = node.blocks.merge(blocks)
16
+
17
+ # load the template of the document and render it to the same output stream
18
+ template = context.load_template!(node.extends)
19
+
20
+ document = template
21
+
22
+ render(template, context, blocks)
23
+ else
24
+ node.children.each {|x| render(x, context, blocks) }
25
+ end
26
+ end
27
+
28
+ def render_block(node, context, blocks)
29
+ (blocks[node.name] || node).children.each {|x| render(x, context) }
30
+ end
31
+
32
+ def render_text(node, context, blocks)
33
+ output << node.text
34
+ end
35
+
36
+ def render_inject(node, context, blocks)
37
+ output << node.evaluate(context).to_s
38
+ end
39
+
40
+ def render_if(node, context, blocks)
41
+ node.evaluate_expression_for_children(context).each {|x| render(x, context) }
42
+ end
43
+
44
+ def render_for(node, context, blocks)
45
+ # sadly to_enum doesn't work in 1.8.x so we need to array-ify the iterable first
46
+ values = node.iterable.eval(context).to_a
47
+ iterator = node.iterator.identifier
48
+
49
+ values.each_with_index do |value, counter|
50
+ is_first = (counter == 0) ? true : false
51
+ is_last = (counter == values.length - 1) ? true : false
52
+
53
+ # push the inner context with the 'magic' variables
54
+ context.push({
55
+ iterator => value,
56
+ 'forloop' => {
57
+ 'counter' => counter + 1,
58
+ 'counter0' => counter,
59
+ 'first' => is_first,
60
+ 'last' => is_last
61
+ }
62
+ })
63
+
64
+ # render each of the child nodes with the context
65
+ node.children.each {|x| render(x, context) }
66
+
67
+ # pop the inner context off
68
+ context.pop
69
+
70
+ # increment the counter
71
+ counter += 1
72
+ end
73
+ end
74
+
75
+ def render_generic_block(node, context, blocks)
76
+ output << context.evaluate_block(node.identifier, node.children, node.parameters)
77
+ end
78
+
79
+ # none of these should appear directly inside the body of the
80
+ # document but for safety we will render them anyways
81
+ def render_constant(node, context, blocks)
82
+ output << node.eval(context).to_s
83
+ end
84
+
85
+ alias :render_variable :render_constant
86
+ alias :render_operation :render_constant
87
+ alias :render_boolean_inverse :render_constant
88
+
89
+ end
90
+ end
@@ -0,0 +1,6 @@
1
+
2
+ module Cadenza
3
+ class Token < Struct.new(:value, :source, :line, :column)
4
+ #TODO: make helpers for building tokens
5
+ end
6
+ end
@@ -0,0 +1,11 @@
1
+
2
+ module Cadenza
3
+ module Version
4
+ MAJOR = 0
5
+ MINOR = 7
6
+ PATCH = 0
7
+ BUILD = "rc1"
8
+
9
+ STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cadenza
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.0.rc1
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - William Howard
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &70394600 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.9.2
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70394600
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &70394140 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 2.6.0
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70394140
36
+ - !ruby/object:Gem::Dependency
37
+ name: racc
38
+ requirement: &70393800 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 1.4.6
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70393800
47
+ - !ruby/object:Gem::Dependency
48
+ name: nokogiri-diff
49
+ requirement: &70393560 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.1.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70393560
58
+ - !ruby/object:Gem::Dependency
59
+ name: yard
60
+ requirement: &70393250 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70393250
69
+ - !ruby/object:Gem::Dependency
70
+ name: pygments.rb
71
+ requirement: &70392920 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70392920
80
+ - !ruby/object:Gem::Dependency
81
+ name: guard-rspec
82
+ requirement: &70392690 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70392690
91
+ - !ruby/object:Gem::Dependency
92
+ name: guard-shell
93
+ requirement: &70392460 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70392460
102
+ description:
103
+ email:
104
+ - whoward.tke@gmail.com
105
+ executables: []
106
+ extensions: []
107
+ extra_rdoc_files: []
108
+ files:
109
+ - lib/cadenza/nodes/generic_block_node.rb
110
+ - lib/cadenza/nodes/operation_node.rb
111
+ - lib/cadenza/nodes/filter_node.rb
112
+ - lib/cadenza/nodes/if_node.rb
113
+ - lib/cadenza/nodes/text_node.rb
114
+ - lib/cadenza/nodes/variable_node.rb
115
+ - lib/cadenza/nodes/document_node.rb
116
+ - lib/cadenza/nodes/for_node.rb
117
+ - lib/cadenza/nodes/boolean_inverse_node.rb
118
+ - lib/cadenza/nodes/inject_node.rb
119
+ - lib/cadenza/nodes/constant_node.rb
120
+ - lib/cadenza/nodes/block_node.rb
121
+ - lib/cadenza/token.rb
122
+ - lib/cadenza/functional_variables/standard_functional_variables.rb
123
+ - lib/cadenza/parser.rb
124
+ - lib/cadenza/filters/standard_filters.rb
125
+ - lib/cadenza/text_renderer.rb
126
+ - lib/cadenza/filesystem_loader.rb
127
+ - lib/cadenza/blocks/standard_blocks.rb
128
+ - lib/cadenza/base_renderer.rb
129
+ - lib/cadenza/version.rb
130
+ - lib/cadenza/lexer.rb
131
+ - lib/cadenza/context.rb
132
+ - lib/cadenza.rb
133
+ homepage: http://github.com/whoward/Cadenza
134
+ licenses: []
135
+ post_install_message:
136
+ rdoc_options: []
137
+ require_paths:
138
+ - lib
139
+ required_ruby_version: !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ! '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>'
149
+ - !ruby/object:Gem::Version
150
+ version: 1.3.1
151
+ requirements: []
152
+ rubyforge_project:
153
+ rubygems_version: 1.8.10
154
+ signing_key:
155
+ specification_version: 3
156
+ summary: Powerful text templating language similar to Smarty/Liquid/Django
157
+ test_files: []
158
+ has_rdoc: