quandl_format 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d82a7ccd02fbe5b8359fd3906eb6c7b2598d3d72
4
- data.tar.gz: 04d70cbdc92e2bc1be083ed81e4ccc79df33b631
3
+ metadata.gz: e6a154e15469886cd35f5722374918456c299200
4
+ data.tar.gz: f5b673bb2619677b9610bd0820feac55c1969bba
5
5
  SHA512:
6
- metadata.gz: e0260e134f074a1b908a7e6995f54d21aacdffea30ae3faf7da1484d7b74a611d180ad8b399c08c431b3a6a78a2a43d072a3d7d6f7f0eba0ac6d1c13edacb9f6
7
- data.tar.gz: d9eaba2e40f27ba8a1897c1afe107bfa983a38e47af7978106f7bdcfd4d0b8281c3b5e7bebe468ec91de9c356a8a8e6bf9f1d0d34e75880fd3cc1730326732dd
6
+ metadata.gz: 4dd7857d5d4d3b62ef46e2fbd5951f9e4106c7e47b0b24ff20c19caf66e04b2cecae1a4c39ecbb6fa485badb23262e9b761616596047d38781b4efb0fdd0220d
7
+ data.tar.gz: 2b3b289b1db9c084e4edf2b6d00e320c65c5ce4193e1cd7b286aa1fb6adeb6d5d6fb7a50c3006776783a4f7dd0215665a2463f2b8eb886f0f07d8f241b592a6e
data/Gemfile CHANGED
@@ -1,2 +1,13 @@
1
1
  source "https://rubygems.org"
2
2
  gemspec
3
+
4
+ use_local_gems = ENV['BUNDLE_LOCAL_GEMS'] == "true" && ENV['BUNDLE_LOCAL_DIR']
5
+ local_gem_dir = ENV['BUNDLE_LOCAL_DIR']
6
+
7
+ if use_local_gems
8
+ # gem 'her', path: "#{local_gem_dir}/her"
9
+ gem 'quandl_client', path: "#{local_gem_dir}/quandl/client"
10
+ gem 'quandl_data', path: "#{local_gem_dir}/quandl/data"
11
+ gem 'quandl_operation', path: "#{local_gem_dir}/quandl/operation"
12
+ gem 'quandl_babelfish', path: "#{local_gem_dir}/quandl/babelfish"
13
+ end
data/examples/load.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'pry'
2
+ require 'quandl/format'
3
+
4
+ Quandl::Logger.use Quandl::Logger::Outputs
5
+
6
+ Quandl::Format::Dataset.load_from_file('spec/fixtures/data/invalid_data.qdf')
7
+ Quandl::Format::Dataset.load_from_file('spec/fixtures/data/invalid_yaml.qdf')
8
+ Quandl::Format::Dataset.load_from_file('spec/fixtures/data/mismatched_columns.qdf')
9
+ Quandl::Format::Dataset.load_from_file('spec/fixtures/data/mismatched_rows.qdf')
@@ -82,17 +82,6 @@ module Attributes
82
82
  self.class.attribute_names.inject({}){|m,k| m[k] = self.send(k); m }
83
83
  end
84
84
 
