Top Level Namespace
- Includes:
- Aerogel::Errors
Defined Under Namespace
Modules: Aerogel, Model Classes: Array, Hash
Instance Method Summary collapse
- #__uncached_partial(name, opts = {}) ⇒ Object
-
#assets(filename = nil) ⇒ Object
Appends to and retrieves from declared assets stack.
-
#button_to(url, text = url, opts = {}) ⇒ Object
Creates a <button …>…</button> tag.
-
#config ⇒ Object
Quick access to config from views and routes.
- #csrf_field_name ⇒ Object
- #csrf_protected? ⇒ Boolean
- #csrf_token ⇒ Object
- #csrf_token_field ⇒ Object
-
#current_hostname ⇒ Object
Returns current hostname.
-
#current_locale ⇒ Object
Returns current locale.
-
#current_url(opts = {}) ⇒ Object
Returns current_url To return current url in a different locale: current_url locale: :ru.
- #find_template(views, name, engine, &block) ⇒ Object
-
#h(str) ⇒ Object
Escapes html string.
-
#icon(name, opts = {}) ⇒ Object
Renders icon from icon font.
-
#l(*args) ⇒ Object
lhelper, alias for Aerogel::I18n.l. -
#layout(value = nil) ⇒ Object
Sets/gets current layout.
-
#link_to(url, *args, &block) ⇒ Object
Creates <a href=”..>…</a> tag.
- #logger(name = nil) ⇒ Object
- #output_capture(inner_block = nil, &block) ⇒ Object
- #output_concat(text) ⇒ Object
-
#page_title(value = nil) ⇒ Object
Sets/gets page title.
-
#partial(name, opts = {}) ⇒ Object
Renders partial erb template.
-
#redirect(uri, *args) ⇒ Object
xhr-conscious redirect.
-
#render_once(*args) ⇒ Object
Displays text only first time the helper is called in this request Usage: render_once “hello, world” Or: render_once :hello_message, “hello, world”.
-
#t(*args) ⇒ Object
thelper, alias for chainable helper Aerogel::I18n.t. -
#tag(name, *args, &block) ⇒ Object
Creates tag.
-
#url_to(url, opts = {}) ⇒ Object
Constructs an URL to a resource.
-
#view(name, opts = {}) ⇒ Object
Renders erb template.
Instance Method Details
#__uncached_partial(name, opts = {}) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'app/helpers/render.rb', line 53 def __uncached_partial( name, opts = {} ) name_parts = name.to_s.split('/') partial_name = name_parts[-1] name_parts[-1] = '_'+partial_name+".html" template_name = name_parts.join('/').to_sym opts[:layout] = false # render single template unless opts.key? :collection return erb template_name, opts end # render collection out = "" opts[:locals] ||= {} opts[:collection].each do |object| opts[:locals][partial_name.to_sym] = object out += opts[:delimiter] if opts[:delimiter].present? && out.present? out += erb template_name, opts.except( :collection, :delimiter, :cacheable ) end out end |
#assets(filename = nil) ⇒ Object
Appends to and retrieves from declared assets stack.
To include application assets and retrieve assets tags: <%= assets %>
To include/display controller’s assets: <%= assets ‘controller/name’ %>
To append to assets stack on a per-view basis: # in layout: <%= assets ‘controller/name’ %>
# in view:
<% assets 'controller/name/view' %> # note that helper output is ignored here, view asset tags
# are rendered in layout
17 18 19 20 21 22 23 24 25 |
# File 'app/helpers/assets.rb', line 17 def assets( filename = nil ) @assets_stack ||= [] filename = :application if @assets_stack.blank? && filename.blank? @assets_stack.unshift filename if filename.present? @assets_stack.map do |assets_filename| (stylesheet_tag assets_filename.to_s) + (javascript_tag assets_filename.to_s) end.join("\n") end |
#button_to(url, text = url, opts = {}) ⇒ Object
Creates a <button …>…</button> tag.
42 43 44 |
# File 'app/helpers/tags.rb', line 42 def ( url, text = url, opts = {} ) tag :button, text, opts.merge( url: url ) end |
#config ⇒ Object
Quick access to config from views and routes
3 4 5 |
# File 'app/helpers/config.rb', line 3 def config Aerogel.config end |
#csrf_field_name ⇒ Object
1 2 3 |
# File 'app/helpers/csrf.rb', line 1 def csrf_field_name 'authenticity_token' end |
#csrf_protected? ⇒ Boolean
13 14 15 |
# File 'app/helpers/csrf.rb', line 13 def csrf_protected? true end |
#csrf_token ⇒ Object
5 6 7 |
# File 'app/helpers/csrf.rb', line 5 def csrf_token session[:csrf] ||= SecureRandom.hex(32) if defined?(session) end |
#csrf_token_field ⇒ Object
9 10 11 |
# File 'app/helpers/csrf.rb', line 9 def csrf_token_field tag :input, type: 'hidden', name: csrf_field_name, value: csrf_token end |
#current_hostname ⇒ Object
Returns current hostname. If hostname is set in application configuration files, it has precedence. Otherwise, hostname is inferred from the request.host, stripped from potential locale name.
33 34 35 36 37 38 |
# File 'app/helpers/core.rb', line 33 def current_hostname return config.hostname! if config.hostname? hostname_parts = request.host.split '.' hostname_parts.shift if I18n.available_locales.include?( hostname_parts.first.to_sym ) hostname_parts.join "." end |
#current_locale ⇒ Object
Returns current locale
24 25 26 |
# File 'app/helpers/core.rb', line 24 def current_locale I18n.locale end |
#current_url(opts = {}) ⇒ Object
Returns current_url To return current url in a different locale:
current_url locale: :ru
17 18 19 20 |
# File 'app/helpers/core.rb', line 17 def current_url( opts = {} ) url = URI.unescape( request.path_info ) opts.present? ? url_to( url, opts ) : url end |
#find_template(views, name, engine, &block) ⇒ Object
1 2 3 |
# File 'app/helpers/core.rb', line 1 def find_template(views, name, engine, &block) Array(views).each { |v| super(v, name, engine, &block) } end |
#h(str) ⇒ Object
Escapes html string.
4 5 6 |
# File 'app/helpers/render.rb', line 4 def h( str ) Rack::Utils.escape_html(str.to_s) end |
#icon(name, opts = {}) ⇒ Object
Renders icon from icon font. First part of the name defines icon family.
Example:
<%= icon 'fa-caret-right' %> # => icon 'caret-right' from Font Awesome (fa) family
<%= icon 'glyphicon-tick' %> #=> icon 'tick' from Boostrap glyphicons
8 9 10 11 12 |
# File 'app/helpers/icon.rb', line 8 def icon( name, opts = {} ) icon_family = name.split('-').first icon_class = "#{icon_family} #{name} #{opts[:class]}" tag :i, "", opts.merge( class: icon_class ) end |
#l(*args) ⇒ Object
l helper, alias for Aerogel::I18n.l
9 10 11 |
# File 'app/helpers/i18n.rb', line 9 def l( *args ) Aerogel::I18n.l( *args ) end |
#layout(value = nil) ⇒ Object
Sets/gets current layout.
93 94 95 96 |
# File 'app/helpers/render.rb', line 93 def layout( value = nil ) @layout = value unless value.nil? @layout end |
#link_to(url, *args, &block) ⇒ Object
Creates <a href=”..>…</a> tag.
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'app/helpers/tags.rb', line 27 def link_to( url, *args, &block ) opts = (String === args.first) ? args[1] : args[0] opts = { href: url }.deep_merge( opts || {} ) if String === args.first args[1] = opts else args[0] = opts end tag :a, *args, &block end |
#logger(name = nil) ⇒ Object
5 6 7 8 9 10 11 |
# File 'app/helpers/core.rb', line 5 def logger( name = nil ) if name.nil? env['rack.logger'] else env['rack.logger.'+name.to_s] or raise("Logger with name '#{name}' is not registered") end end |
#output_capture(inner_block = nil, &block) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'app/helpers/output_buffer.rb', line 11 def output_capture( inner_block = nil, &block ) inner_block = block if inner_block.nil? if self.respond_to?(:is_haml?) && is_haml? && (block_is_haml?(inner_block) rescue false) # haml capture_haml(nil, &block) elsif Aerogel::Render::OutputBuffer.block_is_erb? block # erb Aerogel::Render::OutputBuffer.capture( &block ) else block.call end end |
#output_concat(text) ⇒ Object
1 2 3 4 5 6 7 8 9 |
# File 'app/helpers/output_buffer.rb', line 1 def output_concat( text ) if self.respond_to?(:is_haml?) && is_haml? haml_concat(text) elsif !Aerogel::Render::OutputBuffer.buffer.nil? # has_erb_buffer? Aerogel::Render::OutputBuffer.buffer.concat text else # theres no template to concat, return the text directly text end end |
#page_title(value = nil) ⇒ Object
Sets/gets page title.
Example:
page_title "Home page" # sets page title
page_title # => "Home page"
Or in views:
<% page_title "Home page" %> # sets page title
<%= page_title %> # gets page title
86 87 88 89 |
# File 'app/helpers/render.rb', line 86 def page_title( value = nil ) @page_title = value unless value.nil? @page_title end |
#partial(name, opts = {}) ⇒ Object
Renders partial erb template.
43 44 45 46 47 48 49 50 51 |
# File 'app/helpers/render.rb', line 43 def partial( name, opts = {} ) if opts.key?( :cacheable ) && config.aerogel.cache.enabled? Aerogel::Cache.cacheable current_locale, name, opts[:cacheable] do |key| __uncached_partial( name, opts )+"<!-- cache #{key} @ #{Time.now} -->" end else __uncached_partial( name, opts ) end end |
#redirect(uri, *args) ⇒ Object
xhr-conscious redirect.
81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'app/helpers/core.rb', line 81 def redirect(uri, *args) if request.xhr? if Hash === args.first opts = args.first [:error, :notice, :warning].each do |flash_key| flash[flash_key] = opts[flash_key] if opts[flash_key].present? end end halt 200, {'Content-Type' => 'text/javascript'}, "window.location.href=\"#{uri}\"" else super( uri, *args ) end end |
#render_once(*args) ⇒ Object
Displays text only first time the helper is called in this request Usage:
render_once "hello, world"
Or:
render_once :hello_message, "hello, world"
14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'app/helpers/render.rb', line 14 def render_once( *args ) @render_once_hash ||= {} if Symbol === args.first key = args.shift text = args.shift else key = args.shift text = key end return '' if @render_once_hash.key? key @render_once_hash[key] = true text end |
#t(*args) ⇒ Object
t helper, alias for chainable helper Aerogel::I18n.t
3 4 5 |
# File 'app/helpers/i18n.rb', line 3 def t( *args ) Aerogel::I18n.t( *args ) end |
#tag(name, *args, &block) ⇒ Object
Creates tag.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'app/helpers/tags.rb', line 3 def tag( name, *args, &block ) if block_given? content = output_capture(&block) elsif args.first.is_a? String content = args.shift end attrs = args.shift || {} # t_attrs = attrs.map{|k,v| v.nil? ? " #{k}" : " #{k}=\"#{h(v)}\""} t_attrs = attrs.map{|k,v| v.nil? ? " #{k}" : " #{k}=\"#{h(v)}\""} if content output = "<#{name}#{t_attrs.join}>"+content+"</#{name}>" else output = "<#{name}#{t_attrs.join}/>" end if Aerogel::Render::OutputBuffer.block_is_template?(block) output_concat(output) return nil else return output end end |
#url_to(url, opts = {}) ⇒ Object
Constructs an URL to a resource.
Options passed in opts will be appended to URL as a query string, except some reserved options which have special meaning:
:locale => constructs URL with a certain locale
:scheme => constructs URL with a certain protocol
:fqdn => constructs full qualified URL, including hostname and protocol
Example:
url_to "/bar", locale: :de, page: 2, order: :name # => "http://de.example.org/bar?page=2&order=name"
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'app/helpers/core.rb', line 51 def url_to( url, opts = {} ) hostname = nil if opts[:fqdn] || opts[:scheme] opts[:locale] ||= current_locale end if opts[:locale] unless I18n.available_locales.include? opts[:locale] raise ArgumentError.new("Unavailable locale '#{opts[:locale]}' passed to #url_to helper") end if opts[:locale] == I18n.default_locale hostname = current_hostname else hostname = "#{opts[:locale]}.#{current_hostname}" end end query_string = opts.except( :locale, :fqdn, :scheme ).map{|k,v| "#{k}=#{h v}"}.join "&" if query_string.present? if url =~ /\?/ query_string = "&#{query_string}" else query_string = "?#{query_string}" end end scheme = opts[:scheme] || request.scheme || 'http' scheme_hostname = hostname.nil? ? '' : "#{scheme}://#{hostname}" "#{scheme_hostname}#{url}#{query_string}" end |
#view(name, opts = {}) ⇒ Object
Renders erb template.
30 31 32 33 34 35 36 37 38 39 |
# File 'app/helpers/render.rb', line 30 def view( name, opts = {} ) ts = Time.now default_opts = {} default_opts[:layout] = :"layouts/#{layout}.html" if layout.present? #if settings.development? erb( "#{name}.html".to_sym, default_opts.merge(opts) )+( "<!-- %s: %.3fs -->" % [name, Time.now - ts] ) #else # erb( "#{name}.html".to_sym, default_opts.merge(opts) ) #end end |