Class: DBI::ColumnInfo
- Inherits:
-
Hash
- Object
- Hash
- DBI::ColumnInfo
- 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.
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
-
#default ⇒ Object
:nodoc; XXX hack to get around Hash#default.
-
#initialize(hash = nil) ⇒ ColumnInfo
constructor
Create a new ColumnInfo object.
- #method_missing(sym, value = nil) ⇒ Object
Constructor Details
#initialize(hash = nil) ⇒ ColumnInfo
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
#method_missing(sym, value = nil) ⇒ Object
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 |
Instance Method Details
#[](key) ⇒ Object
57 58 59 |
# File 'lib/dbi/columninfo.rb', line 57 def [](key) @hash[key.to_sym] end |
#[]=(key, value) ⇒ Object
61 62 63 |
# File 'lib/dbi/columninfo.rb', line 61 def []=(key, value) @hash[key.to_sym] = value end |
#default ⇒ Object
: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 |