85
- def inspect
86
- attrs = attributes.collect do |key, value|
87
- if value.is_a?(String)
88
- value = "#{value[0..20]}..." if value.length > 20
89
- value = "'#{value}'"
90
- end
91
- "#{key}: #{value}"
92
- end
93
- %Q{<##{self.class.name} #{attrs.join(', ')}>}
94
- end
95
-
96
85
  protected
97
86
 
98
87
  def data_rows_should_have_equal_columns!
@@ -20,7 +20,10 @@ class Quandl::Format::Dataset::Load
20
20
  def parse_string(input)
21
21
  nodes = []
22
22
  section_type = :data
23
+ line_index = 0
23
24
  input.each_line do |rline|
25
+ # track current line index
26
+ line_index += 1
24
27
  # strip whitespace
25
28
  line = rline.strip.rstrip
26
29
  # ignore comments and blank lines
@@ -30,7 +33,7 @@ class Quandl::Format::Dataset::Load
30
33
  if line =~ attribute_format
31
34
  # if we are leaving the data section
32
35
  # then this is the start of a new node
33
- nodes << { attributes: '', data: '' } if section_type == :data
36
+ nodes << { attributes: '', data: '', line: line_index } if section_type == :data
34
37
  # update the section to attributes
35
38
  section_type = :attributes
36
39
 
@@ -49,35 +52,50 @@ class Quandl::Format::Dataset::Load
49
52
  end
50
53
 
51
54
  def parse_yaml_and_csv(nodes)
52
- nodes.collect do |node|
55
+ output = []
56
+ nodes.each do |node|
53
57
  # parse attrs as yaml
54
- node[:attributes] = YAML.load( node[:attributes] ).symbolize_keys!
58
+ node[:attributes] = parse_yaml_attributes(node)
59
+ # we cant continue unless attributes are present
60
+ next if node[:attributes].blank?
55
61
  # parse data as csv
56
62
  node[:attributes][:data] = CSV.parse(node[:data])
57
- node
63
+ # onwards
64
+ output << node
58
65
  end
66
+ output
59
67
  end
60
68
 
61
69
  def nodes_to_datasets(nodes)
62
70
  datasets = []
63
- nodes.each_with_index do |node, index|
64
- dataset = node_to_dataset(node, index)
71
+ nodes.each do |node|
72
+ dataset = node_to_dataset(node)
65
73
  datasets << dataset if dataset
66
74
  end
67
75
  datasets
68
76
  end
69
77
 
70
- def node_to_dataset(node, index)
78
+ def parse_yaml_attributes(node)
79
+ 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)
85
+ nil
86
+ end
87
+
88
+ def node_to_dataset(node)
71
89
  Quandl::Format::Dataset.new( node[:attributes] )
72
- rescue => e# Quandl::Format::Errors::UnknownAttribute => e
73
- message = "Error: Dataset #{index + 1}\n"
90
+ rescue => e
91
+ message = ''
74
92
  message += node[:attributes][:source_code] + '/' if node[:attributes][:source_code].present?
75
- message += node[:attributes][:code] + "\n"
93
+ message += node[:attributes][:code] + ' '
94
+ message += "error around line #{node[:line]} \n"
76
95
  message += "#{$!}\n"
77
96
  message += "--"
78
- Quandl::Logger.error(message, e)
97
+ Quandl::Logger.error(message)
79
98
  nil
80
- # raise $!, message, $!.backtrace
81
99
  end
82
100
 
83
101
  def attribute_format
@@ -1,5 +1,5 @@
1
1
  module Quandl
2
2
  module Format
3
- VERSION = "0.1.2"
3
+ VERSION = "0.1.3"
4
4
  end
5
5
  end
@@ -0,0 +1,20 @@
1
+ name: "A new title"
2
+ code "test"
3
+ description: "The description Date, Open, High"
4
+ private: false
5
+ -
6
+ 2013-11-22,1252.0,454.95,448.2,450.0,450.0,1354405.0,6099.41
7
+
8
+ name: "A new title"
9
+ code: "test"
10
+ description: "The description Date, Open, High"
11
+ private: false
12
+ -
13
+ 2013-11-22,1252.0,454.95,448.2,450.0,450.0,1354405.0,6099.41
14
+
15
+ name: "A new title"
16
+ description: "The description Date, Open, High"
17
+ private: false
18
+ asomjkl
19
+ -
20
+ 2013-11-22,1252.0,454.95,448.2,450.0,450.0,1354405.0,6099.41
@@ -19,8 +19,8 @@ description: |-
19
19
  This is the second line.
20
20
  -
21
21
  Date, Value, High, Low
