Sha256: c0e60c751b021d7aeda6a3680936bf4e06c5e48721b270e4cc888489846edb72

Contents?: true

Size: 662 Bytes

Versions: 7

Compression:

Stored size: 662 Bytes

Contents

module Gummi
  module Fields
    class SanitizedString < Virtus::Attribute

      def coerce(value)
        return nil if value.blank?
        sanitize_string_for_query(value.to_s)
      end

      def mapping
        { type: 'string' }
      end

      def sanitize_string_for_query(str)
        # Escape special characters
        escaped_characters = Regexp.escape('\/\\+-&|!(){}[]^~*?:')
        str = str.gsub(/([#{escaped_characters}])/) do |match|
          '\\'+match
        end

        # Escape odd quotes
        quote_count = str.count '"'
        str = str.gsub(/(.*)"(.*)/, '\1\"\3') if quote_count % 2 == 1
        str
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
gummi-0.1.2 lib/gummi/fields/sanitized_string.rb
gummi-0.1.1 lib/gummi/fields/sanitized_string.rb
gummi-0.1.0 lib/gummi/fields/sanitized_string.rb
gummi-0.0.9 lib/gummi/fields/sanitized_string.rb
gummi-0.0.8 lib/gummi/fields/sanitized_string.rb
gummi-0.0.7 lib/gummi/fields/sanitized_string.rb
gummi-0.0.6 lib/gummi/fields/sanitized_string.rb