ramaze 0.0.8 → 0.0.9
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 +42 -0
- data/doc/allison/LICENSE +184 -0
- data/doc/allison/README +37 -0
- data/doc/allison/allison.css +300 -0
- data/doc/allison/allison.gif +0 -0
- data/doc/allison/allison.js +307 -0
- data/doc/allison/allison.rb +287 -0
- data/doc/allison/cache/BODY +588 -0
- data/doc/allison/cache/CLASS_INDEX +4 -0
- data/doc/allison/cache/CLASS_PAGE +1 -0
- data/doc/allison/cache/FILE_INDEX +4 -0
- data/doc/allison/cache/FILE_PAGE +1 -0
- data/doc/allison/cache/FONTS +1 -0
- data/doc/allison/cache/FR_INDEX_BODY +1 -0
- data/doc/allison/cache/IMGPATH +1 -0
- data/doc/allison/cache/INDEX +1 -0
- data/doc/allison/cache/JAVASCRIPT +307 -0
- data/doc/allison/cache/METHOD_INDEX +4 -0
- data/doc/allison/cache/METHOD_LIST +1 -0
- data/doc/allison/cache/SRC_PAGE +1 -0
- data/doc/allison/cache/STYLE +322 -0
- data/doc/allison/cache/URL +1 -0
- data/doc/readme_chunks/principles.txt +33 -18
- data/doc/tutorial/todolist.html +599 -0
- data/doc/tutorial/todolist.txt +230 -230
- data/examples/identity.rb +21 -0
- data/examples/nitro_form.rb +22 -0
- data/lib/ramaze/controller.rb +1 -1
- data/lib/ramaze/dispatcher.rb +10 -4
- data/lib/ramaze/helper/{openid.rb → identity.rb} +15 -6
- data/lib/ramaze/helper/nitroform.rb +10 -0
- data/lib/ramaze/helper/stack.rb +1 -1
- data/lib/ramaze/inform.rb +18 -8
- data/lib/ramaze/snippets/kernel/aquire.rb +3 -3
- data/lib/ramaze/snippets/object/traits.rb +1 -1
- data/lib/ramaze/snippets/ramaze/caller_info.rb +17 -1
- data/lib/ramaze/snippets/ramaze/caller_lines.rb +1 -1
- data/lib/ramaze/store/yaml.rb +10 -1
- data/lib/ramaze/template/ezamar.rb +10 -5
- data/lib/ramaze/trinity/request.rb +12 -2
- data/lib/ramaze/version.rb +1 -1
- data/lib/ramaze.rb +5 -3
- data/spec/public/error404.xhtml +1 -0
- data/spec/spec_all.rb +21 -19
- data/spec/spec_helper.rb +1 -1
- data/spec/tc_error.rb +18 -4
- data/spec/tc_helper_cache.rb +1 -1
- data/spec/tc_helper_flash.rb +1 -2
- metadata +32 -4
@@ -0,0 +1,21 @@
|
|
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'
|
5
|
+
|
6
|
+
class MainController < Ramaze::Controller
|
7
|
+
helper :identity
|
8
|
+
|
9
|
+
def index
|
10
|
+
if session[:openid_identity]
|
11
|
+
%{
|
12
|
+
<h1>#{flash[:success]}</h1>
|
13
|
+
<p>You are logged in as #{session[:openid_identity]}</p>
|
14
|
+
}
|
15
|
+
else
|
16
|
+
openid_login_form
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Ramaze.start
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'ramaze'
|
2
|
+
|
3
|
+
gem 'facets', '=1.4.5'
|
4
|
+
require '/home/manveru/prog/projects/nitroproject/glycerin'
|
5
|
+
require 'nitro'
|
6
|
+
require 'og'
|
7
|
+
|
8
|
+
class Article
|
9
|
+
attr_accessor :title, String
|
10
|
+
end
|
11
|
+
|
12
|
+
Og.setup :store => :sqlite, :destroy => true
|
13
|
+
|
14
|
+
class MainController < Ramaze::Controller
|
15
|
+
helper :nitroform
|
16
|
+
|
17
|
+
def index
|
18
|
+
form(Article.new).to_s
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Ramaze.start
|
data/lib/ramaze/controller.rb
CHANGED
@@ -273,7 +273,7 @@ module Ramaze
|
|
273
273
|
end
|
274
274
|
|
275
275
|
backtrace.map! do |line|
|
276
|
-
file, lineno, meth = *Ramaze.
|
276
|
+
file, lineno, meth = *Ramaze.parse_backtrace(line)
|
277
277
|
backtrace_size = Ramaze::Global.inform_backtrace_size
|
278
278
|
lines = Ramaze.caller_lines(file, lineno, backtrace_size)
|
279
279
|
|
data/lib/ramaze/dispatcher.rb
CHANGED
@@ -57,6 +57,8 @@ module Ramaze
|
|
57
57
|
# This feature is only available if your Global.error is true, which is
|
58
58
|
# the default.
|
59
59
|
#
|
60
|
+
#--
|
61
|
+
#
|
60
62
|
# Yes, again, webrick _has_ to be really obscure, I searched for half an hour
|
61
63
|
# and still have not the faintest idea how request_path is related to
|
62
64
|
# request_uri...
|
@@ -74,8 +76,12 @@ module Ramaze
|
|
74
76
|
error_path = handle_error[exception.class]
|
75
77
|
error_path ||= handle_error.find{|k,v| k === exception}.last
|
76
78
|
|
77
|
-
|
78
|
-
|
79
|
+
if exception.message =~ /`#{error_path.split('/').last}'/
|
80
|
+
build_response(exception.message, STATUS_CODE[:internal_server_error])
|
81
|
+
else
|
82
|
+
request.path_info = error_path
|
83
|
+
respond
|
84
|
+
end
|
79
85
|
else
|
80
86
|
if Global.error_page
|
81
87
|
request.path_info = '/error'
|
@@ -85,7 +91,7 @@ module Ramaze
|
|
85
91
|
end
|
86
92
|
end
|
87
93
|
|
88
|
-
|
94
|
+
response
|
89
95
|
rescue Object => ex
|
90
96
|
Informer.error ex
|
91
97
|
build_response(ex.message, STATUS_CODE[:internal_server_error])
|
@@ -145,7 +151,7 @@ module Ramaze
|
|
145
151
|
if file
|
146
152
|
response['Content-Type'] = Tool::MIME.type_for(file)
|
147
153
|
Informer.debug("Serving static: #{file}")
|
148
|
-
File.open(file)
|
154
|
+
File.open(file, 'rb')
|
149
155
|
end
|
150
156
|
end
|
151
157
|
|
@@ -2,11 +2,17 @@
|
|
2
2
|
# All files in this distribution are subject to the terms of the Ruby license.
|
3
3
|
|
4
4
|
require 'tmpdir'
|
5
|
-
|
6
5
|
require 'openid'
|
7
6
|
|
8
7
|
module Ramaze
|
9
|
-
|
8
|
+
|
9
|
+
# This is called Identity to avoid collisions with the original openid.rb
|
10
|
+
|
11
|
+
module IdentityHelper
|
12
|
+
def self.included(klass)
|
13
|
+
klass.send(:helper, :flash)
|
14
|
+
end
|
15
|
+
|
10
16
|
def openid_login_form
|
11
17
|
%{
|
12
18
|
<form method="GET" action="#{R(self, :openid_begin)}">
|
@@ -19,7 +25,7 @@ module Ramaze
|
|
19
25
|
def openid_begin
|
20
26
|
url = request['url']
|
21
27
|
redirect_referrer if url.nil? or url.empty?
|
22
|
-
session[:openid_entry] = referrer
|
28
|
+
session[:openid_entry] = request.referrer
|
23
29
|
|
24
30
|
openid_request = openid_consumer.begin(url)
|
25
31
|
case openid_request.status
|
@@ -28,8 +34,7 @@ module Ramaze
|
|
28
34
|
|
29
35
|
redirect_referrer
|
30
36
|
when OpenID::SUCCESS
|
31
|
-
|
32
|
-
root = "http://#{host}:#{port}/"
|
37
|
+
root = "http://#{request.http_host}/"
|
33
38
|
return_to = root[0..-2] + R(self, :openid_complete)
|
34
39
|
redirect_url = openid_request.redirect_url(root, return_to)
|
35
40
|
|
@@ -44,9 +49,12 @@ module Ramaze
|
|
44
49
|
when OpenID::FAILURE
|
45
50
|
flash[:error] = 'OpenID - Verification failed.'
|
46
51
|
when OpenID::SUCCESS
|
52
|
+
session[:openid_identity] = openid_response.identity_url
|
47
53
|
flash[:success] = 'OpenID - Verification done.'
|
48
54
|
end
|
49
55
|
|
56
|
+
session.delete(:_openid_consumer_service)
|
57
|
+
|
50
58
|
redirect session[:openid_entry]
|
51
59
|
end
|
52
60
|
|
@@ -58,6 +66,7 @@ module Ramaze
|
|
58
66
|
end
|
59
67
|
end
|
60
68
|
|
69
|
+
|
61
70
|
openid_store_file = File.join(Dir.tmpdir, 'openid-store')
|
62
71
|
|
63
|
-
Global.openid_store ||= OpenID::FilesystemStore.new(openid_store_file)
|
72
|
+
Ramaze::Global.openid_store ||= OpenID::FilesystemStore.new(openid_store_file)
|
data/lib/ramaze/helper/stack.rb
CHANGED
data/lib/ramaze/inform.rb
CHANGED
@@ -140,14 +140,24 @@ module Ramaze
|
|
140
140
|
def log prefix, *messages
|
141
141
|
[messages].flatten.each do |message|
|
142
142
|
compiled = %{[#{timestamp}] #{prefix} #{message}}
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
143
|
+
|
144
|
+
pipes = Global.inform_pipes = pipify(Global.inform_to)
|
145
|
+
|
146
|
+
pipes.each do |pipe|
|
147
|
+
pipe.puts(*compiled) unless (pipe.respond_to?(:closed?) and pipe.closed?)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def pipify *ios
|
153
|
+
ios.flatten.map do |io|
|
154
|
+
case io
|
155
|
+
when :stdout, 'stdout' : $stdout
|
156
|
+
when :stderr, 'stderr' : $stderr
|
157
|
+
when IO : io
|
158
|
+
else
|
159
|
+
File.open(io.to_s, 'ab+')
|
160
|
+
end
|
151
161
|
end
|
152
162
|
end
|
153
163
|
|
@@ -12,9 +12,9 @@ module Kernel
|
|
12
12
|
def aquire *files
|
13
13
|
files.each do |file|
|
14
14
|
require file if %w(rb so).any?{|f| File.file?("#{file}.#{f}")}
|
15
|
-
$:.each do |
|
16
|
-
Dir[File.join(
|
17
|
-
require
|
15
|
+
$:.each do |dir|
|
16
|
+
Dir[File.join(dir, file, '*.rb')].each do |path|
|
17
|
+
require path unless path == File.expand_path(__FILE__)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -9,6 +9,22 @@ module Ramaze
|
|
9
9
|
# # => ['/usr/lib/ruby/1.8/irb/workspace.rb', '52', 'irb_binding']
|
10
10
|
|
11
11
|
def self.caller_info(i = 1)
|
12
|
-
file, line, meth = caller[i]
|
12
|
+
file, line, meth = *parse_backtrace(caller[i])
|
13
|
+
end
|
14
|
+
|
15
|
+
# Parses one line of backtrace and tries to extract as much information
|
16
|
+
# as possible.
|
17
|
+
#
|
18
|
+
# Example:
|
19
|
+
# line = "/web/repo/ramaze/lib/ramaze/dispatcher.rb:105:in `respond'"
|
20
|
+
# Ramaze.parse_backtrace(line)
|
21
|
+
# #=> ["/web/repo/ramaze/lib/ramaze/dispatcher.rb", "105", "respond"]
|
22
|
+
|
23
|
+
def self.parse_backtrace(line = '')
|
24
|
+
full = line.scan(/(.*?):(\d+):in `(.*?)'/).first
|
25
|
+
return full if full and full.all?
|
26
|
+
partial = line.scan(/(.*?):(\d+)/).first
|
27
|
+
return partial if partial and partial.all?
|
28
|
+
line
|
13
29
|
end
|
14
30
|
end
|
data/lib/ramaze/store/yaml.rb
CHANGED
@@ -119,7 +119,16 @@ module Ramaze::Store
|
|
119
119
|
|
120
120
|
def new
|
121
121
|
entity = Entity.new
|
122
|
-
entity.
|
122
|
+
entity.manager = self
|
123
|
+
entity
|
124
|
+
end
|
125
|
+
|
126
|
+
def create_with hash = {}
|
127
|
+
entity = new
|
128
|
+
hash.each do |key, value|
|
129
|
+
entity.send("#{key}=", value)
|
130
|
+
end
|
131
|
+
entity.save
|
123
132
|
entity
|
124
133
|
end
|
125
134
|
|
@@ -43,10 +43,10 @@ module Ramaze
|
|
43
43
|
file_template, path = file_template(file, controller)
|
44
44
|
ctrl_template = render_action(controller, action, *params)
|
45
45
|
|
46
|
-
if chosen =
|
46
|
+
if chosen = alternate || file_template || ctrl_template
|
47
47
|
pipeline(chosen, :binding => bound, :path => path)
|
48
48
|
else
|
49
|
-
|
49
|
+
raise_no_action(controller, action)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -70,12 +70,17 @@ module Ramaze
|
|
70
70
|
# Render an action, on a given controller with parameter
|
71
71
|
|
72
72
|
def render_action(controller, action, *params)
|
73
|
-
|
74
|
-
rescue => ex
|
75
|
-
|
73
|
+
return controller.send(action, *params).to_s
|
74
|
+
rescue NoMethodError => ex
|
75
|
+
ourself = /undefined method `#{action}' for #<TCErrorController:/
|
76
|
+
raise_no_action(controller, action) unless ex.message =~ ourself
|
76
77
|
nil
|
77
78
|
end
|
78
79
|
|
80
|
+
def raise_no_action(controller, action)
|
81
|
+
raise Ramaze::Error::NoAction, "No Action found for `#{action}' on #{controller.class}"
|
82
|
+
end
|
83
|
+
|
79
84
|
# go through the pipeline and call #transform on every object found there,
|
80
85
|
# passing the template at that point.
|
81
86
|
# the order and contents of the pipeline are determined by an array
|
@@ -50,11 +50,21 @@ module Ramaze
|
|
50
50
|
# the referer of the client or '/'
|
51
51
|
|
52
52
|
def referer
|
53
|
-
|
53
|
+
env['HTTP_REFERER'] || '/'
|
54
54
|
end
|
55
55
|
|
56
56
|
alias referrer referer
|
57
57
|
|
58
|
+
def fullpath
|
59
|
+
path = script_name + path_info
|
60
|
+
path << "?" << query_string unless query_string.empty?
|
61
|
+
path
|
62
|
+
end
|
63
|
+
|
64
|
+
def env
|
65
|
+
@request.env
|
66
|
+
end
|
67
|
+
|
58
68
|
# you can access the original @request via this method_missing,
|
59
69
|
# first it tries to match your method with any of the HTTP parameters
|
60
70
|
# then, in case that fails, it will relay to @request
|
@@ -62,7 +72,7 @@ module Ramaze
|
|
62
72
|
def method_missing meth, *args, &block
|
63
73
|
@request.send(meth, *args, &block)
|
64
74
|
rescue
|
65
|
-
|
75
|
+
env[meth.to_s.upcase]
|
66
76
|
end
|
67
77
|
end
|
68
78
|
end
|
data/lib/ramaze/version.rb
CHANGED
data/lib/ramaze.rb
CHANGED
@@ -138,9 +138,11 @@ module Ramaze
|
|
138
138
|
# closes the IO that Global.inform_to points to.
|
139
139
|
|
140
140
|
def close_inform
|
141
|
-
|
142
|
-
|
143
|
-
|
141
|
+
[Global.inform_to].flatten.each do |io|
|
142
|
+
if io = Global.inform_to and io.respond_to?(:close)
|
143
|
+
debug "close #{io.inspect}"
|
144
|
+
io.close until io.closed?
|
145
|
+
end
|
144
146
|
end
|
145
147
|
end
|
146
148
|
|
@@ -0,0 +1 @@
|
|
1
|
+
404 - not found
|
data/spec/spec_all.rb
CHANGED
@@ -3,6 +3,11 @@
|
|
3
3
|
|
4
4
|
require 'pp'
|
5
5
|
|
6
|
+
begin
|
7
|
+
require 'rubygems'
|
8
|
+
rescue LoadError
|
9
|
+
end
|
10
|
+
|
6
11
|
begin
|
7
12
|
require 'systemu'
|
8
13
|
rescue LoadError
|
@@ -17,25 +22,16 @@ rescue LoadError
|
|
17
22
|
end
|
18
23
|
end
|
19
24
|
|
20
|
-
|
21
|
-
require 'term/ansicolor'
|
22
|
-
class String
|
23
|
-
include Term::ANSIColor
|
24
|
-
end
|
25
|
-
rescue LoadError
|
26
|
-
puts "Please install term-ansicolor for better-looking results"
|
27
|
-
|
28
|
-
class String
|
29
|
-
|
30
|
-
# this will be set in case term/ansicolor cannot be
|
31
|
-
# required, just makes colorless output
|
32
|
-
|
33
|
-
def red() self end
|
34
|
-
|
35
|
-
# this will be set in case term/ansicolor cannot be
|
36
|
-
# required, just makes colorless output
|
25
|
+
class String
|
37
26
|
|
38
|
-
|
27
|
+
{
|
28
|
+
:red => 31,
|
29
|
+
:green => 32,
|
30
|
+
:yellow => 33,
|
31
|
+
}.each do |key, value|
|
32
|
+
define_method key do
|
33
|
+
"\e[#{value}m" + self + "\e[0m"
|
34
|
+
end
|
39
35
|
end
|
40
36
|
end
|
41
37
|
|
@@ -68,8 +64,10 @@ specs.each do |spec|
|
|
68
64
|
print result_format['failed'].red
|
69
65
|
|
70
66
|
else
|
67
|
+
found = false
|
71
68
|
stdout.each do |line|
|
72
69
|
if line =~ /(\d+) specifications?, (\d+) failures?/
|
70
|
+
found = true
|
73
71
|
s, f = $1.to_i, $2.to_i
|
74
72
|
ss, sf = s.to_s.rjust(3), f.to_s.rjust(3)
|
75
73
|
|
@@ -80,12 +78,16 @@ specs.each do |spec|
|
|
80
78
|
|
81
79
|
if f.nonzero?
|
82
80
|
failed[spec] = hash
|
83
|
-
print((message << "#{
|
81
|
+
print((message << "#{sf} failed ]").red)
|
84
82
|
else
|
85
83
|
print((message << "all passed ]").green)
|
86
84
|
end
|
87
85
|
end
|
88
86
|
end
|
87
|
+
|
88
|
+
unless found
|
89
|
+
print("[ please test standalone ]".red)
|
90
|
+
end
|
89
91
|
end
|
90
92
|
puts
|
91
93
|
end
|