22
- 2013-11-20,9.99470588235294,11.003235294117646,14.00164705882353
23
- 2013-11-19,10.039388096885814,,14.09718770934256
22
+ 2013-11-20,9.99,11,14
23
+ 2013-11-19,10.03,,14.09
24
24
 
25
25
  # Second dataset
26
26
  code: DATASET_CODE_2
@@ -29,9 +29,9 @@ name: Test Dataset Name 2
29
29
  description: Here is a description with multiple lines.
30
30
  -
31
31
  Date, Value, High, Low
32
- 2013-11-20,9.99470588235294,11.003235294117646,14.00164705882353
33
- 2013-11-19,10.039388096885814,,14.09718770934256
34
- 2013-11-18,11.039388096885814,,15.09718770934256
32
+ 2013-11-20,9.99,11.0,14.0
33
+ 2013-11-19,10.03,,14.09
34
+ 2013-11-18,11.03,,15.09
35
35
  }
36
36
  end
37
37
 
@@ -44,7 +44,7 @@ def qdf_attributes
44
44
  column_names: ['Date', 'Value', 'High', 'Low'],
45
45
  private: false,
46
46
  reference_url: 'http://test.com/',
47
- data: Quandl::Data.new([["2013-11-20", "9.99470588235294", "11.003235294117646", "14.00164705882353"],["2013-11-19", "10.039388096885814", nil, "14.09718770934256"]]),
47
+ data: Quandl::Data.new([["2013-11-20", "9.99", "11.0", "14.0"],["2013-11-19", "10.03", nil, "14.09"]]),
48
48
  }
49
49
  end
50
50
 
@@ -59,7 +59,7 @@ private: false
59
59
  reference_url: http://test.com/
60
60
  -
61
61
  Date,Value,High,Low
62
- 2013-11-20,9.99470588235294,11.003235294117646,14.00164705882353
63
- 2013-11-19,10.039388096885814,,14.09718770934256
62
+ 2013-11-20,9.99,11.0,14.0
63
+ 2013-11-19,10.03,,14.09
64
64
  }
65
65
  end
@@ -18,25 +18,20 @@ describe Quandl::Format::Dataset do
18
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
19
  end
20
20
  end
21
-
22
- context "invalid_data.qdf" do
23
- let(:data){ Quandl::Format::Dataset.load( fixtures_data['invalid_data'] ) }
24
- it{ expect{data}.to raise_error Quandl::Operation::Errors::UnknownDateFormat, /Date/ }
25
- end
26
-
27
- context "unknown_attribute.qdf" do
28
- let(:data){ Quandl::Format::Dataset.load( fixtures_data['unknown_attribute'] ) }
29
- it{ expect{data}.to raise_error Quandl::Format::Errors::UnknownAttribute, /this_attribute_does_not_exist/ }
30
- end
31
-
32
- context "mismatched_columns.qdf" do
33
- let(:data){ Quandl::Format::Dataset.load( fixtures_data['mismatched_columns'] ) }
34
- it{ expect{data}.to raise_error Quandl::Format::Errors::ColumnCountMismatch, /column_names had 4 columns/ }
35
- end
36
-
37
- context "mismatched_rows.qdf" do
38
- let(:data){ Quandl::Format::Dataset.load( fixtures_data['mismatched_rows'] ) }
39
- it{ expect{data}.to raise_error Quandl::Format::Errors::ColumnCountMismatch, /had 3 columns/ }
21
+
22
+ expected_errors = [
23
+ { file: 'invalid_data', error: /Date/ },
24
+ { file: 'unknown_attribute', error: /this_attribute_does_not_exist/ },
25
+ { file: 'mismatched_columns', error: /column_names had 4 columns/ },
26
+ { file: 'mismatched_rows', error: /had 3 columns/ },
27
+ { file: 'invalid_yaml', error: /could not find expected ':'/ },
28
+ ]
29
+ # run each expectation
30
+ expected_errors.each do |pair|
31
+ it "#{pair[:file]}.qdf should error with #{pair[:error]}" do
32
+ Quandl::Logger.should_receive(:error).at_least(:once).with(pair[:error])
33
+ Quandl::Format::Dataset.load( fixtures_data[pair[:file]] )
34
+ end
40
35
  end
