Sha256: f5c0a2e330e854bc1ffc33fd614bd2c224c6ca045868551016943eca21066aa0

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

module EnumHelp
  module SimpleForm
    module BuilderExtension

      def default_input_type_with_enum(*args, &block)
        att_name = (args.first || @attribute_name).to_s
        return :enum if (args.last.is_a?(Hash) ? args.last[:as] : @options[:as]).nil? &&
                        object.class.respond_to?(att_name.pluralize)

        default_input_type_without_enum(*args, &block)
      end

    end

    module InputExtension

      def initialize(*args)
        super
        raise "Attribute '#{attribute_name}' has no enum class" unless enum = object.class.send(attribute_name.to_s.pluralize)
        collect = enum.collect{|k,v| [::I18n.t("enums.#{object.class.to_s.downcase}.#{attribute_name}.#{k}", default: k),k] }
        # collect.unshift [args.last[:prompt],''] if args.last.is_a?(Hash) && args.last[:prompt]

        if respond_to?(:input_options)
          input_options[:collection] = collect
        else
          @builder.options[:collection] = collect
        end
      end

    end

  end
end


class EnumHelp::SimpleForm::EnumInput < ::SimpleForm::Inputs::CollectionSelectInput
  include EnumHelp::SimpleForm::InputExtension
  def input_html_classes
    super.push('form-control')
  end
end

SimpleForm::FormBuilder.class_eval do
  include EnumHelp::SimpleForm::BuilderExtension

  map_type :enum, :to => EnumHelp::SimpleForm::EnumInput
  alias_method :collection_enum, :collection_select
  alias_method_chain :default_input_type, :enum
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
enum_help-0.0.4 lib/enum_help/simple_form.rb