quandl_data 1.3.4 → 1.3.5

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: 08bf146b0c8eb0013154683227fb6490afbdcaca
4
- data.tar.gz: a1d68b8e4933d8573dbe30bdd0bc591931ef4954
3
+ metadata.gz: ce1b13bea3abd317b83855932749d9b29836a838
4
+ data.tar.gz: dedc1c64c0354e3a1042a7662e8896090b45421a
5
5
  SHA512:
6
- metadata.gz: 31545591417716667defb90d4c2c34db0c31e484bd9d3cbd2762cf19ab3ff06d6a0a391ed2bc9163ab098f9864e27cfffbe56bc6f123733e45401997372662da
7
- data.tar.gz: 90ad18560130551a978b37819dcba6ae14069fc336ce5d279c07f0f0e15d6e6fbeb1be4a786a222c1819ccb94490b9873c8bcecf4cd5c17a5e0a0b12e2ed4150
6
+ metadata.gz: ea8568c09b7d551e35add9f272d7d48e7830b1ef2bda7aedbe54e76a4188dea0c939acf7862895e86a13a0b216b7fb757af993c0e5a72c8e45f1b9c155818cac
7
+ data.tar.gz: 4199b62dc28313abd1204de393dccdaf1aa4ffafc3512b340a32526d2859882020c096059b3bb0c47e1e90f65f2c74a97a9cd4d863eacd3e23ad052f98364ed5
data/UPGRADE.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 1.3.5
2
+
3
+ * add Validations, #valid? #errors
4
+ * add Data#to_table that returns self. Useful in conjunction with search scopes
5
+ * refactor format errors to be raised with line, context, row
6
+
7
+
1
8
  ## 1.3.4
2
9
 
3
10
  * add #to_precision(Integer)
@@ -35,7 +35,7 @@ class Format
35
35
  when :date then return data
36
36
  when :date_string then return date_strings_to_date( data )
37
37
  when :jd, :jd_string then return jds_to_date( data )
38
- when :unknown then raise_date_format_error!( data[0] )
38
+ when :unknown then raise_date_parse_error!( data[0] )
39
39
  end
40
40
  # return data
41
41
  data
@@ -51,7 +51,7 @@ class Format
51
51
  when :jd_string then return jd_strings_to_jd( data )
52
52
  when :date then return dates_to_jd( data )
53
53
  when :date_string then return date_strings_to_jd( data )
54
- when :unknown then raise_date_format_error!( data[0] )
54
+ when :unknown then raise_date_parse_error!( data[0] )
55
55
  end
56
56
  # return data
57
57
  data
@@ -104,7 +104,7 @@ class Format
104
104
  # otherwise cast string jds to int
105
105
  output = []
106
106
  data.each_with_index do |row, index|
107
- output << parse_jd_string(row) rescue raise_date_format_error!( row, index, :jd_strings_to_jd )
107
+ output << parse_jd_string(row, index)
108
108
  end
109
109
  output
110
110
  end
@@ -115,7 +115,7 @@ class Format
115
115
  # otherwise cast string jds to int
116
116
  output = []
117
117
  data.each_with_index do |row, index|
118
- row = parse_date_string(row) rescue raise_date_format_error!( row, index, :date_strings_to_jd )
118
+ row = parse_date_string(row, index)
119
119
  row[0] = row[0].jd
120
120
  output << row
121
121
  end
@@ -131,7 +131,7 @@ class Format
131
131
  return data if data_missing_rows?(data) || data[0][0].is_a?(Date)
132
132
  output = []
133
133
  data.each_with_index do |row, index|
134
- output << parse_jd(row) rescue raise_date_format_error!( row, index, :jds_to_date )
134
+ output << parse_jd(row, index)
135
135
  end
136
136
  output
137
137
  end
@@ -142,7 +142,7 @@ class Format
142
142
  # otherwise cast string jds to int
143
143
  output = []
144
144
  data.each_with_index do |row, index|
145
- output << parse_date_string(row) rescue raise_date_format_error!( row, index, :date_strings_to_date )
145
+ output << parse_date_string(row, index)
146
146
  end
147
147
  output
148
148
  end
@@ -178,42 +178,63 @@ class Format
178
178
 
179
179
  protected
180
180
 
181
- def parse_jd(row)
181
+ def parse_jd(row, index=nil)
182
182
  # parse jd_string
183
- row = parse_jd_string(row)
183
+ row = parse_jd_string(row, index)
184
184
  # jd to date
185
185
  row[0] = Date.jd( row[0] )
186
186
  # onwards
187
187
  row
188
+ rescue => e
189
+ raise_jd_error!(row, index, e)
188
190
  end
189
191
 
190
- def parse_jd_string(row)
192
+ def parse_jd_string(row, index=nil)
191
193
  row = row.dup
192
194
  row[0] = row[0].to_i
193
195
  # dont allow dates that are before 0000
194
- raise Quandl::Error::UnknownDateFormat if row[0] <= 1721058
196
+ raise if row[0] <= 1721058
197
+ # onwards
195
198
  row
199
+ rescue => e
200
+ raise_jd_string_error!(row, index, e)
196
201
  end
197
202
 
198
- def parse_date_string(row)
203
+ def parse_date_string(row, index=nil)
199
204
  row = row.dup
200
205
  # extract date
201
206
  date = row[0]
202
207
  # split date into parts
203
208
  date_values = date.split('-').collect(&:to_i)
204
- # ensure date is valid
205
- raise Quandl::Error::UnknownDateFormat unless date_values.count == 3
209
+ # ensure valid
210
+ raise unless date_values.count == 3
206
211
  # add to row
