class Metanol::Meta::Base

Constants

ERR_FILTERS_WRONG_TYPE
ERR_FILTERS_WRONG_VALUE_TYPE
SUPPORTED_FILTERS

Attributes

name[R]
value[W]

Public Class Methods

filter_html(text) click to toggle source
# File lib/metanol/meta/base.rb, line 40
def self.filter_html(text)
  text = text.gsub(%r{<br/?>}, ' ')
  text.gsub(%r{</?\w+/?>}, '')
end
filter_overspaces(text) click to toggle source
# File lib/metanol/meta/base.rb, line 45
def self.filter_overspaces(text)
  text.gsub(/\ {2,}/, ' ')
end
filter_whitespaces(text) click to toggle source
# File lib/metanol/meta/base.rb, line 49
def self.filter_whitespaces(text)
  text.gsub(/\s/, ' ')
end
new(name, value, filters = []) click to toggle source
# File lib/metanol/meta/base.rb, line 14
def initialize(name, value, filters = [])
  @name = name.to_sym
  raise(NameError.new("The meta tag '#{@name}' isn't supported.", @name)) unless valid?(@name)

  @value = value
  self.filters = filters
end

Public Instance Methods

filters=(value) click to toggle source
# File lib/metanol/meta/base.rb, line 22
def filters=(value)
  @filters = validate_filters(value)
end
render() click to toggle source
# File lib/metanol/meta/base.rb, line 26
def render
  result = value
  return '' if result.blank?

  "<meta #{attr_name}=\"#{name}\" #{attr_value}=\"#{result}\" />"
end
value() click to toggle source
# File lib/metanol/meta/base.rb, line 33
def value
  result = @value
  return result if @filters.blank?

  filter_overspaces(filter_whitespaces(filter_html_tags(result)))
end

Private Instance Methods

attr_name() click to toggle source
# File lib/metanol/meta/base.rb, line 59
def attr_name
  'name'
end
attr_value() click to toggle source
# File lib/metanol/meta/base.rb, line 63
def attr_value
  'content'
end
filter_html_tags(result) click to toggle source
# File lib/metanol/meta/base.rb, line 87
def filter_html_tags(result)
  (@filters & %i[html clean]).presence ? self.class.filter_html(result) : result
end
filter_overspaces(result) click to toggle source
# File lib/metanol/meta/base.rb, line 95
def filter_overspaces(result)
  (@filters & %i[overspaces clean]).presence ? self.class.filter_overspaces(result) : result
end
filter_whitespaces(result) click to toggle source
# File lib/metanol/meta/base.rb, line 91
def filter_whitespaces(result)
  (@filters & %i[whitespaces clean]).presence ? self.class.filter_whitespaces(result) : result
end
valid?(_name) click to toggle source
# File lib/metanol/meta/base.rb, line 55
def valid?(_name)
  true
end
validate_filter(filter_value) click to toggle source
# File lib/metanol/meta/base.rb, line 81
def validate_filter(filter_value)
  return filter_value if SUPPORTED_FILTERS.include? filter_value

  raise(StandardError, "Only #{SUPPORTED_FILTERS.join(', ')} filters are supported.")
end
validate_filters(filters = []) click to toggle source
# File lib/metanol/meta/base.rb, line 67
def validate_filters(filters = [])
  result = []
  raise StandardError, ERR_FILTERS_WRONG_TYPE unless filters.is_a?(Array)

  begin
    filters.map(&:to_sym).each do |filter_value|
      result << validate_filter(filter_value)
    end
  rescue NoMethodError
    raise StandardError, ERR_FILTERS_WRONG_VALUE_TYPE
  end
  result
end