Sha256: c0703b8132e822ae50558a103b211df672dd3f63e84a8604ff1b42190c057974

Contents?: true

Size: 1.32 KB

Versions: 48

Compression:

Stored size: 1.32 KB

Contents

require 'incline/number_formats'
require 'active_record'

module Incline::Extensions
  ##
  # Patches the ActiveRecord Integer type to be able to accept more numbers.
  #
  # Specifically this will allow comma delimited numbers to be provided to active record models.
  module IntegerValue

    ##
    # Patches the ActiveRecord Integer type.
    def self.included(base) #:nodoc:
      base.class_eval do

        private

        undef cast_value

        def cast_value(value)
          begin
            case value
              when true then 1
              when false then 0
              when ::String
                # 1,234.56789
                if value =~ Incline::NumberFormats::WITH_DELIMITERS
                  value = value.gsub(',', '')
                end
                if value =~ Incline::NumberFormats::WITHOUT_DELIMITERS
                  value.to_i
                else
                  nil
                end
              else
                if value.respond_to?(:to_i)
                  value.to_i
                else
                  nil
                end
            end
          rescue
            Incline::Log::warn "Failed to parse #{value.inspect}: #{$!.message}"
            nil
          end
        end

      end
    end

  end
end

ActiveRecord::Type::Integer.include Incline::Extensions::IntegerValue

Version data entries

48 entries across 48 versions & 1 rubygems

Version Path
incline-0.3.14 lib/incline/extensions/integer_value.rb
incline-0.3.13 lib/incline/extensions/integer_value.rb
incline-0.3.12 lib/incline/extensions/integer_value.rb
incline-0.3.11 lib/incline/extensions/integer_value.rb
incline-0.3.10 lib/incline/extensions/integer_value.rb
incline-0.3.9 lib/incline/extensions/integer_value.rb
incline-0.3.8 lib/incline/extensions/integer_value.rb
incline-0.3.7 lib/incline/extensions/integer_value.rb
incline-0.3.6 lib/incline/extensions/integer_value.rb
incline-0.3.5 lib/incline/extensions/integer_value.rb
incline-0.3.4 lib/incline/extensions/integer_value.rb
incline-0.3.3 lib/incline/extensions/integer_value.rb
incline-0.3.2 lib/incline/extensions/integer_value.rb
incline-0.3.1 lib/incline/extensions/integer_value.rb
incline-0.3.0 lib/incline/extensions/integer_value.rb
incline-0.2.36 lib/incline/extensions/integer_value.rb
incline-0.2.35 lib/incline/extensions/integer_value.rb
incline-0.2.34 lib/incline/extensions/integer_value.rb
incline-0.2.28 lib/incline/extensions/integer_value.rb
incline-0.2.27 lib/incline/extensions/integer_value.rb