quandl_client 2.7.11 → 2.7.12
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.
- data/.gitignore +7 -7
- data/.rspec +1 -1
- data/.travis.yml +20 -20
- data/.yardopts +2 -2
- data/Gemfile +12 -12
- data/Guardfile +8 -8
- data/LICENSE +7 -7
- data/README.md +303 -303
- data/Rakefile +31 -31
- data/UPGRADE.md +220 -214
- data/VERSION +1 -1
- data/examples/create.rb +32 -32
- data/examples/find.rb +17 -17
- data/examples/login.rb +12 -12
- data/examples/search.rb +12 -12
- data/examples/trims.rb +15 -15
- data/lib/quandl/client/base/attributes.rb +15 -15
- data/lib/quandl/client/base/model.rb +40 -40
- data/lib/quandl/client/base/search.rb +74 -74
- data/lib/quandl/client/base/validation.rb +103 -101
- data/lib/quandl/client/base.rb +91 -91
- data/lib/quandl/client/middleware/parse_json.rb +87 -85
- data/lib/quandl/client/middleware.rb +9 -9
- data/lib/quandl/client/models/dataset/data.rb +57 -57
- data/lib/quandl/client/models/dataset.rb +269 -269
- data/lib/quandl/client/models/location.rb +10 -10
- data/lib/quandl/client/models/report.rb +14 -14
- data/lib/quandl/client/models/scraper.rb +16 -16
- data/lib/quandl/client/models/sheet.rb +50 -50
- data/lib/quandl/client/models/source.rb +48 -48
- data/lib/quandl/client/models/superset.rb +65 -65
- data/lib/quandl/client/models/user.rb +7 -7
- data/lib/quandl/client/version.rb +14 -14
- data/lib/quandl/client.rb +54 -53
- data/lib/quandl/her/collection.rb +18 -0
- data/lib/quandl/her/remove_method_data.rb +8 -8
- data/lib/quandl/pattern/client.rb +8 -8
- data/lib/quandl/pattern.rb +37 -37
- data/quandl_client.gemspec +33 -33
- data/spec/factories/dataset.rb +10 -10
- data/spec/factories/sheet.rb +7 -7
- data/spec/factories/source.rb +9 -9
- data/spec/fixtures/scraper.rb +5 -5
- data/spec/lib/quandl/client/dataset/attributes_spec.rb +63 -63
- data/spec/lib/quandl/client/dataset/data_spec.rb +92 -92
- data/spec/lib/quandl/client/dataset/location_spec.rb +65 -65
- data/spec/lib/quandl/client/dataset/persistence_spec.rb +104 -104
- data/spec/lib/quandl/client/dataset/search_spec.rb +19 -19
- data/spec/lib/quandl/client/dataset/source_spec.rb +47 -47
- data/spec/lib/quandl/client/dataset/trim_spec.rb +35 -35
- data/spec/lib/quandl/client/dataset/validation_spec.rb +68 -68
- data/spec/lib/quandl/client/dataset_spec.rb +57 -57
- data/spec/lib/quandl/client/scraper_spec.rb +71 -71
- data/spec/lib/quandl/client/sheet_spec.rb +37 -37
- data/spec/lib/quandl/client/source_spec.rb +51 -51
- data/spec/spec_helper.rb +30 -30
- metadata +28 -4
@@ -1,105 +1,105 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe Dataset do
|
5
|
-
context "when built" do
|
6
|
-
subject{ build(:dataset) }
|
7
|
-
its(:saved?){ should be_false }
|
8
|
-
its(:valid?){ should be_true }
|
9
|
-
end
|
10
|
-
|
11
|
-
its(:request_started_at){ should be_nil }
|
12
|
-
its(:request_finished_at){ should be_nil }
|
13
|
-
its(:elapsed_request_time){ should be_nil }
|
14
|
-
|
15
|
-
context "when created" do
|
16
|
-
context "without token" do
|
17
|
-
before(:all){ Quandl::Client.token = '' }
|
18
|
-
|
19
|
-
let(:dataset){ create(:dataset) }
|
20
|
-
subject{ dataset }
|
21
|
-
|
22
|
-
its(:saved?){ should be_false }
|
23
|
-
its(:status){ should eq 401 }
|
24
|
-
|
25
|
-
its(:request_started_at){ should be_a Time }
|
26
|
-
|
27
|
-
after(:all){ Quandl::Client.token = ENV['QUANDL_AUTH_TOKEN'] }
|
28
|
-
end
|
29
|
-
context "with token" do
|
30
|
-
|
31
|
-
let(:dataset){ create(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE" ) }
|
32
|
-
subject{ dataset }
|
33
|
-
|
34
|
-
its(:saved?){ should be_true }
|
35
|
-
its(:status){ should eq 201 }
|
36
|
-
|
37
|
-
end
|
38
|
-
context "with data" do
|
39
|
-
|
40
|
-
let(:dataset){ create(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE", data: Quandl::Fabricate::Data.rand(rows: 20, columns: 2, nils: false) ) }
|
41
|
-
subject{ dataset }
|
42
|
-
|
43
|
-
its(:saved?){ should be_true }
|
44
|
-
its(:status){ should eq 201 }
|
45
|
-
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context "when updated" do
|
50
|
-
|
51
|
-
let(:dataset){ create(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE", data: Quandl::Fabricate::Data.rand(rows: 20, columns: 2, nils: false).to_csv ) }
|
52
|
-
subject{ Dataset.find(dataset.id) }
|
53
|
-
|
54
|
-
it "should include new row" do
|
55
|
-
new_data = 10.times.collect{|i| [Date.parse(subject.to_date) + i + 1, rand(12), rand(12) ] }
|
56
|
-
new_data = Quandl::Data.new(new_data).sort_descending
|
57
|
-
subject.data = new_data
|
58
|
-
subject.save
|
59
|
-
updated_dataset = Dataset.find(subject.id)
|
60
|
-
updated_dataset.data.to_date[0].should eq new_data.to_date[0]
|
61
|
-
end
|
62
|
-
|
63
|
-
it "should include old rows" do
|
64
|
-
new_data = 10.times.collect{|i| [Date.parse(subject.to_date) + i + 2, rand(12), rand(12) ] }
|
65
|
-
new_data = Quandl::Data.new(new_data).sort_descending
|
66
|
-
subject.data = new_data
|
67
|
-
subject.save
|
68
|
-
updated_dataset = Dataset.find(subject.id)
|
69
|
-
updated_dataset.data.count.should eq 30
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
73
|
-
|
74
|
-
context "#destroy" do
|
75
|
-
|
76
|
-
let(:dataset){ create(:dataset, private: false ) }
|
77
|
-
before(:each){ dataset.destroy }
|
78
|
-
subject{ dataset }
|
79
|
-
|
80
|
-
its(:status){ should eq 200 }
|
81
|
-
|
82
|
-
its(:request_started_at){ should be_a Time }
|
83
|
-
its(:request_finished_at){ should be_a Time }
|
84
|
-
its(:elapsed_request_time){ should be > 0 }
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
|
-
context "#destroy when user" do
|
89
|
-
|
90
|
-
let(:dataset){ create(:dataset, private: false ) }
|
91
|
-
|
92
|
-
it "should not delete the dataset with a user token" do
|
93
|
-
id = dataset.id
|
94
|
-
# behave as a user
|
95
|
-
Quandl::Client.token = ENV['QUANDL_TEST_TOKEN']
|
96
|
-
user_dataset = Dataset.find(id)
|
97
|
-
user_dataset.destroy
|
98
|
-
user_dataset.status.should eq 403
|
99
|
-
end
|
100
|
-
|
101
|
-
after(:all){ Quandl::Client.token = ENV['QUANDL_AUTH_TOKEN'] }
|
102
|
-
|
103
|
-
end
|
104
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Dataset do
|
5
|
+
context "when built" do
|
6
|
+
subject{ build(:dataset) }
|
7
|
+
its(:saved?){ should be_false }
|
8
|
+
its(:valid?){ should be_true }
|
9
|
+
end
|
10
|
+
|
11
|
+
its(:request_started_at){ should be_nil }
|
12
|
+
its(:request_finished_at){ should be_nil }
|
13
|
+
its(:elapsed_request_time){ should be_nil }
|
14
|
+
|
15
|
+
context "when created" do
|
16
|
+
context "without token" do
|
17
|
+
before(:all){ Quandl::Client.token = '' }
|
18
|
+
|
19
|
+
let(:dataset){ create(:dataset) }
|
20
|
+
subject{ dataset }
|
21
|
+
|
22
|
+
its(:saved?){ should be_false }
|
23
|
+
its(:status){ should eq 401 }
|
24
|
+
|
25
|
+
its(:request_started_at){ should be_a Time }
|
26
|
+
|
27
|
+
after(:all){ Quandl::Client.token = ENV['QUANDL_AUTH_TOKEN'] }
|
28
|
+
end
|
29
|
+
context "with token" do
|
30
|
+
|
31
|
+
let(:dataset){ create(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE" ) }
|
32
|
+
subject{ dataset }
|
33
|
+
|
34
|
+
its(:saved?){ should be_true }
|
35
|
+
its(:status){ should eq 201 }
|
36
|
+
|
37
|
+
end
|
38
|
+
context "with data" do
|
39
|
+
|
40
|
+
let(:dataset){ create(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE", data: Quandl::Fabricate::Data.rand(rows: 20, columns: 2, nils: false) ) }
|
41
|
+
subject{ dataset }
|
42
|
+
|
43
|
+
its(:saved?){ should be_true }
|
44
|
+
its(:status){ should eq 201 }
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "when updated" do
|
50
|
+
|
51
|
+
let(:dataset){ create(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE", data: Quandl::Fabricate::Data.rand(rows: 20, columns: 2, nils: false).to_csv ) }
|
52
|
+
subject{ Dataset.find(dataset.id) }
|
53
|
+
|
54
|
+
it "should include new row" do
|
55
|
+
new_data = 10.times.collect{|i| [Date.parse(subject.to_date) + i + 1, rand(12), rand(12) ] }
|
56
|
+
new_data = Quandl::Data.new(new_data).sort_descending
|
57
|
+
subject.data = new_data
|
58
|
+
subject.save
|
59
|
+
updated_dataset = Dataset.find(subject.id)
|
60
|
+
updated_dataset.data.to_date[0].should eq new_data.to_date[0]
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should include old rows" do
|
64
|
+
new_data = 10.times.collect{|i| [Date.parse(subject.to_date) + i + 2, rand(12), rand(12) ] }
|
65
|
+
new_data = Quandl::Data.new(new_data).sort_descending
|
66
|
+
subject.data = new_data
|
67
|
+
subject.save
|
68
|
+
updated_dataset = Dataset.find(subject.id)
|
69
|
+
updated_dataset.data.count.should eq 30
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
context "#destroy" do
|
75
|
+
|
76
|
+
let(:dataset){ create(:dataset, private: false ) }
|
77
|
+
before(:each){ dataset.destroy }
|
78
|
+
subject{ dataset }
|
79
|
+
|
80
|
+
its(:status){ should eq 200 }
|
81
|
+
|
82
|
+
its(:request_started_at){ should be_a Time }
|
83
|
+
its(:request_finished_at){ should be_a Time }
|
84
|
+
its(:elapsed_request_time){ should be > 0 }
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
context "#destroy when user" do
|
89
|
+
|
90
|
+
let(:dataset){ create(:dataset, private: false ) }
|
91
|
+
|
92
|
+
it "should not delete the dataset with a user token" do
|
93
|
+
id = dataset.id
|
94
|
+
# behave as a user
|
95
|
+
Quandl::Client.token = ENV['QUANDL_TEST_TOKEN']
|
96
|
+
user_dataset = Dataset.find(id)
|
97
|
+
user_dataset.destroy
|
98
|
+
user_dataset.status.should eq 403
|
99
|
+
end
|
100
|
+
|
101
|
+
after(:all){ Quandl::Client.token = ENV['QUANDL_AUTH_TOKEN'] }
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
105
|
end
|
@@ -1,20 +1,20 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe Dataset do
|
5
|
-
|
6
|
-
let(:dataset){ create(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE" ) }
|
7
|
-
|
8
|
-
it "should find the dataset by id" do
|
9
|
-
Dataset.find(dataset.id).id.should eq dataset.id
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should find the dataset by full code" do
|
13
|
-
Dataset.find(dataset.full_code).id.should eq dataset.id
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should exclude_data" do
|
17
|
-
Dataset.find(dataset.id).attributes[:data].should be_blank
|
18
|
-
end
|
19
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Dataset do
|
5
|
+
|
6
|
+
let(:dataset){ create(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE" ) }
|
7
|
+
|
8
|
+
it "should find the dataset by id" do
|
9
|
+
Dataset.find(dataset.id).id.should eq dataset.id
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should find the dataset by full code" do
|
13
|
+
Dataset.find(dataset.full_code).id.should eq dataset.id
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should exclude_data" do
|
17
|
+
Dataset.find(dataset.id).attributes[:data].should be_blank
|
18
|
+
end
|
19
|
+
|
20
20
|
end
|
@@ -1,47 +1,47 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe Dataset do
|
5
|
-
|
6
|
-
let(:dataset){ create(:dataset, source_code: nil ) }
|
7
|
-
subject{ dataset }
|
8
|
-
|
9
|
-
context "admin user" do
|
10
|
-
|
11
|
-
its(:saved?){ should be_true }
|
12
|
-
its(:source_code){ should be_present }
|
13
|
-
|
14
|
-
describe "#source_code=" do
|
15
|
-
before(:each){
|
16
|
-
subject.source_code = 'WHO'
|
17
|
-
subject.save
|
18
|
-
}
|
19
|
-
its(:status){ should be 200 }
|
20
|
-
its(:source_code){ should eq 'WHO' }
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
context "normal user" do
|
26
|
-
# behave as a user
|
27
|
-
before(:all){ Quandl::Client.token = ENV['QUANDL_TEST_TOKEN'] }
|
28
|
-
|
29
|
-
its(:saved?){ should be_true }
|
30
|
-
its(:source_code){ should be_present }
|
31
|
-
|
32
|
-
it "should find the source" do
|
33
|
-
Source.find(dataset.source_code).exists?.should be_true
|
34
|
-
end
|
35
|
-
|
36
|
-
describe "#source_code=" do
|
37
|
-
before(:each){
|
38
|
-
subject.source_code = 'WHO'
|
39
|
-
subject.save
|
40
|
-
}
|
41
|
-
its(:status){ should be 422 }
|
42
|
-
end
|
43
|
-
|
44
|
-
after(:all){ Quandl::Client.token = ENV['QUANDL_AUTH_TOKEN'] }
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Dataset do
|
5
|
+
|
6
|
+
let(:dataset){ create(:dataset, source_code: nil ) }
|
7
|
+
subject{ dataset }
|
8
|
+
|
9
|
+
context "admin user" do
|
10
|
+
|
11
|
+
its(:saved?){ should be_true }
|
12
|
+
its(:source_code){ should be_present }
|
13
|
+
|
14
|
+
describe "#source_code=" do
|
15
|
+
before(:each){
|
16
|
+
subject.source_code = 'WHO'
|
17
|
+
subject.save
|
18
|
+
}
|
19
|
+
its(:status){ should be 200 }
|
20
|
+
its(:source_code){ should eq 'WHO' }
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
context "normal user" do
|
26
|
+
# behave as a user
|
27
|
+
before(:all){ Quandl::Client.token = ENV['QUANDL_TEST_TOKEN'] }
|
28
|
+
|
29
|
+
its(:saved?){ should be_true }
|
30
|
+
its(:source_code){ should be_present }
|
31
|
+
|
32
|
+
it "should find the source" do
|
33
|
+
Source.find(dataset.source_code).exists?.should be_true
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "#source_code=" do
|
37
|
+
before(:each){
|
38
|
+
subject.source_code = 'WHO'
|
39
|
+
subject.save
|
40
|
+
}
|
41
|
+
its(:status){ should be 422 }
|
42
|
+
end
|
43
|
+
|
44
|
+
after(:all){ Quandl::Client.token = ENV['QUANDL_AUTH_TOKEN'] }
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -1,36 +1,36 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe Dataset do
|
5
|
-
|
6
|
-
subject{ build(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE", data: Quandl::Fabricate::Data.rand(rows: 20, columns: 2) ) }
|
7
|
-
|
8
|
-
describe "#from_date" do
|
9
|
-
context "before_save" do
|
10
|
-
it "should be nil" do
|
11
|
-
subject.from_date.should be_nil
|
12
|
-
end
|
13
|
-
end
|
14
|
-
context "after_save" do
|
15
|
-
before(:each){ subject.save }
|
16
|
-
it "should equal the last date" do
|
17
|
-
subject.from_date.should eq subject.data.to_date[-1][0].to_s
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "#to_date" do
|
23
|
-
context "before_save" do
|
24
|
-
it "should be nil" do
|
25
|
-
subject.to_date.should be_nil
|
26
|
-
end
|
27
|
-
end
|
28
|
-
context "after_save" do
|
29
|
-
before(:each){ subject.save }
|
30
|
-
it "should equal the first date" do
|
31
|
-
subject.to_date.should eq subject.data.to_date[0][0].to_s
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Dataset do
|
5
|
+
|
6
|
+
subject{ build(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE", data: Quandl::Fabricate::Data.rand(rows: 20, columns: 2) ) }
|
7
|
+
|
8
|
+
describe "#from_date" do
|
9
|
+
context "before_save" do
|
10
|
+
it "should be nil" do
|
11
|
+
subject.from_date.should be_nil
|
12
|
+
end
|
13
|
+
end
|
14
|
+
context "after_save" do
|
15
|
+
before(:each){ subject.save }
|
16
|
+
it "should equal the last date" do
|
17
|
+
subject.from_date.should eq subject.data.to_date[-1][0].to_s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#to_date" do
|
23
|
+
context "before_save" do
|
24
|
+
it "should be nil" do
|
25
|
+
subject.to_date.should be_nil
|
26
|
+
end
|
27
|
+
end
|
28
|
+
context "after_save" do
|
29
|
+
before(:each){ subject.save }
|
30
|
+
it "should equal the first date" do
|
31
|
+
subject.to_date.should eq subject.data.to_date[0][0].to_s
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
36
|
end
|
@@ -1,69 +1,69 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe Dataset do
|
5
|
-
|
6
|
-
let(:dataset){ build(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE" ) }
|
7
|
-
subject{ dataset }
|
8
|
-
|
9
|
-
context "data='1980,10,20\nASDF,10,30'" do
|
10
|
-
before(:each){
|
11
|
-
dataset.data = '1980,10,20\nASDF,10,30'
|
12
|
-
dataset.valid?
|
13
|
-
}
|
14
|
-
its(:valid?){ should be_false }
|
15
|
-
its('errors.messages'){ should eq({ data: ["Invalid date 'ASDF'"] }) }
|
16
|
-
end
|
17
|
-
|
18
|
-
context "given ambiguous code" do
|
19
|
-
before(:each){
|
20
|
-
dataset.source_code = nil
|
21
|
-
dataset.code = '12345'
|
22
|
-
dataset.valid?
|
23
|
-
}
|
24
|
-
its(:valid?){ should be_false }
|
25
|
-
its('errors.messages'){ should eq({ data: ["Pure numerical codes like \"12345\" are not allowed unless you include a source code. Do this:\nsource_code: <USERNAME>\ncode: 12345"]}) }
|
26
|
-
end
|
27
|
-
|
28
|
-
context "mismatch row count" do
|
29
|
-
before(:each){
|
30
|
-
dataset.data = [[2012, 1,2],[2011, 1,2,3]]
|
31
|
-
dataset.valid?
|
32
|
-
}
|
33
|
-
its(:valid?){ should be_false }
|
34
|
-
its('errors.messages'){ should eq({ data:
|
35
|
-
["Unexpected number of points in this row:\n2011-12-31,1.0,2.0,3.0\nFound 3 but expected 2 based on precedent from the first row (2012-12-31,1.0,2.0)"]
|
36
|
-
})}
|
37
|
-
end
|
38
|
-
|
39
|
-
context "mismatch column_names count" do
|
40
|
-
before(:each){
|
41
|
-
dataset.column_names = ['Date','Value']
|
42
|
-
dataset.data = [[2012, 18,21],[2011, 1,2]]
|
43
|
-
dataset.valid?
|
44
|
-
}
|
45
|
-
its(:valid?){ should be_false }
|
46
|
-
its('errors.messages'){ should eq({ data:
|
47
|
-
["Unexpected number of points in this row:\n2012-12-31,18.0,21.0\nFound 2 but expected 1 based on precedent from the header row (Date,Value)"]
|
48
|
-
})}
|
49
|
-
end
|
50
|
-
|
51
|
-
describe "#code" do
|
52
|
-
|
53
|
-
before(:all){ Quandl::Client.token = ENV['QUANDL_AUTH_TOKEN'] }
|
54
|
-
|
55
|
-
let(:dataset){ create(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE" ) }
|
56
|
-
let(:invalid_dataset){ create(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE", code: dataset.code ) }
|
57
|
-
subject{ invalid_dataset }
|
58
|
-
|
59
|
-
it "should create the dataset" do
|
60
|
-
dataset.status.should eq 201
|
61
|
-
end
|
62
|
-
|
63
|
-
its(:saved?){ should be_false }
|
64
|
-
its(:status){ should eq 422 }
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Dataset do
|
5
|
+
|
6
|
+
let(:dataset){ build(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE" ) }
|
7
|
+
subject{ dataset }
|
8
|
+
|
9
|
+
context "data='1980,10,20\nASDF,10,30'" do
|
10
|
+
before(:each){
|
11
|
+
dataset.data = '1980,10,20\nASDF,10,30'
|
12
|
+
dataset.valid?
|
13
|
+
}
|
14
|
+
its(:valid?){ should be_false }
|
15
|
+
its('errors.messages'){ should eq({ data: ["Invalid date 'ASDF'"] }) }
|
16
|
+
end
|
17
|
+
|
18
|
+
context "given ambiguous code" do
|
19
|
+
before(:each){
|
20
|
+
dataset.source_code = nil
|
21
|
+
dataset.code = '12345'
|
22
|
+
dataset.valid?
|
23
|
+
}
|
24
|
+
its(:valid?){ should be_false }
|
25
|
+
its('errors.messages'){ should eq({ data: ["Pure numerical codes like \"12345\" are not allowed unless you include a source code. Do this:\nsource_code: <USERNAME>\ncode: 12345"]}) }
|
26
|
+
end
|
27
|
+
|
28
|
+
context "mismatch row count" do
|
29
|
+
before(:each){
|
30
|
+
dataset.data = [[2012, 1,2],[2011, 1,2,3]]
|
31
|
+
dataset.valid?
|
32
|
+
}
|
33
|
+
its(:valid?){ should be_false }
|
34
|
+
its('errors.messages'){ should eq({ data:
|
35
|
+
["Unexpected number of points in this row:\n2011-12-31,1.0,2.0,3.0\nFound 3 but expected 2 based on precedent from the first row (2012-12-31,1.0,2.0)"]
|
36
|
+
})}
|
37
|
+
end
|
38
|
+
|
39
|
+
context "mismatch column_names count" do
|
40
|
+
before(:each){
|
41
|
+
dataset.column_names = ['Date','Value']
|
42
|
+
dataset.data = [[2012, 18,21],[2011, 1,2]]
|
43
|
+
dataset.valid?
|
44
|
+
}
|
45
|
+
its(:valid?){ should be_false }
|
46
|
+
its('errors.messages'){ should eq({ data:
|
47
|
+
["Unexpected number of points in this row:\n2012-12-31,18.0,21.0\nFound 2 but expected 1 based on precedent from the header row (Date,Value)"]
|
48
|
+
})}
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#code" do
|
52
|
+
|
53
|
+
before(:all){ Quandl::Client.token = ENV['QUANDL_AUTH_TOKEN'] }
|
54
|
+
|
55
|
+
let(:dataset){ create(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE" ) }
|
56
|
+
let(:invalid_dataset){ create(:dataset, source_code: "QUANDL_CLIENT_TEST_SOURCE", code: dataset.code ) }
|
57
|
+
subject{ invalid_dataset }
|
58
|
+
|
59
|
+
it "should create the dataset" do
|
60
|
+
dataset.status.should eq 201
|
61
|
+
end
|
62
|
+
|
63
|
+
its(:saved?){ should be_false }
|
64
|
+
its(:status){ should eq 422 }
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
69
|
end
|
@@ -1,58 +1,58 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe Dataset do
|
5
|
-
let(:dataset){ create(:dataset) }
|
6
|
-
subject{ dataset }
|
7
|
-
|
8
|
-
describe ".find" do
|
9
|
-
subject{ Dataset.find(query) }
|
10
|
-
context "given nil" do
|
11
|
-
let(:query){ nil }
|
12
|
-
it{ should be_nil }
|
13
|
-
end
|
14
|
-
context "given empty string" do
|
15
|
-
let(:query){ '' }
|
16
|
-
it{ should be_nil }
|
17
|
-
end
|
18
|
-
context "given non-code value" do
|
19
|
-
let(:query){ '/' }
|
20
|
-
it{ should be_nil }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe ".touch_existing(:id)" do
|
25
|
-
it "should touch the dataset" do
|
26
|
-
dataset.updated_at
|
27
|
-
sleep(1)
|
28
|
-
Dataset.touch_existing(subject.id).should eq true
|
29
|
-
Dataset.find(subject.id).updated_at.should_not eq dataset.updated_at
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should change url" do
|
34
|
-
original_url = Quandl::Client::Base.url
|
35
|
-
Quandl::Client.use('http://url.com/')
|
36
|
-
Quandl::Client::Dataset.url.should eq 'http://url.com/v2'
|
37
|
-
Quandl::Client.use('http://url.com/2/')
|
38
|
-
Quandl::Client::Dataset.url.should eq 'http://url.com/2/v2'
|
39
|
-
Quandl::Client.use original_url
|
40
|
-
end
|
41
|
-
|
42
|
-
describe ".query" do
|
43
|
-
let(:datasets){ Quandl::Client::Dataset.query('oil').all }
|
44
|
-
subject{ datasets }
|
45
|
-
|
46
|
-
its(:first){ should be_a Quandl::Client::Dataset }
|
47
|
-
|
48
|
-
describe "#metadata" do
|
49
|
-
subject{ OpenStruct.new(datasets.metadata) }
|
50
|
-
its(:total_count){ should > 1 }
|
51
|
-
its(:per_page){ should eq 20 }
|
52
|
-
its(:sources){ should be_present }
|
53
|
-
its(:status){ should eq 200 }
|
54
|
-
its(:current_page){ should eq 1 }
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Dataset do
|
5
|
+
let(:dataset){ create(:dataset) }
|
6
|
+
subject{ dataset }
|
7
|
+
|
8
|
+
describe ".find" do
|
9
|
+
subject{ Dataset.find(query) }
|
10
|
+
context "given nil" do
|
11
|
+
let(:query){ nil }
|
12
|
+
it{ should be_nil }
|
13
|
+
end
|
14
|
+
context "given empty string" do
|
15
|
+
let(:query){ '' }
|
16
|
+
it{ should be_nil }
|
17
|
+
end
|
18
|
+
context "given non-code value" do
|
19
|
+
let(:query){ '/' }
|
20
|
+
it{ should be_nil }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ".touch_existing(:id)" do
|
25
|
+
it "should touch the dataset" do
|
26
|
+
dataset.updated_at
|
27
|
+
sleep(1)
|
28
|
+
Dataset.touch_existing(subject.id).should eq true
|
29
|
+
Dataset.find(subject.id).updated_at.should_not eq dataset.updated_at
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should change url" do
|
34
|
+
original_url = Quandl::Client::Base.url
|
35
|
+
Quandl::Client.use('http://url.com/')
|
36
|
+
Quandl::Client::Dataset.url.should eq 'http://url.com/v2'
|
37
|
+
Quandl::Client.use('http://url.com/2/')
|
38
|
+
Quandl::Client::Dataset.url.should eq 'http://url.com/2/v2'
|
39
|
+
Quandl::Client.use original_url
|
40
|
+
end
|
41
|
+
|
42
|
+
describe ".query" do
|
43
|
+
let(:datasets){ Quandl::Client::Dataset.query('oil').all }
|
44
|
+
subject{ datasets }
|
45
|
+
|
46
|
+
its(:first){ should be_a Quandl::Client::Dataset }
|
47
|
+
|
48
|
+
describe "#metadata" do
|
49
|
+
subject{ OpenStruct.new(datasets.metadata) }
|
50
|
+
its(:total_count){ should > 1 }
|
51
|
+
its(:per_page){ should eq 20 }
|
52
|
+
its(:sources){ should be_present }
|
53
|
+
its(:status){ should eq 200 }
|
54
|
+
its(:current_page){ should eq 1 }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
58
|
end
|