Sha256: 4bc7b38577a76068499867da3141b679f7e91b05ccf30375d7328e4cd813f278

Contents?: true

Size: 1.64 KB

Versions: 17

Compression:

Stored size: 1.64 KB

Contents

module ReactiveRecord
  # ActiveRecord column access and conversion helpers
  class Base
    def columns_hash
      model.columns_hash
    end

    def self.column_type(column_hash)
      column_hash && column_hash[:sql_type_metadata] && column_hash[:sql_type_metadata][:type]
    end

    def column_type(attr)
      Base.column_type(columns_hash[attr])
    end

    def convert_datetime(val)
      if val.is_a?(Numeric)
        Time.at(val)
      elsif val.is_a?(Time)
        val
      else
        Time.parse(val)
      end
    end

    alias convert_time convert_datetime
    alias convert_timestamp convert_datetime

    def convert_date(val)
      if val.is_a?(Time)
        Date.parse(val.strftime('%d/%m/%Y'))
      elsif val.is_a?(Date)
        val
      else
        Date.parse(val)
      end
    end

    def convert_boolean(val)
      !['false', false, nil, 0].include?(val)
    end

    def convert_integer(val)
      Integer(`parseInt(#{val})`)
    end

    alias convert_bigint convert_integer

    def convert_float(val)
      Float(val)
    end

    alias convert_decimal convert_float

    def convert_text(val)
      val.to_s
    end

    alias convert_string convert_text

    def self.serialized?
      @serialized_attrs ||= Hash.new { |h, k| h[k] = Hash.new }
    end

    def convert(attr, val)
      column_type = column_type(attr)
      return val if self.class.serialized?[model][attr] ||
                    !column_type || val.loading? ||
                    (!val && column_type != :boolean)
      conversion_method = "convert_#{column_type}"
      return send(conversion_method, val) if respond_to? conversion_method
      val
    end
  end
end

Version data entries

17 entries across 17 versions & 2 rubygems

Version Path
hyper-model-1.0.alpha1.8 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-1.0.alpha1.7 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-1.0.alpha1.6 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-1.0.alpha1.5 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-1.0.alpha1.4 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-0.99.6 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-1.0.alpha1.3 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-0.99.5 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-0.99.4 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-1.0.alpha1.2 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-1.0.alpha1.1 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-1.0.alpha1 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-0.99.3 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-0.99.2 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-0.99.1 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-model-0.99.0 lib/reactive_record/active_record/reactive_record/column_types.rb
hyper-mesh-1.0.0.lap28 lib/reactive_record/active_record/reactive_record/column_types.rb