manveru-ramaze 2008.10 → 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 (77) 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/todolist/spec/todolist.rb +1 -1
  6. data/examples/app/whywiki/spec/whywiki.rb +1 -1
  7. data/examples/app/wikore/spec/wikore.rb +1 -1
  8. data/examples/app/wikore/src/model.rb +1 -1
  9. data/examples/app/wiktacular/spec/wiktacular.rb +1 -1
  10. data/examples/app/wiktacular/src/model.rb +1 -1
  11. data/examples/basic/partial.rb +28 -0
  12. data/examples/misc/ramaise.rb +2 -2
  13. data/examples/templates/template_amrita2.rb +1 -1
  14. data/examples/templates/template_erubis.rb +1 -1
  15. data/examples/templates/template_ezamar.rb +1 -1
  16. data/examples/templates/template_haml.rb +2 -2
  17. data/examples/templates/template_liquid.rb +1 -1
  18. data/examples/templates/template_markaby.rb +2 -2
  19. data/examples/templates/template_nagoro.rb +1 -1
  20. data/examples/templates/template_redcloth.rb +1 -1
  21. data/examples/templates/template_remarkably.rb +2 -2
  22. data/examples/templates/template_tenjin.rb +1 -1
  23. data/examples/templates/template_xslt.rb +1 -1
  24. data/lib/proto/public/dispatch.fcgi +2 -2
  25. data/lib/proto/spec/main.rb +3 -3
  26. data/lib/ramaze/action.rb +7 -1
  27. data/lib/ramaze/cache/file.rb +71 -0
  28. data/lib/ramaze/cache.rb +1 -0
  29. data/lib/ramaze/contrib/email.rb +2 -0
  30. data/lib/ramaze/contrib/facebook.rb +2 -2
  31. data/lib/ramaze/contrib/file_cache.rb +2 -64
  32. data/lib/ramaze/contrib/sequel/image.rb +1 -1
  33. data/lib/ramaze/controller.rb +6 -1
  34. data/lib/ramaze/current/request.rb +85 -68
  35. data/lib/ramaze/current/session/hash.rb +7 -11
  36. data/lib/ramaze/current/session.rb +3 -5
  37. data/lib/ramaze/dispatcher/action.rb +2 -0
  38. data/lib/ramaze/dispatcher/file.rb +4 -0
  39. data/lib/ramaze/helper/aspect.rb +2 -2
  40. data/lib/ramaze/helper/form.rb +5 -2
  41. data/lib/ramaze/helper/formatting.rb +4 -0
  42. data/lib/ramaze/helper/gravatar.rb +18 -1
  43. data/lib/ramaze/helper/maruku.rb +2 -0
  44. data/lib/ramaze/helper/redirect.rb +22 -4
  45. data/lib/ramaze/helper.rb +9 -2
  46. data/lib/ramaze/reloader/watch_inotify.rb +73 -0
  47. data/lib/ramaze/reloader/watch_stat.rb +62 -0
  48. data/lib/ramaze/reloader.rb +25 -41
  49. data/lib/ramaze/snippets/object/__dir__.rb +3 -3
  50. data/lib/ramaze/snippets/ramaze/acquire.rb +31 -0
  51. data/lib/ramaze/spec/helper/mock_http.rb +6 -5
  52. data/lib/ramaze/template/ezamar/render_partial.rb +8 -0
  53. data/lib/ramaze.rb +4 -0
  54. data/ramaze.gemspec +757 -756
  55. data/spec/contrib/profiling.rb +1 -1
  56. data/spec/ramaze/action/file_cache.rb +1 -1
  57. data/spec/ramaze/action/layout.rb +1 -1
  58. data/spec/ramaze/controller/actionless_templates.rb +1 -1
  59. data/spec/ramaze/controller/resolve.rb +1 -1
  60. data/spec/ramaze/controller/template_resolving.rb +1 -1
  61. data/spec/ramaze/dispatcher/directory.rb +3 -3
  62. data/spec/ramaze/helper/aspect.rb +1 -1
  63. data/spec/ramaze/helper/partial.rb +1 -1
  64. data/spec/ramaze/localize.rb +1 -1
  65. data/spec/ramaze/rewrite.rb +1 -1
  66. data/spec/ramaze/template/amrita2.rb +1 -1
  67. data/spec/ramaze/template/erubis.rb +1 -1
  68. data/spec/ramaze/template/ezamar.rb +1 -1
  69. data/spec/ramaze/template/haml.rb +2 -2
  70. data/spec/ramaze/template/nagoro.rb +1 -1
  71. data/spec/ramaze/template/redcloth.rb +1 -1
  72. data/spec/ramaze/template/sass.rb +1 -1
  73. data/spec/ramaze/template/tenjin.rb +1 -1
  74. data/spec/ramaze/template.rb +3 -3
  75. data/spec/snippets/object/__dir__.rb +6 -0
  76. data/spec/snippets/ramaze/acquire.rb +77 -0
  77. metadata +8 -8
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'
@@ -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
@@ -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
@@ -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/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
@@ -1,65 +1,3 @@
1
- #
2
- # drop-in replacement for Ramaze's built-in MemoryCache built on the
3
- # filesystem. # to use with sessions do
4
- #
5
- # Ramaze::Global::cache_alternative[:sessions] = Ramaze::FileCache
6
- #
7
- # to use with everything do
8
- #
9
- # Ramaze::Global::cache = Ramaze::FileCache
10
- #
1
+ Ramaze::Log.warn("ramaze/contrib/file_cache is now ramaze/cache/file")
11
2
 
