Helpers contains methods available in your controllers
Set the path to ERB files. If this path is not set, Capcode will search in the static path. This method is deprecated and will be removed in version 1.0
# File lib/capcode/render/erb.rb, line 7 7: def self.erb_path=( p ) 8: warn "Capcode::Helpers.erb_path is deprecated and will be removed in version 1.0, please use `set :erb'" 9: Capcode.set :erb, p 10: end
Set the path to Haml files. If this path is not set, Capcode will search in the static path. This method is deprecated and will be removed in version 1.0
# File lib/capcode/render/haml.rb, line 11 11: def self.haml_path=( p ) 12: warn "Capcode::Helpers.haml_path is deprecated and will be removed in version 1.0, please use `set :haml'" 13: Capcode.set :haml, p 14: end
Set the path to Sass files. If this path is not set, Capcode will search in the static path. This method is deprecated and will be removed in version 1.0
# File lib/capcode/render/sass.rb, line 11 11: def self.sass_path=( p ) 12: warn "Capcode::Helpers.sass_path is deprecated and will be removed in version 1.0, please use `set :sass'" 13: Capcode.set :sass, p 14: end
Builds an URL route to a controller or a path
if you declare the controller Hello :
module Capcode class Hello < Route '/hello/(.*)' ... end end
then
URL( Capcode::Hello, "you" ) # => /hello/you
# File lib/capcode.rb, line 184 184: def URL( klass, *a ) 185: path = nil 186: a = a.delete_if{ |x| x.nil? } 187: 188: if klass.class == Class 189: Capcode.routes.each do |p, k| 190: path = p if k.class == klass 191: end 192: else 193: path = klass 194: end 195: 196: (ENV['RACK_BASE_URI']||'')+path+((a.size>0)?("/"+a.join("/")):("")) 197: end
Calling content_for stores a block of markup in an identifier.
module Capcode class ContentFor < Route '/' def get render( :markaby => :page, :layout => :layout ) end end end module Capcode::Views def layout html do head do yield :header end body do yield :content end end end def page content_for :header do title "This is the title!" end content_for :content do p "this is the content!" end end end
# File lib/capcode.rb, line 231 231: def content_for( x ) 232: #if @@__ARGS__.map{|_| _.to_s }.include?(x.to_s) 233: if Capcode::Helpers.args.map{|_| _.to_s }.include?(x.to_s) 234: yield 235: end 236: end
Help you to return a JSON response
module Capcode class JsonResponse < Route '/json/([^\/]*)/(.*)' def get( arg1, arg2 ) json( { :1 => arg1, :2 => arg2 }) end end end
DEPRECATED, please use render( :json => o )
# File lib/capcode.rb, line 127 127: def json( d ) ## DELETE THIS IN 1.0.0 128: warn( "json is deprecated and will be removed in version 1.0, please use `render( :json => ... )'" ) 129: @response['Content-Type'] = 'application/json' 130: d.to_json 131: end
Send a redirect response
module Capcode class Hello < Route '/hello/(.*)' def get( you ) if you.nil? redirect( WhoAreYou ) else ... end end end end
The first parameter can be a controller class name
redirect( MyController )
it can be a string path
redirect( "/path/to/my/resource" )
it can be an http status code (by default redirect use the http status code 302)
redirect( 304, MyController )
For more informations about HTTP status, see en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection
# File lib/capcode.rb, line 160 160: def redirect( klass, *a ) 161: httpCode = 302 162: 163: if( klass.class == Fixnum ) 164: httpCode = klass 165: klass = a.shift 166: end 167: 168: [httpCode, {'Location' => URL(klass, *a)}, ''] 169: end
Render a view
render‘s parameter can be a Hash or a string. Passing a string is equivalent to do
render( :text => string )
If you want to use a specific renderer, use one of this options :
If you want to use a specific layout, you can specify it with option
:layout
If you want to change the Content-Type, you can specify it with option
:content_type
Note that this will not work with the JSON renderer
If you use the WebDav renderer, you can use the option
:resource_class (see http://github.com/georgi/rack_dav for more informations)
# File lib/capcode.rb, line 79 79: def render( hash ) 80: if hash.class == Hash 81: render_type = nil 82: 83: hash.keys.each do |key| 84: if self.respond_to?("render_#{key.to_s}") 85: unless render_type.nil? 86: raise Capcode::RenderError, "Can't use multiple renderer (`#{render_type}' and `#{key}') !", caller 87: end 88: render_type = key 89: end 90: end 91: 92: if render_type.nil? 93: raise Capcode::RenderError, "Renderer type not specified!", caller 94: end 95: 96: unless self.respond_to?("render_#{render_type.to_s}") 97: raise Capcode::RenderError, "#{render_type} renderer not present ! please require 'capcode/render/#{render_type}'", caller 98: end 99: 100: render_name = hash.delete(render_type) 101: content_type = hash.delete(:content_type) 102: unless content_type.nil? 103: @response['Content-Type'] = content_type 104: end 105: 106: begin 107: self.send( "render_#{render_type.to_s}", render_name, hash ) 108: rescue => e 109: raise Capcode::RenderError, "Error rendering `#{render_type.to_s}' : #{e.message}", caller 110: end 111: else 112: render( :text => hash ) 113: end 114: end
# File lib/capcode/render/webdav.rb, line 23 23: def render_webdav( f, opts ) 24: options = { 25: :resource_class => RackDAV::FileResource, 26: :root => f 27: }.merge(opts) 28: 29: request = Rack::Request.new(env) 30: response = Rack::Response.new 31: 32: begin 33: controller = RackDAV::Controller.new(request, response, options.dup) 34: controller.send(request.request_method.downcase) 35: rescue RackDAV::HTTPStatus::Status => status 36: response.status = status.code 37: end 38: 39: # Strings in Ruby 1.9 are no longer enumerable. Rack still expects the response.body to be 40: # enumerable, however. 41: response.body = [response.body] if not response.body.respond_to? :each 42: 43: response.status = response.status ? response.status.to_i : 200 44: response.finish 45: 46: [response.status, response.header, response.body] 47: end
Return information about the static directory
# File lib/capcode.rb, line 242 242: def static 243: { 244: :uri => Capcode.static, 245: :path => File.expand_path( File.join(".", Capcode.static ) ) 246: } 247: end