Sha256: c3fd7cdaefddbb697c54629714df14349cb934777f7e2617ca5f4efe4f28200f
Contents?: true
Size: 1.57 KB
Versions: 1
Compression:
Stored size: 1.57 KB
Contents
# frozen_string_literal: true require 'active_support/core_ext/object/blank' require 'active_support/core_ext/hash/indifferent_access' module Bemer class ModifierList def initialize(block, element, mods) @bem_class = Bemer.bem_class(block, element) @modifiers = nil @mods = mods end def to_a @mods_as_array ||= to_h.map { |name, value| build_css_class(name, value) } end def to_s @mods_as_string ||= to_a.join(' ') end def to_h modifiers.nil? ? build_modifiers : modifiers end protected attr_reader :modifiers def build_modifiers @modifiers = ActiveSupport::HashWithIndifferentAccess.new return modifiers if @mods.blank? || @bem_class.blank? Array(@mods).each do |mods| next if mods.blank? mods.is_a?(Hash) ? mods.each { |attrs| add_modifier(attrs) } : add_modifier(mods) end modifiers end def add_modifier(attrs) name, value = normalize(attrs) return if name.blank? || value.blank? modifiers[name] = value end def normalize(attrs) name, value = *attrs, true value = Bemer.css_class(value) unless [TrueClass, FalseClass, NilClass].include?(value.class) [Bemer.css_class(name), value] end def build_css_class(name, value) # rubocop:disable Metrics/LineLength modifier = value.instance_of?(TrueClass) ? name : [name, value].join(Bemer.modifier_value_separator) # rubocop:enable Metrics/LineLength [@bem_class, modifier].join(Bemer.modifier_name_separator) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
bemer-0.1.0 | lib/bemer/modifier_list.rb |