quandl_format 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 30e3f912e78fe6901d62321ed87be42b9986eba6
4
- data.tar.gz: 19b1cf7491961530d8a467fae867fd0d0d85ec5c
3
+ metadata.gz: 3d570d30030c6efc98ca36991c9f7bd696ef1b06
4
+ data.tar.gz: a3055d3a66e3189abdee26cc3cd30454c78919aa
5
5
  SHA512:
6
- metadata.gz: a340198d9d890029b5d4bbb939e8f13e9abcae97fda791b88f35727e28b2a73face0c22e10efb0be6f49de5ca9bc14fcfc15ee4228f9a3ed85f56c79fe5f3077
7
- data.tar.gz: 63015d53d810bc61a893a50902e2eb6a3ba0ea20ff5773fbd2b9f086570cfc1b4e75fa1909119f61758c1082d542c77c5797aaaa57d5e813b27e14de43003902
6
+ metadata.gz: 65deb544f8ff59f3cb623cfa0672319c48b39a5243e20837d196ce8057eb3523a7908d4bbd801a14b796de6d47ba88a7c09e82c97a507357774018c7b6a92d1a
7
+ data.tar.gz: cd66e027d2cbfa58b0e6e23b1b1369891101053715fe046de229c4202f8ac5a39d6737629a4954d97eba5bf1d23f217345cc4a071b30cfeafb4ed896416dcab9
data/UPGRADE.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.1.6
2
+
3
+ * refactor errors to include specific line numbers
4
+ * revise errors to be more human friendly
5
+
6
+
1
7
  ## 0.1.5
2
8
 
3
9
  * Replace Quandl::Babelfish::Data with Quandl::Data, now that QD does intelligent cleaning.
@@ -1,7 +1,7 @@
1
1
  module Quandl
2
2
  module Error
3
3
 
4
- class ColumnCountMismatch < StandardError; end
4
+ class ColumnCountMismatch < Quandl::Error::Standard; end
5
5
 
6
6
  end
7
7
  end
@@ -103,17 +103,17 @@ module Attributes
103
103
  private
104
104
 
105
105
  def raise_row_column_mismatch!(row, index)
106
- m = "ColumnCountMismatch #{full_code} data[0] had #{data[0].count} columns, but data[#{index}] had #{row.count} #{row}"
107
- raise Quandl::Error::ColumnCountMismatch, m
106
+ m = "Unexpected number of points in this row '#{row}'. Expected #{data[0].count} but found #{row.count} based on #{data[0]}"
107
+ raise Quandl::Error::ColumnCountMismatch.new( row: row, line: index, context: 'data_rows_should_have_equal_columns!' ), m
108
108
  end
109
109
 
110
110
  def raise_column_count_mismatch!(row, index)
111
- m = "ColumnCountMismatch #{full_code} column_names had #{column_names.count} columns, but data[#{index}] had #{row.count} #{row}"
112
- raise Quandl::Error::ColumnCountMismatch, m
111
+ m = "Unexpected number of points in this row '#{row}'. Expected #{column_names.count} but found #{row.count} based on #{column_names}"
112
+ raise Quandl::Error::ColumnCountMismatch.new( row: row, line: index+1, context: 'data_row_count_should_match_column_count!' ), m
113
113
  end
114
114
 
115
115
  def raise_unknown_attribute_error!(key)
116
- m = "UnknownAttribute #{key} recognized attributes are: #{self.class.attribute_names}"
116
+ m = "Unknown Field '#{key}' valid fields are: #{self.class.attribute_names.join(', ')}"
117
117
  raise Quandl::Error::UnknownAttribute, m
118
118
  end
119
119
 
@@ -38,8 +38,9 @@ class Quandl::Format::Dataset::Load
38
38
  section_type = :attributes
39
39
 
40
40
  # have we reached the end of the attributes?
41
- elsif line[0] == '-'
41
+ elsif line == '-'
42
42
  # update the section to data
43
+ nodes[-1][:data_line] = line_index + 1
43
44
  section_type = :data
44
45
  # skip to the next line
45
46
  next
@@ -77,31 +78,45 @@ class Quandl::Format::Dataset::Load
77
78
 
78
79
  def parse_yaml_attributes(node)
79
80
  YAML.load( node[:attributes] ).symbolize_keys!
80
- rescue => e
81
- message = "Error: Dataset starting at line #{node[:line]}\n"
82
- message += "#{$!}\n"
83
- message += "--"
84
- Quandl::Logger.error(message)
81
+ rescue => err
82
+ log_yaml_parse_error(node, err)
85
83
  nil
86
84
  end
87
85
 
88
86
  def node_to_dataset(node)
89
87
  Quandl::Format::Dataset.new( node[:attributes] )
