Pistos-ramaze 2008.09 → 2008.12

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.
Files changed (105) hide show
  1. data/benchmark/run.rb +1 -1
  2. data/examples/app/blog/spec/blog.rb +2 -2
  3. data/examples/app/rapaste/spec/rapaste.rb +1 -1
  4. data/examples/app/rapaste/start.rb +2 -2
  5. data/examples/app/rapaste/view/view.xhtml +3 -0
  6. data/examples/app/todolist/spec/todolist.rb +1 -1
  7. data/examples/app/whywiki/spec/whywiki.rb +1 -1
  8. data/examples/app/wikore/spec/wikore.rb +1 -1
  9. data/examples/app/wikore/src/model.rb +1 -1
  10. data/examples/app/wiktacular/spec/wiktacular.rb +1 -1
  11. data/examples/app/wiktacular/src/model.rb +1 -1
  12. data/examples/basic/partial.rb +28 -0
  13. data/examples/helpers/httpdigest.rb +68 -10
  14. data/examples/misc/ramaise.rb +2 -2
  15. data/examples/templates/template_amrita2.rb +1 -1
  16. data/examples/templates/template_erubis.rb +1 -1
  17. data/examples/templates/template_ezamar.rb +1 -1
  18. data/examples/templates/template_haml.rb +2 -2
  19. data/examples/templates/template_liquid.rb +1 -1
  20. data/examples/templates/template_markaby.rb +2 -2
  21. data/examples/templates/template_nagoro.rb +1 -1
  22. data/examples/templates/template_redcloth.rb +1 -1
  23. data/examples/templates/template_remarkably.rb +2 -2
  24. data/examples/templates/template_tenjin.rb +1 -1
  25. data/examples/templates/template_xslt.rb +1 -1
  26. data/lib/proto/controller/init.rb +2 -1
  27. data/lib/proto/model/init.rb +3 -3
  28. data/lib/proto/public/dispatch.fcgi +2 -2
  29. data/lib/proto/spec/main.rb +3 -3
  30. data/lib/proto/start.rb +4 -0
  31. data/lib/ramaze/action/render.rb +6 -5
  32. data/lib/ramaze/action.rb +7 -1
  33. data/lib/ramaze/cache/file.rb +71 -0
  34. data/lib/ramaze/cache.rb +1 -0
  35. data/lib/ramaze/contrib/email.rb +2 -0
  36. data/lib/ramaze/contrib/facebook.rb +2 -2
  37. data/lib/ramaze/contrib/file_cache.rb +2 -64
  38. data/lib/ramaze/contrib/sequel/image.rb +1 -1
  39. data/lib/ramaze/contrib.rb +1 -1
  40. data/lib/ramaze/controller/resolve.rb +8 -3
  41. data/lib/ramaze/controller.rb +9 -1
  42. data/lib/ramaze/current/request.rb +85 -68
  43. data/lib/ramaze/current/session/hash.rb +7 -11
  44. data/lib/ramaze/current/session.rb +3 -5
  45. data/lib/ramaze/dispatcher/action.rb +2 -0
  46. data/lib/ramaze/dispatcher/file.rb +6 -1
  47. data/lib/ramaze/helper/aspect.rb +2 -2
  48. data/lib/ramaze/helper/form.rb +5 -2
  49. data/lib/ramaze/helper/formatting.rb +4 -0
  50. data/lib/ramaze/helper/gravatar.rb +18 -1
  51. data/lib/ramaze/helper/httpdigest.rb +57 -28
  52. data/lib/ramaze/helper/maruku.rb +2 -0
  53. data/lib/ramaze/helper/paginate.rb +2 -3
  54. data/lib/ramaze/helper/partial.rb +1 -1
  55. data/lib/ramaze/helper/redirect.rb +22 -4
  56. data/lib/ramaze/helper/user.rb +4 -4
  57. data/lib/ramaze/helper.rb +12 -4
  58. data/lib/ramaze/log/rotatinginformer.rb +168 -0
  59. data/lib/ramaze/option/holder.rb +3 -3
  60. data/lib/ramaze/option.rb +1 -1
  61. data/lib/ramaze/reloader/watch_inotify.rb +85 -0
  62. data/lib/ramaze/reloader/watch_stat.rb +58 -0
  63. data/lib/ramaze/reloader.rb +25 -41
  64. data/lib/ramaze/snippets/divide.rb +2 -0
  65. data/lib/ramaze/snippets/numeric/time.rb +1 -1
  66. data/lib/ramaze/snippets/object/__dir__.rb +3 -3
  67. data/lib/ramaze/snippets/object/acquire.rb +3 -6
  68. data/lib/ramaze/snippets/ramaze/acquire.rb +31 -0
  69. data/lib/ramaze/snippets/ramaze/deprecated.rb +2 -1
  70. data/lib/ramaze/spec/helper/mock_http.rb +6 -5
  71. data/lib/ramaze/template/ezamar/render_partial.rb +8 -0
  72. data/lib/ramaze/tool/mime.rb +1 -1
  73. data/lib/ramaze/tool/project_creator.rb +2 -1
  74. data/lib/ramaze/version.rb +1 -1
  75. data/lib/ramaze.rb +6 -0
  76. data/rake_tasks/coverage.rake +4 -5
  77. data/rake_tasks/spec.rake +6 -6
  78. data/ramaze.gemspec +769 -756
  79. data/spec/contrib/profiling.rb +2 -2
  80. data/spec/ramaze/action/file_cache.rb +1 -1
  81. data/spec/ramaze/action/layout.rb +1 -1
  82. data/spec/ramaze/controller/actionless_templates.rb +1 -1
  83. data/spec/ramaze/controller/resolve.rb +1 -1
  84. data/spec/ramaze/controller/template_resolving.rb +1 -1
  85. data/spec/ramaze/dispatcher/directory.rb +3 -3
  86. data/spec/ramaze/helper/aspect.rb +1 -1
  87. data/spec/ramaze/helper/partial.rb +1 -1
  88. data/spec/ramaze/localize.rb +1 -1
  89. data/spec/ramaze/rewrite.rb +1 -1
  90. data/spec/ramaze/template/amrita2.rb +1 -1
  91. data/spec/ramaze/template/erubis.rb +1 -1
  92. data/spec/ramaze/template/ezamar.rb +1 -1
  93. data/spec/ramaze/template/haml.rb +2 -2
  94. data/spec/ramaze/template/nagoro.rb +1 -1
  95. data/spec/ramaze/template/redcloth.rb +1 -1
  96. data/spec/ramaze/template/sass.rb +1 -1
  97. data/spec/ramaze/template/tenjin.rb +1 -1
  98. data/spec/ramaze/template.rb +3 -3
  99. data/spec/snippets/object/__dir__.rb +6 -0
  100. data/spec/snippets/{object → ramaze}/acquire.rb +24 -18
  101. metadata +15 -12
  102. data/lib/ramaze/contrib/auto_params/get_args.rb +0 -58
  103. data/lib/ramaze/contrib/auto_params.rb +0 -135
  104. data/spec/contrib/auto_params.rb +0 -121
  105. data/spec/snippets/divide.rb +0 -19
