Class: DBI::ColumnInfo

Inherits:
Hash
  • Object
show all
Defined in:
lib/dbi/columninfo.rb

Overview

This represents metadata for columns within a given table, such as the data type, whether or not the the column is a primary key, etc.

ColumnInfo is a delegate of Hash, but represents its keys indifferently, coercing all strings to symbols. It also has ostruct-like features, f.e.:

h = ColumnInfo.new({ "foo" => "bar" })
h[:foo] => "bar"
h["foo"] => "bar"
h.foo => "bar"

All of these forms have assignment forms as well.

Class Method Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (ColumnInfo) initialize(hash = nil)

Create a new ColumnInfo object.

If no Hash is provided, one will be created for you. The hash will be shallow cloned for storage inside the object, and an attempt will be made to convert all string keys to symbols.

In the event that both string and symbol keys are provided in the initial hash, we cannot safely route around collisions and therefore a TypeError is raised.



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/dbi/columninfo.rb', line 37

def initialize(hash=nil)
    @hash = hash.dup rescue nil
    @hash ||= Hash.new

    # coerce all strings to symbols
    @hash.each_key do |x|
        if x.kind_of? String
            sym = x.to_sym
            if @hash.has_key? sym
                raise ::TypeError, 
                    "#{self.class.name} may construct from a hash keyed with strings or symbols, but not both" 
            end
            @hash[sym] = @hash[x]
            @hash.delete(x)
        end
    end

    super(@hash)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

- (Object) method_missing(sym, value = nil)



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/dbi/columninfo.rb', line 69

def method_missing(sym, value=nil)
    if sym.to_s =~ /=$/
        sym = sym.to_s.sub(/=$/, '').to_sym
        @hash[sym] = value
    elsif sym.to_s =~ /\?$/
        sym = sym.to_s.sub(/\?$/, '').to_sym
        @hash[sym]
    else
        @hash[sym]
    end
end

Class Method Details

+ (Object) deprecated_alias(target, source)

Aliases - XXX soon to be deprecated



82
83
84
85
# File 'lib/dbi/columninfo.rb', line 82

def self.deprecated_alias(target, source) # :nodoc:
    define_method(target) { |*args| method_missing(source, *args) }
    deprecate target 
end

Instance Method Details

- (Object) [](key)



57
58
59
# File 'lib/dbi/columninfo.rb', line 57

def [](key)
    @hash[key.to_sym]
end

- (Object) []=(key, value)



61
62
63
# File 'lib/dbi/columninfo.rb', line 61

def []=(key, value)
    @hash[key.to_sym] = value
end

- (Object) default

:nodoc; XXX hack to get around Hash#default



65
66
67
# File 'lib/dbi/columninfo.rb', line 65

def default() # :nodoc; XXX hack to get around Hash#default
    method_missing(:default)
end