207
212
  row[0] = Date.new( *date_values )
208
213
  row
214
+ rescue => e
215
+ raise_date_string_error!(row, index, e)
209
216
  end
210
217
 
211
218
 
212
219
  private
213
220
 
214
- def raise_date_format_error!(row, index = 0, type = :none)
215
- message = "UnknownDateFormat: '#{row[0]}', index: data[#{index}][0], strategy: '#{type}', row: #{row}"
216
- raise Quandl::Error::UnknownDateFormat, message
221
+ def raise_jd_error!(row, index, err)
222
+ raise Quandl::Error::DateParseError.new( line: index, context: 'parse_jd', row: row, problem: err.message ), err.message
223
+ end
224
+
225
+ def raise_jd_string_error!(row, index, err)
226
+ m = "Julian Date predates time. Expected <= 1721058 received '#{row[0]}'"
227
+ raise Quandl::Error::DateParseError.new( line: index, context: 'parse_jd_string', row: row, problem: m ), m
228
+ end
229
+
230
+ def raise_date_string_error!(row, index, err)
231
+ m = "Invalid date segments. Expected yyyy-mm-dd received '#{row[0]}'"
232
+ raise Quandl::Error::DateParseError.new({ line: index, context: 'parse_date_string', row: row, problem: m }), m
233
+ end
234
+
235
+ def raise_date_parse_error!(row, index = 0, type = :none)
236
+ m = "'#{row[0]}', index: data[#{index}][0] strategy: '#{type}', row: '#{row}'"
237
+ raise Quandl::Error::DateParseError.new({ line: index, context: 'date_parse_error', row: row, problem: m }), m
217
238
  end
218
239
 
219
240
  end
@@ -38,6 +38,10 @@ module Operations
38
38
  return ''
39
39
  end
40
40
 
41
+ def to_table
42
+ self
43
+ end
44
+
41
45
  def to_jd!
42
46
  @data_array = Quandl::Data::Format.to_jd( data_array ); self
43
47
  end
@@ -0,0 +1,36 @@
1
+ module Quandl
2
+ class Data
3
+ module Validations
4
+
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+
9
+ end
10
+
11
+ included do
12
+ ERROR_TYPES = [
13
+ Error::GuessDateFormat, Error::InvalidDate,
14
+ Error::UnknownDateFormat, Error::DateParseError ]
15
+ end
16
+
17
+ def valid?
18
+ self.errors = []
19
+ self.data_array = pristine_data
20
+ true
21
+ rescue *ERROR_TYPES => error
22
+ self.errors << error
23
+ self.data_array = []
24
+ false
25
+ end
26
+
27
+ def errors
28
+ @errors ||= []
29
+ end
30
+ def errors=(value)
31
+ @errors = value
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -1,5 +1,5 @@
1
1
  module Quandl
2
2
  class Data
3
- VERSION = "1.3.4"
3
+ VERSION = "1.3.5"
4
4
  end
5
5
  end
data/lib/quandl/data.rb CHANGED
@@ -9,13 +9,14 @@ require "quandl/operation"
9
9
 
10
10
  require 'quandl/babelfish'
11
11
 
12
- require 'quandl/error/unknown_date_format'
12
+ require 'quandl/error/date_parse_error'
13
13
 
14
14
  require 'quandl/data/attributes'
15
15
  require 'quandl/data/cleaning'
16
16
  require 'quandl/data/enumerator'
17
17
  require 'quandl/data/operations'
18
18
  require 'quandl/data/format'
19
+ require 'quandl/data/validations'
19
20
  require 'quandl/data/logging'
20
21
 
21
22
  module Quandl
@@ -24,6 +25,7 @@ class Data
24
25
  include Cleaning
25
26
  include Enumerator
26
27
  include Operations
28
+ include Validations
27
29
  include Logging if defined?(QUANDL_LOGGER) && QUANDL_LOGGER == true
28
30
  end
29
31
  end
@@ -0,0 +1,8 @@
1
+ require 'quandl/error/standard'
2
+
3
+ module Quandl
4
+ module Error
5
+ class DateParseError < Quandl::Error::Standard; end
6
+
7
+ end
8
+ end
@@ -72,7 +72,7 @@ describe Quandl::Data::Format do
72
72
 
73
73
  [:invalid1, :invalid2].each do |type|
74
74
  it "#{type} should raise Quandl::Error::UnknownDateFormat" do
75
- expect { Quandl::Data::Format.parse( self.send(type) ) }.to raise_error Quandl::Error::UnknownDateFormat
75
+ expect { Quandl::Data::Format.parse( self.send(type) ) }.to raise_error Quandl::Error::DateParseError
76
76
  end
77
77
  end
78
78
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quandl_data
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
4
+ version: 1.3.5
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: quandl_operation
@@ -160,8 +160,9 @@ files:
160
160
  - lib/quandl/data/format.rb
161
161
  - lib/quandl/data/logging.rb
162
162
  - lib/quandl/data/operations.rb
163
+ - lib/quandl/data/validations.rb
163
164
  - lib/quandl/data/version.rb
164
- - lib/quandl/error/unknown_date_format.rb
165
+ - lib/quandl/error/date_parse_error.rb
165
166
  - lib/quandl/fabricate.rb
166
167
  - lib/quandl/fabricate/data.rb
167
168
  - quandl_data.gemspec
@@ -1,5 +0,0 @@
1
- module Quandl
2
- module Error
3
- class UnknownDateFormat < StandardError; end
4
- end
5
- end