data/benchmark/run.rb CHANGED
@@ -176,7 +176,7 @@ class RamazeBenchmark
176
176
 
177
177
  # benchmarks
178
178
  __DIR__ = File.expand_path(File.dirname(__FILE__))
179
- Dir[__DIR__/"suite"/"*.rb"].each do |filename|
179
+ Dir[__DIR__('suite/*.rb')].each do |filename|
180
180
  @adapters.each do |adapter|
181
181
  @paths.each do |path|
182
182
  benchmark(filename, adapter, path) if @target.match(filename)
@@ -3,7 +3,7 @@ require 'ramaze/spec/helper'
3
3
 
4
4
  spec_require 'hpricot', 'sequel'
5
5
 
6
- $LOAD_PATH.unshift base = __DIR__/'..'
6
+ $LOAD_PATH.unshift base = __DIR__('..')
7
7
  require 'start'
8
8
 
9
9
  describe 'Blog' do
@@ -83,5 +83,5 @@ describe 'Blog' do
83
83
  (check_page/'div.entry').size.should == 1
84
84
  end
85
85
 
86
- FileUtils.rm_f(__DIR__/'../blog.db')
86
+ FileUtils.rm_f(__DIR__('../blog.db'))
87
87
  end
@@ -3,7 +3,7 @@ require 'ramaze/spec/helper'
3
3
 
4
4
  spec_require 'hpricot', 'uv', 'sequel'
5
5
 
