module Bemer::SimpleForm::Inputs

Public Class Methods

new(builder, attribute_name, column, input_type, options = {}) click to toggle source
Calls superclass method
# File lib/bemer/simple_form/inputs.rb, line 9
def initialize(builder, attribute_name, column, input_type, options = {})
  super

  bemify_input!
end

Protected Instance Methods

add_input_type_modifiers!(namespace, options) click to toggle source

rubocop:enable Metrics/LineLength

# File lib/bemer/simple_form/inputs.rb, line 56
def add_input_type_modifiers!(namespace, options)
  return if Bemer::SimpleForm.input_type_modifiers_for_suffix_namespaces.exclude?(namespace)

  options[:mods] = Array.wrap(options[:mods])

  options[:mods].push(*additional_classes)
end
bem_options_for(namespace) click to toggle source
# File lib/bemer/simple_form/inputs.rb, line 64
def bem_options_for(namespace)
  namespace.eql?(:input_html) ? @input_html_options : @options[namespace] ||= {}
end
bemify_input!() click to toggle source
# File lib/bemer/simple_form/inputs.rb, line 21
def bemify_input! # rubocop:disable Metrics/AbcSize
  return unless block_entity

  default_name = options.delete(:elem)

  Bemer::SimpleForm.bemify_suffix_namespaces.each do |namespace|
    elem    = extract_elem_name_for!(namespace, default_name)
    options = extract_bem_options_for!(namespace)

    add_input_type_modifiers!(namespace, options)

    elem_entity = ::Bemer::EntityBuilder.new(block_entity.block, elem, options)

    bem_options_for(namespace).merge!(elem_entity.attrs).delete(:block)
  end
end
block_entity() click to toggle source
# File lib/bemer/simple_form/inputs.rb, line 17
def block_entity
  @block_entity ||= @options.delete(:block_entity)
end
extract_bem_cascade!(options) click to toggle source
# File lib/bemer/simple_form/inputs.rb, line 80
def extract_bem_cascade!(options)
  bem_cascade = options.delete(:bem_cascade)

  bem_cascade.nil? ? block_entity.instance_variable_get(:@bem_cascade) : bem_cascade
end
extract_bem_options_for!(namespace) click to toggle source
# File lib/bemer/simple_form/inputs.rb, line 68
def extract_bem_options_for!(namespace)
  bem_options = bem_options_for(namespace)
  bem         = bem_options.delete(:bem)
  bem_cascade = extract_bem_cascade!(bem_options)
  css_classes = [bem_options.delete(:cls), bem_options.delete(:class)]
  js          = bem_options.delete(:js)
  mix         = bem_options.delete(:mix)
  mods        = bem_options.delete(:mods)

  { bem: bem, js: js, mods: mods, mix: mix, bem_cascade: bem_cascade, cls: css_classes }
end
extract_elem_name_for!(namespace, default_name) click to toggle source

rubocop:disable Metrics/LineLength

# File lib/bemer/simple_form/inputs.rb, line 39
def extract_elem_name_for!(namespace, default_name) # rubocop:disable Metrics/AbcSize
  elem = bem_options_for(namespace).delete(:elem)

  return elem unless elem.nil?

  elem = default_name.nil? ? reflection_or_attribute_name : default_name

  return elem if Bemer.bem_class(block_entity.block, elem).blank?

  suffix = namespace.to_s.chomp('_html') unless namespace.eql?(:input_html)

  namespaced_elem = [elem, suffix].compact.join('_').to_sym

  default_name.nil? ? Bemer::SimpleForm.transform_element_name(namespace, block_entity.block, namespaced_elem, elem) : namespaced_elem
end