Sha256: 817ab0fcffc028cd5c68623f2af568be6633c02e4bdb9a86a73f7b06293e8951

Contents?: true

Size: 1.26 KB

Versions: 7

Compression:

Stored size: 1.26 KB

Contents

module HstoreAccessor
  module Serialization
    InvalidDataTypeError = Class.new(StandardError)

    VALID_TYPES = [
      :boolean,
      :date,
      :datetime,
      :decimal,
      :float,
      :integer,
      :string
    ]

    DEFAULT_SERIALIZER = ->(value) { value.to_s }
    DEFAULT_DESERIALIZER = DEFAULT_SERIALIZER

    SERIALIZERS = {
      boolean: -> value { (value.to_s == "true").to_s },
      date: -> value { value && value.to_s },
      datetime: -> value { value && value.to_i }
    }
    SERIALIZERS.default = DEFAULT_SERIALIZER

    DESERIALIZERS = {
      boolean: -> value { TypeHelpers.cast(:boolean, value) },
      date: -> value { value && Date.parse(value) },
      decimal: -> value { value && BigDecimal.new(value) },
      float: -> value { value && value.to_f },
      integer: -> value { value && value.to_i },
      datetime: -> value { value && Time.at(value.to_i).in_time_zone }
    }
    DESERIALIZERS.default = DEFAULT_DESERIALIZER

    class << self
      def serialize(type, value, serializer=SERIALIZERS[type])
        return nil if value.nil?

        serializer.call(value)
      end

      def deserialize(type, value, deserializer=DESERIALIZERS[type])
        return nil if value.nil?

        deserializer.call(value)
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 3 rubygems

Version Path
hstore_accessor_moi_solutions-1.0.4 lib/hstore_accessor/serialization.rb
hstore_accessor-1.1.0 lib/hstore_accessor/serialization.rb
hstore_accessor_rails5-1.0.4 lib/hstore_accessor/serialization.rb
hstore_accessor-1.0.3 lib/hstore_accessor/serialization.rb
hstore_accessor-1.0.2 lib/hstore_accessor/serialization.rb
hstore_accessor-1.0.1 lib/hstore_accessor/serialization.rb
hstore_accessor-1.0.0 lib/hstore_accessor/serialization.rb