Module: Spree::BaseHelper
- Defined in:
- app/helpers/spree/base_helper.rb
Instance Method Summary collapse
- #available_countries ⇒ Object
- #body_class ⇒ Object
- #breadcrumbs(taxon, separator = " » ") ⇒ Object
-
#current_spree_page?(url) ⇒ Boolean
Defined because Rails’ current_page? helper is not working when Spree is mounted at root.
- #flash_messages(opts = {}) ⇒ Object
- #gem_available?(name) ⇒ Boolean
- #link_to_cart(text = nil) ⇒ Object
- #logo(image_path = ) ⇒ Object
- #meta_data_tags ⇒ Object
- #method_missing(method_name, *args, &block) ⇒ Object
- #money(amount) ⇒ Object
- #pretty_time(time) ⇒ Object
- #seo_url(taxon) ⇒ Object
- #taxons_tree(root_taxon, current_taxon, max_level = 1) ⇒ Object
-
#variant_options(v, options = {}) ⇒ Object
human readable list of variant options.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args, &block) ⇒ Object
157 158 159 160 161 162 163 164 |
# File 'app/helpers/spree/base_helper.rb', line 157 def method_missing(method_name, *args, &block) if image_style = image_style_from_method_name(method_name) define_image_method(image_style) self.send(method_name, *args) else super end end |
Instance Method Details
#available_countries ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'app/helpers/spree/base_helper.rb', line 120 def available_countries checkout_zone = Zone.find_by_name(Spree::Config[:checkout_zone]) if checkout_zone && checkout_zone.kind == 'country' countries = checkout_zone.country_list else countries = Country.all end countries.collect do |country| country.name = I18n.t(country.iso, :scope => 'countries', :default => country.name) country end.sort { |a, b| a.name <=> b.name } end |
#body_class ⇒ Object
72 73 74 75 |
# File 'app/helpers/spree/base_helper.rb', line 72 def body_class @body_class ||= content_for?(:sidebar) ? 'two-col' : 'one-col' @body_class end |
#breadcrumbs(taxon, separator = " » ") ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'app/helpers/spree/base_helper.rb', line 92 def (taxon, separator=" » ") return "" if current_page?("/") || taxon.nil? separator = raw(separator) crumbs = [content_tag(:li, link_to(t(:home) , root_path) + separator)] if taxon crumbs << content_tag(:li, link_to(t(:products) , products_path) + separator) crumbs << taxon.ancestors.collect { |ancestor| content_tag(:li, link_to(ancestor.name , seo_url(ancestor)) + separator) } unless taxon.ancestors.empty? crumbs << content_tag(:li, content_tag(:span, link_to(taxon.name , seo_url(taxon)))) else crumbs << content_tag(:li, content_tag(:span, t(:products))) end crumb_list = content_tag(:ul, raw(crumbs.flatten.map{|li| li.mb_chars}.join), :class => 'inline') content_tag(:nav, crumb_list, :id => 'breadcrumbs', :class => 'sixteen columns') end |
#current_spree_page?(url) ⇒ Boolean
Defined because Rails’ current_page? helper is not working when Spree is mounted at root.
5 6 7 8 9 10 11 12 13 |
# File 'app/helpers/spree/base_helper.rb', line 5 def current_spree_page?(url) path = request.fullpath.gsub(/^\/\//, '/') if url.is_a?(String) return path == url elsif url.is_a?(Hash) return path == spree.url_for(url) end return false end |
#flash_messages(opts = {}) ⇒ Object
81 82 83 84 85 86 87 88 89 90 |
# File 'app/helpers/spree/base_helper.rb', line 81 def (opts = {}) opts[:ignore_types] = [:commerce_tracking].concat(Array(opts[:ignore_types]) || []) flash.each do |msg_type, text| unless opts[:ignore_types].include?(msg_type) concat(content_tag :div, text, :class => "flash #{msg_type}") end end nil end |
#gem_available?(name) ⇒ Boolean
139 140 141 142 143 144 145 |
# File 'app/helpers/spree/base_helper.rb', line 139 def gem_available?(name) Gem::Specification.find_by_name(name) rescue Gem::LoadError false rescue Gem.available?(name) end |
#link_to_cart(text = nil) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'app/helpers/spree/base_helper.rb', line 15 def link_to_cart(text = nil) return "" if current_spree_page?(cart_path) text = text ? h(text) : t('cart') css_class = nil if current_order.nil? or current_order.line_items.empty? text = "#{text}: (#{t('empty')})" css_class = 'empty' else text = "#{text}: (#{current_order.item_count}) <span class='amount'>#{current_order.display_total}</span>".html_safe css_class = 'full' end link_to text, cart_path, :class => css_class end |
#logo(image_path = ) ⇒ Object
77 78 79 |
# File 'app/helpers/spree/base_helper.rb', line 77 def logo(image_path=Spree::Config[:logo]) link_to image_tag(image_path), root_path end |
#meta_data_tags ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'app/helpers/spree/base_helper.rb', line 49 def object = instance_variable_get('@'+controller_name.singularize) = {} if object.kind_of? ActiveRecord::Base [:keywords] = object. if object[:meta_keywords].present? [:description] = object. if object[:meta_description].present? end if [:description].blank? && object.kind_of?(Spree::Product) [:description] = (object.description) end .reverse_merge!({ :keywords => Spree::Config[:default_meta_keywords], :description => Spree::Config[:default_meta_description] }) .map do |name, content| tag('meta', :name => name, :content => content) end.join("\n") end |
#money(amount) ⇒ Object
147 148 149 150 |
# File 'app/helpers/spree/base_helper.rb', line 147 def money(amount) ActiveSupport::Deprecation.warn("[SPREE] Spree::BaseHelper#money will be deprecated. It relies upon a single master currency. You can instead create a Spree::Money.new(amount, { :currency => your_currency}) or see if the object you're working with returns a Spree::Money object to use.") Spree::Money.new(amount) end |
#pretty_time(time) ⇒ Object
152 153 154 155 |
# File 'app/helpers/spree/base_helper.rb', line 152 def pretty_time(time) [I18n.l(time.to_date, :format => :long), time.strftime("%H:%m %p")].join(" ") end |
#seo_url(taxon) ⇒ Object
135 136 137 |
# File 'app/helpers/spree/base_helper.rb', line 135 def seo_url(taxon) return spree.nested_taxons_path(taxon.permalink) end |
#taxons_tree(root_taxon, current_taxon, max_level = 1) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'app/helpers/spree/base_helper.rb', line 107 def taxons_tree(root_taxon, current_taxon, max_level = 1) return '' if max_level < 1 || root_taxon.children.empty? content_tag :ul, :class => 'taxons-list' do root_taxon.children.map do |taxon| css_class = (current_taxon && current_taxon.self_and_ancestors.include?(taxon)) ? 'current' : nil content_tag :li, :class => css_class do link_to(taxon.name, seo_url(taxon)) + taxons_tree(taxon, current_taxon, max_level - 1) end end.join("\n").html_safe end end |
#variant_options(v, options = {}) ⇒ Object
human readable list of variant options
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'app/helpers/spree/base_helper.rb', line 33 def (v, ={}) list = v. # We shouldn't show out of stock if the product is infact in stock # or when we're not allowing backorders. unless v.in_stock? list = if [:include_style] content_tag(:span, "(#{t(:out_of_stock)}) #{list}", :class => 'out-of-stock') else "#{t(:out_of_stock)} #{list}" end end list end |