Sha256: 900cad7cbafd912e25d842f66d8a45f6d34f138e1bfa8222b733ab91ba62b118

Contents?: true

Size: 884 Bytes

Versions: 1

Compression:

Stored size: 884 Bytes

Contents

# base class for objects representing a single row in a query result
class QueryRow

  attr_reader :raw

  def initialize(result, raw)
    @result = result
    @raw = raw
  end

  def [](key)
    @raw[key.to_s]
  end

  def []=(key, value)
    @raw[key.to_s] = value
  end

  def inspect
    '{' + @result.columns.map{|col| "#{col[:name]}=#{self.send(col[:name])}"}.join(', ') + '}'
  end

  def serialize_value(column)
    value = self.send(column[:name])
    case column[:type]
    when :time
      value&.to_s
    else
      value
    end
  end

  def as_json(options={})
    attrs = {}
    @result.columns.each do |col|
      attrs[col[:name]] = self.serialize_value col
    end
    attrs
  end

  def keys
    @result.column_names
  end

  # this is needed so that we can call defined_method outside of the subclass definition
  class << self
    public :define_method
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sql_builder-1.3.0 lib/sql_builder/query_row.rb