mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-10 21:24:20 +01:00
101 lines
2.9 KiB
Ruby
101 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Various helpers methods
|
|
module ApplicationHelper
|
|
require 'message_format'
|
|
|
|
##
|
|
# Verify if the provided attribute is in the provided attributes array, whatever it exists or not
|
|
# @param attributes {Array|nil}
|
|
# @param attribute {String}
|
|
##
|
|
def attribute_requested?(attributes, attribute)
|
|
attributes.try(:include?, attribute)
|
|
end
|
|
|
|
def bootstrap_class_for(flash_type)
|
|
{ flash: 'alert-success', alert: 'alert-danger', notice: 'alert-info' }[flash_type.to_sym] || flash_type.to_s
|
|
end
|
|
|
|
def flash_messages(_opts = {})
|
|
flash.each do |msg_type, message|
|
|
concat(content_tag(:div, message, class: "flash-message alert #{bootstrap_class_for(msg_type)} fade in") do
|
|
concat content_tag(:button, 'x', class: 'close', data: { dismiss: 'alert' })
|
|
concat message
|
|
end)
|
|
end
|
|
nil
|
|
end
|
|
|
|
def print_slot(starting, ending)
|
|
"#{starting.strftime('%H:%M')} - #{ending.strftime('%H:%M')}"
|
|
end
|
|
|
|
def class_exists?(class_name)
|
|
klass = Module.const_get(class_name)
|
|
klass.is_a?(Class)
|
|
rescue NameError
|
|
false
|
|
end
|
|
|
|
##
|
|
# Allow to treat a rails i18n key as a MessageFormat interpolated pattern. Used in ruby views (API/mails)
|
|
# @param key {String} Ruby-on-Rails I18n key (from config/locales/xx.yml)
|
|
# @param interpolations {Hash} list of variables to interpolate, following ICU MessageFormat syntax
|
|
##
|
|
def _t(key, interpolations)
|
|
message = MessageFormat.new(I18n.t(scope_key_by_partial(key)), I18n.locale.to_s)
|
|
text = message.format(interpolations)
|
|
if html_safe_translation_key?(key)
|
|
text.html_safe # rubocop:disable Rails/OutputSafety
|
|
else
|
|
text
|
|
end
|
|
end
|
|
|
|
def bool_to_sym(bool)
|
|
bool ? :true : :false # rubocop:disable Lint/BooleanSymbol
|
|
end
|
|
|
|
def str_to_bool(str, default = 'true')
|
|
str.to_s.casecmp(default).zero?
|
|
end
|
|
|
|
def amount_to_f(amount)
|
|
amount / 100.00
|
|
end
|
|
|
|
# Return the given amount in centimes, without floating-point imprecision errors
|
|
def to_centimes(amount)
|
|
(BigDecimal(amount.to_s) * 100.0).to_f
|
|
end
|
|
|
|
# Return the given parameter as it, or as an array if it can be parsed as an array
|
|
def may_array(param)
|
|
return param if param.is_a?(Array)
|
|
|
|
return param unless param.chars&.first == '[' && param.chars&.last == ']'
|
|
|
|
param.gsub(/[\[\]]/i, '').split(',')
|
|
end
|
|
|
|
private
|
|
|
|
## inspired by gems/actionview-4.2.5/lib/action_view/helpers/translation_helper.rb
|
|
# rubocop:disable Rails/HelperInstanceVariable
|
|
def scope_key_by_partial(key)
|
|
if key.to_s.first == '.'
|
|
raise "Cannot use t(#{key.inspect}) shortcut because path is not available" unless @virtual_path # rubocop:disable Rails/HelperInstanceVariable
|
|
|
|
@virtual_path.gsub(%r{/_?}, '.') + key.to_s # rubocop:disable Rails/HelperInstanceVariable
|
|
else
|
|
key
|
|
end
|
|
end
|
|
# rubocop:enable Rails/HelperInstanceVariable
|
|
|
|
def html_safe_translation_key?(key)
|
|
key.to_s =~ /(\b|_|\.)html$/
|
|
end
|
|
end
|