1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
|
#! /usr/bin/env ruby
#
begin
require 'simplecov'
SimpleCov.start do
add_filter 'spec'
end
rescue LoadError
end
#
require 'yaml'
#
require 'zorglub'
require 'zorglub/engines/file'
require 'zorglub/engines/haml'
require 'zorglub/engines/sass'
#
HASH_PROC = Proc.new { |path,obj| {:path=>path,:layout=>obj.layout,:view=>obj.view,:args=>obj.args,:map=>obj.map}.to_yaml }
STATIC_PROC = Proc.new { |path,obj| ["VAL #{obj.value}",'text/static'] }
RENDER_PROC = Proc.new { |path,obj|
case obj.state
when :layout
"layout_start #{obj.content} layout_end"
when :view
["view_content", 'text/view']
when :partial
['partial_content','text/partial']
else
raise Exception.new
end
}
APP_ROOT = File.join Dir.pwd, 'spec', 'data'
#
class Zorglub::Node
def self.my_call uri
call( {'PATH_INFO'=>uri} )
end
end
#
class Temp < Zorglub::Node
end
#
class Node0 < Zorglub::Node
# default
def index
html
end
def hello
no_layout!
'world'
end
def with_2args a1, a2
end
def do_render
engine! 'real'
end
def do_partial a1, a2
engine! 'real'
end
def other_view
engine! 'real'
view! r('do_partial')
end
def do_redirect
redirect r(:do_partial,1,2,3)
end
def xml_file
no_layout!
engine! :file
ext! 'xml'
end
def plain_file
no_layout!
engine! :file
ext! 'txt'
end
def engines name
no_layout!
case name
when 'haml'
engine! :haml
when 'sass'
engine! :sass
end
end
end
#
class Node1 < Zorglub::Node
layout! 'layout-1'
engine! 'engine-1'
def index
layout! 'main'
engine! 'engine-2'
end
end
#
class Node2 < Node1
# inherited from Node1
end
#
class Node3 < Zorglub::Node
@before=0
@after=0
class << self
attr_accessor :before, :after
end
before_all do |node|
Node3.before +=1
end
after_all do |node|
Node3.after +=1
end
layout! 'layout-2'
engine! 'engine-2'
def index
(Node3.before-Node3.after).should == 1
end
end
#
class Node8 < Node3
end
#
class Node4 < Zorglub::Node
no_layout!
inherited_var :js,'js0'
inherited_var :js,'js1'
def index
inherited_var(:js).to_yaml
end
def more
inherited_var(:js,'js2').to_yaml
end
end
#
class Node5 < Node4
inherited_var :js, 'js3'
inherited_var :css, 'css0', 'css1'
# no_layout! inherited from Node4
def index
js = inherited_var(:js,'jsx')
inherited_var(:css, 'css0', 'css1','css2')
css = inherited_var :css
js.concat(css).to_yaml
end
end
#
class Node6 < Zorglub::Node
@static_cpt=0
class << self
attr_accessor :static_cpt
end
attr_reader :value
static! true
def no_static
static! false
engine! 'static'
view! Node0.r('do_render')
Node6.static_cpt+=1
@value = Node6.static_cpt
end
def do_static
engine! 'static'
view! Node0.r('do_render')
Node6.static_cpt+=1
@value = Node6.static_cpt
end
end
#
class Node7 < Zorglub::Node
layout_base_path! File.join APP_ROOT, 'alt','layout'
view_base_path! File.join APP_ROOT, 'alt'
def view_path
view! 'do_render'
end
end
#
APP = Zorglub::App.new do
register_engine! :file, nil, Zorglub::Engines::File.method(:proc)
register_engine! :haml, 'haml', Zorglub::Engines::Haml.method(:proc)
register_engine! :sass, 'scss', Zorglub::Engines::Sass.method(:proc)
register_engine! 'default', nil, HASH_PROC
register_engine! 'engine-1', 'spec', HASH_PROC
register_engine! 'engine-2', 'spec', HASH_PROC
register_engine! 'real', nil, RENDER_PROC
register_engine! 'static', nil, STATIC_PROC
opt! :root, APP_ROOT
opt! :engine, 'default'
map '/node0', Node0
map '/node1', Node1
map '/node3', Node3
map '/node4', Node4
map '/node5', Node5
map '/node6', Node6
map '/node7', Node7
map '/node8', Node8
end
#
class Node2
map APP, '/node2'
end
#
|