interage-helper 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +4 -0
- data/.rubocop.yml +22 -0
- data/.travis.yml +7 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +80 -0
- data/README.md +40 -0
- data/Rakefile +8 -0
- data/bin/brakeman +29 -0
- data/bin/bundle +105 -0
- data/bin/ci +12 -0
- data/bin/console +14 -0
- data/bin/rspec +29 -0
- data/bin/rubocop +29 -0
- data/bin/setup +8 -0
- data/interage-helper.gemspec +43 -0
- data/lib/generators/interage/helper/install/USAGE +8 -0
- data/lib/generators/interage/helper/install/install_generator.rb +26 -0
- data/lib/generators/interage/helper/install/templates/application_helper.rb +5 -0
- data/lib/generators/interage/helper/install/templates/application_helper.yml +95 -0
- data/lib/interage/application_helper.rb +55 -0
- data/lib/interage/application_icon_helper.rb +31 -0
- data/lib/interage/bootstrap_helper.rb +53 -0
- data/lib/interage/cep_helper.rb +11 -0
- data/lib/interage/cocoon_helper.rb +31 -0
- data/lib/interage/controller_active_helper.rb +17 -0
- data/lib/interage/cpf_cnpj_helper.rb +23 -0
- data/lib/interage/date_time_helper.rb +27 -0
- data/lib/interage/favicon_helper.rb +31 -0
- data/lib/interage/flash_message_helper.rb +21 -0
- data/lib/interage/font_awesome_helper.rb +30 -0
- data/lib/interage/gravatar_helper.rb +13 -0
- data/lib/interage/helper/version.rb +7 -0
- data/lib/interage/helper.rb +32 -0
- data/lib/interage/link_to_helper.rb +60 -0
- data/lib/interage/material_design_icons_helper.rb +25 -0
- data/lib/interage/number_helper.rb +9 -0
- data/lib/interage/pagination_helper.rb +11 -0
- data/lib/interage/phone_helper.rb +13 -0
- data/lib/interage/text_helper.rb +13 -0
- data/lib/interage/translation_helper.rb +127 -0
- data/lib/interage/version_helper.rb +21 -0
- metadata +131 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module ApplicationIconHelper
|
5
|
+
DEFAULT_FONT_ICON = ENV.fetch('DEFAULT_FONT_ICON', 'fa')
|
6
|
+
|
7
|
+
def app_icon(icon, options = {})
|
8
|
+
case DEFAULT_FONT_ICON
|
9
|
+
when 'fa'
|
10
|
+
fa_icon(icon, options)
|
11
|
+
when 'md'
|
12
|
+
md_icon(icon, options)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def app_icon_text(icon, text, options = {})
|
17
|
+
case DEFAULT_FONT_ICON
|
18
|
+
when 'fa'
|
19
|
+
fa_icon_text(icon, text, options)
|
20
|
+
when 'md'
|
21
|
+
md_icon_text(icon, text, options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def app_icon_classes(icon, prefix, separator, options = {})
|
26
|
+
icon_classes = icon.to_s.split(' ').uniq.join(" #{separator}-")
|
27
|
+
|
28
|
+
"#{prefix} #{separator}-#{icon_classes} #{options[:class]}".strip
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module BootstrapHelper
|
5
|
+
def bootstrap_alert(type, message)
|
6
|
+
content_tag(:div, message, class: "no-margin alert alert-#{type}")
|
7
|
+
end
|
8
|
+
|
9
|
+
def bootstrap_alert_default(message)
|
10
|
+
bootstrap_alert(:default, message)
|
11
|
+
end
|
12
|
+
|
13
|
+
def bootstrap_alert_info(message)
|
14
|
+
bootstrap_alert(:info, message)
|
15
|
+
end
|
16
|
+
|
17
|
+
def bootstrap_alert_warning(message)
|
18
|
+
bootstrap_alert(:warning, message)
|
19
|
+
end
|
20
|
+
|
21
|
+
def bootstrap_alert_success(message)
|
22
|
+
bootstrap_alert(:success, message)
|
23
|
+
end
|
24
|
+
|
25
|
+
def bootstrap_alert_danger(message)
|
26
|
+
bootstrap_alert(:danger, message)
|
27
|
+
end
|
28
|
+
|
29
|
+
def bootstrap_alert_not_found(gender, model)
|
30
|
+
bootstrap_alert_info(text_not_found(gender, model))
|
31
|
+
end
|
32
|
+
|
33
|
+
def bootstrap_alert_not_found_male(model)
|
34
|
+
bootstrap_alert_not_found(:male, model)
|
35
|
+
end
|
36
|
+
|
37
|
+
def bootstrap_alert_not_found_female(model)
|
38
|
+
bootstrap_alert_not_found(:female, model)
|
39
|
+
end
|
40
|
+
|
41
|
+
def text_not_found(gender, model)
|
42
|
+
t("index.model.#{gender}.not_found", model: tm(model).downcase)
|
43
|
+
end
|
44
|
+
|
45
|
+
def text_not_found_male(model)
|
46
|
+
text_not_found(:male, model)
|
47
|
+
end
|
48
|
+
|
49
|
+
def text_not_found_female(model)
|
50
|
+
text_not_found(:female, model)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module CocoonHelper
|
5
|
+
DEFAULT_BTN_CLASS = 'btn btn-sm btn-outline-'
|
6
|
+
|
7
|
+
def cocoon_link_to_add_association(form, association, options = {})
|
8
|
+
label = options[:label] || t('buttons.cocoon.add.text')
|
9
|
+
html_class = options[:html_class] || cocoon_default_btn_class('success')
|
10
|
+
|
11
|
+
link_to_add_association(form, association, class: html_class) do
|
12
|
+
app_icon_text(t('buttons.cocoon.add.icon'), label)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def cocoon_link_to_remove_association(form, label = nil)
|
17
|
+
label ||= t('buttons.cocoon.remove.text')
|
18
|
+
html_class = cocoon_default_btn_class('danger')
|
19
|
+
|
20
|
+
content_tag :div, class: 'cocoon-link-to-remove' do
|
21
|
+
link_to_remove_association(form, class: html_class, title: label) do
|
22
|
+
app_icon_text(t('buttons.cocoon.remove.icon'), label)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def cocoon_default_btn_class(type)
|
28
|
+
"#{DEFAULT_BTN_CLASS}#{type} text-truncate"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module ControllerActiveHelper
|
5
|
+
HTML_ACTIVE_CLASS = 'active'
|
6
|
+
|
7
|
+
def menu_active(*controllers)
|
8
|
+
HTML_ACTIVE_CLASS if current_controller?(*controllers)
|
9
|
+
end
|
10
|
+
|
11
|
+
def current_controller?(*controllers)
|
12
|
+
controllers = controllers.is_a?(Array) ? controllers : [controllers]
|
13
|
+
|
14
|
+
controllers.include?(params[:controller])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module CPFCNPJHelper
|
5
|
+
def format_cnpj(cnpj)
|
6
|
+
return if cnpj.blank?
|
7
|
+
|
8
|
+
cnpj.to_s.gsub!(/[^0-9]/, '')
|
9
|
+
|
10
|
+
formatted_cnpj = ["#{cnpj[0, 2]}.#{cnpj[2, 3]}.#{cnpj[5, 3]}",
|
11
|
+
"#{cnpj[8, 4]}-#{cnpj[12, 2]}"]
|
12
|
+
formatted_cnpj.join('/').strip
|
13
|
+
end
|
14
|
+
|
15
|
+
def format_cpf(cpf)
|
16
|
+
return if cpf.blank?
|
17
|
+
|
18
|
+
cpf.to_s.gsub!(/[^0-9]/, '')
|
19
|
+
|
20
|
+
"#{cpf[0, 3]}.#{cpf[3, 3]}.#{cpf[6, 3]}-#{cpf[9, 2]}".strip
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module DateTimeHelper
|
5
|
+
def business_days_from_now(days = 2)
|
6
|
+
date = days.to_i.business_days.from_now.to_date
|
7
|
+
|
8
|
+
return l(date) if business_day?(date)
|
9
|
+
|
10
|
+
business_days_from_now(days + 1)
|
11
|
+
end
|
12
|
+
|
13
|
+
def business_day?(date)
|
14
|
+
Holidays.on(date, :br).empty? && date.to_date.workday?
|
15
|
+
end
|
16
|
+
|
17
|
+
def format_date(date, date_format = :date_time)
|
18
|
+
l(date, format: date_format)
|
19
|
+
end
|
20
|
+
|
21
|
+
def format_time(time)
|
22
|
+
return if time.blank?
|
23
|
+
|
24
|
+
time.strftime('%H:%M')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module FaviconHelper
|
5
|
+
EXTENTION = 'png'
|
6
|
+
FILE_NAME = 'icons/apple-touch-icon'
|
7
|
+
FAVICON_SIZES = [nil, 57, 72, 76, 114, 120, 144, 152, 180].freeze
|
8
|
+
|
9
|
+
def favicon_link_tags
|
10
|
+
safe_join favicon_size_link_tags.push(favicon_link_tag)
|
11
|
+
end
|
12
|
+
|
13
|
+
def favicon_size_link_tags
|
14
|
+
FAVICON_SIZES.map do |s|
|
15
|
+
favicon_link_tag(handler_name(s), favicon_options(s))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def handler_name(size)
|
20
|
+
"#{FILE_NAME}#{handler_size(size, '-')}.#{EXTENTION}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def favicon_options(size)
|
24
|
+
{ type: 'image/png', rel: 'apple-touch-icon', sizes: handler_size(size) }
|
25
|
+
end
|
26
|
+
|
27
|
+
def handler_size(size, prefix = '')
|
28
|
+
"#{prefix}#{size}x#{size}" if size.present?
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module FlashMessageHelper
|
5
|
+
def flash_messages
|
6
|
+
messages ||= flashes.map do |type, message|
|
7
|
+
bootstrap_alert(handle_type(type), message)
|
8
|
+
end
|
9
|
+
|
10
|
+
safe_join(messages || [])
|
11
|
+
end
|
12
|
+
|
13
|
+
def flashes
|
14
|
+
flash.to_h.symbolize_keys
|
15
|
+
end
|
16
|
+
|
17
|
+
def handle_type(type)
|
18
|
+
type == :notice ? :success : type
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module FontAwesomeHelper
|
5
|
+
def fa_icons
|
6
|
+
t('icons_alias', default: {}).keys
|
7
|
+
end
|
8
|
+
|
9
|
+
def fa_icon(icon, options = {})
|
10
|
+
content_tag :i, nil, options.merge(class: fa_classes(icon, options))
|
11
|
+
end
|
12
|
+
|
13
|
+
def fa_fw_icon(icon, options = {})
|
14
|
+
fa_icon("fw #{icon}", options)
|
15
|
+
end
|
16
|
+
|
17
|
+
def fa_icon_text(icon, text, options = {})
|
18
|
+
content_tag :span do
|
19
|
+
concat fa_fw_icon(icon, options)
|
20
|
+
concat text
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def fa_classes(icon, options = {})
|
25
|
+
icon_classes = icon.to_s.split(' ').uniq.join(' fa-')
|
26
|
+
|
27
|
+
"fa fa-#{icon_classes} #{options[:class]}".strip
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module GravatarHelper
|
5
|
+
BASE_URL = 'https://www.gravatar.com/avatar'
|
6
|
+
|
7
|
+
def gravatar_image_tag(email, size = 50, options = {})
|
8
|
+
hexdigest = Digest::MD5.hexdigest(email)
|
9
|
+
|
10
|
+
image_tag("#{BASE_URL}/#{hexdigest}?size=#{size}", options)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'interage/helper/version'
|
4
|
+
require 'active_support/core_ext/module'
|
5
|
+
|
6
|
+
module Interage
|
7
|
+
module Helper
|
8
|
+
class Error < StandardError
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
autoload :ApplicationHelper, 'interage/application_helper'
|
13
|
+
autoload :ApplicationIconHelper, 'interage/application_icon_helper'
|
14
|
+
autoload :BootstrapHelper, 'interage/bootstrap_helper'
|
15
|
+
autoload :CEPHelper, 'interage/cep_helper'
|
16
|
+
autoload :CocoonHelper, 'interage/cocoon_helper'
|
17
|
+
autoload :ControllerActiveHelper, 'interage/controller_active_helper'
|
18
|
+
autoload :CPFCNPJHelper, 'interage/cpf_cnpj_helper'
|
19
|
+
autoload :DateTimeHelper, 'interage/date_time_helper'
|
20
|
+
autoload :FaviconHelper, 'interage/favicon_helper'
|
21
|
+
autoload :FlashMessageHelper, 'interage/flash_message_helper'
|
22
|
+
autoload :FontAwesomeHelper, 'interage/font_awesome_helper'
|
23
|
+
autoload :GravatarHelper, 'interage/gravatar_helper'
|
24
|
+
autoload :LinkToHelper, 'interage/link_to_helper'
|
25
|
+
autoload :MaterialDesignIconsHelper, 'interage/material_design_icons_helper'
|
26
|
+
autoload :NumberHelper, 'interage/number_helper'
|
27
|
+
autoload :PaginationHelper, 'interage/pagination_helper'
|
28
|
+
autoload :PhoneHelper, 'interage/phone_helper'
|
29
|
+
autoload :TextHelper, 'interage/text_helper'
|
30
|
+
autoload :TranslationHelper, 'interage/translation_helper'
|
31
|
+
autoload :VersionHelper, 'interage/version_helper'
|
32
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module LinkToHelper
|
5
|
+
ASIDE_DEFAULT_CLASS = 'list-group-item'
|
6
|
+
DESTROY_CONFIRM_MESSAGE = 'Tem certeza que deseja apagar?'
|
7
|
+
PREFIX_BUTTON_CLASS = 'btn btn-sm btn-outline-'
|
8
|
+
|
9
|
+
def aside_link_to(text, url = '#', html_options = {})
|
10
|
+
html_options[:class] = "#{ASIDE_DEFAULT_CLASS} #{html_options[:class]}"
|
11
|
+
html_options[:title] = strip_tags(text)
|
12
|
+
|
13
|
+
link_to text, url, html_options
|
14
|
+
end
|
15
|
+
|
16
|
+
def link_to_modal(text, url = '#', html_options = {})
|
17
|
+
link_to text, url, html_options.merge('data-toggle': 'modal')
|
18
|
+
end
|
19
|
+
|
20
|
+
def link_to_new(resource, url)
|
21
|
+
text = t('menu.links.new', model: tm(resource).downcase)
|
22
|
+
|
23
|
+
link_to url, title: strip_tags(text), class: 'btn btn-outline-primary' do
|
24
|
+
app_icon_text(t('menu.icons.new'), text)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def link_to_edit(url)
|
29
|
+
link_to_default(:edit, url, class: button_class('info'))
|
30
|
+
end
|
31
|
+
|
32
|
+
def link_to_back(url)
|
33
|
+
link_to_default(:back, url, class: button_class('secondary'))
|
34
|
+
end
|
35
|
+
|
36
|
+
def link_to_show(url)
|
37
|
+
link_to_default(:show, url, class: button_class('dark'))
|
38
|
+
end
|
39
|
+
|
40
|
+
def link_to_destroy(url, html_options = {})
|
41
|
+
html_options.merge!(method: :delete,
|
42
|
+
'data-confirm' => DESTROY_CONFIRM_MESSAGE,
|
43
|
+
class: button_class('danger', html_options[:class]))
|
44
|
+
|
45
|
+
link_to_default(:destroy, url, html_options)
|
46
|
+
end
|
47
|
+
|
48
|
+
def link_to_default(type, url, html_options = {})
|
49
|
+
text = t("menu.links.#{type}")
|
50
|
+
html_options = html_options.merge(title: strip_tags(text),
|
51
|
+
data: { tooltip: 'top' })
|
52
|
+
|
53
|
+
link_to(app_icon_text(t("menu.icons.#{type}"), text), url, html_options)
|
54
|
+
end
|
55
|
+
|
56
|
+
def button_class(type, addicional_class = nil)
|
57
|
+
"#{PREFIX_BUTTON_CLASS}#{type} #{addicional_class}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module MaterialDesignIconsHelper
|
5
|
+
def md_icon(icon, options = {})
|
6
|
+
icon_classes = icon.to_s.split(' ')
|
7
|
+
icon = icon_classes.shift
|
8
|
+
|
9
|
+
content_tag :i, class: md_classes(icon, options) do
|
10
|
+
t("icons_alias.#{icon}", default: icon)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def md_icon_text(icon, text, options = {})
|
15
|
+
content_tag :span do
|
16
|
+
concat md_icon(icon, options)
|
17
|
+
concat " #{text}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def md_classes(icon, options = {})
|
22
|
+
app_icon_classes(icon, 'material-icons', 'md', options)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module TranslationHelper
|
5
|
+
##
|
6
|
+
# Public: Translate a model name.
|
7
|
+
#
|
8
|
+
# model: Model class.
|
9
|
+
# count: Count.
|
10
|
+
#
|
11
|
+
# Examples:
|
12
|
+
#
|
13
|
+
# <%= tm Post %>
|
14
|
+
# # => 'Artigo'
|
15
|
+
#
|
16
|
+
# <%= tm Post, 2 %>
|
17
|
+
# # => 'Artigos'
|
18
|
+
#
|
19
|
+
# Returns translated model.
|
20
|
+
def translate_model_name(model, count = 1)
|
21
|
+
model.model_name.human(count: count)
|
22
|
+
end
|
23
|
+
alias tm translate_model_name
|
24
|
+
|
25
|
+
##
|
26
|
+
# Public: Translate a model name pluralized.
|
27
|
+
#
|
28
|
+
# model: Model class.
|
29
|
+
#
|
30
|
+
# Examples:
|
31
|
+
#
|
32
|
+
# <%= tm Post %>
|
33
|
+
# # => 'Artigos'
|
34
|
+
#
|
35
|
+
# Returns translated model pluralized.
|
36
|
+
def translate_model_name_pluralized(model)
|
37
|
+
translate_model_name(model, 2)
|
38
|
+
end
|
39
|
+
alias tmp translate_model_name_pluralized
|
40
|
+
|
41
|
+
##
|
42
|
+
# Public: Translate a model attribute.
|
43
|
+
#
|
44
|
+
# model: Model class.
|
45
|
+
# attribute: Attribute name.
|
46
|
+
# count: Count.
|
47
|
+
#
|
48
|
+
# Examples
|
49
|
+
#
|
50
|
+
# <%= ta Post, :title %>
|
51
|
+
# # => 'Titulo'
|
52
|
+
#
|
53
|
+
# <%= ta Post, :title, 2 %>
|
54
|
+
# # => 'Titulos'
|
55
|
+
#
|
56
|
+
# Returns translated model's attribute.
|
57
|
+
def translate_model_attribute(model, attribute, count = 1)
|
58
|
+
model.human_attribute_name(attribute, count: count)
|
59
|
+
end
|
60
|
+
alias ta translate_model_attribute
|
61
|
+
|
62
|
+
##
|
63
|
+
# Public: Translate a boolean attribute.
|
64
|
+
#
|
65
|
+
# value: TrueClass or FalseClass.
|
66
|
+
#
|
67
|
+
# Examples
|
68
|
+
#
|
69
|
+
# <%= tb true %>
|
70
|
+
# # => 'Sim'
|
71
|
+
#
|
72
|
+
# <%= tb false %>
|
73
|
+
# # => 'Nao'
|
74
|
+
#
|
75
|
+
# Returns translated boolean's attribute.
|
76
|
+
def translate_boolean(value)
|
77
|
+
value ? t('boolean.truly') : t('boolean.falsely')
|
78
|
+
end
|
79
|
+
alias tb translate_boolean
|
80
|
+
|
81
|
+
##
|
82
|
+
# Public: Translate a boolean attribute in an icon.
|
83
|
+
#
|
84
|
+
# value: TrueClass or FalseClass.
|
85
|
+
#
|
86
|
+
# Examples
|
87
|
+
#
|
88
|
+
# <%= tbi true %>
|
89
|
+
# # => '<i class="fa fa-check text-success"></i>'
|
90
|
+
#
|
91
|
+
# <%= tbi false %>
|
92
|
+
# # => '<i class="fa fa-times text-danger"></i>'
|
93
|
+
#
|
94
|
+
# Returns translated boolean's attribute in an icon.
|
95
|
+
def translate_boolean_in_icon(value)
|
96
|
+
if value
|
97
|
+
content_tag(:span, '✓', class: 'text-success')
|
98
|
+
else
|
99
|
+
content_tag(:span, '×', class: 'text-danger')
|
100
|
+
end
|
101
|
+
end
|
102
|
+
alias tbi translate_boolean_in_icon
|
103
|
+
|
104
|
+
##
|
105
|
+
# Public: Translate a boolean attribute in an icon.
|
106
|
+
#
|
107
|
+
# value: TrueClass or FalseClass.
|
108
|
+
#
|
109
|
+
# Examples
|
110
|
+
#
|
111
|
+
# <%= tbci true %>
|
112
|
+
# # => '<i class="fa fa-check-square-o text-default"></i>'
|
113
|
+
#
|
114
|
+
# <%= tbci false %>
|
115
|
+
# # => '<i class="fa fa-square-o text-default"></i>'
|
116
|
+
#
|
117
|
+
# Returns translated boolean's attribute in an icon.
|
118
|
+
def translate_boolean_in_check_box_icon(value)
|
119
|
+
if value
|
120
|
+
app_icon('check', class: 'text-success')
|
121
|
+
else
|
122
|
+
app_icon('times', class: 'text-danger')
|
123
|
+
end
|
124
|
+
end
|
125
|
+
alias tbci translate_boolean_in_check_box_icon
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Interage
|
4
|
+
module VersionHelper
|
5
|
+
def app_version
|
6
|
+
return if app_text_version.blank?
|
7
|
+
|
8
|
+
content_tag :div, app_text_version, id: 'app-version'
|
9
|
+
end
|
10
|
+
|
11
|
+
def app_text_version
|
12
|
+
return unless file_version_exist?
|
13
|
+
|
14
|
+
"#{app_name} - v#{File.read('VERSION').strip}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def file_version_exist?
|
18
|
+
File.exist?('VERSION')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|