Class: OpenC3::CSV

Inherits:
Object show all
Defined in:
lib/openc3/utilities/csv.rb

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

Instance Method Summary collapse

Constructor Details

#initialize(input_file) ⇒ CSV



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/openc3/utilities/csv.rb', line 34

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_fileString (readonly)



31
32
33
# File 'lib/openc3/utilities/csv.rb', line 31

def archive_file
  @archive_file
end

Instance Method Details

#[](index) ⇒ Array<String>



55
56
57
# File 'lib/openc3/utilities/csv.rb', line 55

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.



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/openc3/utilities/csv.rb', line 66

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



114
115
116
117
118
119
120
121
122
# File 'lib/openc3/utilities/csv.rb', line 114

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



98
99
100
101
102
103
104
105
106
# File 'lib/openc3/utilities/csv.rb', line 98

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

#keysArray<String>



48
49
50
# File 'lib/openc3/utilities/csv.rb', line 48

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



129
130
131
132
133
134
135
136
137
# File 'lib/openc3/utilities/csv.rb', line 129

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



145
146
147
148
149
150
151
152
153
# File 'lib/openc3/utilities/csv.rb', line 145

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