ramaze 0.1.4 → 0.2.0
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 +26 -6
- data/bin/ramaze +8 -1
- data/doc/AUTHORS +13 -11
- data/doc/CHANGELOG +472 -13
- data/doc/LEGAL +22 -0
- data/doc/README +1 -4
- data/doc/TODO +7 -2
- data/doc/changes.txt +472 -13
- data/doc/changes.xml +472 -13
- data/doc/meta/announcement.txt +21 -23
- data/doc/readme_chunks/appendix.txt +0 -3
- data/doc/readme_chunks/features.txt +1 -1
- data/examples/auth/auth.rb +49 -0
- data/examples/auth/template/layout.haml +20 -0
- data/examples/auth/template/login.haml +16 -0
- data/examples/blog/spec/blog.rb +1 -0
- data/examples/caching.rb +5 -6
- data/examples/css.rb +37 -0
- data/examples/layout.rb +3 -17
- data/examples/simple_auth.rb +23 -0
- data/examples/sourceview/public/images/file.gif +0 -0
- data/examples/sourceview/public/images/folder.gif +0 -0
- data/examples/sourceview/public/images/tv-collapsable-last.gif +0 -0
- data/examples/sourceview/public/images/tv-collapsable.gif +0 -0
- data/examples/sourceview/public/images/tv-expandable-last.gif +0 -0
- data/examples/sourceview/public/images/tv-expandable.gif +0 -0
- data/examples/sourceview/public/images/tv-item-last.gif +0 -0
- data/examples/sourceview/public/images/tv-item.gif +0 -0
- data/examples/sourceview/public/jquery.js +11 -0
- data/examples/sourceview/public/jquery.treeview.css +47 -0
- data/examples/sourceview/public/jquery.treeview.js +223 -0
- data/examples/sourceview/public/sourceview.js +16 -0
- data/examples/sourceview/sourceview.rb +74 -0
- data/examples/sourceview/template/index.haml +43 -0
- data/examples/templates/template/external.nag +28 -0
- data/examples/templates/template/external.xsl +57 -0
- data/examples/templates/template_amrita2.rb +2 -4
- data/examples/templates/template_erubis.rb +1 -1
- data/examples/templates/template_haml.rb +1 -1
- data/examples/templates/template_liquid.rb +2 -4
- data/examples/templates/template_markaby.rb +2 -4
- data/examples/templates/template_nagoro.rb +53 -0
- data/examples/templates/template_remarkably.rb +2 -4
- data/examples/templates/template_xslt.rb +52 -0
- data/examples/whywiki/spec/whywiki.rb +63 -0
- data/examples/whywiki/start.rb +11 -13
- data/examples/whywiki/template/edit.xhtml +3 -3
- data/examples/whywiki/template/show.xhtml +5 -8
- data/examples/wikore/spec/wikore.rb +115 -0
- data/examples/wikore/src/controller.rb +81 -0
- data/examples/wikore/src/model.rb +51 -0
- data/examples/wikore/start.rb +6 -0
- data/examples/wikore/template/index.xhtml +8 -0
- data/examples/wiktacular/spec/wiktacular.rb +1 -0
- data/examples/wiktacular/src/controller.rb +1 -1
- data/lib/ramaze.rb +6 -3
- data/lib/ramaze/action.rb +2 -13
- data/lib/ramaze/action/render.rb +36 -18
- data/lib/ramaze/adapter.rb +1 -1
- data/lib/ramaze/adapter/cgi.rb +0 -3
- data/lib/ramaze/adapter/evented_mongrel.rb +7 -0
- data/lib/ramaze/adapter/mongrel.rb +4 -13
- data/lib/ramaze/adapter/swiftiplied_mongrel.rb +7 -0
- data/lib/ramaze/cache.rb +12 -7
- data/lib/ramaze/contrib.rb +22 -0
- data/lib/ramaze/contrib/auto_params.rb +128 -0
- data/lib/ramaze/contrib/auto_params/get_args.rb +56 -0
- data/lib/ramaze/contrib/gzip_filter.rb +57 -0
- data/lib/ramaze/contrib/route.rb +40 -0
- data/lib/ramaze/contrib/sequel/fill.rb +12 -0
- data/lib/ramaze/controller.rb +17 -6
- data/lib/ramaze/controller/resolve.rb +51 -14
- data/lib/ramaze/dispatcher.rb +15 -13
- data/lib/ramaze/dispatcher/action.rb +4 -3
- data/lib/ramaze/dispatcher/directory.rb +3 -3
- data/lib/ramaze/dispatcher/error.rb +1 -1
- data/lib/ramaze/dispatcher/file.rb +17 -6
- data/lib/ramaze/error.rb +3 -0
- data/lib/ramaze/gestalt.rb +28 -8
- data/lib/ramaze/global.rb +26 -6
- data/lib/ramaze/global/globalstruct.rb +31 -6
- data/lib/ramaze/helper.rb +2 -1
- data/lib/ramaze/helper/aspect.rb +2 -2
- data/lib/ramaze/helper/auth.rb +6 -9
- data/lib/ramaze/helper/cache.rb +89 -9
- data/lib/ramaze/helper/cgi.rb +2 -2
- data/lib/ramaze/helper/formatting.rb +44 -0
- data/lib/ramaze/helper/link.rb +7 -5
- data/lib/ramaze/helper/partial.rb +6 -4
- data/lib/ramaze/helper/redirect.rb +24 -9
- data/lib/ramaze/helper/stack.rb +6 -1
- data/lib/ramaze/inform/growl.rb +1 -1
- data/lib/ramaze/inform/informer.rb +2 -1
- data/lib/ramaze/inform/informing.rb +6 -0
- data/lib/ramaze/inform/syslog.rb +1 -0
- data/lib/ramaze/snippets/array/put_within.rb +24 -0
- data/lib/ramaze/snippets/dictionary.rb +499 -0
- data/lib/ramaze/snippets/numeric/filesize_format.rb +19 -0
- data/lib/ramaze/snippets/ordered_set.rb +31 -0
- data/lib/ramaze/snippets/string/DIVIDE.rb +1 -1
- data/lib/ramaze/snippets/string/snake_case.rb +1 -1
- data/lib/ramaze/snippets/struct/values_at.rb +5 -1
- data/lib/ramaze/snippets/thread/into.rb +25 -0
- data/lib/ramaze/sourcereload.rb +39 -19
- data/lib/ramaze/spec/helper.rb +4 -1
- data/lib/ramaze/spec/helper/{context.rb → browser.rb} +3 -0
- data/lib/ramaze/spec/helper/layout.rb +3 -0
- data/lib/ramaze/spec/helper/minimal.rb +3 -0
- data/lib/ramaze/spec/helper/mock_http.rb +8 -5
- data/lib/ramaze/spec/helper/requester.rb +4 -1
- data/lib/ramaze/spec/helper/wrap.rb +15 -7
- data/lib/ramaze/template.rb +5 -1
- data/lib/ramaze/template/ezamar/engine.rb +2 -3
- data/lib/ramaze/template/ezamar/morpher.rb +26 -45
- data/lib/ramaze/template/nagoro.rb +53 -0
- data/lib/ramaze/template/none.rb +14 -0
- data/lib/ramaze/template/xslt.rb +96 -0
- data/lib/ramaze/tool.rb +0 -1
- data/lib/ramaze/tool/localize.rb +7 -2
- data/lib/ramaze/trinity/request.rb +1 -0
- data/lib/ramaze/trinity/session.rb +3 -3
- data/lib/ramaze/version.rb +2 -2
- data/rake_tasks/conf.rake +1 -2
- data/rake_tasks/{maintaince.rake → maintenance.rake} +25 -17
- data/spec/contrib/auto_params.rb +97 -0
- data/spec/contrib/route.rb +60 -0
- data/spec/contrib/sequel/fill.rb +46 -0
- data/spec/examples/caching.rb +1 -2
- data/spec/examples/css.rb +12 -0
- data/spec/examples/element.rb +0 -1
- data/spec/examples/hello.rb +0 -1
- data/spec/examples/simple.rb +0 -1
- data/spec/helper.rb +3 -2
- data/spec/ramaze/action/cache.rb +24 -7
- data/spec/ramaze/action/layout.rb +19 -11
- data/spec/ramaze/action/template/sub/sub_wrapper.xhtml +1 -0
- data/spec/ramaze/controller.rb +11 -0
- data/spec/ramaze/controller/template_resolving.rb +28 -27
- data/spec/ramaze/dispatcher.rb +32 -0
- data/spec/ramaze/dispatcher/directory.rb +2 -1
- data/spec/ramaze/element.rb +1 -1
- data/spec/ramaze/gestalt.rb +28 -0
- data/spec/ramaze/helper/aspect.rb +14 -3
- data/spec/ramaze/helper/cache.rb +78 -13
- data/spec/ramaze/helper/formatting.rb +20 -0
- data/spec/ramaze/helper/link.rb +2 -0
- data/spec/ramaze/helper/partial.rb +12 -1
- data/spec/ramaze/helper/redirect.rb +44 -8
- data/spec/ramaze/helper/stack.rb +3 -3
- data/spec/ramaze/helper/template/loop.xhtml +3 -0
- data/spec/ramaze/helper/template/num.xhtml +1 -0
- data/spec/ramaze/helper/template/recursive.xhtml +8 -0
- data/spec/ramaze/morpher.rb +25 -6
- data/spec/ramaze/params.rb +6 -2
- data/spec/ramaze/request.rb +5 -2
- data/spec/ramaze/session.rb +19 -0
- data/spec/ramaze/template.rb +2 -2
- data/spec/ramaze/template/amrita2.rb +2 -2
- data/spec/ramaze/template/erubis.rb +2 -2
- data/spec/ramaze/template/ezamar.rb +6 -3
- data/spec/ramaze/template/haml.rb +3 -3
- data/spec/ramaze/template/liquid.rb +1 -1
- data/spec/ramaze/template/markaby.rb +1 -1
- data/spec/ramaze/template/nagoro.rb +65 -0
- data/spec/ramaze/template/nagoro/another/long/action.nag +1 -0
- data/spec/ramaze/template/nagoro/combined.nag +1 -0
- data/spec/ramaze/template/nagoro/file_only.nag +1 -0
- data/spec/ramaze/template/nagoro/index.nag +1 -0
- data/spec/ramaze/template/nagoro/nested.nag +1 -0
- data/spec/ramaze/template/nagoro/some__long__action.nag +1 -0
- data/spec/ramaze/template/nagoro/sum.nag +1 -0
- data/spec/ramaze/template/remarkably.rb +1 -1
- data/spec/ramaze/template/sass.rb +1 -1
- data/spec/ramaze/template/xslt.rb +93 -0
- data/spec/ramaze/template/xslt/concat_words.xsl +16 -0
- data/spec/ramaze/template/xslt/index.xsl +14 -0
- data/spec/ramaze/template/xslt/products.xsl +32 -0
- data/spec/ramaze/template/xslt/ruby_version.xsl +14 -0
- data/spec/snippets/array/put_within.rb +32 -0
- data/spec/snippets/numeric/filesize_format.rb +12 -0
- data/spec/snippets/ordered_set.rb +56 -0
- data/spec/snippets/ramaze/caller_lines.rb +6 -3
- data/spec/snippets/string/snake_case.rb +3 -0
- metadata +118 -22
- data/doc/README.html +0 -737
- data/examples/fcgi.rb +0 -13
- data/lib/ramaze/snippets/numeric/human_readable_filesize_format.rb +0 -33
- data/lib/ramaze/tool/tidy.rb +0 -104
- data/spec/ramaze/controller/template/edit.xhtml +0 -1
- data/spec/ramaze/controller/template/edit/content.xhtml +0 -1
- data/spec/ramaze/tidy.rb +0 -12
- data/spec/snippets/numeric/human_readable_filesize_format.rb +0 -11
|
@@ -0,0 +1,53 @@
|
|
|
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 'nagoro'
|
|
5
|
+
|
|
6
|
+
module Ramaze
|
|
7
|
+
module Template
|
|
8
|
+
|
|
9
|
+
# Is responsible for compiling a template using the Nagoro templating engine.
|
|
10
|
+
|
|
11
|
+
class Nagoro < Template
|
|
12
|
+
|
|
13
|
+
ENGINES[self] = %w[ xhtml nag ]
|
|
14
|
+
|
|
15
|
+
LISTENERS = [ :Element, :Morpher, :Include, :Instruction ]
|
|
16
|
+
|
|
17
|
+
TEMPLATE = ::Nagoro::Template[LISTENERS]
|
|
18
|
+
|
|
19
|
+
class << self
|
|
20
|
+
|
|
21
|
+
# Transforms an action into the XHTML code for parsing and returns
|
|
22
|
+
# the result
|
|
23
|
+
def transform action
|
|
24
|
+
nagoro = wrap_compile(action)
|
|
25
|
+
file = action.template || action.method
|
|
26
|
+
nagoro.result(action.binding, file.to_s)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def wrap_compile(action, template = nil)
|
|
30
|
+
template ||= file_or_result(action)
|
|
31
|
+
caching_compile(action, template)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def file_or_result(action)
|
|
35
|
+
result = render_method(action).to_s
|
|
36
|
+
|
|
37
|
+
if file = action.template
|
|
38
|
+
return File.new(file)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
result
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Compile a template, applying all transformations from the pipeline
|
|
45
|
+
# and returning an instance of ::Nagoro::Template
|
|
46
|
+
|
|
47
|
+
def compile(action, template)
|
|
48
|
+
TEMPLATE.render(template)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
module Ramaze
|
|
5
|
+
module Template
|
|
6
|
+
|
|
7
|
+
class None < Template
|
|
8
|
+
def self.transform action
|
|
9
|
+
render_method(action)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Copyright (c) 2007 Stephan Maka stephan@spaceboyz.net
|
|
2
|
+
# All files in this distribution are subject to the terms of the Ruby license.
|
|
3
|
+
|
|
4
|
+
require 'xml/libxml'
|
|
5
|
+
require 'xml/xslt'
|
|
6
|
+
require 'thread'
|
|
7
|
+
|
|
8
|
+
module Ramaze
|
|
9
|
+
|
|
10
|
+
# Use the Gestalt helper to put your controller result
|
|
11
|
+
# into proper XML form
|
|
12
|
+
#
|
|
13
|
+
# TODO:
|
|
14
|
+
# * Error handling
|
|
15
|
+
# * Maybe prevent extFunction to be called by HTTP
|
|
16
|
+
module Template
|
|
17
|
+
class XSLT < Template
|
|
18
|
+
ENGINES[self] = %w[ xsl ]
|
|
19
|
+
|
|
20
|
+
XSLT_EXT_FUNCTIONS_LOCK = Mutex.new
|
|
21
|
+
|
|
22
|
+
class << self
|
|
23
|
+
|
|
24
|
+
# Entry point for Action#render
|
|
25
|
+
|
|
26
|
+
def transform action
|
|
27
|
+
|
|
28
|
+
if options = action.instance.ancestral_trait[:xslt_options] and
|
|
29
|
+
fun_xmlns = options[:fun_xmlns]
|
|
30
|
+
# If a controller uses extFunctions, lock the whole
|
|
31
|
+
# transform action with a Mutex to prevent mixing
|
|
32
|
+
# extFunction binding and callback of two controller
|
|
33
|
+
# instances with one fun_xmlns.
|
|
34
|
+
ext_functions_synchronize do
|
|
35
|
+
register_ext_functions action.instance, fun_xmlns
|
|
36
|
+
do_transform action
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
else
|
|
40
|
+
do_transform action
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
def do_transform(action)
|
|
48
|
+
result, file = result_and_file(action)
|
|
49
|
+
|
|
50
|
+
xslt = XML::XSLT.new
|
|
51
|
+
xslt.xsl = action.template
|
|
52
|
+
xslt.xml = result
|
|
53
|
+
xslt.serve
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def ext_functions_synchronize &block
|
|
57
|
+
XSLT_EXT_FUNCTIONS_LOCK.synchronize &block
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def register_ext_functions instance, fun_xmlns
|
|
61
|
+
|
|
62
|
+
instance.methods.each do |method|
|
|
63
|
+
if method =~ /^xslt_.+/
|
|
64
|
+
method_name = method[5..-1]
|
|
65
|
+
|
|
66
|
+
proxy_instance = make_functor(method_name.intern) { |*a|
|
|
67
|
+
instance.send method.intern, *a
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
XML::XSLT.extFunction method_name.gsub('_', '-'), fun_xmlns, proxy_instance
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Can be replaced by Ruby Facets' Functor pattern
|
|
77
|
+
def make_functor(m, &block)
|
|
78
|
+
# Create anonymous class and instantiate;
|
|
79
|
+
# anonymous because only this one object with this
|
|
80
|
+
# particular custom method should call &block
|
|
81
|
+
o = Class.new.new
|
|
82
|
+
|
|
83
|
+
class << o
|
|
84
|
+
def create_method(name, &block)
|
|
85
|
+
self.class.send(:define_method, name, &block)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
o.create_method(m, &block)
|
|
90
|
+
o
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
data/lib/ramaze/tool.rb
CHANGED
data/lib/ramaze/tool/localize.rb
CHANGED
|
@@ -7,6 +7,10 @@ require 'ya2yaml'
|
|
|
7
7
|
# Localize helps transforming arbitrary text into localized forms using
|
|
8
8
|
# a simple regular expression and substituting occurences with predefined
|
|
9
9
|
# snippets stored in YAML files.
|
|
10
|
+
#
|
|
11
|
+
# == Usage:
|
|
12
|
+
#
|
|
13
|
+
# Ramaze::Dispatcher::Action::FILTER << Ramaze::Tool::Localize
|
|
10
14
|
|
|
11
15
|
class Ramaze::Tool::Localize
|
|
12
16
|
|
|
@@ -55,7 +59,7 @@ class Ramaze::Tool::Localize
|
|
|
55
59
|
# `localize` for more information.
|
|
56
60
|
|
|
57
61
|
def localize_body(body, options)
|
|
58
|
-
locale = session[:LOCALE] || set_session_locale
|
|
62
|
+
locale = (session[:LOCALE] || set_session_locale).to_s
|
|
59
63
|
|
|
60
64
|
body.gsub!(trait[:regex]) do
|
|
61
65
|
localize($1, locale) unless $1.to_s.empty?
|
|
@@ -118,6 +122,7 @@ class Ramaze::Tool::Localize
|
|
|
118
122
|
# Returns the dictionary used for translation.
|
|
119
123
|
|
|
120
124
|
def dictionary
|
|
125
|
+
trait[:languages].map! {|x| x.to_s }.uniq!
|
|
121
126
|
trait[:dictionary] || load(*trait[:languages])
|
|
122
127
|
end
|
|
123
128
|
|
|
@@ -143,7 +148,7 @@ class Ramaze::Tool::Localize
|
|
|
143
148
|
|
|
144
149
|
def store(*locales)
|
|
145
150
|
locales.uniq.compact.each do |locale|
|
|
146
|
-
Ramaze::Inform.
|
|
151
|
+
Ramaze::Inform.dev "saving localized to: #{trait[:file] % locale}"
|
|
147
152
|
data = dictionary[locale].ya2yaml
|
|
148
153
|
file = trait[:file] % locale
|
|
149
154
|
File.open(file, File::CREAT|File::TRUNC|File::WRONLY) do |fd|
|
|
@@ -60,15 +60,15 @@ module Ramaze
|
|
|
60
60
|
|
|
61
61
|
# the key used for the cookie
|
|
62
62
|
|
|
63
|
-
SESSION_KEY = '_ramaze_session_id'
|
|
63
|
+
SESSION_KEY = '_ramaze_session_id' unless defined?(SESSION_KEY)
|
|
64
64
|
|
|
65
65
|
# Holds counter for IPs
|
|
66
66
|
|
|
67
|
-
IP_COUNT = Hash.new{|h,k| h[k] =
|
|
67
|
+
IP_COUNT = Hash.new{|h,k| h[k] = OrderedSet.new} unless defined?(IP_COUNT)
|
|
68
68
|
|
|
69
69
|
# Limit the number of sessions one IP is allowed to hold.
|
|
70
70
|
|
|
71
|
-
IP_COUNT_LIMIT = 1000
|
|
71
|
+
IP_COUNT_LIMIT = 1000 unless defined?(IP_COUNT_LIMIT)
|
|
72
72
|
|
|
73
73
|
class << self
|
|
74
74
|
|
data/lib/ramaze/version.rb
CHANGED
data/rake_tasks/conf.rake
CHANGED
|
@@ -7,8 +7,7 @@ BIN_FILES = %w( ramaze )
|
|
|
7
7
|
BASEDIR = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
|
8
8
|
|
|
9
9
|
NAME = "ramaze"
|
|
10
|
-
|
|
11
|
-
VERS = ENV['VERSION'] || (Ramaze::VERSION + (REV ? ".#{REV}" : ""))
|
|
10
|
+
VERS = Ramaze::VERSION
|
|
12
11
|
COPYRIGHT = [
|
|
13
12
|
"# Copyright (c) 2006 Michael Fellinger m.fellinger@gmail.com",
|
|
14
13
|
"# All files in this distribution are subject to the terms of the Ruby license."
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
desc "add copyright to all .rb files in the distribution"
|
|
2
2
|
task 'add-copyright' do
|
|
3
|
+
ignore = File.readlines('doc/LEGAL').
|
|
4
|
+
select{|line| line.strip!; File.exist?(line)}.
|
|
5
|
+
map{|file| File.expand_path(file)}
|
|
6
|
+
|
|
3
7
|
puts "adding copyright to files that don't have it currently"
|
|
4
8
|
puts COPYRIGHT
|
|
5
9
|
puts
|
|
10
|
+
|
|
6
11
|
Dir['{lib,test}/**/*{.rb}'].each do |file|
|
|
7
|
-
|
|
12
|
+
file = File.expand_path(file)
|
|
13
|
+
next if file =~ /_darcs/ or ignore.include? file
|
|
8
14
|
lines = File.readlines(file).map{|l| l.chomp}
|
|
9
15
|
unless lines.first(COPYRIGHT.size) == COPYRIGHT
|
|
10
16
|
puts "#{file} seems to need attention, first 4 lines:"
|
|
@@ -197,11 +203,7 @@ task 'tutorial' => ['tutorial2html'] do
|
|
|
197
203
|
end
|
|
198
204
|
end
|
|
199
205
|
|
|
200
|
-
|
|
201
|
-
task 'authors' do
|
|
202
|
-
changes = `darcs changes`
|
|
203
|
-
authors = []
|
|
204
|
-
mapping = {}
|
|
206
|
+
def authors
|
|
205
207
|
author_map = {
|
|
206
208
|
'm.fellinger@gmail.com' => 'Michael Fellinger',
|
|
207
209
|
'manveru@weez-int.com' => 'Michael Fellinger',
|
|
@@ -210,26 +212,32 @@ task 'authors' do
|
|
|
210
212
|
'rff.rff@gmail.com' => 'Gabriele Renzi',
|
|
211
213
|
'comp.lang.zenix+ramaze@gmail.com' => 'zenix',
|
|
212
214
|
'jesuswasramazing.10.pistos@geoshell.com' => 'Pistos',
|
|
215
|
+
'stephan@spaceboyz.net' => 'Stephan Maka',
|
|
213
216
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
email.gsub
|
|
217
|
+
|
|
218
|
+
mapping = {}
|
|
219
|
+
`darcs changes`.split("\n").grep(/^\w/).each do |line|
|
|
220
|
+
author = line.split[6..-1]
|
|
221
|
+
email = author.pop.gsub(/<(.*?)>/, '\1')
|
|
219
222
|
name = author.join(' ')
|
|
220
223
|
name = author_map[email] if name.empty?
|
|
221
|
-
mapping[name]
|
|
224
|
+
mapping[name] ||= { :email => email, :patches => 0 }
|
|
225
|
+
mapping[name][:patches] += 1
|
|
222
226
|
end
|
|
223
|
-
pp mapping
|
|
224
227
|
|
|
225
|
-
max = mapping.map{|k,v| k.
|
|
228
|
+
max = mapping.map{|k,v| k.length}.max
|
|
229
|
+
mapping.inject({}) {|h,(k,v)| h[k.ljust(max)] = v; h}
|
|
230
|
+
end
|
|
226
231
|
|
|
232
|
+
desc "Update /doc/AUTHORS"
|
|
233
|
+
task 'authors' do
|
|
227
234
|
File.open('doc/AUTHORS', 'w+') do |fp|
|
|
228
|
-
fp.puts
|
|
235
|
+
fp.puts "Following persons (in alphabetical order) have contributed to Ramaze:"
|
|
229
236
|
fp.puts
|
|
230
|
-
|
|
231
|
-
fp.puts
|
|
237
|
+
authors.sort_by{|k,v| k}.each do |name, author|
|
|
238
|
+
fp.puts " #{name} - #{author[:email]}"
|
|
232
239
|
end
|
|
240
|
+
fp.puts
|
|
233
241
|
end
|
|
234
242
|
end
|
|
235
243
|
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require 'spec/helper'
|
|
2
|
+
testcase_requires 'ruby2ruby'
|
|
3
|
+
|
|
4
|
+
require 'ramaze/contrib'
|
|
5
|
+
Ramaze.contrib :auto_params
|
|
6
|
+
|
|
7
|
+
module AnotherController
|
|
8
|
+
def another_page
|
|
9
|
+
'another page'
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class MainController < Ramaze::Controller
|
|
14
|
+
include AnotherController
|
|
15
|
+
engine :None
|
|
16
|
+
|
|
17
|
+
def search query
|
|
18
|
+
query.inspect
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def create name, age = '?', occupation = nil
|
|
22
|
+
[name, age, occupation].compact.join(', ')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def show *args
|
|
26
|
+
args.join(', ')
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def add item, price = 1.0, *args
|
|
30
|
+
[item, price, *args].join(', ')
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def find width, height, depth
|
|
34
|
+
[width, height, depth].join(', ')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
define_method('page') do
|
|
38
|
+
'page'
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe 'Parameterized actions' do
|
|
43
|
+
before(:all) { ramaze }
|
|
44
|
+
|
|
45
|
+
it 'should pass in values from request.params' do
|
|
46
|
+
get('/create/Aman/20').body.should == 'Aman, 20'
|
|
47
|
+
get('/create', :name => 'Aman', :age => 20).body.should == 'Aman, 20'
|
|
48
|
+
|
|
49
|
+
get('/create/Aman/20/Unemployed').body.should == 'Aman, 20, Unemployed'
|
|
50
|
+
get('/create', :name => 'Aman', :age => 20, :occupation => 'Unemployed').body.should == 'Aman, 20, Unemployed'
|
|
51
|
+
|
|
52
|
+
get('/create/Aman').body.should == 'Aman, ?'
|
|
53
|
+
get('/create', :name => 'Aman').body.should == 'Aman, ?'
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'should insert nil for arguments not found' do
|
|
57
|
+
get('/find', :width => 10, :depth => 20).body.should == '10, , 20'
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'should work with variable arguments' do
|
|
61
|
+
get('/show/1/2/3').body.should == '1, 2, 3'
|
|
62
|
+
|
|
63
|
+
get('/add/Shoe').body.should == 'Shoe, 1.0'
|
|
64
|
+
get('/add', :item => 'Shoe').body.should == 'Shoe, 1.0'
|
|
65
|
+
|
|
66
|
+
get('/add/Shoe/10.50/1/2/3').body.should == 'Shoe, 10.50, 1, 2, 3'
|
|
67
|
+
get('/add/Shoe/11.00').body.should == 'Shoe, 11.00'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'should not break existing methods' do
|
|
71
|
+
get('/search/Aman').body.should == '"Aman"'
|
|
72
|
+
get('/search', 'query=Aman').body.should == '"Aman"'
|
|
73
|
+
get('/search/tmm1', 'query=Aman').body.should == ['tmm1','Aman'].inspect
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it 'should consolidate all values for the same key into an array' do
|
|
77
|
+
get('/add', 'item=Shoe&item=Shirt').body.should == 'Shoe, Shirt, 1.0'
|
|
78
|
+
get('/add/Pants', 'item=Shoe&item=Shirt').body.should == 'Pants, Shoe, Shirt, 1.0'
|
|
79
|
+
get('/add/Shoe', :item => 'Shirt').body.should == 'Shoe, Shirt, 1.0'
|
|
80
|
+
end
|
|
81
|
+
end if method(:puts).respond_to? :get_args
|
|
82
|
+
|
|
83
|
+
describe 'Normal behavior' do
|
|
84
|
+
before(:all) { ramaze }
|
|
85
|
+
|
|
86
|
+
it 'should work with no arguments' do
|
|
87
|
+
get('/page').body.should == 'page'
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'should raise no action' do
|
|
91
|
+
get('/none').body.should =~ /^No Action found/
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it 'should work with included actions' do
|
|
95
|
+
get('/another_page').body.should == 'another page'
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'spec/helper'
|
|
2
|
+
|
|
3
|
+
require 'ramaze/contrib'
|
|
4
|
+
|
|
5
|
+
class MainController < Ramaze::Controller
|
|
6
|
+
def float(flt)
|
|
7
|
+
"Float: #{flt}"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def string(str)
|
|
11
|
+
"String: #{str}"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def price(p)
|
|
15
|
+
"Price: \$#{p}"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe 'Route' do
|
|
20
|
+
before :all do
|
|
21
|
+
Ramaze.contrib :route
|
|
22
|
+
ramaze
|
|
23
|
+
@route = Ramaze::Contrib::Route
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'should be possible to define routes' do
|
|
27
|
+
@route[%r!^/(\d+\.\d{2})$!] = "/price/%.2f"
|
|
28
|
+
@route[%r!^/(\d+\.\d{2})$!].should == "/price/%.2f"
|
|
29
|
+
|
|
30
|
+
@route[%r!^/(\d+\.\d+)!] = "/float/%.3f"
|
|
31
|
+
@route[%r!^/(\d+\.\d+)!].should == "/float/%.3f"
|
|
32
|
+
|
|
33
|
+
@route[%r!^/(\w+)!] = "/string/%s"
|
|
34
|
+
@route[%r!^/(\w+)!].should == "/string/%s"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'should be used - /float' do
|
|
38
|
+
r = get('/123.123')
|
|
39
|
+
r.status.should == 200
|
|
40
|
+
r.body.should == 'Float: 123.123'
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'should be used - /string' do
|
|
44
|
+
r = get('/foo')
|
|
45
|
+
r.status.should == 200
|
|
46
|
+
r.body.should == 'String: foo'
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'should use %.3f' do
|
|
50
|
+
r = get('/123.123456')
|
|
51
|
+
r.status.should == 200
|
|
52
|
+
r.body.should == 'Float: 123.123'
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'should resolve in the order added' do
|
|
56
|
+
r = get('/12.84')
|
|
57
|
+
r.status.should == 200
|
|
58
|
+
r.body.should == 'Price: $12.84'
|
|
59
|
+
end
|
|
60
|
+
end
|