41
36
 
42
37
  end
@@ -26,7 +26,7 @@ describe Quandl::Format::Dataset::Load do
26
26
  its(:name){ should eq 'Oil India Limited' }
27
27
  its(:description){ should eq "Here is a description with multiple lines.\nThis is the second line." }
28
28
  its(:column_names){ should eq ['Date', 'Value', 'High', 'Low'] }
29
- its(:data){ should eq Quandl::Data.new([["2013-11-20", "9.99470588235294", "11.003235294117646", "14.00164705882353"],["2013-11-19", "10.039388096885814", nil, "14.09718770934256"]]) }
29
+ its(:data){ should eq Quandl::Data.new([["2013-11-20", "9.99", "11.0", "14.0"],["2013-11-19", "10.03", nil, "14.09"]]) }
30
30
  end
31
31
  end
32
32
 
@@ -12,7 +12,7 @@ describe Quandl::Format::Dataset do
12
12
  its(:name){ should eq 'Test Dataset Name 2' }
13
13
  its(:description){ should eq "Here is a description with multiple lines.\n This is the second line." }
14
14
  its(:column_names){ should eq ['Date', 'Value', 'High', 'Low'] }
15
- its(:data){ should eq Quandl::Data.new([["2013-11-20", "9.99470588235294", "11.003235294117646", "14.00164705882353"], ["2013-11-19", "10.039388096885814", nil, "14.09718770934256"]]) }
15
+ its(:data){ should eq Quandl::Data.new([["2013-11-20", "9.99", "11.0", "14.0"], ["2013-11-19", "10.03", nil, "14.09"]]) }
16
16
 
17
17
  its(:attributes){ should eq attributes }
18
18
 
data/spec/spec_helper.rb CHANGED
@@ -14,4 +14,4 @@ require 'pry'
14
14
 
15
15
  # Replace Quandl::Logger with Spec::Logger that will raise errors sent to #error
16
16
  # This allows us to easily test error assertions in spec/lib/quandl/format/errors_spec.rb
17
- Quandl::Logger.use(Spec::Logger)
17
+ Quandl::Logger.use(Quandl::Logger::Outputs)
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.2
4
+ version: 0.1.3
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-05 00:00:00.000000000 Z
11
+ date: 2013-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -136,6 +136,7 @@ files:
136
136
  - README.md
137
137
  - Rakefile
138
138
  - UPGRADE.md
139
+ - examples/load.rb
139
140
  - lib/quandl/client/dataset/to_qdf.rb
140
141
  - lib/quandl/format.rb
141
142
  - lib/quandl/format/dataset.rb
@@ -149,6 +150,7 @@ files:
149
150
  - spec/config/client.rb
150
151
  - spec/config/logger.rb
151
152
  - spec/fixtures/data/invalid_data.qdf
153
+ - spec/fixtures/data/invalid_yaml.qdf
152
154
  - spec/fixtures/data/mismatched_columns.qdf
153
155
  - spec/fixtures/data/mismatched_rows.qdf
154
156
  - spec/fixtures/data/unknown_attribute.qdf
@@ -189,6 +191,7 @@ test_files:
189
191
  - spec/config/client.rb
190
192
  - spec/config/logger.rb
191
193
  - spec/fixtures/data/invalid_data.qdf
194
+ - spec/fixtures/data/invalid_yaml.qdf
192
195
  - spec/fixtures/data/mismatched_columns.qdf
193
196
  - spec/fixtures/data/mismatched_rows.qdf
194
197
  - spec/fixtures/data/unknown_attribute.qdf