Sha256: a5b7baf0afe27c51614bcd8b0fb76a998c2384b43ab9464b1117b2b27d4d10fa

Contents?: true

Size: 1.48 KB

Versions: 1

Compression:

Stored size: 1.48 KB

Contents

require 'simple_form_with_client_validation/core_ext/regexp'

module SimpleFormWithClientValidation
  module Components
    # Needs to be enabled in order to do automatic lookups.
    module Pattern
      def pattern
        input_html_options[:pattern] ||= pattern_source
        input_html_options[:'data-pattern'] = input_html_options[:pattern]
        input_html_options[:'data-pattern-message'] = options[:'data-pattern-message'] || pattern_error_message
        nil
      end

      private

      def pattern_error_message

        pattern_error = options[:'data-pattern-message']
        if pattern_error.is_a?(String)
          pattern_error
        elsif pattern_validator = find_pattern_validator
          if pattern_validator.options.has_key?(:message)
             pattern_validator.options[:message]
          else
            ""
          end
        end
      end

      def pattern_source
        pattern = options[:pattern]
        if pattern.is_a?(String)
          pattern
        elsif pattern_validator = find_pattern_validator
          pattern = evaluate_format_validator_option(pattern_validator.options[:with]).to_javascript
          pattern.slice(1,pattern.length-2)
        end
      end

      def find_pattern_validator
        find_validator(ActiveModel::Validations::FormatValidator)
      end

      def evaluate_format_validator_option(option)
        if option.respond_to?(:call)
          option.call(object)
        else
          option
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simple_form_with_client_validation-0.0.2 lib/simple_form_with_client_validation/components/pattern.rb