ramaze 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +52 -19
- data/bin/ramaze +19 -6
- data/doc/CHANGELOG +33 -0
- data/doc/COPYING +1 -1
- data/doc/FAQ +92 -0
- data/doc/GPL +340 -0
- data/doc/INSTALL +34 -0
- data/doc/ProjectInfo +53 -0
- data/doc/README +187 -110
- data/doc/readme_chunks/appendix.txt +13 -0
- data/doc/readme_chunks/examples.txt +38 -0
- data/doc/readme_chunks/features.txt +82 -0
- data/doc/readme_chunks/getting_help.txt +5 -0
- data/doc/readme_chunks/getting_started.txt +18 -0
- data/doc/readme_chunks/installing.txt +41 -0
- data/doc/readme_chunks/introduction.txt +18 -0
- data/doc/readme_chunks/principles.txt +41 -0
- data/doc/readme_chunks/thanks.txt +59 -0
- data/doc/tutorial/todolist.txt +546 -0
- data/examples/blog/main.rb +1 -1
- data/examples/blog/src/controller.rb +13 -11
- data/examples/blog/src/element.rb +11 -6
- data/examples/blog/src/model.rb +8 -23
- data/examples/blog/template/edit.xhtml +3 -1
- data/examples/blog/template/index.xhtml +4 -4
- data/examples/caching.rb +4 -4
- data/examples/element.rb +10 -7
- data/examples/hello.rb +3 -4
- data/examples/simple.rb +5 -3
- data/examples/templates/template/external.amrita +19 -0
- data/examples/templates/template/{external.rmze → external.zmr} +2 -2
- data/examples/templates/template_amrita2.rb +48 -0
- data/examples/templates/template_erubis.rb +5 -2
- data/examples/templates/{template_ramaze.rb → template_ezamar.rb} +13 -7
- data/examples/templates/template_haml.rb +4 -1
- data/examples/templates/template_liquid.rb +2 -1
- data/examples/templates/template_markaby.rb +2 -1
- data/examples/todolist/conf/benchmark.yaml +35 -0
- data/examples/todolist/conf/debug.yaml +34 -0
- data/examples/todolist/conf/live.yaml +33 -0
- data/examples/todolist/conf/silent.yaml +31 -0
- data/examples/todolist/conf/stage.yaml +33 -0
- data/examples/todolist/main.rb +18 -0
- data/examples/todolist/public/404.jpg +0 -0
- data/examples/todolist/public/css/coderay.css +105 -0
- data/examples/todolist/public/css/ramaze_error.css +42 -0
- data/{lib/proto → examples/todolist}/public/error.xhtml +0 -0
- data/examples/todolist/public/favicon.ico +0 -0
- data/examples/todolist/public/js/jquery.js +1923 -0
- data/examples/todolist/public/ramaze.png +0 -0
- data/examples/todolist/src/controller/main.rb +56 -0
- data/examples/todolist/src/element/page.rb +26 -0
- data/examples/todolist/src/model.rb +14 -0
- data/examples/todolist/template/index.xhtml +17 -0
- data/examples/todolist/template/new.xhtml +7 -0
- data/examples/todolist/todolist.db +9 -0
- data/examples/whywiki/main.rb +3 -8
- data/examples/whywiki/template/show.xhtml +4 -0
- data/lib/proto/public/error.zmr +77 -0
- data/lib/proto/src/controller/main.rb +2 -1
- data/lib/proto/src/element/page.rb +2 -1
- data/lib/proto/src/model.rb +3 -2
- data/lib/ramaze.rb +7 -9
- data/lib/ramaze/adapter.rb +51 -0
- data/lib/ramaze/adapter/cgi.rb +23 -0
- data/lib/ramaze/adapter/fcgi.rb +22 -0
- data/lib/ramaze/adapter/mongrel.rb +7 -86
- data/lib/ramaze/adapter/webrick.rb +14 -133
- data/lib/ramaze/cache/memcached.rb +6 -0
- data/lib/ramaze/cache/yaml_store.rb +3 -1
- data/lib/ramaze/controller.rb +292 -2
- data/lib/ramaze/dispatcher.rb +85 -213
- data/lib/ramaze/error.rb +10 -0
- data/lib/ramaze/global.rb +8 -0
- data/lib/ramaze/helper/aspect.rb +30 -7
- data/lib/ramaze/helper/auth.rb +16 -9
- data/lib/ramaze/helper/cache.rb +40 -35
- data/lib/ramaze/helper/feed.rb +1 -1
- data/lib/ramaze/helper/flash.rb +34 -0
- data/lib/ramaze/helper/link.rb +8 -2
- data/lib/ramaze/helper/openid.rb +63 -0
- data/lib/ramaze/helper/redirect.rb +12 -11
- data/lib/ramaze/helper/stack.rb +5 -7
- data/lib/ramaze/inform.rb +12 -1
- data/lib/ramaze/snippets/kernel/aquire.rb +1 -1
- data/lib/ramaze/snippets/kernel/{self_method.rb → method.rb} +3 -18
- data/lib/ramaze/snippets/kernel/{rescue_require.rb → pretty_inspect.rb} +7 -6
- data/lib/ramaze/snippets/method/name.rb +22 -0
- data/lib/ramaze/snippets/{kernel → ramaze}/autoreload.rb +0 -0
- data/lib/ramaze/snippets/ramaze/caller_info.rb +14 -0
- data/lib/ramaze/snippets/{kernel → ramaze}/caller_lines.rb +3 -10
- data/lib/ramaze/snippets/rdoc/usage_no_exit.rb +49 -23
- data/lib/ramaze/snippets/string/DIVIDE.rb +0 -1
- data/lib/ramaze/store/default.rb +58 -2
- data/lib/ramaze/store/yaml.rb +161 -0
- data/lib/ramaze/template.rb +27 -86
- data/lib/ramaze/template/amrita2.rb +14 -19
- data/lib/ramaze/template/erubis.rb +15 -38
- data/lib/ramaze/template/ezamar.rb +100 -0
- data/lib/ramaze/template/ezamar/element.rb +166 -0
- data/lib/ramaze/template/ezamar/engine.rb +124 -0
- data/lib/ramaze/template/ezamar/morpher.rb +155 -0
- data/lib/ramaze/template/haml.rb +16 -43
- data/lib/ramaze/template/liquid.rb +11 -51
- data/lib/ramaze/template/markaby.rb +44 -42
- data/lib/ramaze/tool/mime.rb +18 -0
- data/lib/ramaze/tool/mime_types.yaml +615 -0
- data/lib/ramaze/trinity/request.rb +20 -196
- data/lib/ramaze/trinity/response.rb +4 -33
- data/lib/ramaze/trinity/session.rb +150 -72
- data/lib/ramaze/version.rb +1 -1
- data/spec/adapter_spec.rb +20 -0
- data/spec/public/favicon.ico +0 -0
- data/spec/public/ramaze.png +0 -0
- data/spec/public/test_download.css +141 -0
- data/spec/{tc_request.rb → request_tc_helper.rb} +45 -21
- data/spec/spec_all.rb +77 -34
- data/spec/spec_helper.rb +8 -157
- data/spec/spec_helper_context.rb +72 -0
- data/spec/spec_helper_requester.rb +52 -0
- data/spec/spec_helper_simple_http.rb +433 -0
- data/spec/tc_adapter_mongrel.rb +3 -15
- data/spec/tc_adapter_webrick.rb +4 -14
- data/spec/tc_cache.rb +3 -5
- data/spec/tc_controller.rb +22 -12
- data/spec/tc_dependencies.rb +13 -0
- data/spec/tc_element.rb +8 -7
- data/spec/tc_error.rb +13 -7
- data/spec/tc_global.rb +16 -18
- data/spec/tc_helper_aspect.rb +2 -4
- data/spec/tc_helper_auth.rb +15 -14
- data/spec/tc_helper_cache.rb +5 -7
- data/spec/tc_helper_feed.rb +0 -2
- data/spec/tc_helper_flash.rb +103 -0
- data/spec/tc_helper_form.rb +4 -6
- data/spec/tc_helper_link.rb +1 -3
- data/spec/tc_helper_redirect.rb +23 -8
- data/spec/tc_helper_stack.rb +31 -15
- data/spec/tc_morpher.rb +1 -3
- data/spec/tc_params.rb +48 -7
- data/spec/tc_request_mongrel.rb +9 -0
- data/spec/tc_request_webrick.rb +5 -0
- data/spec/tc_session.rb +41 -25
- data/spec/tc_store.rb +55 -6
- data/spec/tc_store_yaml.rb +71 -0
- data/spec/tc_template_amrita2.rb +3 -3
- data/spec/tc_template_erubis.rb +2 -3
- data/spec/{tc_template_ramaze.rb → tc_template_ezamar.rb} +15 -5
- data/spec/tc_template_haml.rb +4 -3
- data/spec/tc_template_liquid.rb +3 -4
- data/spec/tc_template_markaby.rb +4 -6
- data/spec/tc_tidy.rb +1 -3
- data/spec/template/amrita2/{data.html → data.amrita} +0 -0
- data/spec/template/amrita2/{index.html → index.amrita} +0 -0
- data/spec/template/amrita2/{sum.html → sum.amrita} +0 -0
- data/spec/template/ezamar/another/long/action.zmr +1 -0
- data/spec/template/ezamar/combined.zmr +1 -0
- data/spec/template/{ramaze/file_only.rmze → ezamar/file_only.zmr} +0 -0
- data/spec/template/{ramaze/index.rmze → ezamar/index.zmr} +0 -0
- data/spec/template/{ramaze/nested.rmze → ezamar/nested.zmr} +0 -0
- data/spec/template/ezamar/some__long__action.zmr +1 -0
- data/spec/template/{ramaze/sum.rmze → ezamar/sum.zmr} +0 -0
- metadata +181 -123
- data/doc/allison/LICENSE +0 -184
- data/doc/allison/README +0 -37
- data/doc/allison/allison.css +0 -300
- data/doc/allison/allison.gif +0 -0
- data/doc/allison/allison.js +0 -307
- data/doc/allison/allison.rb +0 -287
- data/doc/allison/cache/BODY +0 -588
- data/doc/allison/cache/CLASS_INDEX +0 -4
- data/doc/allison/cache/CLASS_PAGE +0 -1
- data/doc/allison/cache/FILE_INDEX +0 -4
- data/doc/allison/cache/FILE_PAGE +0 -1
- data/doc/allison/cache/FONTS +0 -1
- data/doc/allison/cache/FR_INDEX_BODY +0 -1
- data/doc/allison/cache/IMGPATH +0 -1
- data/doc/allison/cache/INDEX +0 -1
- data/doc/allison/cache/JAVASCRIPT +0 -307
- data/doc/allison/cache/METHOD_INDEX +0 -4
- data/doc/allison/cache/METHOD_LIST +0 -1
- data/doc/allison/cache/SRC_PAGE +0 -1
- data/doc/allison/cache/STYLE +0 -322
- data/doc/allison/cache/URL +0 -1
- data/doc/changes.txt +0 -2021
- data/doc/changes.xml +0 -2024
- data/lib/ramaze/snippets/kernel/silently.rb +0 -13
- data/lib/ramaze/snippets/thread/deadQUESTIONMARK.rb +0 -11
- data/lib/ramaze/template/haml/actionview_stub.rb +0 -20
- data/lib/ramaze/template/ramaze.rb +0 -177
- data/lib/ramaze/template/ramaze/element.rb +0 -166
- data/lib/ramaze/template/ramaze/morpher.rb +0 -156
- data/spec/tc_test.rb +0 -17
@@ -0,0 +1,124 @@
|
|
1
|
+
# Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
3
|
+
|
4
|
+
require 'digest/sha1'
|
5
|
+
|
6
|
+
# Ezamar is a very simple (and at no means complete) reimplementation of the
|
7
|
+
# Templating-engine found in Nitro.
|
8
|
+
#
|
9
|
+
# Since Nitros templating is based on REXML and Ezamar is not there are vast
|
10
|
+
# differences, but it tries to keep the look and feel as close as possible.
|
11
|
+
|
12
|
+
module Ezamar
|
13
|
+
|
14
|
+
require 'ramaze/template/ezamar/element'
|
15
|
+
require 'ramaze/template/ezamar/morpher'
|
16
|
+
|
17
|
+
# This class is responsible for initializing and compiling the template.
|
18
|
+
|
19
|
+
class Template
|
20
|
+
attr_accessor :last_result, :file
|
21
|
+
attr_reader :original
|
22
|
+
|
23
|
+
# Start a new template with some string for your template
|
24
|
+
# that's going to be transformed.
|
25
|
+
|
26
|
+
def initialize source, options = {}
|
27
|
+
@original = @source = source
|
28
|
+
@binding, @file = options.values_at(:binding, :path)
|
29
|
+
@start_heredoc = "T" << Digest::SHA1.hexdigest(@source)
|
30
|
+
@start_heredoc, @end_heredoc = "\n<<#{@start_heredoc}\n", "\n#{@start_heredoc}\n"
|
31
|
+
@bufadd = "_out_ << "
|
32
|
+
@old = true
|
33
|
+
compile
|
34
|
+
end
|
35
|
+
|
36
|
+
# reset the original template you gave
|
37
|
+
|
38
|
+
def original=(original)
|
39
|
+
compile
|
40
|
+
end
|
41
|
+
|
42
|
+
# is the template old?
|
43
|
+
|
44
|
+
def old?
|
45
|
+
!!@old
|
46
|
+
end
|
47
|
+
|
48
|
+
# make the template old - mark it for recompilation.
|
49
|
+
|
50
|
+
def touch
|
51
|
+
@old = true
|
52
|
+
end
|
53
|
+
|
54
|
+
# transform a String to a final xhtml
|
55
|
+
#
|
56
|
+
# You can pass it a binding, for example from your controller.
|
57
|
+
#
|
58
|
+
# Example:
|
59
|
+
#
|
60
|
+
# class Controller
|
61
|
+
# def hello
|
62
|
+
# @hello = 'Hello, World!'
|
63
|
+
# end
|
64
|
+
# end
|
65
|
+
#
|
66
|
+
# controller = Controller.new
|
67
|
+
# controller.hello
|
68
|
+
# binding = controller.send(:binding)
|
69
|
+
#
|
70
|
+
# Ezamar.new('#{@hello}').transform(binding)
|
71
|
+
|
72
|
+
def transform(_binding_ = @binding)
|
73
|
+
@compiled = compile if old?
|
74
|
+
|
75
|
+
args = @file ? [@file] : []
|
76
|
+
|
77
|
+
@last_result = eval(@compiled, _binding_, *args)
|
78
|
+
|
79
|
+
@last_result.map! do |line|
|
80
|
+
line.to_s.chomp
|
81
|
+
end
|
82
|
+
|
83
|
+
@last_result = @last_result.join.strip
|
84
|
+
end
|
85
|
+
|
86
|
+
# The actual compilation of the @source
|
87
|
+
#
|
88
|
+
# All ye who seek magic, look elsewhere, this method is ASAP (as simple as possible)
|
89
|
+
#
|
90
|
+
# There are some simple gsubs that build a final template which is evaluated
|
91
|
+
#
|
92
|
+
# The rules are following:
|
93
|
+
# <?r rubycode ?>
|
94
|
+
# evaluate the code inside the tag, this is considered XHTML-valid and so is the
|
95
|
+
# preferred method for executing code inside your templates.
|
96
|
+
# The return-value is ignored
|
97
|
+
# <% rubycode %>
|
98
|
+
# The same as <?r ?>, ERB-style and not valid XHTML, but should give someone who
|
99
|
+
# is already familiar with ERB some common ground
|
100
|
+
# #{ rubycode }
|
101
|
+
# You know this from normal ruby already and it's actually nothing else.
|
102
|
+
# Interpolation at the position in the template, isn't any special taggy format
|
103
|
+
# and therefor safe to use.
|
104
|
+
# <%= rubycode %>
|
105
|
+
# The result of this will be interpolated at the position in the template.
|
106
|
+
# Not valid XHTML either.
|
107
|
+
#
|
108
|
+
# The result of the compilation will be stored in @compiled.
|
109
|
+
|
110
|
+
def compile
|
111
|
+
@source.gsub!(/<%\s+(.*?)\s+%>/m,
|
112
|
+
"#{@end_heredoc} \\1; #{@bufadd} #{@start_heredoc}")
|
113
|
+
@source.gsub!(/<\?r\s+(.*?)\s+\?>/m,
|
114
|
+
"#{@end_heredoc} \\1; #{@bufadd} #{@start_heredoc}")
|
115
|
+
@source.gsub!(/<%=\s+(.*?)\s+%>/m,
|
116
|
+
"#{@end_heredoc} #{@bufadd} (\\1); #{@bufadd} #{@start_heredoc}")
|
117
|
+
|
118
|
+
@source = [@bufadd, @start_heredoc, @source, @end_heredoc].join(' ')
|
119
|
+
|
120
|
+
@old = false
|
121
|
+
@compiled = "_out_ = []; #{@source}; _out_"
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,155 @@
|
|
1
|
+
# Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
3
|
+
|
4
|
+
require 'ramaze/template/ezamar/engine'
|
5
|
+
|
6
|
+
# This applies a morphing-replace for the template.
|
7
|
+
#
|
8
|
+
# To use the functionality of Morpher you will need to have hpricot
|
9
|
+
# installed, you will get one error in case you don't and the method
|
10
|
+
# will be replaced by a stub that simply returns the template.
|
11
|
+
#
|
12
|
+
# The method first checks if you use any morphers and just skips
|
13
|
+
# the step if you don't, this should give quite some speedup for
|
14
|
+
# smaller templates that don't use this functionality at all.
|
15
|
+
# the check works by searching the morphs with appended '='
|
16
|
+
# in the template. There may be a few cases where this won't work
|
17
|
+
# since we cannot make any assumptions on the format.
|
18
|
+
#
|
19
|
+
# If you want to turn this functionality off, either remove Morpher
|
20
|
+
# from:
|
21
|
+
# Ramaze::Template::Ezamar.trait[:transform_pipeline]
|
22
|
+
# or do:
|
23
|
+
# Ramaze::Morpher.trait[:morphs] = {}
|
24
|
+
#
|
25
|
+
# The latter is a tad slower, but i mention the possibility in case you
|
26
|
+
# find good use for it.
|
27
|
+
#
|
28
|
+
# You can add your own morphers in Ramaze::Morpher.trait[:morphs]
|
29
|
+
#
|
30
|
+
# For Example:
|
31
|
+
#
|
32
|
+
# Morpher.trait[:morphs]['if'] = '<?r %morph %expression ?>%content<?r end ?>'
|
33
|
+
#
|
34
|
+
# Now, assuming that some tag in your template is '<a if="@foo">x</a>'
|
35
|
+
#
|
36
|
+
# %morph stands for the name of your morph: 'if'
|
37
|
+
# %expression is the stuff you write in the attribute: '@foo'
|
38
|
+
# %content is the tag without the attribute (and all inside): '<a>x</a>'
|
39
|
+
|
40
|
+
class Ezamar::Morpher
|
41
|
+
|
42
|
+
# Use this trait to define your custom morphs.
|
43
|
+
trait :morphs => {
|
44
|
+
'if' => '<?r %morph %expression ?>%content<?r end ?>',
|
45
|
+
'unless' => '<?r %morph %expression ?>%content<?r end ?>',
|
46
|
+
'for' => '<?r %morph %expression ?>%content<?r end ?>',
|
47
|
+
'each' => '<?r %expression.%morph do |_e| ?>%content<?r end ?>',
|
48
|
+
'times' => '<?r %expression.%morph do |_t| ?>%content<?r end ?>',
|
49
|
+
}
|
50
|
+
|
51
|
+
# Since the functionality is best explained by examples, here they come.
|
52
|
+
#
|
53
|
+
# Example:
|
54
|
+
#
|
55
|
+
# if:
|
56
|
+
# <div if="@name">#@name</div>
|
57
|
+
# morphs to:
|
58
|
+
# <?r if @name ?>
|
59
|
+
# <div>#@name</div>
|
60
|
+
# <?r end ?>
|
61
|
+
#
|
62
|
+
# unless:
|
63
|
+
# <div unless="@name">No Name</div>
|
64
|
+
# morphs to:
|
65
|
+
# <?r unless @name ?>
|
66
|
+
# <div>No Name</div>
|
67
|
+
# <?r end ?>
|
68
|
+
#
|
69
|
+
# for:
|
70
|
+
# <div for="name in @names">#{name}</div>
|
71
|
+
# morphs to:
|
72
|
+
# <?r for name in @names ?>
|
73
|
+
# <div>#{name}</div>
|
74
|
+
# <?r end ?>
|
75
|
+
#
|
76
|
+
# times:
|
77
|
+
# <div times="3">#{_t}<div>
|
78
|
+
# morphs to:
|
79
|
+
# <?r 3.times do |_t| ?>
|
80
|
+
# <div>#{_t}</div>
|
81
|
+
# <?r end ?>
|
82
|
+
#
|
83
|
+
# each:
|
84
|
+
# <div each="[1,2,3]">#{_e}</div>
|
85
|
+
# morphs to:
|
86
|
+
# <?r [1,2,3].each do |_e| ?>
|
87
|
+
# <div>#{_e}</div>
|
88
|
+
# <?r end ?>
|
89
|
+
#
|
90
|
+
# The latter two examples show you also one standard introduced by a
|
91
|
+
# limitation of the replacement-system.
|
92
|
+
#
|
93
|
+
# When you yield a value, please name it by the first character(s) of
|
94
|
+
# the morphs name, with an underscore prefixed.
|
95
|
+
#
|
96
|
+
# for each an _e, for times a _t.
|
97
|
+
#
|
98
|
+
# This is by far not the best way to handle it and might lead to problems
|
99
|
+
# due to the lack of proper scoping in ruby (if you define an _e or _t
|
100
|
+
# before the block it will be overwritten).
|
101
|
+
#
|
102
|
+
# So please be careful, I tried to come up with something that is both easy
|
103
|
+
# to write and doesn't look outright awful while keeping an easy to remember
|
104
|
+
# mnemonic.
|
105
|
+
#
|
106
|
+
# TODO:
|
107
|
+
# - Add pure Ruby implementation as a fall-back.
|
108
|
+
|
109
|
+
def self.transform template, options = {}
|
110
|
+
morphs =
|
111
|
+
trait[:morphs].map{|k,v| [k.to_s, v.to_s]}.select do |(k,v)|
|
112
|
+
template.to_s.include?("#{k}=")
|
113
|
+
end
|
114
|
+
|
115
|
+
morphs = Hash[*morphs.flatten]
|
116
|
+
|
117
|
+
return template if morphs.empty?
|
118
|
+
|
119
|
+
require 'hpricot'
|
120
|
+
|
121
|
+
hp = Hpricot(template)
|
122
|
+
hp.each_child do |child|
|
123
|
+
if child.elem?
|
124
|
+
morphs.each_pair do |morph, replacement|
|
125
|
+
if expression = child[morph]
|
126
|
+
old = child.to_html
|
127
|
+
child.remove_attribute(morph)
|
128
|
+
|
129
|
+
replacement = replacement.dup.
|
130
|
+
gsub('%morph', morph).
|
131
|
+
gsub('%expression', expression).
|
132
|
+
gsub('%content', child.to_html)
|
133
|
+
|
134
|
+
template.gsub!(old, replacement)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
template
|
141
|
+
|
142
|
+
rescue LoadError => ex
|
143
|
+
error "Please install hpricot (for example via `gem install hpricot`) to get morphing"
|
144
|
+
|
145
|
+
# replace this method with a stub that only returns the template.
|
146
|
+
|
147
|
+
self.class_eval do
|
148
|
+
def self.transform(template, options = {})
|
149
|
+
template
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
template
|
154
|
+
end
|
155
|
+
end
|
data/lib/ramaze/template/haml.rb
CHANGED
@@ -1,65 +1,38 @@
|
|
1
1
|
# Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com
|
2
2
|
# All files in this distribution are subject to the terms of the Ruby license.
|
3
3
|
|
4
|
-
require 'ramaze/template/haml/actionview_stub'
|
5
4
|
require 'haml/engine'
|
6
5
|
|
7
6
|
module Ramaze::Template
|
8
7
|
class Haml < Template
|
9
8
|
|
10
|
-
# Actions consist of both templates and methods on the controller.
|
11
|
-
trait :actionless => false
|
12
|
-
|
13
|
-
# Usual extensions for templates.
|
14
|
-
trait :template_extensions => %w[haml]
|
15
|
-
|
16
9
|
# Custom HAML-options for your controller to be merged.
|
10
|
+
|
17
11
|
trait :haml_options => {
|
18
|
-
|
19
|
-
|
12
|
+
:locals => {}
|
13
|
+
}
|
20
14
|
|
21
|
-
|
15
|
+
Ramaze::Controller.register_engine self, %w[ haml ]
|
22
16
|
|
23
|
-
|
24
|
-
# Creates a new instances of itself and sends the action and params.
|
25
|
-
# Also tries to render the template.
|
26
|
-
# In Theory you can use this standalone, this has not been tested though.
|
17
|
+
class << self
|
27
18
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
19
|
+
# Transform any String via Haml, takes optionally an hash with the haml_options
|
20
|
+
# that you can set also by
|
21
|
+
# trait :haml_options => {}
|
22
|
+
# if you pass the options it will merge the trait with them. (your options
|
23
|
+
# override the defaults from trait[:haml_options]
|
32
24
|
|
33
|
-
|
25
|
+
def transform controller, options = {}
|
26
|
+
action, parameter, file, bound = *super
|
34
27
|
|
35
|
-
|
36
|
-
|
37
|
-
File.read(file)
|
38
|
-
elsif result.respond_to? :to_str
|
39
|
-
result
|
40
|
-
end
|
28
|
+
reaction = controller.send(action, *parameter)
|
29
|
+
template = reaction_or_file(reaction, file)
|
41
30
|
|
42
31
|
return '' unless template
|
43
32
|
|
44
|
-
|
45
|
-
|
46
|
-
puts ex
|
47
|
-
Informer.error ex
|
48
|
-
''
|
33
|
+
haml = ::Haml::Engine.new(template, ancestral_trait[:haml_options])
|
34
|
+
haml.to_html(controller)
|
49
35
|
end
|
50
36
|
end
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
|
-
# Transform any String via Haml, takes optionally an hash with the haml_options
|
55
|
-
# that you can set also by
|
56
|
-
# trait :haml_options => {}
|
57
|
-
# if you pass the options it will merge the trait with them. (your options
|
58
|
-
# override the defaults from trait[:haml_options]
|
59
|
-
|
60
|
-
def transform string, options = {}
|
61
|
-
haml = ::Haml::Engine.new(string, ancestral_trait[:haml_options].merge(options))
|
62
|
-
haml.to_html(self)
|
63
|
-
end
|
64
37
|
end
|
65
38
|
end
|
@@ -5,70 +5,30 @@ require 'liquid'
|
|
5
5
|
|
6
6
|
module Ramaze::Template
|
7
7
|
class Liquid < Template
|
8
|
-
extend Ramaze::Helper
|
9
8
|
|
10
|
-
|
11
|
-
trait :actionless => false
|
12
|
-
|
13
|
-
# Usual extensions for templates.
|
14
|
-
trait :template_extensions => %w[liquid]
|
15
|
-
|
16
|
-
# Custom options for Liquid to be merged for your controller.
|
17
|
-
trait :liquid_options => {}
|
9
|
+
Ramaze::Controller.register_engine self, %w[ liquid ]
|
18
10
|
|
19
11
|
class << self
|
12
|
+
|
20
13
|
# initializes the handling of a request on the controller.
|
21
14
|
# Creates a new instances of itself and sends the action and params.
|
22
15
|
# Also tries to render the template.
|
23
16
|
# In Theory you can use this standalone, this has not been tested though.
|
24
17
|
|
25
|
-
def
|
26
|
-
|
27
|
-
controller.instance_variable_set('@action', action)
|
28
|
-
result = controller.send(action, *params) if controller.respond_to?(action)
|
29
|
-
|
30
|
-
file = find_template(action)
|
31
|
-
|
32
|
-
p file
|
18
|
+
def transform controller, options = {}
|
19
|
+
action, parameter, file, bound = *super
|
33
20
|
|
34
|
-
|
35
|
-
|
36
|
-
File.read(file)
|
37
|
-
elsif result.respond_to? :to_str
|
38
|
-
result
|
39
|
-
end
|
21
|
+
reaction = controller.send(action, *parameter)
|
22
|
+
template = reaction_or_file(reaction, file)
|
40
23
|
|
41
24
|
return '' unless template
|
42
25
|
|
43
|
-
controller.
|
44
|
-
|
45
|
-
|
46
|
-
Informer.error ex
|
47
|
-
''
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
26
|
+
hash = controller.instance_variable_get("@hash") || {}
|
27
|
+
template = ::Liquid::Template.parse(template)
|
28
|
+
options = controller.ancestral_trait[:liquid_options]
|
52
29
|
|
53
|
-
|
54
|
-
|
55
|
-
#
|
56
|
-
# Usually you will just do this in the controller:
|
57
|
-
#
|
58
|
-
# class MainController < Template::Liquid
|
59
|
-
# def index
|
60
|
-
# @hash = {'name' => 'tobi'}
|
61
|
-
# end
|
62
|
-
# end
|
63
|
-
#
|
64
|
-
# And the templating will use @hash by default, setting it to {} if it is
|
65
|
-
# not set yet.
|
66
|
-
|
67
|
-
def transform string, hash = {}, options = {}
|
68
|
-
@hash ||= hash
|
69
|
-
template = ::Liquid::Template.parse(string)
|
70
|
-
options = ancestral_trait[:liquid_options].merge(options)
|
71
|
-
template.render(@hash, options)
|
30
|
+
template.render(hash, options)
|
31
|
+
end
|
72
32
|
end
|
73
33
|
end
|
74
34
|
end
|
@@ -5,14 +5,53 @@ require 'markaby'
|
|
5
5
|
|
6
6
|
module Ramaze::Template
|
7
7
|
class Markaby < Template
|
8
|
-
extend Ramaze::Helper
|
9
8
|
|
10
|
-
|
11
|
-
trait :actionless => false
|
9
|
+
Ramaze::Controller.register_engine self, %w[ mab ]
|
12
10
|
|
13
|
-
|
14
|
-
|
11
|
+
class << self
|
12
|
+
# initializes the handling of a request on the controller.
|
13
|
+
# Creates a new instances of itself and sends the action and params.
|
14
|
+
# Also tries to render the template.
|
15
|
+
# In Theory you can use this standalone, this has not been tested though.
|
16
|
+
|
17
|
+
def transform controller, options = {}
|
18
|
+
action, parameter, file, bound = *super
|
19
|
+
|
20
|
+
unless controller.private_methods.include?(action)
|
21
|
+
mixed_in = controller.class.ancestors === MarkabyMixin
|
22
|
+
controller.class.send(:include, MarkabyMixin) unless mixed_in
|
23
|
+
|
24
|
+
reaction = controller.send(action, *parameter)
|
25
|
+
|
26
|
+
mab = ::Markaby::Builder.new
|
27
|
+
template =
|
28
|
+
if file
|
29
|
+
transform_file(controller, file)
|
30
|
+
elsif reaction.respond_to? :to_str
|
31
|
+
reaction
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
return template if template
|
36
|
+
raise Ramaze::Error::NoAction, "No Action found for `#{action}' on #{controller.class}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def transform_file controller, file
|
40
|
+
ivs = {}
|
41
|
+
controller.instance_variables.each do |iv|
|
42
|
+
ivs[iv.gsub('@', '').to_sym] = controller.instance_variable_get(iv)
|
43
|
+
end
|
44
|
+
controller.send(:mab, ivs) do
|
45
|
+
instance_eval(File.read(file))
|
46
|
+
end
|
47
|
+
rescue Object => ex
|
48
|
+
puts ex
|
49
|
+
raise Ramaze::Error::Template, ex.message, ex.backtrace
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
15
53
|
|
54
|
+
module MarkabyMixin
|
16
55
|
private
|
17
56
|
|
18
57
|
# use this inside your controller to directly build Markaby
|
@@ -27,42 +66,5 @@ module Ramaze::Template
|
|
27
66
|
builder.send(:helper, :link)
|
28
67
|
builder.new(*args, &block).to_s
|
29
68
|
end
|
30
|
-
|
31
|
-
class << self
|
32
|
-
|
33
|
-
# Takes the action and parameter
|
34
|
-
# creates a new instance of itself, sets the @action instance-variable
|
35
|
-
# to the action just called, the sends the action and parameter further
|
36
|
-
# on to the instance (if the instance responds to the action)
|
37
|
-
#
|
38
|
-
# uses the #find_template method for the action to locate the template
|
39
|
-
# and uses the response from the template instead in case there is no
|
40
|
-
# template (and the response from the template responds to to_str)
|
41
|
-
|
42
|
-
def handle_request action, *params
|
43
|
-
controller = self.new
|
44
|
-
controller.instance_variable_set('@action', action)
|
45
|
-
|
46
|
-
result = controller.send(action, *params) if controller.respond_to?(action)
|
47
|
-
file = find_template(action)
|
48
|
-
|
49
|
-
mab = ::Markaby::Builder.new
|
50
|
-
|
51
|
-
template =
|
52
|
-
if file
|
53
|
-
ivs = {}
|
54
|
-
controller.instance_variables.each do |iv|
|
55
|
-
ivs[iv.gsub('@', '').to_sym] = controller.instance_variable_get(iv)
|
56
|
-
end
|
57
|
-
controller.send(:mab, ivs) do
|
58
|
-
instance_eval(File.read(file))
|
59
|
-
end
|
60
|
-
elsif result.respond_to? :to_str
|
61
|
-
result
|
62
|
-
end
|
63
|
-
|
64
|
-
template ? template : ''
|
65
|
-
end
|
66
|
-
end
|
67
69
|
end
|
68
70
|
end
|