ramaze 0.3.0 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +3 -2
- data/bin/ramaze +9 -3
- data/doc/AUTHORS +6 -2
- data/doc/CHANGELOG +272 -66
- data/doc/GPL +12 -13
- data/doc/README.html +729 -0
- data/doc/changes.txt +5757 -0
- data/doc/changes.xml +5759 -0
- data/doc/meta/announcement.txt +48 -39
- data/doc/tutorial/todolist.mkd +10 -12
- data/examples/blog/start.rb +1 -0
- data/examples/caching.rb +1 -0
- data/examples/element.rb +3 -0
- data/examples/hello.rb +1 -3
- data/examples/identity.rb +5 -8
- data/examples/layout.rb +1 -0
- data/examples/linking.rb +1 -0
- data/examples/memleak_detector.rb +1 -0
- data/examples/nitro_form.rb +1 -0
- data/examples/rammit/start.rb +1 -0
- data/examples/rapaste/Rakefile +7 -0
- data/examples/rapaste/{src/controller.rb → controller/paste.rb} +28 -3
- data/examples/rapaste/{src/model.rb → model/paste.rb} +0 -4
- data/examples/rapaste/public/css/display.css +17 -0
- data/examples/rapaste/spec/rapaste.rb +2 -2
- data/examples/rapaste/start.rb +9 -4
- data/examples/rapaste/{template → view}/copy.xhtml +0 -0
- data/examples/rapaste/{template → view}/index.xhtml +0 -0
- data/examples/rapaste/{template → view}/layout.xhtml +3 -0
- data/examples/rapaste/{template → view}/list.xhtml +4 -3
- data/examples/rapaste/view/search.xhtml +41 -0
- data/examples/rapaste/{template → view}/view.xhtml +0 -0
- data/examples/simple.rb +3 -3
- data/examples/templates/template/external.amrita +9 -9
- data/examples/templates/template/external.redcloth +19 -0
- data/examples/templates/template_amrita2.rb +40 -7
- data/examples/templates/template_erubis.rb +3 -3
- data/examples/templates/template_ezamar.rb +1 -3
- data/examples/templates/template_haml.rb +1 -3
- data/examples/templates/template_liquid.rb +3 -3
- data/examples/templates/template_markaby.rb +1 -3
- data/examples/templates/template_nagoro.rb +1 -3
- data/examples/templates/template_redcloth.rb +59 -0
- data/examples/templates/template_remarkably.rb +1 -3
- data/examples/templates/template_xslt.rb +1 -4
- data/examples/todolist/src/controller/main.rb +1 -1
- data/examples/todolist/start.rb +1 -2
- data/examples/upload/start.rb +19 -0
- data/examples/upload/view/index.xhtml +25 -0
- data/examples/whywiki/start.rb +1 -3
- data/examples/wikore/start.rb +3 -0
- data/examples/wiktacular/mkd/newpagename/current.mkd +1 -0
- data/examples/wiktacular/mkd/newpagename/current.mkd.bak +1 -0
- data/examples/wiktacular/start.rb +1 -0
- data/lib/proto/controller/main.rb +0 -3
- data/lib/proto/public/js/jquery.js +106 -93
- data/lib/proto/spec/main.rb +2 -5
- data/lib/proto/start.rb +0 -3
- data/lib/ramaze.rb +3 -2
- data/lib/ramaze/action.rb +6 -10
- data/lib/ramaze/adapter/lsws.rb +19 -0
- data/lib/ramaze/contrib/email.rb +84 -0
- data/lib/ramaze/contrib/email.rb-darcs-backup0 +81 -0
- data/lib/ramaze/contrib/gettext.rb +1 -0
- data/lib/ramaze/contrib/gettext/parser.rb +46 -0
- data/lib/ramaze/contrib/route.rb +3 -36
- data/lib/ramaze/controller.rb +4 -6
- data/lib/ramaze/controller/resolve.rb +28 -1
- data/lib/ramaze/dispatcher.rb +1 -1
- data/lib/ramaze/dispatcher/file.rb +17 -0
- data/lib/ramaze/global/globalstruct.rb +7 -4
- data/lib/ramaze/helper/auth.rb +1 -1
- data/lib/ramaze/helper/identity.rb +25 -15
- data/lib/ramaze/helper/link.rb +29 -8
- data/lib/ramaze/helper/maruku.rb +7 -0
- data/lib/ramaze/helper/partial.rb +25 -10
- data/lib/ramaze/route.rb +56 -0
- data/lib/ramaze/snippets/metaid.rb +17 -0
- data/lib/ramaze/spec/helper.rb +0 -2
- data/lib/ramaze/spec/helper/mock_http.rb +6 -0
- data/lib/ramaze/spec/helper/pretty_output.rb +5 -1
- data/lib/ramaze/store/default.rb +3 -1
- data/lib/ramaze/template.rb +1 -1
- data/lib/ramaze/template/amrita2.rb +21 -15
- data/lib/ramaze/template/bijou.rb +39 -0
- data/lib/ramaze/template/builder.rb +28 -0
- data/lib/ramaze/template/redcloth.rb +24 -0
- data/lib/ramaze/template/sass.rb +3 -1
- data/lib/ramaze/tool/create.rb +2 -1
- data/lib/ramaze/tool/localize.rb +6 -1
- data/lib/ramaze/trinity/request.rb +8 -0
- data/lib/ramaze/trinity/session.rb +8 -5
- data/lib/ramaze/version.rb +1 -1
- data/rake_tasks/gem.rake +0 -1
- data/rake_tasks/maintenance.rake +4 -1
- data/spec/contrib/route.rb +14 -63
- data/spec/examples/linking.rb +2 -2
- data/spec/examples/templates/template_redcloth.rb +28 -0
- data/spec/ramaze/controller/subclass.rb +21 -0
- data/spec/ramaze/dispatcher/file.rb +31 -0
- data/spec/ramaze/helper/link.rb +46 -0
- data/spec/ramaze/helper/partial.rb +22 -1
- data/spec/ramaze/helper/template/locals.xhtml +1 -0
- data/spec/ramaze/helper/template/recursive_locals.xhtml +7 -0
- data/spec/ramaze/params.rb +8 -0
- data/spec/ramaze/request.rb +14 -0
- data/spec/ramaze/route.rb +107 -0
- data/spec/ramaze/session.rb +4 -2
- data/spec/ramaze/template/amrita2.rb +21 -7
- data/spec/ramaze/template/amrita2/external.amrita +6 -0
- data/spec/ramaze/template/amrita2/sum.amrita +1 -1
- data/spec/ramaze/template/bijou.rb +25 -0
- data/spec/ramaze/template/builder.rb +55 -0
- data/spec/ramaze/template/builder/external.rxml +3 -0
- data/spec/ramaze/template/haml.rb +15 -0
- data/spec/ramaze/template/haml/locals.haml +1 -0
- data/spec/ramaze/template/redcloth.rb +38 -0
- data/spec/ramaze/template/redcloth/external.redcloth +1 -0
- metadata +472 -442
- data/examples/rapaste/rapaste.sqlite +0 -0
- data/spec/ramaze/template/amrita2/data.amrita +0 -6
- data/spec/ramaze/template/amrita2/index.amrita +0 -1
@@ -17,13 +17,14 @@ module Ramaze
|
|
17
17
|
|
18
18
|
# mapping of :adapter => to the right class-name.
|
19
19
|
ADAPTER_ALIAS = {
|
20
|
-
:webrick => :WEBrick,
|
21
20
|
:cgi => :Cgi,
|
22
21
|
:fcgi => :Fcgi,
|
22
|
+
:thin => :Thin,
|
23
|
+
:lsws => :Lsws,
|
24
|
+
:webrick => :WEBrick,
|
23
25
|
:mongrel => :Mongrel,
|
24
26
|
:evented_mongrel => :Mongrel,
|
25
27
|
:swiftiplied_mongrel => :Mongrel,
|
26
|
-
:thin => :Thin
|
27
28
|
}
|
28
29
|
|
29
30
|
# mapping of :cache => to the right class-name.
|
@@ -71,8 +72,10 @@ module Ramaze
|
|
71
72
|
def adapter
|
72
73
|
if internal = self[:adapter]
|
73
74
|
class_name = ADAPTER_ALIAS.fetch(internal.to_sym, internal)
|
74
|
-
|
75
|
-
|
75
|
+
unless Ramaze::Adapter.const_defined?(class_name)
|
76
|
+
require("ramaze/adapter"/internal.to_s.downcase)
|
77
|
+
end
|
78
|
+
Ramaze::Adapter.const_get(class_name)
|
76
79
|
end
|
77
80
|
end
|
78
81
|
|
data/lib/ramaze/helper/auth.rb
CHANGED
@@ -37,7 +37,7 @@ module Ramaze
|
|
37
37
|
end
|
38
38
|
%{
|
39
39
|
#{open_element}
|
40
|
-
<form method="POST" action="#{Rs(:login)}"
|
40
|
+
<form method="POST" action="#{Rs(:login)}>"
|
41
41
|
<ul style="list-style:none;">
|
42
42
|
<li>Username: <input type="text" name="username" /></li>
|
43
43
|
<li>Password: <input type="password" name="password" /></li>
|
@@ -3,13 +3,15 @@
|
|
3
3
|
|
4
4
|
require 'tmpdir'
|
5
5
|
require 'openid'
|
6
|
+
require 'openid/store/filesystem'
|
7
|
+
require 'openid/extensions/pape'
|
6
8
|
|
7
9
|
module Ramaze
|
8
10
|
|
9
11
|
openid_store_file = File.join(Dir.tmpdir, 'openid-store')
|
10
12
|
|
11
13
|
# Constant for storing meta-information persistent
|
12
|
-
OpenIDStore = OpenID::
|
14
|
+
OpenIDStore = OpenID::Store::Filesystem.new(openid_store_file)
|
13
15
|
|
14
16
|
# This is called Identity to avoid collisions with the original openid.rb
|
15
17
|
# It provides a nice and simple way to provide and control access over the
|
@@ -38,18 +40,26 @@ module Ramaze
|
|
38
40
|
session[:openid_entry] = request.referrer
|
39
41
|
|
40
42
|
openid_request = openid_consumer.begin(url)
|
41
|
-
case openid_request.status
|
42
|
-
when OpenID::FAILURE
|
43
|
-
flash[:error] = "OpenID - Unable to find openid server for `#{url}'"
|
44
43
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
44
|
+
papereq = OpenID::PAPE::Request.new
|
45
|
+
papereq.add_policy_uri(OpenID::PAPE::AUTH_PHISHING_RESISTANT)
|
46
|
+
papereq.max_auth_age = 2*60*60
|
47
|
+
openid_request.add_extension(papereq)
|
48
|
+
openid_request.return_to_args['did_pape'] = 'y'
|
49
|
+
|
50
|
+
root = "http://#{request.http_host}/"
|
51
|
+
return_to = root[0..-2] + Rs(:openid_complete)
|
52
|
+
immediate = false
|
53
|
+
if openid_request.send_redirect?(root, return_to, immediate)
|
54
|
+
redirect_url = openid_request.redirect_url(root, return_to, immediate)
|
55
|
+
raw_redirect redirect_url
|
56
|
+
else
|
57
|
+
# what the hell is @form_text ?
|
52
58
|
end
|
59
|
+
|
60
|
+
rescue OpenID::OpenIDError => ex
|
61
|
+
flash[:error] = "Discovery failed for #{url}: #{ex}"
|
62
|
+
raw_redirect Rs(:/)
|
53
63
|
end
|
54
64
|
|
55
65
|
# After having authenticated at the OpenID server browsers are redirected
|
@@ -60,19 +70,19 @@ module Ramaze
|
|
60
70
|
# TODO:
|
61
71
|
# - maybe using StackHelper, but this is a really minimal overlap?
|
62
72
|
def openid_complete
|
63
|
-
openid_response = openid_consumer.complete(request.params)
|
73
|
+
openid_response = openid_consumer.complete(request.params, request.request_uri)
|
64
74
|
|
65
75
|
case openid_response.status
|
66
|
-
when OpenID::FAILURE
|
76
|
+
when OpenID::Consumer::FAILURE
|
67
77
|
flash[:error] = 'OpenID - Verification failed.'
|
68
|
-
when OpenID::SUCCESS
|
78
|
+
when OpenID::Consumer::SUCCESS
|
69
79
|
session[:openid_identity] = openid_response.identity_url
|
70
80
|
flash[:success] = 'OpenID - Verification done.'
|
71
81
|
end
|
72
82
|
|
73
83
|
session.delete(:_openid_consumer_service)
|
74
84
|
|
75
|
-
|
85
|
+
raw_redirect session[:openid_entry]
|
76
86
|
end
|
77
87
|
|
78
88
|
private
|
data/lib/ramaze/helper/link.rb
CHANGED
@@ -26,14 +26,19 @@ module Ramaze
|
|
26
26
|
# A('title', :href => '/foo?x=y') #> <a href="/foo?x=y">title</a>
|
27
27
|
# A('Home', :href => Rs(:/)) #> <a href="/foo/bar">Home</a>
|
28
28
|
|
29
|
-
def A(
|
30
|
-
hash
|
31
|
-
|
29
|
+
def A(*args)
|
30
|
+
hash = args.last.respond_to?(:to_hash) ? args.pop : {}
|
31
|
+
|
32
|
+
hash[:href] ||= Rs(*args)
|
33
|
+
title = hash.delete(:title) ||
|
34
|
+
(args.last.respond_to?(:to_s) ? args.last : nil) ||
|
35
|
+
hash[:href]
|
36
|
+
hash[:href].to_s.sub!(/\A[^\/?]+/) {|m| CGI.escape(m) }
|
32
37
|
|
33
38
|
args = ['']
|
34
|
-
hash.each{|k,v| args << %(#{k}="#{v}") if k and v }
|
39
|
+
hash.each {|k,v| args << %(#{k}="#{v}") if k and v }
|
35
40
|
|
36
|
-
%(<a#{args.join(' ')}>#{title
|
41
|
+
%(<a#{args.join(' ')}>#{title}</a>)
|
37
42
|
end
|
38
43
|
|
39
44
|
# Builds links out of segments.
|
@@ -79,7 +84,8 @@ module Ramaze
|
|
79
84
|
# Uses R with Controller.current as first element.
|
80
85
|
|
81
86
|
def Rs(*atoms)
|
82
|
-
|
87
|
+
atoms.unshift Controller.current unless atoms.first.is_a?(Controller)
|
88
|
+
R(*atoms)
|
83
89
|
end
|
84
90
|
|
85
91
|
# Give it a path with character to split at and one to join the crumbs with.
|
@@ -94,11 +100,26 @@ module Ramaze
|
|
94
100
|
# <a href="/path">path</a>/
|
95
101
|
# <a href="/path/to">to</a>/
|
96
102
|
# <a href="/path/to/somewhere">somewhere</a>
|
103
|
+
#
|
104
|
+
# Optionally a href prefix can be specified which generate link
|
105
|
+
# names a above, but with the prefix prepended to the href path.
|
106
|
+
#
|
107
|
+
# Example:
|
108
|
+
# breadcrumbs('/path/to/somewhere', '/', '/', '/mycontroller/action')
|
109
|
+
#
|
110
|
+
# # results in this, newlines added for readability:
|
111
|
+
#
|
112
|
+
# <a href="/mycontroller/action/path">path</a>/
|
113
|
+
# <a href="/mycontroller/action/path/to">to</a>/
|
114
|
+
# <a href="/mycontroller/action/path/to/somewhere">somewhere</a>
|
97
115
|
|
98
|
-
def breadcrumbs(path, split = '/', join = '/')
|
116
|
+
def breadcrumbs(path, split = '/', join = '/', href_prefix = '')
|
99
117
|
atoms = path.split(split).reject{|a| a.empty?}
|
100
118
|
crumbs = atoms.inject([]){|s,v| s << [s.last,v]}
|
101
|
-
bread = crumbs.map
|
119
|
+
bread = crumbs.map do |a|
|
120
|
+
href_path = href_prefix + a*'/'
|
121
|
+
A(a[-1], :href=>(href_path))
|
122
|
+
end
|
102
123
|
bread.join(join)
|
103
124
|
end
|
104
125
|
end
|
@@ -47,19 +47,34 @@ module Ramaze
|
|
47
47
|
options.keys.each {|x| Request.current.params[x] = saved[x] }
|
48
48
|
end
|
49
49
|
|
50
|
-
#
|
51
|
-
# controller
|
52
|
-
# Any option you don't pass is instead taken from Action.current
|
50
|
+
# Render the template file in template_root of the
|
51
|
+
# current controller.
|
53
52
|
|
54
|
-
def render_template(file,
|
53
|
+
def render_template(file, locals = {})
|
55
54
|
current = Action.current
|
56
|
-
options
|
57
|
-
|
58
|
-
options[:binding] ||= options[:instance].instance_eval{ binding }
|
59
|
-
options[:template] = (options[:controller].template_root/file)
|
55
|
+
options = { :controller => current.controller,
|
56
|
+
:instance => current.instance.dup }
|
60
57
|
|
61
|
-
|
62
|
-
|
58
|
+
filename = options[:controller].template_root/file
|
59
|
+
|
60
|
+
if File.exist?(filename)
|
61
|
+
options[:template] = filename
|
62
|
+
elsif files = Dir["#{filename}.*"] and files.any?
|
63
|
+
options[:template] = files.first
|
64
|
+
else
|
65
|
+
Inform.warn "render_template: #{filename} does not exist"
|
66
|
+
return ''
|
67
|
+
end
|
68
|
+
|
69
|
+
# use method_missing to provide access to locals, if any exist
|
70
|
+
options[:instance].meta_def(:method_missing) { |sym, *args|
|
71
|
+
return locals[sym] if locals.key?(sym)
|
72
|
+
super
|
73
|
+
} if locals.any?
|
74
|
+
|
75
|
+
options[:binding] = options[:instance].instance_eval{ binding }
|
76
|
+
|
77
|
+
Ramaze::Action(options).render
|
63
78
|
ensure
|
64
79
|
Thread.current[:action] = current
|
65
80
|
end
|
data/lib/ramaze/route.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# Copyright (c) 2008 Michael Fellinger m.fellinger@gmail.com
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
3
|
+
|
4
|
+
# Ramaze support simple routing using string, regex and lambda based routers.
|
5
|
+
# Route are stored in a dictionary, which supports hash-like access but
|
6
|
+
# preserves order, so routes are evaluated in the order they are added.
|
7
|
+
#
|
8
|
+
# String routers are the simplest way to route in Ramaze. One path is
|
9
|
+
# translated into another:
|
10
|
+
#
|
11
|
+
# Ramaze::Route[ '/foo' ] = '/bar'
|
12
|
+
# '/foo' => '/bar'
|
13
|
+
#
|
14
|
+
# Regex routers allow matching against paths using regex. Matches within
|
15
|
+
# your regex using () are substituted in the new path using printf-like
|
16
|
+
# syntax.
|
17
|
+
#
|
18
|
+
# Ramaze::Route[ %r!^/(\d+)\.te?xt$! ] = "/text/%d"
|
19
|
+
# '/123.txt' => '/text/123'
|
20
|
+
# '/789.text' => '/text/789'
|
21
|
+
#
|
22
|
+
# For more complex routing, lambda routers can be used. Lambda routers are
|
23
|
+
# passed in the current path and request object, and must return either a new
|
24
|
+
# path string, or nil.
|
25
|
+
#
|
26
|
+
# Ramaze::Route[ 'name of route' ] = lambda{ |path, request|
|
27
|
+
# '/bar' if path == '/foo' and request[:bar] == '1'
|
28
|
+
# }
|
29
|
+
# '/foo' => '/foo'
|
30
|
+
# '/foo?bar=1' => '/bar'
|
31
|
+
#
|
32
|
+
# Lambda routers can also use this alternative syntax:
|
33
|
+
#
|
34
|
+
# Ramaze::Route('name of route') do |path, request|
|
35
|
+
# '/bar' if path == '/foo' and request[:bar] == '1'
|
36
|
+
# end
|
37
|
+
|
38
|
+
module Ramaze
|
39
|
+
class Route
|
40
|
+
trait :routes => Dictionary.new
|
41
|
+
|
42
|
+
class << self
|
43
|
+
def [](key)
|
44
|
+
trait[:routes][key]
|
45
|
+
end
|
46
|
+
|
47
|
+
def []=(key, value)
|
48
|
+
trait[:routes][key] = value
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.Route(name, &block)
|
54
|
+
Route[name] = block
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# from http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html
|
2
|
+
|
3
|
+
class Object
|
4
|
+
# The hidden singleton lurks behind everyone
|
5
|
+
def metaclass; class << self; self; end; end
|
6
|
+
def meta_eval &blk; metaclass.instance_eval &blk; end
|
7
|
+
|
8
|
+
# Adds methods to a metaclass
|
9
|
+
def meta_def name, &blk
|
10
|
+
meta_eval { define_method name, &blk }
|
11
|
+
end
|
12
|
+
|
13
|
+
# Defines an instance method within a class
|
14
|
+
def class_def name, &blk
|
15
|
+
class_eval { define_method name, &blk }
|
16
|
+
end
|
17
|
+
end
|
data/lib/ramaze/spec/helper.rb
CHANGED
@@ -26,6 +26,8 @@ module MockHTTP
|
|
26
26
|
:referrer => 'HTTP_REFERER',
|
27
27
|
:referer => 'HTTP_REFERER',
|
28
28
|
:cookie => 'HTTP_COOKIE',
|
29
|
+
:if_none_match=> 'HTTP_IF_NONE_MATCH',
|
30
|
+
:if_modified_since=> 'HTTP_IF_MODIFIED_SINCE',
|
29
31
|
}
|
30
32
|
|
31
33
|
MOCK_REQUEST = ::Rack::MockRequest.new(Ramaze::Adapter::Fake)
|
@@ -40,6 +42,10 @@ module MockHTTP
|
|
40
42
|
MOCK_REQUEST.send(meth, uri, DEFAULTS.merge(options))
|
41
43
|
end
|
42
44
|
|
45
|
+
def raw_mock_request(meth, uri, options = {})
|
46
|
+
MOCK_REQUEST.send(meth, uri, DEFAULTS.merge(options))
|
47
|
+
end
|
48
|
+
|
43
49
|
def process_request(path, query)
|
44
50
|
options = {}
|
45
51
|
FISHING.each{|key, value|
|
@@ -4,15 +4,18 @@ module Bacon
|
|
4
4
|
|
5
5
|
def handle_specification(name)
|
6
6
|
NAME.replace name
|
7
|
+
puts NAME
|
7
8
|
yield
|
9
|
+
puts
|
8
10
|
end
|
9
11
|
|
10
12
|
def handle_requirement(description)
|
13
|
+
print "- #{description}\n"
|
11
14
|
error = yield
|
12
15
|
|
13
16
|
unless error.empty?
|
14
17
|
if defined?(Ramaze::Informing)
|
15
|
-
puts '', " #{NAME} -- #{description} ".center(70, '-'), ''
|
18
|
+
puts '', " #{NAME} -- #{description} [FAILED]".center(70, '-'), ''
|
16
19
|
colors = Ramaze::Informer::COLORS
|
17
20
|
|
18
21
|
until RamazeLogger.log.empty?
|
@@ -35,6 +38,7 @@ module Bacon
|
|
35
38
|
end
|
36
39
|
|
37
40
|
def handle_summary
|
41
|
+
puts
|
38
42
|
puts "%d tests, %d assertions, %d failures, %d errors" %
|
39
43
|
Counter.values_at(:specifications, :requirements, :failed, :errors)
|
40
44
|
end
|
data/lib/ramaze/store/default.rb
CHANGED
data/lib/ramaze/template.rb
CHANGED
@@ -16,7 +16,7 @@ module Ramaze
|
|
16
16
|
|
17
17
|
ENGINES = {} unless defined?(ENGINES)
|
18
18
|
|
19
|
-
%w[ Amrita2 Erubis Haml Liquid Markaby Nagoro None Remarkably Sass XSLT ].
|
19
|
+
%w[ Amrita2 Builder Erubis Haml Liquid Markaby Nagoro None RedCloth Remarkably Sass XSLT ].
|
20
20
|
each do |const|
|
21
21
|
autoload(const, "ramaze/template/#{const.downcase}")
|
22
22
|
end
|
@@ -1,7 +1,16 @@
|
|
1
1
|
# Copyright (c) 2008 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 'amrita2
|
4
|
+
require 'amrita2'
|
5
|
+
|
6
|
+
class Amrita2::Template
|
7
|
+
|
8
|
+
# Ramaze helpers are available in template contexts.
|
9
|
+
|
10
|
+
include Ramaze::Helper
|
11
|
+
extend Ramaze::Helper
|
12
|
+
helper :link, :file, :flash, :cgi
|
13
|
+
end
|
5
14
|
|
6
15
|
module Ramaze
|
7
16
|
module Template
|
@@ -11,27 +20,24 @@ module Ramaze
|
|
11
20
|
|
12
21
|
class Amrita2 < Template
|
13
22
|
|
14
|
-
ENGINES[self] = %w[ amrita amr ]
|
23
|
+
ENGINES[self] = %w[ amrita amr a2html ]
|
15
24
|
|
16
25
|
class << self
|
17
26
|
|
18
27
|
# Takes an Action
|
19
|
-
# The file is rendered using Amrita2::
|
20
|
-
# The Controller is used as the object for expansion.
|
28
|
+
# The result or file is rendered using Amrita2::Template.
|
21
29
|
#
|
22
|
-
# The
|
23
|
-
|
24
|
-
def transform action
|
25
|
-
instance, file = action.instance, action.template
|
30
|
+
# The context data are set to @data in the controller before expansion.
|
26
31
|
|
27
|
-
|
28
|
-
|
32
|
+
def transform(action)
|
33
|
+
template = wrap_compile(action)
|
34
|
+
data = action.instance.instance_variable_get("@data") || {}
|
35
|
+
action.instance.extend ::Amrita2::Runtime if data.kind_of? Binding
|
36
|
+
template.render_with(data)
|
37
|
+
end
|
29
38
|
|
30
|
-
|
31
|
-
|
32
|
-
instance.instance_variable_set('@params', action.params)
|
33
|
-
template.expand(out, instance)
|
34
|
-
out
|
39
|
+
def compile(action, template)
|
40
|
+
::Amrita2::Template.new(template)
|
35
41
|
end
|
36
42
|
end
|
37
43
|
end
|