90
- rescue => e
88
+ rescue => err
89
+ log_dataset_error(node, err)
90
+ end
91
+
92
+ def attribute_format
93
+ /^([a-z0-9_]+): (.+)/
94
+ end
95
+
96
+ def log_yaml_parse_error(node, err)
97
+ message = "Attribute parse error at line #{ node[:line] + err.line } column #{err.column}. #{err.problem} (#{err.class})\n"
98
+ message += "Did you forget to delimit the meta data section from the data section with a one or more dashes ('-')?\n" unless node[:attributes] =~ /^-/
99
+ message += "--"
100
+ Quandl::Logger.error(message)
101
+ end
102
+
103
+ def log_dataset_error( node, err )
91
104
  message = ''
92
105
  message += node[:attributes][:source_code] + '/' if node[:attributes][:source_code].present?
93
106
  message += node[:attributes][:code] + ' '
94
- message += "error around line #{node[:line]} \n"
95
- message += "#{$!}\n"
107
+ # include specific line if available
108
+ if err.respond_to?(:line)
109
+ message += "error at line #{node[:data_line].to_i + err.line.to_i}\n"
110
+ else
111
+ message += "error around line #{node[:line]}\n"
112
+ end
113
+ # include original error
114
+ message += "#{$!} (#{err.class})\n"
96
115
  message += "--"
97
116
  Quandl::Logger.error(message)
98
117
  nil
99
118
  end
100
119
 
101
- def attribute_format
102
- /^([a-z0-9_]+): (.+)/
103
- end
104
-
105
120
  end
106
121
 
107
122
  end
@@ -1,5 +1,5 @@
1
1
  module Quandl
2
2
  module Format
3
- VERSION = "0.1.5"
3
+ VERSION = "0.1.6"
4
4
  end
5
5
  end
@@ -0,0 +1,21 @@
1
+ code: "BLAKE_TEST_1"
2
+ name: "A new title"
3
+ description: "The description Date, Open, High"
4
+ private: false
5
+ Date,Open,High,Low,Last,Close,Total Trade Quantity,Turnover (Lacs)
6
+ 2013-11-22,1252.0,454.95,448.2,450.0,450.0,1354405.0,6099.41
7
+ 2013-11-21,452.25,457.75,449.1,451.2,451.0,218881.0,992.94
8
+
9
+ code: "BLAKE_TEST_2"
10
+ name: "A new title"
11
+ description: "The description Date, Open, High"
12
+ Date,Open,High,Low,Last,Close,Total Trade Quantity,Turnover (Lacs)
13
+ 2013-11-22,1252.0,454.95,448.2,450.0,450.0,1354405.0,6099.41
14
+ 2013-11-21,452.25,457.75,449.1,451.2,451.0,218881.0,992.94
15
+
16
+ code: "BLAKE_TEST_3"
17
+ name: "A new title"
18
+ description: "The description Date, Open, High"
19
+ Date,Open,High,Low,Last,Close,Total Trade Quantity,Turnover (Lacs)
20
+ 2013-11-22,1252.0,454.95,448.2,450.0,450.0,1354405.0,6099.41
21
+ 2013-11-21,452.25,457.75,449.1,451.2,451.0,218881.0,992.94
@@ -2,51 +2,14 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Quandl::Format::Dataset do
5
- subject{ data }
6
-
7
- context "valid.qdf" do
8
- let(:data){ Quandl::Format::Dataset.load( fixtures_data['valid'] ) }
9
-
10
- it{ should be_a Array }
11
- its(:count){ should eq 3 }
12
-
13
- describe "#first" do
14
- subject{ data.first }
15
- its(:code){ should eq 'BLAKE_TEST_1' }
16
- its(:name){ should eq 'A new title' }
17
- its(:description){ should eq 'The description Date, Open, High'}
18
- its(:column_names){ should eq ['Date','Open','High','Low','Last','Close','Total Trade Quantity','Turnover (Lacs)']}
19
- its(:data){ should eq Quandl::Data.new([['2013-11-22','1252.0','454.95','448.2','450.0','450.0','1354405.0','6099.41'],['2013-11-21','452.25','457.75','449.1','451.2','451.0','218881.0','992.94']]) }
20
- end
21
- end
22
-
23
- context "annual.qdf" do
24
- let(:data){ Quandl::Format::Dataset.load( fixtures_data['annual'] ) }
25
-
26
- it{ should be_a Array }
27
- its(:count){ should eq 1 }
28
-
29
- describe "#first" do
30
- subject{ data.first }
31
- its(:code){ should eq 'ANNUAL_DATA' }
32
- its(:name){ should eq 'A new title' }
33
- its(:description){ should eq 'Annual Data'}
34
- its(:column_names){ should eq ['Date','Open','High']}
35
- its(:data){ should eq [
36
- [ Date.parse('2013-12-31'), 1252.0, 454.95 ],
37
- [ Date.parse('2012-12-31'), 452.25, 457.75 ],
38
- [ Date.parse('2011-12-31'), 452.25, 457.75 ],
39
- [ Date.parse('2010-12-31'), 452.25, 457.75 ],
40
- ]}
41
- end
42
- end
43
-
44
5
  expected_errors = [
45
6
  { file: 'invalid_data', error: /Date/ },
46
7
  { file: 'unknown_attribute', error: /this_attribute_does_not_exist/ },
47
8
  { file: 'mismatched_columns', error: /column_names had 4 columns/ },
48
9
  { file: 'mismatched_rows', error: /had 3 columns/ },
49
10
  { file: 'invalid_yaml', error: /could not find expected ':'/ },
11
+ { file: 'missing_dashes', error: /Attribute parse error at line 6 column 1/ },
12
+ { file: 'missing_dashes', error: /Data delimiter '-' is missing/ },
50
13
  ]
