Module: TRMNL::Liquid::Filters

Defined in:
lib/trmnl/liquid/filters.rb

Overview

rubocop:todo Metrics/ModuleLength

Instance Method Summary collapse

Instance Method Details

#append_random(value) ⇒ Object



15
# File 'lib/trmnl/liquid/filters.rb', line 15

def append_random(value) = "#{value}#{SecureRandom.hex 2}"

#days_ago(value, timezone = "Etc/UTC") ⇒ Object



17
18
19
# File 'lib/trmnl/liquid/filters.rb', line 17

def days_ago value, timezone = "Etc/UTC"
  TZInfo::Timezone.get(timezone).now.to_date - value.to_i
end

#find_by(collection, key, value, fallback = nil) ⇒ Object

:reek:ControlParameter rubocop:todo Metrics/ParameterLists



25
26
27
# File 'lib/trmnl/liquid/filters.rb', line 25

def find_by collection, key, value, fallback = nil
  collection.find { |obj| obj[key] == value } || fallback
end

#group_by(collection, key) ⇒ Object



21
# File 'lib/trmnl/liquid/filters.rb', line 21

def group_by(collection, key) = collection.group_by { it[key] }

#json(value) ⇒ Object

rubocop:enable Style/OptionHash



92
# File 'lib/trmnl/liquid/filters.rb', line 92

def json(value) = JSON.generate value

#l_date(value, format, locale = "en") ⇒ Object

:reek:FeatureEnvy



69
70
71
72
73
74
# File 'lib/trmnl/liquid/filters.rb', line 69

def l_date value, format, locale = "en"
  with_i18n value.to_s do |i18n|
    format = format.to_sym unless format.include? "%"
    i18n.l to_time(value), format:, locale:
  end
end

#l_word(word, locale) ⇒ Object

rubocop:enable Metrics/ParameterLists



64
65
66
# File 'lib/trmnl/liquid/filters.rb', line 64

def l_word word, locale
  with_i18n("custom_plugins.#{word}") { |i18n| i18n.t "custom_plugins.#{word}", locale: }
end

#map_to_i(collection) ⇒ Object



76
# File 'lib/trmnl/liquid/filters.rb', line 76

def map_to_i(collection) = collection.map(&:to_i)

#markdown_to_html(markdown) ⇒ Object

rubocop:enable Metrics/ParameterLists



30
31
32
33
34
35
# File 'lib/trmnl/liquid/filters.rb', line 30

def markdown_to_html markdown
  markdown ||= ""
  renderer = Redcarpet::Render::HTML.new _render_options = {}
  service = Redcarpet::Markdown.new renderer, _extensions = {}
  service.render markdown
end

#number_to_currency(number, unit_or_locale = "$", delimiter = ",", separator = ".", precision = 2) ⇒ Object

:reek:TooManyStatements rubocop:todo Metrics/ParameterLists



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/trmnl/liquid/filters.rb', line 47

def number_to_currency number,
                       unit_or_locale = "$",
                       delimiter = ",",
                       separator = ".",
                       precision = 2
  if RailsHelpers.respond_to? :number_to_currency
    cur_switcher = with_i18n :unit do |i18n|
      i18n.available_locales.include?(unit_or_locale.to_sym) ? :locale : :unit
    end
    opts = {delimiter:, separator:, precision:}.merge cur_switcher => unit_or_locale
    RailsHelpers.number_to_currency(number, **opts)
  else
    Fallback.number_to_currency number, unit_or_locale, delimiter, separator, precision
  end
end

#number_with_delimiter(number, delimiter = ",", separator = ".") ⇒ Object



37
38
39
40
41
42
43
# File 'lib/trmnl/liquid/filters.rb', line 37

def number_with_delimiter number, delimiter = ",", separator = "."
  if RailsHelpers.respond_to? :number_with_delimiter
    RailsHelpers.number_with_delimiter number, delimiter: delimiter, separator: separator
  else
    Fallback.number_with_delimiter number, delimiter, separator
  end
end

#ordinalize(value, strftime_format) ⇒ Object

:reek:FeatureEnvy



115
116
117
118
119
120
121
# File 'lib/trmnl/liquid/filters.rb', line 115

def ordinalize value, strftime_format
  time = to_time value
  day = time.day
  ordinal_day = day.respond_to?(:ordinalize) ? day.ordinalize : Fallback.ordinalize(day)

  time.strftime strftime_format.gsub("<<ordinal_day>>", ordinal_day)
end

#parse_json(value) ⇒ Object



94
# File 'lib/trmnl/liquid/filters.rb', line 94

def parse_json(value) = JSON.parse value

#pluralize(singular, count, options = {}) ⇒ Object

:reek:FeatureEnvy rubocop:todo Style/OptionHash



80
81
82
83
84
85
86
87
88
89
# File 'lib/trmnl/liquid/filters.rb', line 80

def pluralize singular, count, options = {}
  plural = options["plural"]
  locale = options["locale"] || with_i18n(nil, &:locale) || "en"

  if RailsHelpers.respond_to? :pluralize
    RailsHelpers.pluralize count, singular, plural: plural, locale: locale
  else
    Fallback.pluralize count, singular, plural
  end
end

#qr_code(data, size = 11, level = "", view = "responsive") ⇒ Object

rubocop:todo Metrics/ParameterLists rubocop:todo Metrics/MethodLength



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/trmnl/liquid/filters.rb', line 125

def qr_code data, size = 11, level = "", view = "responsive"
  level = "h" unless %w[l m q h].include? level.downcase

  qrcode = RQRCode::QRCode.new(data, level:)
  qrcode.as_svg(
    color: "000",
    fill: "fff",
    shape_rendering: "crispEdges",
    module_size: size,
    use_path: true,
    viewbox: view == "responsive",
    svg_attributes: {
      class: "qr-code"
    }
  )
end

#sample(array) ⇒ Object



96
# File 'lib/trmnl/liquid/filters.rb', line 96

def sample(array) = array.sample

#where_exp(input, variable, expression) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/trmnl/liquid/filters.rb', line 100

def where_exp input, variable, expression
  return input unless input.respond_to? :select

  input = input.values if input.is_a? Hash
  condition = parse_condition expression

  @context.stack do
    input.select do |object|
      @context[variable] = object
      condition.evaluate @context
    end
  end || []
end