ramaze 0.3.0 → 0.3.5
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.
- 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
|