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