51
14
  # run each expectation
52
15
  expected_errors.each do |pair|
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe Quandl::Format::Dataset do
4
+ subject{ data }
5
+
6
+ context "valid.qdf" do
7
+ let(:data){ Quandl::Format::Dataset.load( fixtures_data['valid'] ) }
8
+
9
+ it{ should be_a Array }
10
+ its(:count){ should eq 3 }
11
+
12
+ describe "#first" do
13
+ subject{ data.first }
14
+ its(:code){ should eq 'BLAKE_TEST_1' }
15
+ its(:name){ should eq 'A new title' }
16
+ its(:description){ should eq 'The description Date, Open, High'}
17
+ its(:column_names){ should eq ['Date','Open','High','Low','Last','Close','Total Trade Quantity','Turnover (Lacs)']}
18
+ its(:data){ should eq Quandl::Data.new([['2013-11-22','1252.0','454.95','448.2','450.0','450.0','1354405.0','6099.41'],['2013-11-21','452.25','457.75','449.1','451.2','451.0','218881.0','992.94']]) }
19
+ end
20
+ end
21
+
22
+ context "annual.qdf" do
23
+ let(:data){ Quandl::Format::Dataset.load( fixtures_data['annual'] ) }
24
+
25
+ it{ should be_a Array }
26
+ its(:count){ should eq 1 }
27
+
28
+ describe "#first" do
29
+ subject{ data.first }
30
+ its(:code){ should eq 'ANNUAL_DATA' }
31
+ its(:name){ should eq 'A new title' }
32
+ its(:description){ should eq 'Annual Data'}
33
+ its(:column_names){ should eq ['Date','Open','High']}
34
+ its(:data){ should eq [
35
+ [ Date.parse('2013-12-31'), 1252.0, 454.95 ],
36
+ [ Date.parse('2012-12-31'), 452.25, 457.75 ],
37
+ [ Date.parse('2011-12-31'), 452.25, 457.75 ],
38
+ [ Date.parse('2010-12-31'), 452.25, 457.75 ],
39
+ ]}
40
+ end
41
+ end
42
+
43
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quandl_format
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blake Hilscher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-09 00:00:00.000000000 Z
11
+ date: 2013-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -169,6 +169,7 @@ files:
169
169
  - spec/fixtures/data/invalid_yaml.qdf
170
170
  - spec/fixtures/data/mismatched_columns.qdf
171
171
  - spec/fixtures/data/mismatched_rows.qdf
172
+ - spec/fixtures/data/missing_dashes.qdf
172
173
  - spec/fixtures/data/unknown_attribute.qdf
173
174
  - spec/fixtures/data/valid.qdf
174
175
  - spec/fixtures/format.rb
@@ -177,6 +178,7 @@ files:
177
178
  - spec/lib/quandl/format/dataset/client_spec.rb
178
179
  - spec/lib/quandl/format/dataset/errors_spec.rb
179
180
  - spec/lib/quandl/format/dataset/load_spec.rb
181
+ - spec/lib/quandl/format/dataset/valid_data_spec.rb
180
182
  - spec/lib/quandl/format/dataset_spec.rb
181
183
  - spec/spec_helper.rb
182
184
  homepage: http://blake.hilscher.ca/
@@ -211,6 +213,7 @@ test_files:
211
213
  - spec/fixtures/data/invalid_yaml.qdf
212
214
  - spec/fixtures/data/mismatched_columns.qdf
213
215
  - spec/fixtures/data/mismatched_rows.qdf
216
+ - spec/fixtures/data/missing_dashes.qdf
214
217
  - spec/fixtures/data/unknown_attribute.qdf
215
218
  - spec/fixtures/data/valid.qdf
216
219
  - spec/fixtures/format.rb
@@ -219,5 +222,6 @@ test_files:
219
222
  - spec/lib/quandl/format/dataset/client_spec.rb
220
223
  - spec/lib/quandl/format/dataset/errors_spec.rb
221
224
  - spec/lib/quandl/format/dataset/load_spec.rb
225
+ - spec/lib/quandl/format/dataset/valid_data_spec.rb
222
226
  - spec/lib/quandl/format/dataset_spec.rb
223
227
  - spec/spec_helper.rb