Class: Quandl::Data::Format
- Inherits:
-
Object
- Object
- Quandl::Data::Format
- Defined in:
- lib/quandl/data/format.rb
Class Method Summary collapse
- .csv_to_array(data) ⇒ Object
- .data_has_rows?(data) ⇒ Boolean
- .data_missing_rows?(data) ⇒ Boolean
- .date_format?(data) ⇒ Boolean
- .date_strings_to_date(data) ⇒ Object
- .date_strings_to_jd(data) ⇒ Object
- .dates_to_jd(data) ⇒ Object
- .hash_to_array(data) ⇒ Object
-
.jd_strings_to_jd(data) ⇒ Object
DATES TO JULIAN #.
-
.jds_to_date(data) ⇒ Object
DATES TO DATE #.
- .parse(data) ⇒ Object
- .parse_date_string(row) ⇒ Object protected
- .parse_jd(row) ⇒ Object protected
- .parse_jd_string(row) ⇒ Object protected
- .recognized_date?(value) ⇒ Boolean
- .to_date(data) ⇒ Object
- .to_jd(data) ⇒ Object
-
.values_to_float(data) ⇒ Object
VALUES TO FLOAT #.
Class Method Details
.csv_to_array(data) ⇒ Object
21 22 23 24 25 26 27 |
# File 'lib/quandl/data/format.rb', line 21 def csv_to_array(data) if data.is_a?(String) data = data.gsub('\n', "\n") data = CSV.parse( data ) end data end |
.data_has_rows?(data) ⇒ Boolean
174 175 176 |
# File 'lib/quandl/data/format.rb', line 174 def data_has_rows?(data) data.is_a?(Array) && data[0].is_a?(Array) && data[0][0].present? end |
.data_missing_rows?(data) ⇒ Boolean
170 171 172 |
# File 'lib/quandl/data/format.rb', line 170 def data_missing_rows?(data) !data_has_rows?(data) end |
.date_format?(data) ⇒ Boolean
66 67 68 69 70 71 72 73 74 |
# File 'lib/quandl/data/format.rb', line 66 def date_format?(data) value = data[0][0] # julian date? return :date if value.is_a?(Date) return :jd if value.is_a?(Integer) return :date_string if value.is_a?(String) && value =~ /^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/ return :jd_string if value.kind_of?(String) && value.numeric? return :unknown end |
.date_strings_to_date(data) ⇒ Object
139 140 141 142 143 144 145 146 147 148 |
# File 'lib/quandl/data/format.rb', line 139 def date_strings_to_date(data) # skip when already formatted correctly return data if data_missing_rows?(data) || data[0][0].is_a?(Date) # otherwise cast string jds to int output = [] data.each_with_index do |row, index| output << parse_date_string(row) rescue raise_date_format_error!( row, index, :date_strings_to_date ) end output end |
.date_strings_to_jd(data) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/quandl/data/format.rb', line 112 def date_strings_to_jd(data) # skip when already formatted correctly return data if data_missing_rows?(data) || data[0][0].is_a?(Date) # otherwise cast string jds to int output = [] data.each_with_index do |row, index| row = parse_date_string(row) rescue raise_date_format_error!( row, index, :date_strings_to_jd ) row[0] = row[0].jd output << row end output end |
.dates_to_jd(data) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/quandl/data/format.rb', line 76 def dates_to_jd(data) return data if data_missing_rows?(data) || data[0][0].is_a?(Integer) # dont alter by reference result = [] # for each row data.each_with_index do |row, index| # copy row = row.dup # string to date date = row[0] date = Date.parse(row[0]) if row[0].is_a?(String) # date to julian row[0] = date.jd if date.respond_to?(:jd) # save result result[index] = row end # all done result end |
.hash_to_array(data) ⇒ Object
16 17 18 19 |
# File 'lib/quandl/data/format.rb', line 16 def hash_to_array(data) data = data.collect{|k,v| [k] + v } if data.kind_of?(Hash) data end |
.jd_strings_to_jd(data) ⇒ Object
DATES TO JULIAN #
101 102 103 104 105 106 107 108 109 110 |
# File 'lib/quandl/data/format.rb', line 101 def jd_strings_to_jd(data) # skip when already formatted correctly return data if data_missing_rows?(data) || data[0][0].is_a?(Integer) # otherwise cast string jds to int output = [] data.each_with_index do |row, index| output << parse_jd_string(row) rescue raise_date_format_error!( row, index, :jd_strings_to_jd ) end output end |
.jds_to_date(data) ⇒ Object
DATES TO DATE #
130 131 132 133 134 135 136 137 |
# File 'lib/quandl/data/format.rb', line 130 def jds_to_date(data) return data if data_missing_rows?(data) || data[0][0].is_a?(Date) output = [] data.each_with_index do |row, index| output << parse_jd(row) rescue raise_date_format_error!( row, index, :jds_to_date ) end output end |
.parse(data) ⇒ Object
7 8 9 10 11 12 13 14 |
# File 'lib/quandl/data/format.rb', line 7 def parse(data) return [] if data.blank? data = hash_to_array(data) data = csv_to_array(data) data = values_to_float(data) data = to_date(data) data.dup end |
.parse_date_string(row) ⇒ Object (protected)
198 199 200 201 202 203 204 205 206 207 208 209 |
# File 'lib/quandl/data/format.rb', line 198 def parse_date_string(row) row = row.dup # extract date date = row[0] # split date into parts date_values = date.split('-').collect(&:to_i) # ensure date is valid raise Quandl::Error::UnknownDateFormat unless date_values.count == 3 # add to row row[0] = Date.new( *date_values ) row end |
.parse_jd(row) ⇒ Object (protected)
181 182 183 184 185 186 187 188 |
# File 'lib/quandl/data/format.rb', line 181 def parse_jd(row) # parse jd_string row = parse_jd_string(row) # jd to date row[0] = Date.jd( row[0] ) # onwards row end |
.parse_jd_string(row) ⇒ Object (protected)
190 191 192 193 194 195 196 |
# File 'lib/quandl/data/format.rb', line 190 def parse_jd_string(row) row = row.dup row[0] = row[0].to_i # dont allow dates that are before 0000 raise Quandl::Error::UnknownDateFormat if row[0] <= 1721058 row end |
.recognized_date?(value) ⇒ Boolean
60 61 62 63 64 |
# File 'lib/quandl/data/format.rb', line 60 def recognized_date?( value ) return true if value.is_a?(Date) return true if value.is_a?(String) && value =~ /^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/ false end |
.to_date(data) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/quandl/data/format.rb', line 29 def to_date(data) return data if data_missing_rows?(data) # guess the current date format format = date_format?(data) # convert dates to Date case format when :date then return data when :date_string then return date_strings_to_date( data ) when :jd, :jd_string then return jds_to_date( data ) when :unknown then raise_date_format_error!( data[0] ) end # return data data end |
.to_jd(data) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/quandl/data/format.rb', line 44 def to_jd(data) return data if data_missing_rows?(data) # guess the current date format format = date_format?(data) # convert dates to Date case format when :jd then return data when :jd_string then return jd_strings_to_jd( data ) when :date then return dates_to_jd( data ) when :date_string then return date_strings_to_jd( data ) when :unknown then raise_date_format_error!( data[0] ) end # return data data end |
.values_to_float(data) ⇒ Object
VALUES TO FLOAT #
155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/quandl/data/format.rb', line 155 def values_to_float(data) # skip unless value is a string return data if data_missing_rows?(data) || data[0][1].is_a?(Float) # cast values to float data.collect do |row| new_row = [row[0]] row[1..-1].each_with_index do |value, index| value = value.to_f if value.is_a?(String) new_row[index + 1] = value end new_row end end |