Module | Capcode::Helpers |
In: |
lib/capcode.rb
lib/capcode/render/text.rb lib/capcode/helpers/auth.rb |
Helpers contains methods available in your controllers
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 213 213: def URL( klass, *a ) 214: path = nil 215: a = a.delete_if{ |x| x.nil? } 216: 217: if klass.class == Class 218: Capcode.routes.each do |p, k| 219: path = p if k.class == klass 220: end 221: else 222: path = klass 223: end 224: 225: (ENV['RACK_BASE_URI']||'')+path+((a.size>0)?("/"+a.join("/")):("")) 226: 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 260 260: def content_for( x ) 261: #if @@__ARGS__.map{|_| _.to_s }.include?(x.to_s) 262: if Capcode::Helpers.args.map{|_| _.to_s }.include?(x.to_s) 263: yield 264: end 265: 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 157 157: def json( d ) ## DELETE THIS IN 1.0.0 158: warn( "json is deprecated and will be removed in version 1.0, please use `render( :json => ... )'" ) 159: render :json => d 160: 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 189 189: def redirect( klass, *a ) 190: httpCode = 302 191: 192: if( klass.class == Fixnum ) 193: httpCode = klass 194: klass = a.shift 195: end 196: 197: [httpCode, {'Location' => URL(klass, *a)}, ''] 198: 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 :
Or you can use a "HTTP code" renderer :
render 200 => "Ok", :server => "Capcode #{Capcode::CAPCOD_VERION}", ...
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 83 83: def render( hash ) 84: if hash.class == Hash 85: render_type = nil 86: possible_code_renderer = nil 87: 88: if render_type.nil? 89: hash.keys.each do |key| 90: begin 91: gem "capcode-render-#{key.to_s}" 92: require "capcode/render/#{key.to_s}" 93: rescue Gem::LoadError 94: nil 95: rescue LoadError 96: raise Capcode::RenderError, "Hum... The #{key} renderer is malformated! Please try to install a new version or use an other renderer!", caller 97: end 98: 99: if self.respond_to?("render_#{key.to_s}") 100: unless render_type.nil? 101: raise Capcode::RenderError, "Can't use multiple renderer (`#{render_type}' and `#{key}') !", caller 102: end 103: render_type = key 104: end 105: 106: if key.class == Fixnum 107: possible_code_renderer = key 108: end 109: end 110: 111: if render_type.nil? and possible_code_renderer.nil? 112: raise Capcode::RenderError, "Renderer type not specified!", caller 113: end 114: end 115: unless self.respond_to?("render_#{render_type.to_s}") 116: if possible_code_renderer.nil? 117: raise Capcode::RenderError, "#{render_type} renderer not present ! please require 'capcode/render/#{render_type}'", caller 118: else 119: code = possible_code_renderer 120: body = hash.delete(possible_code_renderer) 121: header = {} 122: hash.each do |k, v| 123: k = k.to_s.split(/_/).map{|e| e.capitalize}.join("-") 124: header[k] = v 125: end 126: [code, hash, body] 127: end 128: else 129: render_name = hash.delete(render_type) 130: content_type = hash.delete(:content_type) 131: unless content_type.nil? 132: @response['Content-Type'] = content_type 133: end 134: 135: begin 136: self.send( "render_#{render_type.to_s}", render_name, hash ) 137: rescue => e 138: raise Capcode::RenderError, "Error rendering `#{render_type.to_s}' : #{e.message}", caller 139: end 140: end 141: else 142: render( :text => hash ) 143: end 144: end
Return information about the static directory
# File lib/capcode.rb, line 271 271: def static 272: { 273: :uri => Capcode.static, 274: :path => File.expand_path( File.join(Capcode::Configuration.get(:root), Capcode::Configuration.get(:static) ) ) 275: } 276: end