quandl_client 2.5.0 → 2.5.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/UPGRADE.md +6 -0
- data/examples/create.rb +15 -1
- data/examples/find.rb +18 -0
- data/lib/quandl/client/models/dataset.rb +48 -1
- data/lib/quandl/client/version.rb +1 -1
- data/spec/lib/quandl/client/dataset/validation_spec.rb +26 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3018260bc400c7f59310d511e13cb51bfbffe97c
|
4
|
+
data.tar.gz: 4ab1e74283f845bb3dee3521c18367afc4d9a8ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c1931a9c197ae51d561b1dea40675ba24cca2247262b1c157fcbc78956738d0fd8be26b3c9aee7dd9c8a7c7498336486853debe63e2f0f2a6882b22de6349a5
|
7
|
+
data.tar.gz: 86c0a7a0f16a237c7cd8d38a1b0ddbfefaaaa675516857740b245374790507392ff457583c57692bc8a946e6a3b307e22bad7eecc6e07452e817910356ff793d
|
data/UPGRADE.md
CHANGED
data/examples/create.rb
CHANGED
@@ -15,4 +15,18 @@ include Quandl::Client
|
|
15
15
|
Quandl::Client.use ENV['QUANDL_TEST_URL']
|
16
16
|
Quandl::Client.token = ENV['QUANDL_TEST_TOKEN']
|
17
17
|
|
18
|
-
|
18
|
+
# set some attributes
|
19
|
+
d = Dataset.new(
|
20
|
+
code: "MY_DATASET_#{Time.now.to_i.to_s(16)}",
|
21
|
+
name: "My dataset has a name.",
|
22
|
+
description: "This is the description.",
|
23
|
+
data: [[ 2014, 1, 2 ]]
|
24
|
+
)
|
25
|
+
# POST to server
|
26
|
+
d.save
|
27
|
+
|
28
|
+
if d.saved?
|
29
|
+
puts "View your new dataset at: #{d.full_url}"
|
30
|
+
else
|
31
|
+
puts "Something went wrong:\n#{d.human_status}\n#{d.human_error_messages}"
|
32
|
+
end
|
data/examples/find.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
2
|
+
|
3
|
+
# DEBUGGING
|
4
|
+
require 'pry'
|
5
|
+
require "quandl/fabricate"
|
6
|
+
|
7
|
+
# LOAD
|
8
|
+
require "quandl/client"
|
9
|
+
include Quandl::Client
|
10
|
+
|
11
|
+
# CONFIGURE
|
12
|
+
Quandl::Client.use ENV['QUANDL_URL']
|
13
|
+
Quandl::Client.token = ENV['QUANDL_TOKEN']
|
14
|
+
|
15
|
+
# FIND
|
16
|
+
d = Dataset.find('MCX.ALMG2014')
|
17
|
+
|
18
|
+
binding.pry
|
@@ -14,7 +14,7 @@ class Quandl::Client::Dataset < Quandl::Client::Base
|
|
14
14
|
# enforce code formatting
|
15
15
|
if value.is_a?(String)
|
16
16
|
# ensure slashes are forward facing
|
17
|
-
value = value.gsub("\\","/")
|
17
|
+
value = value.gsub("\\","/").gsub(".","/")
|
18
18
|
# ensure uppercase
|
19
19
|
value = value.upcase
|
20
20
|
end
|
@@ -45,6 +45,10 @@ class Quandl::Client::Dataset < Quandl::Client::Base
|
|
45
45
|
validates :code, presence: true, format: { with: Quandl::Pattern.code, message: "is invalid. Expected format: #{Quandl::Pattern.code.to_example}" }
|
46
46
|
validates :display_url, allow_blank: true, url: true
|
47
47
|
validate :data_columns_should_not_exceed_column_names!
|
48
|
+
validate :data_rows_should_have_equal_columns!
|
49
|
+
validate :data_row_count_should_match_column_count!
|
50
|
+
validate :ambiguous_code_requires_source_code!
|
51
|
+
|
48
52
|
|
49
53
|
##############
|
50
54
|
# PROPERTIES #
|
@@ -121,6 +125,15 @@ class Quandl::Client::Dataset < Quandl::Client::Base
|
|
121
125
|
|
122
126
|
protected
|
123
127
|
|
128
|
+
def ambiguous_code_requires_source_code!
|
129
|
+
if code.to_s.numeric? && source_code.blank?
|
130
|
+
message = %Q{Pure numerical codes like "#{code}" are not allowed unless you prefix them with a source code. Do this:\ncode: <your-username>/#{code}}
|
131
|
+
self.errors.add( :data, message )
|
132
|
+
return false
|
133
|
+
end
|
134
|
+
true
|
135
|
+
end
|
136
|
+
|
124
137
|
def data_columns_should_not_exceed_column_names!
|
125
138
|
if dataset_data.data? && column_names.present? && data.first.count != column_names.count
|
126
139
|
self.errors.add( :data, "You may not change the number of columns in a dataset. This dataset has #{column_names.count} columns but you tried to send #{data.first.count} columns." )
|
@@ -129,6 +142,40 @@ class Quandl::Client::Dataset < Quandl::Client::Base
|
|
129
142
|
true
|
130
143
|
end
|
131
144
|
|
145
|
+
def data_rows_should_have_equal_columns!
|
146
|
+
# skip validation unless data is present
|
147
|
+
return true unless dataset_data.data?
|
148
|
+
# use first row as expected column count
|
149
|
+
column_count = data[0].count
|
150
|
+
# check each row
|
151
|
+
data.each_with_index do |row, index|
|
152
|
+
# the row is valid if it's count matches the first row's count
|
153
|
+
next if row.count == column_count
|
154
|
+
# the row is invalid if the count is mismatched
|
155
|
+
self.errors.add( :data, "Unexpected number of points in this row '#{row}'. Expected #{column_count} but found #{row.count} based on #{data[0]}" )
|
156
|
+
# return validation failure
|
157
|
+
return false
|
158
|
+
end
|
159
|
+
true
|
160
|
+
end
|
161
|
+
|
162
|
+
def data_row_count_should_match_column_count!
|
163
|
+
# skip validation unless data and column_names present
|
164
|
+
return true unless dataset_data.data? && column_names.present?
|
165
|
+
# count the number of expected columns
|
166
|
+
column_count = column_names.count
|
167
|
+
# check each row
|
168
|
+
data.each_with_index do |row, index|
|
169
|
+
# the row is valid if it's count matches the first row's count
|
170
|
+
next if row.count == column_count
|
171
|
+
# the row is invalid if the count is mismatched
|
172
|
+
self.errors.add( :data, "Unexpected number of points in this row '#{row}'. Expected #{column_names.count} but found #{row.count} based on #{column_names}" )
|
173
|
+
# return validation failure
|
174
|
+
return false
|
175
|
+
end
|
176
|
+
true
|
177
|
+
end
|
178
|
+
|
132
179
|
def save_dataset_data
|
133
180
|
return if (!saved? && id.blank?)
|
134
181
|
return if !dataset_data.data?
|
@@ -3,6 +3,32 @@ require 'spec_helper'
|
|
3
3
|
|
4
4
|
describe Dataset do
|
5
5
|
|
6
|
+
let(:dataset){ build(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE" ) }
|
7
|
+
subject{ dataset }
|
8
|
+
|
9
|
+
context "given ambiguous code" do
|
10
|
+
before(:each){
|
11
|
+
dataset.source_code = nil
|
12
|
+
dataset.code = '12345'
|
13
|
+
dataset.valid?
|
14
|
+
}
|
15
|
+
its(:valid?){ should be_false }
|
16
|
+
its('errors.messages'){ should eq({ data: ["Pure numerical codes like \"12345\" are not allowed unless you prefix them with a source code. Do this:\ncode: <your-username>/12345"]}) }
|
17
|
+
end
|
18
|
+
|
19
|
+
context "mismatch row count" do
|
20
|
+
before(:each){ dataset.data = [[2012, 1,2],[2011, 1,2,3]] }
|
21
|
+
its(:valid?){ should be_false }
|
22
|
+
end
|
23
|
+
|
24
|
+
context "mismatch column_names count" do
|
25
|
+
before(:each){
|
26
|
+
dataset.column_names = ['Date','Value']
|
27
|
+
dataset.data = [[2012, 1,2],[2011, 1,2]]
|
28
|
+
}
|
29
|
+
its(:valid?){ should be_false }
|
30
|
+
end
|
31
|
+
|
6
32
|
describe "#code" do
|
7
33
|
|
8
34
|
before(:all){ Quandl::Client.token = ENV['QUANDL_AUTH_TOKEN'] }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quandl_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Hilscher
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -196,6 +196,7 @@ files:
|
|
196
196
|
- Rakefile
|
197
197
|
- UPGRADE.md
|
198
198
|
- examples/create.rb
|
199
|
+
- examples/find.rb
|
199
200
|
- examples/login.rb
|
200
201
|
- examples/search.rb
|
201
202
|
- examples/trims.rb
|