Sha256: 33d138a11ae342d665ee296cd9f6d8dbb714d9e97039fb0c6b041dba70364dae

Contents?: true

Size: 1.69 KB

Versions: 3

Compression:

Stored size: 1.69 KB

Contents

# frozen_string_literal: true

module ActiveDryForm
  class Input

    def initialize(builder, builder_method, field, options)
      @builder = builder
      @form_object = builder.object
      @template = builder.instance_variable_get(:@template)

      @builder_method = builder_method
      @field = field

      @label_opts = options[:label]
      @label_text = options[:label_text]
      @hint_text = options[:hint]
      @required = options[:required]
      @input_user_options = options.except(:label, :hint, :label_text)
    end

    def css_classes
      [
        ActiveDryForm.config.css_classes.input,
        @builder_method,
        (ActiveDryForm.config.css_classes.input_required if @required),
        (ActiveDryForm.config.css_classes.input_error if error?(@field)),
      ].compact
    end

    def wrap_tag(input, label_last: nil)
      @template.content_tag(:div, class: css_classes) do
        [
          label_last ? input : label,
          label_last ? label : input,
          hint_text,
          error_text,
        ].compact.join.html_safe
      end
    end

    def label
      @builder.label(@field, @label_text) unless @label_opts == false
    end

    def hint_text
      return unless @hint_text

      @template.content_tag(:small, @hint_text, class: ActiveDryForm.config.css_classes.hint)
    end

    def error_text
      return unless error?(@field)

      obj_error_text =
        case e = @form_object.errors[@field]
        when Hash then e.values
        else e
        end

      @template.content_tag(:div, obj_error_text.join('<br />').html_safe, class: ActiveDryForm.config.css_classes.error)
    end

    def error?(field)
      @form_object.errors.key?(field)
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
active_dry_form-1.2.1 lib/active_dry_form/input.rb
active_dry_form-1.2.0 lib/active_dry_form/input.rb
active_dry_form-1.1.1 lib/active_dry_form/input.rb