quandl_data 1.3.0 → 1.3.1
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 +4 -4
- data/Gemfile +0 -1
- data/UPGRADE.md +7 -0
- data/lib/quandl/data.rb +5 -4
- data/lib/quandl/data/attributes.rb +51 -0
- data/lib/quandl/data/{babelfisher.rb → cleaning.rb} +2 -18
- data/lib/quandl/data/enumerator.rb +0 -21
- data/lib/quandl/data/format.rb +3 -3
- data/lib/quandl/data/version.rb +1 -1
- data/lib/quandl/{errors → error}/unknown_date_format.rb +1 -1
- data/quandl_data.gemspec +0 -1
- data/spec/lib/quandl/data/format_spec.rb +2 -2
- data/spec/lib/quandl/data_spec.rb +0 -10
- metadata +4 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94ac5c5c76af7dbfef791ad7aacf52abfea27db2
|
4
|
+
data.tar.gz: 5edaf32984dd620b88f44a3cfb8a7ee04c649e9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c149657dabceec4bb7864aafc533bf77482d171625a5290f3788073665994b6a0c42850aa2a72c4dc6bdfc18c0b8bc0ffe40041e328b2bcb30fcdf679874eaaf
|
7
|
+
data.tar.gz: c505d9aa00e19436832d2521a12bfed8fdc6447e9de495ec35394e3babefa3709d66c92e17b14d378f156a369696be54ee597f7b31b30816b78e797d409fa71c
|
data/Gemfile
CHANGED
data/UPGRADE.md
CHANGED
data/lib/quandl/data.rb
CHANGED
@@ -6,11 +6,11 @@ require "active_support/core_ext/hash"
|
|
6
6
|
require "active_support/core_ext/object"
|
7
7
|
|
8
8
|
require "quandl/operation"
|
9
|
-
require "quandl/babelfish"
|
10
9
|
|
11
|
-
require 'quandl/
|
10
|
+
require 'quandl/error/unknown_date_format'
|
12
11
|
|
13
|
-
require 'quandl/data/
|
12
|
+
require 'quandl/data/attributes'
|
13
|
+
require 'quandl/data/cleaning'
|
14
14
|
require 'quandl/data/enumerator'
|
15
15
|
require 'quandl/data/operations'
|
16
16
|
require 'quandl/data/format'
|
@@ -18,7 +18,8 @@ require 'quandl/data/logging'
|
|
18
18
|
|
19
19
|
module Quandl
|
20
20
|
class Data
|
21
|
-
include
|
21
|
+
include Attributes
|
22
|
+
include Cleaning
|
22
23
|
include Enumerator
|
23
24
|
include Operations
|
24
25
|
include Logging if defined?(QUANDL_LOGGER) && QUANDL_LOGGER == true
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Quandl
|
2
|
+
class Data
|
3
|
+
module Attributes
|
4
|
+
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
|
9
|
+
def with_type(type)
|
10
|
+
type = type.to_s.downcase.to_sym
|
11
|
+
case type
|
12
|
+
when :dirty, :babelfish then Quandl::Babelfish::Data
|
13
|
+
else
|
14
|
+
Quandl::Data
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize(*args)
|
21
|
+
self.pristine_data = args.first
|
22
|
+
self.attributes = args.extract_options!
|
23
|
+
end
|
24
|
+
|
25
|
+
def headers=(value)
|
26
|
+
# only assign arrays
|
27
|
+
@headers = value.flatten if value.kind_of?(Array)
|
28
|
+
end
|
29
|
+
def headers
|
30
|
+
@headers
|
31
|
+
end
|
32
|
+
def headers?
|
33
|
+
headers.present?
|
34
|
+
end
|
35
|
+
|
36
|
+
def attributes
|
37
|
+
@attributes ||= {}
|
38
|
+
end
|
39
|
+
def attributes=(attrs)
|
40
|
+
assign_attributes(attrs)
|
41
|
+
attributes
|
42
|
+
end
|
43
|
+
def assign_attributes(attrs)
|
44
|
+
attrs.each do |name, value|
|
45
|
+
self.send("#{name}=", value) if self.respond_to?("#{name}=")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -1,19 +1,9 @@
|
|
1
1
|
module Quandl
|
2
2
|
class Data
|
3
|
-
module
|
3
|
+
module Cleaning
|
4
4
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
-
def headers=(value)
|
8
|
-
@headers = value
|
9
|
-
end
|
10
|
-
def headers
|
11
|
-
@headers ||= data_array.respond_to?(:headers) ? data_array.headers : nil
|
12
|
-
end
|
13
|
-
def headers?
|
14
|
-
headers.present?
|
15
|
-
end
|
16
|
-
|
17
7
|
def cleaned
|
18
8
|
@cleaned
|
19
9
|
end
|
@@ -31,16 +21,10 @@ module Babelfisher
|
|
31
21
|
return data if data.kind_of?(Array) && cleaned?
|
32
22
|
# Quandl::Data is already clean, but to avoid errors extract internal array
|
33
23
|
return data.data_array if data.kind_of?(Quandl::Data)
|
34
|
-
# Quandl::Babelfish::Data is already clean
|
35
|
-
return data if data.kind_of?(Quandl::Babelfish::Data)
|
36
24
|
# Return empty array if given empty string, nil, etc.
|
37
25
|
return [] if data.blank?
|
38
26
|
# String needs conversion to array
|
39
|
-
data = Format.
|
40
|
-
# Hash needs conversion to array
|
41
|
-
data = Format.hash_to_array( data ) if data.kind_of?(Hash)
|
42
|
-
# Array needs cleaning
|
43
|
-
data = Quandl::Babelfish.clean( data )
|
27
|
+
data = Format.parse( data )
|
44
28
|
# mark data as clean
|
45
29
|
cleaned!
|
46
30
|
# return data
|
@@ -9,11 +9,6 @@ module Quandl::Data::Enumerator
|
|
9
9
|
attr_accessor :pristine_data
|
10
10
|
end
|
11
11
|
|
12
|
-
def initialize(*args)
|
13
|
-
self.pristine_data = args.first
|
14
|
-
self.attributes = args.extract_options!
|
15
|
-
end
|
16
|
-
|
17
12
|
def data_array
|
18
13
|
@data_array ||= clean( pristine_data )
|
19
14
|
end
|
@@ -26,20 +21,4 @@ module Quandl::Data::Enumerator
|
|
26
21
|
@data_array.present?
|
27
22
|
end
|
28
23
|
|
29
|
-
def attributes
|
30
|
-
@attributes ||= {}
|
31
|
-
end
|
32
|
-
|
33
|
-
def attributes=(attrs)
|
34
|
-
assign_attributes(attrs)
|
35
|
-
attributes
|
36
|
-
end
|
37
|
-
|
38
|
-
# mass assignment protection
|
39
|
-
def assign_attributes(attrs)
|
40
|
-
attrs.each do |name, value|
|
41
|
-
self.send("#{name}=", value) if self.respond_to?("#{name}=")
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
24
|
end
|
data/lib/quandl/data/format.rb
CHANGED
@@ -185,7 +185,7 @@ class Format
|
|
185
185
|
row = row.dup
|
186
186
|
row[0] = row[0].to_i
|
187
187
|
# dont allow dates that are before 0000
|
188
|
-
raise Quandl::
|
188
|
+
raise Quandl::Error::UnknownDateFormat if row[0] <= 1721058
|
189
189
|
row
|
190
190
|
end
|
191
191
|
|
@@ -196,7 +196,7 @@ class Format
|
|
196
196
|
# split date into parts
|
197
197
|
date_values = date.split('-').collect(&:to_i)
|
198
198
|
# ensure date is valid
|
199
|
-
raise Quandl::
|
199
|
+
raise Quandl::Error::UnknownDateFormat unless date_values.count == 3
|
200
200
|
# add to row
|
201
201
|
row[0] = Date.new( *date_values )
|
202
202
|
row
|
@@ -207,7 +207,7 @@ class Format
|
|
207
207
|
|
208
208
|
def raise_date_format_error!(row, index = 0, type = :none)
|
209
209
|
message = "UnknownDateFormat: '#{row[0]}', index: data[#{index}][0], strategy: '#{type}', row: #{row}"
|
210
|
-
raise Quandl::
|
210
|
+
raise Quandl::Error::UnknownDateFormat, message
|
211
211
|
end
|
212
212
|
|
213
213
|
end
|
data/lib/quandl/data/version.rb
CHANGED
data/quandl_data.gemspec
CHANGED
@@ -18,7 +18,6 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
|
20
20
|
s.add_runtime_dependency "quandl_operation", "~> 0.3.1"
|
21
|
-
s.add_runtime_dependency "quandl_babelfish", "~> 0.0"
|
22
21
|
|
23
22
|
s.add_development_dependency "rake", "~> 10.0"
|
24
23
|
s.add_development_dependency "rspec", "~> 2.13"
|
@@ -71,8 +71,8 @@ describe Quandl::Data::Format do
|
|
71
71
|
let(:invalid2){ "2012-03-07,,69.75,69.75,69.75,0.0,0.0,0.0\nDate, Column 1, Column 2, C3, C4, C5, C6, C7\n2012-03-06,69.75,69.75,69.75,69.75,0.0,0.0,0.0\n2012-03-05,69.75,69.75,69.75,69.75,0.0,0.0,0.0\n2012-03-04,69.75,69.75,69.75,69.75,0.0,0.0,0.0\n2012-02-29,,69.75,69.75,69.75,0.0,0.0,0.0\n2012-02-28,69.75,69.75,69.75,69.75,0.0,0.0,0.0\n" }
|
72
72
|
|
73
73
|
[:invalid1, :invalid2].each do |type|
|
74
|
-
it "#{type} should raise Quandl::
|
75
|
-
expect { Quandl::Data::Format.parse( self.send(type) ) }.to raise_error Quandl::
|
74
|
+
it "#{type} should raise Quandl::Error::UnknownDateFormat" do
|
75
|
+
expect { Quandl::Data::Format.parse( self.send(type) ) }.to raise_error Quandl::Error::UnknownDateFormat
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
@@ -10,16 +10,6 @@ describe Quandl::Data do
|
|
10
10
|
let(:data){ Quandl::Data.new(csv2) }
|
11
11
|
subject{ data }
|
12
12
|
|
13
|
-
describe "#headers" do
|
14
|
-
subject{ Quandl::Data.new(csv3) }
|
15
|
-
let(:expectation){ ['Date', 'Column 1', 'Column 2', 'C3', 'C4', 'C5', 'C6', 'C7'] }
|
16
|
-
its(:headers){ should eq expectation }
|
17
|
-
|
18
|
-
its('clone.headers'){ should eq expectation }
|
19
|
-
its('to_jd.headers'){ should eq expectation }
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
13
|
describe "#clone" do
|
24
14
|
subject{ data.clone }
|
25
15
|
it{ should be_a Quandl::Data }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quandl_data
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Hilscher
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.3.1
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: quandl_babelfish
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0.0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ~>
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0.0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: rake
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -154,13 +140,14 @@ files:
|
|
154
140
|
- Rakefile
|
155
141
|
- UPGRADE.md
|
156
142
|
- lib/quandl/data.rb
|
157
|
-
- lib/quandl/data/
|
143
|
+
- lib/quandl/data/attributes.rb
|
144
|
+
- lib/quandl/data/cleaning.rb
|
158
145
|
- lib/quandl/data/enumerator.rb
|
159
146
|
- lib/quandl/data/format.rb
|
160
147
|
- lib/quandl/data/logging.rb
|
161
148
|
- lib/quandl/data/operations.rb
|
162
149
|
- lib/quandl/data/version.rb
|
163
|
-
- lib/quandl/
|
150
|
+
- lib/quandl/error/unknown_date_format.rb
|
164
151
|
- lib/quandl/fabricate.rb
|
165
152
|
- lib/quandl/fabricate/data.rb
|
166
153
|
- quandl_data.gemspec
|