Class: Cosmos::CSV
Overview
Reads in a comma separated values (CSV) configuration file and allows access via the Hash bracket syntax. It allows the user to write back data to the configuration file to store state.
Instance Attribute Summary collapse
-
#archive_file ⇒ String
readonly
The name of the archive file.
Instance Method Summary collapse
-
#[](index) ⇒ Array<String>
The values in columns 2-n corresponding to the given key in column 1.
-
#bool(item, index = 0) ⇒ Boolean
(also: #boolean)
Convenience method to access a value by key and convert it to a boolean.
-
#float(item, index = 0) ⇒ Float
Convenience method to access a value by key and convert it to a float.
-
#initialize(input_file) ⇒ CSV
constructor
A new instance of CSV.
-
#int(item, index = 0) ⇒ Integer
(also: #integer)
Convenience method to access a value by key and convert it to an integer.
-
#keys ⇒ Array<String>
All the values in the first column of the CSV file.
-
#string(item, index = 0) ⇒ String
(also: #str)
Convenience method to access a value by key and convert it to a string.
-
#symbol(item, index = 0) ⇒ Symbol
(also: #sym)
Convenience method to access a value by key and convert it to a symbol.
Constructor Details
#initialize(input_file) ⇒ CSV
Returns a new instance of CSV.
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/cosmos/utilities/csv.rb', line 31 def initialize(input_file) @filename = input_file @hash = {} @archive = nil @archive_file = "" Object::CSV.read(input_file).each do |line| next if line[0].strip()[0] == '#' # Ignore Ruby comment lines @hash[line[0]] = line[1..-1] end end |
Instance Attribute Details
#archive_file ⇒ String (readonly)
Returns The name of the archive file.
28 29 30 |
# File 'lib/cosmos/utilities/csv.rb', line 28 def archive_file @archive_file end |
Instance Method Details
#[](index) ⇒ Array<String>
Returns The values in columns 2-n corresponding to the given key in column 1. The values are always returned as Strings so the user must convert if necessary.
52 53 54 |
# File 'lib/cosmos/utilities/csv.rb', line 52 def [](index) @hash[index] end |
#bool(item, index = 0) ⇒ Boolean Also known as: boolean
Convenience method to access a value by key and convert it to a boolean. The csv value must be ‘TRUE’ or ‘FALSE’ (case doesn’t matter) and will be converted to Ruby true or false values.
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/cosmos/utilities/csv.rb', line 63 def bool(item, index = 0) raise "#{item} not found" unless keys.include?(item) if Range === index @hash[item][index].map do |x| case x.upcase when 'TRUE' true when 'FALSE' false else raise "#{item} value of #{x} not boolean. Must be 'TRUE' 'or 'FALSE'." end end else case @hash[item][index].upcase when 'TRUE' true when 'FALSE' false else raise "#{item} value of #{@hash[item][index]} not boolean. Must be 'TRUE' 'or 'FALSE'." end end end |
#float(item, index = 0) ⇒ Float
Convenience method to access a value by key and convert it to a float
111 112 113 114 115 116 117 118 119 |
# File 'lib/cosmos/utilities/csv.rb', line 111 def float(item, index = 0) raise "#{item} not found" unless keys.include?(item) if Range === index @hash[item][index].map { |x| x.to_f } else @hash[item][index].to_f end end |
#int(item, index = 0) ⇒ Integer Also known as: integer
Convenience method to access a value by key and convert it to an integer
95 96 97 98 99 100 101 102 103 |
# File 'lib/cosmos/utilities/csv.rb', line 95 def int(item, index = 0) raise "#{item} not found" unless keys.include?(item) if Range === index @hash[item][index].map { |x| x.to_i } else @hash[item][index].to_i end end |
#keys ⇒ Array<String>
Returns All the values in the first column of the CSV file. These values are used as keys to access the data in columns 2-n.
45 46 47 |
# File 'lib/cosmos/utilities/csv.rb', line 45 def keys @hash.keys end |
#string(item, index = 0) ⇒ String Also known as: str
Convenience method to access a value by key and convert it to a string
126 127 128 129 130 131 132 133 134 |
# File 'lib/cosmos/utilities/csv.rb', line 126 def string(item, index = 0) raise "#{item} not found" unless keys.include?(item) if Range === index @hash[item][index].map { |x| x.to_s } else @hash[item][index].to_s end end |
#symbol(item, index = 0) ⇒ Symbol Also known as: sym
Convenience method to access a value by key and convert it to a symbol
142 143 144 145 146 147 148 149 150 |
# File 'lib/cosmos/utilities/csv.rb', line 142 def symbol(item, index = 0) raise "#{item} not found" unless keys.include?(item) if Range === index @hash[item][index].map { |x| x.intern } else @hash[item][index].intern end end |