lib/quandl/format/dataset/attributes.rb in quandl_format-0.1.1 vs lib/quandl/format/dataset/attributes.rb in quandl_format-0.1.2

- old
+ new

@@ -6,11 +6,11 @@ extend ActiveSupport::Concern module ClassMethods - META_ATTRIBUTES = :source_code, :code, :name, :description, :private, :display_url + META_ATTRIBUTES = :source_code, :code, :name, :description, :private, :reference_url DATA_ATTRIBUTES = :column_names, :data def attribute_names @attribute_names ||= meta_attribute_names + data_attribute_names end @@ -59,10 +59,13 @@ end def data=(rows) self.column_names = rows.shift unless rows.first.collect{|r| r.to_s.numeric? }.include?(true) @data = Quandl::Data.new(rows).to_date + data_row_count_should_match_column_count! + data_rows_should_have_equal_columns! + @data end def column_names=(names) @column_names = Array(names).flatten.collect{|n| n.strip.rstrip } end @@ -88,10 +91,38 @@ "#{key}: #{value}" end %Q{<##{self.class.name} #{attrs.join(', ')}>} end + protected + + def data_rows_should_have_equal_columns! + row_count = data[0].count + data.each_with_index do |row, index| + raise_row_column_mismatch!(row, index) unless row.count == row_count + end + end + + def data_row_count_should_match_column_count! + return if column_names.blank? + column_count = column_names.count + data.each_with_index do |row, index| + raise_column_count_mismatch!(row, index) unless row.count == column_count + end + end + + private + + def raise_row_column_mismatch!(row, index) + m = "ColumnCountMismatch #{full_code} data[0] had #{data[0].count} columns, but data[#{index}] had #{row.count} #{row}" + raise Quandl::Format::Errors::ColumnCountMismatch, m + end + + def raise_column_count_mismatch!(row, index) + m = "ColumnCountMismatch #{full_code} column_names had #{column_names.count} columns, but data[#{index}] had #{row.count} #{row}" + raise Quandl::Format::Errors::ColumnCountMismatch, m + end def raise_unknown_attribute_error!(key) m = "UnknownAttribute #{key} recognized attributes are: #{self.class.attribute_names}" raise Quandl::Format::Errors::UnknownAttribute, m end \ No newline at end of file