6
- $LOAD_PATH.unshift base = __DIR__/'..'
6
+ $LOAD_PATH.unshift base = __DIR__('..')
7
7
  require 'start'
8
8
 
9
9
  describe 'RaPaste' do
@@ -7,7 +7,7 @@ require 'uv'
7
7
 
8
8
  Ramaze::Log.debug "Initializing UltraViolet..."
9
9
 
10
- Uv.copy_files "xhtml", __DIR__/"public"
10
+ Uv.copy_files "xhtml", __DIR__("public")
11
11
  Uv.init_syntaxes
12
12
 
13
13
  UV_PRIORITY_NAMES = %w[ ruby plain_text html css javascript yaml diff ]
@@ -16,7 +16,7 @@ STYLE = 'iplastic'
16
16
 
17
17
  Ramaze::Log.debug "done."
18
18
 
19
- DB_FILE = "#{__DIR__}/rapaste.sqlite" # for specs
19
+ DB_FILE = __DIR__("rapaste.sqlite") # for specs
20
20
  DB = Sequel.connect("sqlite://#{DB_FILE}")
21
21
 
22
22
  require 'model/paste'
@@ -1,6 +1,9 @@
1
1
  #{@pager}
2
2
  <script type="text/javascript" src="/js/jquery.js"></script>
3
3
  <script type="text/javascript">
