module JunglePath::DBModel::Params

Public Class Methods

convert_to_type(params, columns) click to toggle source
# File lib/jungle_path/db_model/params.rb, line 19
def self.convert_to_type(params, columns)
        #params must be hash of symbols (as keys) and values
        p = {}
        params = params.to_hash
        params.each do |k, v|
                column = columns[k]
                if column and v
                        #puts "column, type: #{k} #{column.type}."
                        if column.type == :integer or column.base_type == :integer
                                p[k] = v.to_i
                        elsif column.type == :timestamp and v.class == String
                                p[k] = Time.parse(v).utc
                        elsif column.type == :timestamp_local and v.class == String # experimental, probably won't use...
                                p[k] = Time.parse(v)
                        elsif column.type == :date and v.class == String
                                p[k] = Date.parse(v).to_time
                        elsif column.type == :date and v.class == Date
                                p[k] = v.to_time
                        elsif column.type == :boolean
                                p[k] = to_bool(v)
                        elsif (column.type == :string or column.base_type == :string) and v.class == String and v.strip.empty?
                                # treat empty/whitespace only strings as nil.
                                p[k] = nil
                        else
                                p[k] = v
                        end
                else
                        p[k] = v
                end
        end
        p
end
symbolize(params) click to toggle source
# File lib/jungle_path/db_model/params.rb, line 14
def self.symbolize(params)
        p = params.to_hash
        Hash[p.map {|k, v| [k.to_sym, v] }]
end
to_bool(value) click to toggle source
# File lib/jungle_path/db_model/params.rb, line 52
def self.to_bool(value)
        return false if value == nil
        return true  if value == true   || value =~ (/(true|t|yes|y|on|1)$/i)
        return false if value == false  || value.empty? || value =~ (/(false|f|no|n|off|0)$/i)
        raise ArgumentError.new("invalid value for Boolean: \"#{value}\"")
end
transform(params, columns) click to toggle source
# File lib/jungle_path/db_model/params.rb, line 4
def self.transform(params, columns)
        # sinatra params come as string keys with string values.
        # Convert values to various types based on Schema column definitions.
        # Convert keys to symbols.
        p = params.to_hash
        p = symbolize(p)
        p = convert_to_type(p, columns)
        p
end