12
- module Ramaze::FileCache
13
- require "fileutils"
14
- require "socket"
15
-
16
- Host = Socket.gethostname
17
- Pid = Process.pid
18
- Fu = FileUtils
19
- Root = File.join Ramaze::APPDIR, "cache"
20
-
21
- Fu.mkdir_p(Root) rescue nil
22
-
23
- def self.[] key
24
- path = File.join Root, key, "data"
25
- Marshal.load(IO.read(path))
26
- rescue
27
- nil
28
- end
29
-
30
- def self.[]= key, value
31
- tmp = File.join Root, key, "data.#{ Host }.#{ Pid }"
32
- dirname = File.join Root, key
33
- path = File.join Root, key, "data"
34
- data = Marshal.dump value
35
- Fu.rm_rf dirname rescue nil
36
- Fu.mkdir_p dirname rescue nil
37
- open(tmp, 'w'){|fd| fd.write data}
38
- Fu.mv tmp, path
39
- rescue
40
- nil
41
- end
42
-
43
- def self.values_at *keys
44
- keys.map{|key| self[key]}
45
- end
46
-
47
- def self.delete *keys
48
- keys.map do |key|
49
- dirname = File.join Root, key
50
- Fu.rm_rf dirname rescue next
51
- end
52
- end
53
-
54
- def self.clear
55
- Dir["#{ Root }/*"].each{|entry| Fu.rm_rf entry}
56
- end
57
-
58
- def self.new
59
- self
60
- end
61
-
62
- def self.to_sym
63
- name.split(%r/::/).last.to_sym
64
- end
65
- end
3
+ require 'ramaze/cache/file'
@@ -31,7 +31,7 @@
31
31
  # # Creates a square thumbnail of the image cropping the longest edge
32
32
  # # to match the shortest edge, resizes to +size+.
33
33
  #
34
- # :agorithm => :thumbnail,
34
+ # :algorithm => :thumbnail,
35
35
  #
36
36
  #
37
37
  # # Key specifies the filename and accessors, value are arguments to the
@@ -67,7 +67,8 @@ module Ramaze
67
67
 
68
68
  # if trait[:automap] is set and controller is not in Global.mapping yet
69
69
  # this will build a new default mapping-point, MainController is put
70
- # at '/' by default.
70
+ # at '/' by default. For other Class names, String#snake_case is called,
71
+ # e.g. FooBarController is mapped at '/foo_bar'.
71
72
 
72
73
  def mapping
73
74
  global_mapping = Global.mapping.invert[self]
@@ -265,6 +266,10 @@ module Ramaze
265
266
  action.render
266
267
  end
267
268
 
269
+ # By default, returns all ancestors of current Controller that have
270
+ # Ramaze::Controller as their ancestor. Optional argument parent
271
+ # can be used return ancestors that have parent as an ancestor.
272
+
268
273
  def relevant_ancestors(parent = Ramaze::Controller)
269
274
  ancestors.select do |anc|
270
275
  anc.ancestors.include?(parent)