quandl_client 2.6.2 → 2.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +4 -2
- data/UPGRADE.md +12 -0
- data/VERSION +1 -1
- data/lib/quandl/client/base/search.rb +26 -1
- data/lib/quandl/client/base/validation.rb +13 -33
- data/lib/quandl/client/middleware/parse_json.rb +1 -1
- data/lib/quandl/client/models/dataset.rb +1 -1
- data/lib/quandl/client/models/superset.rb +40 -0
- data/lib/quandl/client.rb +1 -0
- data/spec/lib/quandl/client/dataset/persistence_spec.rb +1 -2
- metadata +54 -19
- checksums.yaml +0 -7
data/Rakefile
CHANGED
@@ -9,8 +9,10 @@ require "quandl/client"
|
|
9
9
|
|
10
10
|
include Quandl::Client
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
config = OpenStruct.new(YAML.load(File.read("#{ENV['HOME']}/.quandl/config")))
|
13
|
+
|
14
|
+
Quandl::Client.use config.quandl_url
|
15
|
+
Quandl::Client.token = config.token
|
14
16
|
|
15
17
|
task :default => :spec
|
16
18
|
|
data/UPGRADE.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.7.0
|
@@ -14,7 +14,8 @@ module Search
|
|
14
14
|
include ScopeComposer::Model
|
15
15
|
|
16
16
|
has_scope_composer
|
17
|
-
|
17
|
+
|
18
|
+
scope :limit
|
18
19
|
scope :with_id, ->(value) { where( id: value.to_i )}
|
19
20
|
scope_helper :all, ->{ connection.where(attributes_with_scopes).fetch }
|
20
21
|
scope_helper :connection, -> { self.class.parent }
|
@@ -41,6 +42,30 @@ module Search
|
|
41
42
|
attributes.merge(scope_attributes)
|
42
43
|
end
|
43
44
|
|
45
|
+
def each_in_page(options={}, &block)
|
46
|
+
# count
|
47
|
+
options[:count] ||= 0
|
48
|
+
options[:limit] ||= attributes[:limit]
|
49
|
+
# fetch records
|
50
|
+
records = all
|
51
|
+
# pass each record upstream
|
52
|
+
records.each do |r|
|
53
|
+
# is a limit set?
|
54
|
+
return if options[:limit].present? && options[:count] > options[:limit]
|
55
|
+
# call block
|
56
|
+
block.call( r )
|
57
|
+
# increase counter
|
58
|
+
options[:count] += 1
|
59
|
+
end
|
60
|
+
# blank array indidcates last page
|
61
|
+
return if records.blank? || records.count < records.try(:metadata).try(:[], :per_page).to_i
|
62
|
+
# next page
|
63
|
+
scope_attributes[:page] = 1 if scope_attributes[:page].blank?
|
64
|
+
scope_attributes[:page] = scope_attributes[:page].to_i + 1
|
65
|
+
# call recursively until we reach the end
|
66
|
+
each_in_page(options, &block)
|
67
|
+
end
|
68
|
+
|
44
69
|
end
|
45
70
|
|
46
71
|
end
|
@@ -7,25 +7,18 @@ module Validation
|
|
7
7
|
|
8
8
|
before_save :halt_unless_valid!
|
9
9
|
|
10
|
-
|
10
|
+
after_save :apply_response_errors
|
11
11
|
|
12
|
-
def
|
12
|
+
def apply_response_errors
|
13
13
|
return unless response_errors.respond_to?(:each)
|
14
14
|
response_errors.each do |key, messages|
|
15
|
-
if messages.respond_to?(:each)
|
16
|
-
messages.each{|message| errors.add(key, message) }
|
15
|
+
if messages.respond_to?(:each) && @errors.respond_to?(:add)
|
16
|
+
messages.each{|message| @errors.add(key.to_sym, message) unless @errors.has_key?(key.to_sym) }
|
17
17
|
end
|
18
18
|
end
|
19
19
|
true
|
20
20
|
end
|
21
21
|
|
22
|
-
def valid_with_server?
|
23
|
-
return false unless valid?
|
24
|
-
return false unless errors_params.blank?
|
25
|
-
return false unless errors_server.blank?
|
26
|
-
true
|
27
|
-
end
|
28
|
-
|
29
22
|
def save!
|
30
23
|
save
|
31
24
|
end
|
@@ -58,10 +51,6 @@ module Validation
|
|
58
51
|
metadata[:status].to_i
|
59
52
|
end
|
60
53
|
|
61
|
-
def parse_error
|
62
|
-
error_messages[:response_errors].try( :[], :parse_error )
|
63
|
-
end
|
64
|
-
|
65
54
|
def human_error_messages
|
66
55
|
return if errors.blank?
|
67
56
|
m = "#{status}\n"
|
@@ -72,30 +61,21 @@ module Validation
|
|
72
61
|
end.flatten.compact.join
|
73
62
|
end
|
74
63
|
|
75
|
-
def human_error_message(name, message)
|
76
|
-
message = message.join(', ') if message.respond_to?(:join)
|
77
|
-
" #{name}: #{message}\n"
|
78
|
-
end
|
79
|
-
|
80
64
|
def error_messages
|
81
65
|
valid?
|
82
|
-
|
83
|
-
end
|
84
|
-
|
85
|
-
def errors_client
|
86
|
-
errors.messages || {}
|
66
|
+
errors.messages
|
87
67
|
end
|
88
68
|
|
89
|
-
def
|
90
|
-
|
91
|
-
|
92
|
-
messages
|
69
|
+
def errors
|
70
|
+
apply_response_errors
|
71
|
+
super
|
93
72
|
end
|
94
|
-
|
95
|
-
def
|
96
|
-
|
73
|
+
|
74
|
+
def human_error_message(name, message)
|
75
|
+
message = message.join(', ') if message.respond_to?(:join)
|
76
|
+
" #{name}: #{message}\n"
|
97
77
|
end
|
98
|
-
|
78
|
+
|
99
79
|
protected
|
100
80
|
|
101
81
|
def halt_unless_valid!
|
@@ -72,7 +72,7 @@ class ParseJSON < Faraday::Response::Middleware
|
|
72
72
|
json = {
|
73
73
|
id: 1,
|
74
74
|
errors: {
|
75
|
-
|
75
|
+
parse_errors: [ "Quandl::Client::ParseJSON error. status: #{env[:status]}, body: #{body.inspect}" ]
|
76
76
|
}
|
77
77
|
}
|
78
78
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class Quandl::Client::Superset < Quandl::Client::Base
|
2
|
+
|
3
|
+
scope :query, :page, :owner, :code, :source_code
|
4
|
+
|
5
|
+
attributes :id, :source_code, :code, :name, :urlize_name, :description, :updated_at, :private
|
6
|
+
attributes :column_codes, :column_names
|
7
|
+
attributes :frequency, :from_date, :to_date
|
8
|
+
|
9
|
+
validates :code, presence: true, format: { with: Quandl::Pattern.code, message: "is invalid. Expected format: #{Quandl::Pattern.code.to_example}" }
|
10
|
+
validates :column_codes, presence: true
|
11
|
+
validate :column_codes_should_be_valid!
|
12
|
+
|
13
|
+
def data
|
14
|
+
@data ||= Quandl::Client::Dataset::Data.with_id(id)
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def column_codes_should_be_valid!
|
20
|
+
# must be an array
|
21
|
+
unless column_codes.respond_to?(:each)
|
22
|
+
# failure
|
23
|
+
self.errors.add( :column_codes, "expected an array, but got #{column_codes.class}.")
|
24
|
+
# nothing more to do
|
25
|
+
return false
|
26
|
+
end
|
27
|
+
# check each code
|
28
|
+
column_codes.each do |code|
|
29
|
+
# is the code valid?
|
30
|
+
next if code =~ /#{Quandl::Pattern.code}\.#{Quandl::Pattern.code}\.[0-9]+/
|
31
|
+
# otherwise report error
|
32
|
+
self.errors.add( :column_codes, "Code '#{code}' is invalid. Expected: /#{Quandl::Pattern.code.to_example}.#{Quandl::Pattern.code.to_example}.INTEGER/" )
|
33
|
+
# nothing more to do here
|
34
|
+
return false
|
35
|
+
end
|
36
|
+
# success
|
37
|
+
true
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
data/lib/quandl/client.rb
CHANGED
@@ -23,8 +23,7 @@ describe Dataset do
|
|
23
23
|
its(:status){ should eq 401 }
|
24
24
|
|
25
25
|
its(:request_started_at){ should be_a Time }
|
26
|
-
its(:request_finished_at){ should
|
27
|
-
its(:elapsed_request_time){ should be > 0 }
|
26
|
+
its(:request_finished_at){ should eq nil }
|
28
27
|
|
29
28
|
after(:all){ Quandl::Client.token = ENV['QUANDL_AUTH_TOKEN'] }
|
30
29
|
end
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quandl_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.7.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Blake Hilscher
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
12
|
+
date: 2014-03-28 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: quandl_data
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,20 +30,23 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: activesupport
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- - '>='
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: 3.0.0
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- - '>='
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: 3.0.0
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: her
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
51
|
- - ~>
|
46
52
|
- !ruby/object:Gem::Version
|
@@ -48,6 +54,7 @@ dependencies:
|
|
48
54
|
type: :runtime
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
59
|
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
@@ -55,6 +62,7 @@ dependencies:
|
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: json
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
67
|
- - ~>
|
60
68
|
- !ruby/object:Gem::Version
|
@@ -62,6 +70,7 @@ dependencies:
|
|
62
70
|
type: :runtime
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
75
|
- - ~>
|
67
76
|
- !ruby/object:Gem::Version
|
@@ -69,6 +78,7 @@ dependencies:
|
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: scope_composer
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
83
|
- - ~>
|
74
84
|
- !ruby/object:Gem::Version
|
@@ -76,6 +86,7 @@ dependencies:
|
|
76
86
|
type: :runtime
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
91
|
- - ~>
|
81
92
|
- !ruby/object:Gem::Version
|
@@ -83,6 +94,7 @@ dependencies:
|
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: rake
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
99
|
- - ~>
|
88
100
|
- !ruby/object:Gem::Version
|
@@ -90,6 +102,7 @@ dependencies:
|
|
90
102
|
type: :development
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
107
|
- - ~>
|
95
108
|
- !ruby/object:Gem::Version
|
@@ -97,6 +110,7 @@ dependencies:
|
|
97
110
|
- !ruby/object:Gem::Dependency
|
98
111
|
name: rspec
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
100
114
|
requirements:
|
101
115
|
- - ~>
|
102
116
|
- !ruby/object:Gem::Version
|
@@ -104,6 +118,7 @@ dependencies:
|
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
107
122
|
requirements:
|
108
123
|
- - ~>
|
109
124
|
- !ruby/object:Gem::Version
|
@@ -111,20 +126,23 @@ dependencies:
|
|
111
126
|
- !ruby/object:Gem::Dependency
|
112
127
|
name: factory_girl_rails
|
113
128
|
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
114
130
|
requirements:
|
115
|
-
- - '>='
|
131
|
+
- - ! '>='
|
116
132
|
- !ruby/object:Gem::Version
|
117
133
|
version: '0'
|
118
134
|
type: :development
|
119
135
|
prerelease: false
|
120
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
121
138
|
requirements:
|
122
|
-
- - '>='
|
139
|
+
- - ! '>='
|
123
140
|
- !ruby/object:Gem::Version
|
124
141
|
version: '0'
|
125
142
|
- !ruby/object:Gem::Dependency
|
126
143
|
name: fivemat
|
127
144
|
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
128
146
|
requirements:
|
129
147
|
- - ~>
|
130
148
|
- !ruby/object:Gem::Version
|
@@ -132,6 +150,7 @@ dependencies:
|
|
132
150
|
type: :development
|
133
151
|
prerelease: false
|
134
152
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
135
154
|
requirements:
|
136
155
|
- - ~>
|
137
156
|
- !ruby/object:Gem::Version
|
@@ -139,57 +158,65 @@ dependencies:
|
|
139
158
|
- !ruby/object:Gem::Dependency
|
140
159
|
name: pry
|
141
160
|
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
142
162
|
requirements:
|
143
|
-
- - '>='
|
163
|
+
- - ! '>='
|
144
164
|
- !ruby/object:Gem::Version
|
145
165
|
version: '0'
|
146
166
|
type: :development
|
147
167
|
prerelease: false
|
148
168
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
149
170
|
requirements:
|
150
|
-
- - '>='
|
171
|
+
- - ! '>='
|
151
172
|
- !ruby/object:Gem::Version
|
152
173
|
version: '0'
|
153
174
|
- !ruby/object:Gem::Dependency
|
154
175
|
name: guard
|
155
176
|
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
156
178
|
requirements:
|
157
|
-
- - '>='
|
179
|
+
- - ! '>='
|
158
180
|
- !ruby/object:Gem::Version
|
159
181
|
version: '0'
|
160
182
|
type: :development
|
161
183
|
prerelease: false
|
162
184
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
163
186
|
requirements:
|
164
|
-
- - '>='
|
187
|
+
- - ! '>='
|
165
188
|
- !ruby/object:Gem::Version
|
166
189
|
version: '0'
|
167
190
|
- !ruby/object:Gem::Dependency
|
168
191
|
name: guard-rspec
|
169
192
|
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
170
194
|
requirements:
|
171
|
-
- - '>='
|
195
|
+
- - ! '>='
|
172
196
|
- !ruby/object:Gem::Version
|
173
197
|
version: '0'
|
174
198
|
type: :development
|
175
199
|
prerelease: false
|
176
200
|
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
177
202
|
requirements:
|
178
|
-
- - '>='
|
203
|
+
- - ! '>='
|
179
204
|
- !ruby/object:Gem::Version
|
180
205
|
version: '0'
|
181
206
|
- !ruby/object:Gem::Dependency
|
182
207
|
name: quandl_utility
|
183
208
|
requirement: !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
184
210
|
requirements:
|
185
|
-
- - '>='
|
211
|
+
- - ! '>='
|
186
212
|
- !ruby/object:Gem::Version
|
187
213
|
version: '0'
|
188
214
|
type: :development
|
189
215
|
prerelease: false
|
190
216
|
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
191
218
|
requirements:
|
192
|
-
- - '>='
|
219
|
+
- - ! '>='
|
193
220
|
- !ruby/object:Gem::Version
|
194
221
|
version: '0'
|
195
222
|
description: An orm for the cassinatra rest interface.
|
@@ -230,6 +257,7 @@ files:
|
|
230
257
|
- lib/quandl/client/models/scraper.rb
|
231
258
|
- lib/quandl/client/models/sheet.rb
|
232
259
|
- lib/quandl/client/models/source.rb
|
260
|
+
- lib/quandl/client/models/superset.rb
|
233
261
|
- lib/quandl/client/models/user.rb
|
234
262
|
- lib/quandl/client/version.rb
|
235
263
|
- lib/quandl/her/remove_method_data.rb
|
@@ -256,26 +284,33 @@ files:
|
|
256
284
|
homepage: http://blake.hilscher.ca/
|
257
285
|
licenses:
|
258
286
|
- MIT
|
259
|
-
metadata: {}
|
260
287
|
post_install_message:
|
261
288
|
rdoc_options: []
|
262
289
|
require_paths:
|
263
290
|
- lib
|
264
291
|
required_ruby_version: !ruby/object:Gem::Requirement
|
292
|
+
none: false
|
265
293
|
requirements:
|
266
|
-
- - '>='
|
294
|
+
- - ! '>='
|
267
295
|
- !ruby/object:Gem::Version
|
268
296
|
version: '0'
|
297
|
+
segments:
|
298
|
+
- 0
|
299
|
+
hash: 1086237193611827581
|
269
300
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
301
|
+
none: false
|
270
302
|
requirements:
|
271
|
-
- - '>='
|
303
|
+
- - ! '>='
|
272
304
|
- !ruby/object:Gem::Version
|
273
305
|
version: '0'
|
306
|
+
segments:
|
307
|
+
- 0
|
308
|
+
hash: 1086237193611827581
|
274
309
|
requirements: []
|
275
310
|
rubyforge_project:
|
276
|
-
rubygems_version:
|
311
|
+
rubygems_version: 1.8.23
|
277
312
|
signing_key:
|
278
|
-
specification_version:
|
313
|
+
specification_version: 3
|
279
314
|
summary: Client rest orm.
|
280
315
|
test_files:
|
281
316
|
- spec/factories/dataset.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 454f69cbe4f61aaa0df1982140c16d450b469270
|
4
|
-
data.tar.gz: f7c57a5ee81fd54fb4076d4782028985499100a4
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: b53f0cd1b254d0e97152059408c159a5651ee0f79ff28c2bae01f85cee93ffc3aff1e0db9f4fcbf382657d9fc1c3705b2b43a2727f20b78e5af350ebddb80e90
|
7
|
-
data.tar.gz: e1d557e659627e0ef55ac3640631f440623f75871ff50c1a287f1ebe93bf763fbd1d2f083f63cf79f4e54d7378f3f797215ea6119ff1ca28161c09d778fa8d9c
|