parsley/app/helpers/recipes_helper.rb

72 lines
2.1 KiB
Ruby

module RecipesHelper
def recipe_time(recipe)
output = ''.html_safe
if recipe.total_time.present?
output << "#{humanize_seconds(recipe.total_time.to_i.minutes)}"
if recipe.active_time.present?
output << " (#{humanize_seconds(recipe.active_time.to_i.minutes)} active)"
end
elsif recipe.active_time.present?
output << humanize_seconds(recipe.active_time.to_i.minutes)
end
output
end
def humanize_seconds(secs)
[[60, :s], [60, :m], [24, :h], [1000, :d]].map{ |count, name|
if secs > 0
secs, n = secs.divmod(count)
n == 0 ? nil : "#{n.to_i} #{name}"
end
}.compact.reverse.join(' ')
end
def nutrient_row(recipe, nutrients, heading, nutrient_name)
content_tag('tr') do
[
content_tag('td', heading),
recipe.parsed_yield ? content_tag('td', nutrients.send("#{nutrient_name}_per".to_sym, recipe.parsed_yield.number)) : nil,
content_tag('td', nutrients.send("#{nutrient_name}".to_sym))
].compact.join("\n".html_safe).html_safe
end
end
def index_sort_header(text, field, criteria)
uri = URI(request.original_fullpath)
query = Rack::Utils.parse_query(uri.query)
directions = [:asc, :desc]
current_field = criteria.sort_column
current_direction = criteria.sort_direction
field_param = 'criteria[sort_column]'
direction_param = 'criteria[sort_direction]'
if request.get?
is_sorted = current_field == field.to_sym
if is_sorted && directions.include?(current_direction)
direction = (directions.reject { |d| d == current_direction }).first
else
direction = directions.first
end
if is_sorted && direction == :asc
link_class = 'sorted desc'
elsif is_sorted && direction == :desc
link_class = 'sorted asc'
else
link_class = 'sorted'
end
query[field_param.to_s] = field.to_s
query[direction_param.to_s] = direction.to_s
link_to text, "#{uri.path}?#{query.to_query}", class: link_class
else
text
end
end
end