4
+ $(function() {
5
+ $('#paste_body').dblclick(function(){ $('.line-numbers').toggle() });
6
+ });
4
7
  function change_style(name){
5
8
  $('link')[1].href = '/css/' + name + '.css';
6
9
  $('pre')[0].className = name;
@@ -3,7 +3,7 @@ require 'ramaze/spec/helper'
3
3
 
4
4
  spec_require 'hpricot'
5
5
 
6
- $LOAD_PATH.unshift base = __DIR__/'..'
6
+ $LOAD_PATH.unshift base = __DIR__('..')
7
7
  require 'start'
8
8
 
9
9
  describe 'todolist' do
@@ -3,7 +3,7 @@ require 'ramaze/spec/helper'
3
3
 
4
4
  spec_require 'bluecloth', 'hpricot'
5
5
 
6
- $LOAD_PATH.unshift base = __DIR__/'..'
6
+ $LOAD_PATH.unshift base = __DIR__('..')
7
7
 
8
8
  Db = Ramaze::YAMLStoreCache.new("#{base}/testwiki.yaml")
9
9
  require 'start'
@@ -3,7 +3,7 @@ require 'ramaze/spec/helper'
3
3
 
4
4
  spec_require 'hpricot', 'sequel'
5
5
 
6
- $LOAD_PATH.unshift base = __DIR__/'..'
6
+ $LOAD_PATH.unshift base = __DIR__('..')
7
7
  require 'start'
8
8
 
9
9
  describe 'Wikore' do
@@ -5,7 +5,7 @@ begin
5
5
  when :memory
6
6
  DB = Sequel.sqlite
7
7
  else
8
- DB_FILE = __DIR__/'wikore.db'
8
+ DB_FILE = __DIR__('wikore.db')
9
9
  DB = Sequel.connect("sqlite://#{DB_FILE}")
10
10
  end
11
11
  rescue NoMethodError
@@ -3,7 +3,7 @@ require 'ramaze/spec/helper'
3
3
 
4
4
  spec_require 'hpricot', 'bluecloth'
5
5
 
6
- $LOAD_PATH.unshift base = __DIR__/'..'
6
+ $LOAD_PATH.unshift base = __DIR__('..')
7
7
  require 'start'
8
8
 
9
9
  describe 'wiktacular' do
@@ -2,7 +2,7 @@ require 'fileutils'
2
2
  require 'cgi'
3
3
 
4
4
  class WikiEntry
5
- ENTRIES_DIR = __DIR__/'../mkd'
5
+ ENTRIES_DIR = __DIR__('../mkd')
6
6
  class << self
7
7
  def [](name)
8
8
  if File.exist?(ENTRIES_DIR/File.basename(File.expand_path(name)))
@@ -0,0 +1,28 @@
1
+ require 'rubygems'
2
+ require 'ramaze'
3
+
4
+ # This is a small extension to the hello world example, showing how to use the
5
+ # <render> tag of Ezamar.
6
+ #
7
+ # Browse to /more and /even_more
8
+
9
+ pipeline = Ramaze::Template::Ezamar::TRANSFORM_PIPELINE
10
+ pipeline.put_after(::Ezamar::Element, ::Ezamar::RenderPartial)
11
+ pipeline.uniq!
12
+
13
+ class MainController < Ramaze::Controller
14
+ def index
15
+ "Hello, World!"
16
+ end
17
+
18
+ def more
19
+ @tail = request[:tail] || 'the standard'
20
+ 'More of <render src="/index" /> #@tail'
21
+ end
22
+
23
+ def even_more
24
+ '<render src="/more" tail="This is even more" />'
25
+ end
26
+ end
27
+
28
+ Ramaze.start
@@ -4,12 +4,61 @@ require 'ramaze'
4
4
  REALM = 'ramaze authentication required'
5
5
 
6
6
  class MainController < Ramaze::Controller
7
+
8
+ helper :httpdigest
9
+
7
10
  def index
8
11
  %|
12
+ <p><a href="#{Rs(:eyes_only)}">eyes only</a></p>
9
13
  <p><a href="#{R(SecretController,'/')}">secret area</a></p>
10
- <p><a href="#{R(GuestController,'/')}">guest area</a> password must be the same as username</p>
14
+ <p><a href="#{R(GuestController,'/')}">guest area</a> username is <em>guest</em> password is <em>access</em></p>
11
15
  |
12
16
  end
17
+
18
+ def eyes_only
19
+ httpdigest('eyes only',REALM) do |username|
20
+ password = username.reverse
21
+ MD5.hexdigest([username,REALM,password].join(':'))
22
+ end
23
+ "Shhhh don't tell anyone"
24
+ end
25
+
26
+ end
27
+
28
+ class LoginController < Ramaze::Controller
29
+ map '/login'
30
+
31
+ helper :httpdigest
32
+
33
+ def index
34
+ @username ||= session[:username]
35
+ @username ||= httpdigest('login area',REALM)
36
+ "Hi there #@username!"
37
+ end
38
+
39
+ def login
40
+ %|<form action="#{Rs(:post)}" method="post"><input type="text" name="username"/><input type="password" name="password"/><input type="submit"/></form>|
41
+ end
42
+
43
+ def post
44
+ username = request.params["username"]
45
+ password = request.params["password"]
46
+ if password == "entry"
47
+ session[:username] = username
48
+ destination = session[ :redirect_after_login ]
49
+ session.delete( :redirect_after_login )
50
+ redirect destination
51
+ end
52
+ redirect Rs(:login)
53
+ end
54
+
55
+ protected
56
+
57
+ def httpdigest_failure
58
+ session[ :redirect_after_login ] = Rs(Ramaze::Action.current.method)
59
+ redirect Rs(:login)
60
+ end
61
+
13
62
  end
14
63
 
15
64
  class SecretController < Ramaze::Controller
@@ -17,17 +66,22 @@ class SecretController < Ramaze::Controller
17
66
  helper :aspect
18
67
  helper :httpdigest
19
68
 
69
+ USERS = { 'admin' => 'secret', 'root' => 'password' }
70
+
20
71
  before_all do
21
- @username = httpdigest('secret area',REALM) do |username|
22
- { 'admin' => MD5.hexdigest("admin:#{REALM}:secret"),
23
- 'root' => MD5.hexdigest("root:#{REALM}:access"),
24
- }[ username ]
25
- end
72
+ @username = httpdigest('secret area',REALM)
26
73
  end
27
74
 
28
75
  def index
29
76
  "Hello <em>#@username</em>, welcome to SECRET world"
30
77
  end
78
+
79
+ protected
80
+
81
+ def httpdigest_lookup_plaintext_password username
82
+ USERS[ username ]
83
+ end
84
+
31
85
  end
32
86
 
33
87
  class GuestController < Ramaze::Controller
@@ -36,15 +90,19 @@ class GuestController < Ramaze::Controller
36
90
  helper :httpdigest
37
91
 
38
92
  before_all do
39
- @username = httpdigest('guest area',REALM) do |username|
40
- username_used = username
41
- MD5.hexdigest([username,REALM,username].join(':'))
42
- end
93
+ @username = httpdigest('guest area',REALM)
43
94
  end
44
95
 
45
96
  def index
46
97
  "Hello <em>#@username</em>, welcome to GUEST world."
47
98
  end
99
+
100
+ protected
101
+
102
+ def httpdigest_lookup_password username
103
+ return "b71f15b2f6dd4834224fbe02169ed94c" if username == "guest"
104
+ end
105
+
48
106
  end
49
107
 
50
108
  Ramaze.start
@@ -15,7 +15,7 @@
15
15
  %w(rubygems ramaze bluecloth rubypants haml).each{|lib| require lib }
16
16
 
17
17
  class BlogPost
18
- DIR = __DIR__/:entries
18
+ DIR = __DIR__(:entries)
19
19
 
20
20
  def initialize filename
21
21
  raise 'Invalid BlogPost filename' unless File.exists?(filename)
@@ -129,4 +129,4 @@ class MainController < Ramaze::Controller
129
129
 
130
130
  end
131
131
 
132
- Ramaze.start :sessions => false #, :adapter => :mongrel, :port => 3000
132
+ Ramaze.start :sessions => false #, :adapter => :mongrel, :port => 3000
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'ramaze'
3
3
 
4
4
  class MainController < Ramaze::Controller
5
- view_root __DIR__/:template
5
+ view_root __DIR__(:template)
6
6
  engine :Amrita2
7
7
 
8
8
  def index
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'ramaze'
3
3
 
4
4
  class MainController < Ramaze::Controller
5
- view_root __DIR__/:template
5
+ view_root __DIR__(:template)
6
6
  engine :Erubis
7
7
 
8
8
  def index
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'ramaze'
3
3
 
4
4
  class MainController < Ramaze::Controller
5
- view_root __DIR__/:template
5
+ view_root __DIR__(:template)
6
6
 
7
7
  def index
8
8
  %{ #{A 'Home', :href => :/} | #{A(:internal)} | #{A(:external)} }
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'ramaze'
3
3
 
4
4
  class MainController < Ramaze::Controller
5
- view_root __DIR__/:template
5
+ view_root __DIR__(:template)
6
6
  engine :Haml
7
7
 
8
8
  def index
@@ -29,7 +29,7 @@ class MainController < Ramaze::Controller
29
29
  = A("#@place/one/two/three")
30
30
  %br/
31
31
  = A("#@place/one?foo=bar")
32
- %div
32
+ %div
33
33
  The arguments you have passed to this action are:
34
34
  - if @args.empty?
35
35
  none
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'ramaze'
3
3
 
4
4
  class MainController < Ramaze::Controller
5
- view_root __DIR__/:template
5
+ view_root __DIR__(:template)
6
6
  engine :Liquid
7
7
 
8
8
  def index
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'ramaze'
3
3
 
4
4
  class MainController < Ramaze::Controller
5
- view_root __DIR__/'template'
5
+ view_root __DIR__('template')
6
6
  engine :Markaby
7
7
 
8
8
  helper :markaby
@@ -33,7 +33,7 @@ class MainController < Ramaze::Controller
33
33
  br
34
34
  end
35
35
  div do
36
- text "The arguments you have passed to this action are:"
36
+ text "The arguments you have passed to this action are:"
37
37
  if @args.empty?
38
38
  text "none"
39
39
  else
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'ramaze'
3
3
 
4
4
  class MainController < Ramaze::Controller
5
- view_root __DIR__/:template
5
+ view_root __DIR__(:template)
6
6
  engine :Nagoro
7
7
 
8
8
  def index
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'ramaze'
3
3
 
4
4
  class MainController < Ramaze::Controller
5
- view_root __DIR__/:template
5
+ view_root __DIR__(:template)
6
6
  engine :RedCloth
7
7
  layout :layout
8
8
 
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'ramaze'
3
3
 
4
4
  class MainController < Ramaze::Controller
5
- view_root __DIR__/:template
5
+ view_root __DIR__(:template)
6
6
  engine :Remarkably
7
7
 
8
8
  include Remarkably::Common
@@ -31,7 +31,7 @@ class MainController < Ramaze::Controller
31
31
  br
32
32
  end
33
33
  div do
34
- text "The arguments you have passed to this action are:"
34
+ text "The arguments you have passed to this action are:"
35
35
  if args.empty?
36
36
  "none"
37
37
  else
@@ -2,7 +2,7 @@ require "rubygems"
2
2
  require "ramaze"
3
3
 
4
4
  class MainController < Ramaze::Controller
5
- view_root __DIR__/:template
5
+ view_root __DIR__(:template)
6
6
  engine :Tenjin
7
7
 
8
8
  def index
@@ -3,7 +3,7 @@ require 'ramaze'
3
3
  require 'ramaze/gestalt'
4
4
 
5
5
  class MainController < Ramaze::Controller
6
- view_root __DIR__/:template
6
+ view_root __DIR__(:template)
7
7
  engine :XSLT
8
8
 
9
9
  def index
@@ -7,4 +7,5 @@ class Controller < Ramaze::Controller
7
7
  engine :Ezamar
8
8
  end
9
9
 
10
- acquire __DIR__/"*.rb"
10
+ # Here go your requires for subclasses of Controller:
11
+ require 'controller/main'
@@ -1,4 +1,4 @@
1
- # Here goes your database connection and options
1
+ # Here goes your database connection and options:
2
2
 
3
- # Require all models in '/model/*.rb'
4
- acquire __DIR__/"*.rb"
3
+ # Here go your requires for models:
4
+ # require 'model/user'
@@ -4,8 +4,8 @@ require 'rubygems'
4
4
  require 'ramaze'
5
5
 
6
6
  # FCGI doesn't like you writing to stdout
7
- Ramaze::Log.loggers = [ Ramaze::Logger::Informer.new( File.join(__DIR__, '..', 'ramaze.fcgi.log') ) ]
7
+ Ramaze::Log.loggers = [ Ramaze::Logger::Informer.new( __DIR__("../ramaze.fcgi.log") ) ]
8
8
  Ramaze::Global.adapter = :fcgi
9
9
 
10
- $0 = File.join(__DIR__, '..', 'start.rb')
10
+ $0 = __DIR__("../start.rb")
11
11
  require $0
@@ -1,12 +1,12 @@
1
1
  require 'ramaze'
2
2
  require 'ramaze/spec/helper'
3
3
 
4
- require __DIR__/'../start'
4
+ require __DIR__('../start')
5
5
 
6
6
  describe MainController do
7
7
  behaves_like 'http', 'xpath'
8
- ramaze :view_root => __DIR__/'../view',
9
- :public_root => __DIR__/'../public'
8
+ ramaze :view_root => __DIR__('../view'),
9
+ :public_root => __DIR__('../public')
10
10
 
11
11
  it 'should show start page' do
12
12
  got = get('/')
data/lib/proto/start.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  require 'rubygems'
2
2
  require 'ramaze'
3
3
 
4
+ # Add directory start.rb is in to the load path, so you can run the app from
5
+ # any other working path
6
+ $LOAD_PATH.unshift(__DIR__)
7
+
4
8
  # Initialize controllers and models
5
9
  require 'controller/init'
6
10
  require 'model/init'
@@ -49,8 +49,8 @@ module Ramaze
49
49
  # true.
50
50
 
51
51
  def cached_render
52
- if Global.file_cache
53
- cached_render_file
52
+ if cache_root = Global.file_cache
53
+ cached_render_file(cache_root)
54
54
  else
55
55
  cached_render_memory
56
56
  end
@@ -59,12 +59,13 @@ module Ramaze
59
59
  # Uses files in the Global.public_root to provide a static ressource on
60
60
  # next request and returns the rendered action
61
61
 
62
- def cached_render_file
62
+ def cached_render_file(cache_root)
63
63
  rendered = uncached_render
64
64
 
65
- global_epath = Global.public_root/self.controller.mapping/extended_path
65
+ cr = cache_root.respond_to?(:to_str) ? cache_root.to_str : Global.public_root
66
+ global_epath = File.join(cr, self.controller.mapping, extended_path)
66
67
  FileUtils.mkdir_p(File.dirname(global_epath))
67
- File.open(global_epath, 'w+') {|fp| fp.print(rendered) }
68
+ File.open(global_epath, 'w+'){|fp| fp.print(rendered) }
68
69
 
69
70
  rendered
70
71
  end
data/lib/ramaze/action.rb CHANGED
@@ -110,17 +110,21 @@ module Ramaze
110
110
  end
111
111
 
112
112
  # Try to figure out a sane name for current action.
113
+
113
114
  def name
114
115
  File.basename((self[:method] || self[:template]).to_s).split('.').first
115
116
  end
116
117
 
117
118
  # combined path to current action, from path and params
119
+
118
120
  def extended_path
119
121
  (path == "index" && !params.empty? ? params : Array[path, *params]).join('/')
120
122
  end
121
123
 
124
+ # same as Ramaze::Action#extended_path, with mapping of the current controller prepended.
125
+
122
126
  def full_path
123
- self.controller.mapping/extended_path
127
+ File.join(self.controller.mapping, extended_path)
124
128
  end
125
129
 
126
130
  # Hook for AspectHelper
@@ -133,6 +137,8 @@ module Ramaze
133
137
  def after_process
134
138
  end
135
139
 
140
+ # Returns true if current request is valid REST request.
141
+
136
142
  def valid_rest?
137
143
  return true unless rest = controller.trait[:REST]
138
144
  meth = Request.current.request_method
@@ -0,0 +1,71 @@
1
+ module Ramaze
2
+ # Persist cache contents to the filesystem.
3
+ # By default this will create a `/cache` directory in your APPDIR
4
+ #
5
+ # Usage for sessions only:
6
+ #
7
+ # Ramaze::Global::cache_alternative[:sessions] = Ramaze::FileCache
8
+ #
9
+ # Usage for everything:
10
+ #
11
+ # Ramaze::Global::cache = Ramaze::FileCache
12
+
13
+ class FileCache
14
+ attr_accessor :root, :subdir
15
+ attr_reader :host, :pid
16
+
17
+ def initialize(root = Ramaze::Global.root, subdir = 'cache')
18
+ @root, @subdir = root, subdir
19
+ @host = Socket.gethostname
20
+ @pid = $$
21
+
22
+ FileUtils.mkdir_p(dir)
23
+ end
24
+
25
+ def dir(*further)
26
+ File.join(root, subdir, *further)
27
+ end
28
+
29
+ def [](key)
30
+ Marshal.load(File.read(dir(key.to_s, 'data')))
31
+ rescue
32
+ nil
33
+ end
34
+
35
+ def []=(key, value)
36
+ key = key.to_s
37
+ tmp_name = dir(key, "data.#{host}.#{pid}")
38
+ key_name = dir(key, 'data')
39
+ dir_name = dir(key)
40
+
41
+ data = Marshal.dump(value)
42
+
43
+ FileUtils.rm_rf(dir_name)
44
+ FileUtils.mkdir_p(dir_name)
45
+
46
+ File.open(tmp_name, 'w'){|fd| fd.write(data) }
47
+
48
+ FileUtils.mv(tmp_name, key_name)
49
+
50
+ return value
51
+ end
52
+
53
+ def values_at(*keys)
54
+ keys.map{|key| self[key] }
55
+ end
56
+
57
+ def delete(*keys)
58
+ keys.map do |key|
59
+ FileUtils.rm_rf(dir(key.to_s))
60
+ end
61
+ end
62
+
63
+ def clear
64
+ Dir[dir('*')].each{|entry| FileUtils.rm_rf(entry) }
65
+ end
66
+
67
+ def to_sym
68
+ name.split('::').last.to_sym
69
+ end
70
+ end
71
+ end
data/lib/ramaze/cache.rb CHANGED
@@ -6,6 +6,7 @@ require 'ramaze/cache/memory'
6
6
  module Ramaze
7
7
  autoload :YAMLStoreCache, "ramaze/cache/yaml_store.rb"
8
8
  autoload :MemcachedCache, "ramaze/cache/memcached.rb"
9
+ autoload :FileCache, "ramaze/cache/file.rb"
9
10
 
10
11
  # This is the wrapper of all caches, providing mechanism
11
12
  # for switching caching from one adapter to another.
@@ -67,6 +67,8 @@ Message-Id: #{id}
67
67
  send_smtp( email, recipient, subject )
68
68
  end
69
69
 
70
+ # the raw mail sending method used by Ramaze::EmailHelper
71
+
70
72
  def send_smtp( email, recipient, subject )
71
73
  options = trait.values_at(:smtp_server, :smtp_port, :smtp_helo_domain,
72
74
  :smtp_username, :smtp_password, :smtp_auth_type)
@@ -1,4 +1,4 @@
1
- require __DIR__/:facebook/:facebook
1
+ require __DIR__('facebook/facebook')
2
2
 
3
3
  module Ramaze
4
4
  module Helper::Facebook
@@ -20,4 +20,4 @@ module Ramaze
20
20
  end
21
21
  alias fb facebook
22
22
  end
23
- end
23
+ end