quandl_cassinatra 0.1.11 → 0.1.13

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.
@@ -9,14 +9,6 @@ module Searchable
9
9
 
10
10
  module ClassMethods
11
11
 
12
- def valid_transformation?(type)
13
- Quandl::Operation::Transform.valid_transformation?(type)
14
- end
15
-
16
- def valid_transformations
17
- Quandl::Operation::Transform.valid_transformations
18
- end
19
-
20
12
  def search_scopes
21
13
  @search_scopes ||+ search_scope.scopes.keys
22
14
  end
@@ -49,11 +41,11 @@ module Searchable
49
41
  search_scope :trim_start, ->(date) { where( trim_start: format_trim_date(date, :start)) }
50
42
  search_scope :trim_end, ->(date) { where( trim_end: format_trim_date(date, :end)) }
51
43
  search_scope :with_id, ->(value) { where( id: value.to_i )}
52
- search_scope :transform, ->(value) { where( transform: value.to_sym ) if self.class.parent.valid_transformation?(value.to_sym) }
44
+ search_scope :transform, ->(value) { where( transform: value.to_sym ) if Quandl::Operation::Transform.valid_transformation?( value.try(:to_sym) ) }
53
45
 
54
- search_scope :collapse, ->(name){
46
+ search_scope :collapse, ->(value){
55
47
  # set collapse
56
- where( collapse: name )
48
+ where( collapse: value ) if Quandl::Operation::Collapse.valid_collapse?( value.try(:to_sym) )
57
49
  # reset trims to force them to edge of frequency
58
50
  trim_start(trim_start) if trim_start
59
51
  trim_end(trim_end) if trim_end
@@ -61,9 +53,7 @@ module Searchable
61
53
 
62
54
  search_helper :format_trim_date, ->( date, start_or_end ){
63
55
  # parse
64
- date = Date.jd(date.to_i) if date.kind_of?(String) && date.numeric?
65
- date = Date.jd(date) if date.is_a?(Integer)
66
- date = Date.parse(date) if date.is_a?(String) && date =~ /^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/
56
+ date = parse_date(date)
67
57
  # format
68
58
  if date.is_a?(Date)
69
59
  date = date.send("#{start_or_end}_of_frequency", collapse) if collapse.present?
@@ -73,6 +63,17 @@ module Searchable
73
63
  end
74
64
  }
75
65
 
66
+ search_helper :parse_date, ->( date ){
67
+ begin
68
+ date = Date.jd(date.to_i) if date.kind_of?(String) && date.numeric?
69
+ date = Date.jd(date) if date.is_a?(Integer)
70
+ date = Date.parse(date) if date.is_a?(String) && date =~ /^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/
71
+ date
72
+ rescue
73
+ nil
74
+ end
75
+ }
76
+
76
77
  search_helper :find, ->(id){
77
78
  begin
78
79
  t1 = Time.now
@@ -1,5 +1,5 @@
1
1
  module Quandl
2
2
  module Cassinatra
3
- VERSION = '0.1.11'
3
+ VERSION = '0.1.13'
4
4
  end
5
5
  end
@@ -24,10 +24,13 @@ Gem::Specification.new do |s|
24
24
  s.add_development_dependency "pry"
25
25
 
26
26
  s.add_runtime_dependency "activesupport", ">= 3.0.0"
27
- s.add_runtime_dependency "her", "~> 0.6.7"
27
+ s.add_runtime_dependency "her", "0.6.7"
28
28
  s.add_runtime_dependency "yajl-ruby", "~> 1.1.0"
29
29
  s.add_runtime_dependency 'json', '~> 1.7.7'
30
30
 
31
- s.add_runtime_dependency "quandl_data", ">= 0.1.8"
32
- s.add_runtime_dependency "scope_composer", ">= 0.1.0"
31
+ s.add_runtime_dependency "scope_composer", "~> 0.1"
32
+ s.add_runtime_dependency "quandl_logger", "~> 0.1"
33
+ s.add_runtime_dependency "quandl_operation", "~> 0.1"
34
+ s.add_runtime_dependency "quandl_data", "~> 0.1"
35
+
33
36
  end
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Dataset do
5
+ subject { Dataset.new }
6
+
7
+ it { should respond_to :columns_count }
8
+ it { should respond_to :data }
9
+ it { should respond_to :data_table }
10
+
11
+ context "create" do
12
+
13
+ subject{ build(:dataset) }
14
+
15
+ it "should have data" do
16
+ subject.data_table.count.should eq 730
17
+ end
18
+
19
+ it "should have four columns" do
20
+ subject.data_table[0].count.should eq 4
21
+ end
22
+
23
+ it "should create the dataset" do
24
+ subject.save
25
+ Dataset.find(subject.id).data.count.should eq 730
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,93 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Dataset do
5
+ context "searchable" do
6
+
7
+ describe "collapse" do
8
+
9
+ context "given an invalid collapse" do
10
+ it "should ignore number" do
11
+ Dataset.collapse(123).attributes[:collapse].should be_nil
12
+ end
13
+
14
+ it "should ignore string" do
15
+ Dataset.collapse("invalid").attributes[:collapse].should be_nil
16
+ end
17
+
18
+ it "should ignore symbol" do
19
+ Dataset.collapse(:invalid).attributes[:collapse].should be_nil
20
+ end
21
+
22
+ end
23
+
24
+ context "given valid collapse" do
25
+ it "should set daily" do
26
+ Dataset.collapse(:daily).attributes[:collapse].should eq :daily
27
+ end
28
+ it "should set weekly" do
29
+ Dataset.collapse(:weekly).attributes[:collapse].should eq :weekly
30
+ end
31
+ it "should set monthly" do
32
+ Dataset.collapse(:monthly).attributes[:collapse].should eq :monthly
33
+ end
34
+ it "should set quarterly" do
35
+ Dataset.collapse(:quarterly).attributes[:collapse].should eq :quarterly
36
+ end
37
+ it "should set annual" do
38
+ Dataset.collapse(:annual).attributes[:collapse].should eq :annual
39
+ end
40
+ end
41
+
42
+ end
43
+
44
+ describe "trim_start" do
45
+
46
+ context "given an invalid date" do
47
+
48
+ it "should reject string" do
49
+ Dataset.trim_start('0000-00-00').attributes[:trim_start].should eq nil
50
+ end
51
+
52
+ it "should reject invalid date" do
53
+ Dataset.trim_start("").attributes[:trim_start].should eq nil
54
+ end
55
+
56
+ it "should reject invalid date" do
57
+ Dataset.trim_start("asdf").attributes[:trim_start].should eq nil
58
+ end
59
+
60
+ it "should ignore invalid collapse" do
61
+ Dataset.collapse('yearly').trim_start(Date.today.to_s).attributes[:trim_start].should eq Date.today.jd
62
+ end
63
+
64
+ end
65
+
66
+ context "given valid date" do
67
+
68
+ it "should accept date" do
69
+ date = Date.today
70
+ Dataset.trim_start(date).attributes[:trim_start].should eq Date.today.jd
71
+ end
72
+
73
+ it "should accept string date" do
74
+ date = Date.today.to_s
75
+ Dataset.trim_start(date).attributes[:trim_start].should eq Date.today.jd
76
+ end
77
+
78
+ it "should accept string julian date" do
79
+ date = Date.today.jd.to_s
80
+ Dataset.trim_start(date).attributes[:trim_start].should eq Date.today.jd
81
+ end
82
+
83
+ it "should accept integer" do
84
+ date = Date.today.jd
85
+ Dataset.trim_start(date).attributes[:trim_start].should eq Date.today.jd
86
+ end
87
+
88
+ end
89
+
90
+ end
91
+
92
+ end
93
+ end
@@ -5,34 +5,39 @@ describe Multiset do
5
5
  let(:d1){ create(:dataset, data_table: Quandl::Data::Random.table( rows: 10, columns: 4, nils: false ) ) }
6
6
  let(:d2){ create(:dataset, data_table: Quandl::Data::Random.table( rows: 10, columns: 4, nils: false ) ) }
7
7
 
8
- it "should retrieve the requested columns" do
9
- m = Multiset.columns("#{d1.id.to_i}.1,#{d2.id.to_i}.1").to_dataset
10
- m.data_table[0][1].should eq d1.data_table[0][1]
11
- m.data_table[0][2].should eq d2.data_table[0][1]
12
- end
8
+ context "given ascending columns" do
9
+
10
+ it "should return the expected column_ids" do
11
+ [d1, d2]
12
+ sleep 0.2
13
+ m = Multiset.columns("#{d2.id.to_i}.1,#{d1.id.to_i}.1,#{d2.id.to_i}.3,#{d1.id.to_i}.2").to_dataset
14
+ m.column_ids.should eq [
15
+ Dataset.find(d2.id).column_ids[0],
16
+ Dataset.find(d1.id).column_ids[0],
17
+ Dataset.find(d2.id).column_ids[2],
18
+ Dataset.find(d1.id).column_ids[1],
19
+ ]
20
+ end
13
21
 
14
- it "should retrieve the requested columns" do
15
- m = Multiset.columns("#{d2.id.to_i}.2,#{d1.id.to_i}.2").to_dataset
16
- m.data_table[0][1].should eq d2.data_table[0][2]
17
- m.data_table[0][2].should eq d1.data_table[0][2]
18
- end
22
+ it "should return the expected columns" do
23
+ [d1, d2]
24
+ sleep 1
25
+ m = Multiset.columns("#{d2.id.to_i}.1,#{d1.id.to_i}.1,#{d2.id.to_i}.3,#{d1.id.to_i}.2").to_dataset
26
+ m.data_table[0][1].should eq d2.data_table[0][1]
27
+ m.data_table[0][2].should eq d1.data_table[0][1]
28
+ m.data_table[0][3].should eq d2.data_table[0][3]
29
+ m.data_table[0][4].should eq d1.data_table[0][2]
30
+ end
19
31
 
20
- it "should be in the right order" do
21
- m = Multiset.columns("#{d2.id.to_i}.1,#{d1.id.to_i}.1,#{d2.id.to_i}.3,#{d1.id.to_i}.2").to_dataset
22
- m.column_ids.should eq [
23
- Dataset.find(d2.id).column_ids[0],
24
- Dataset.find(d1.id).column_ids[0],
25
- Dataset.find(d2.id).column_ids[2],
26
- Dataset.find(d1.id).column_ids[1],
27
- ]
28
32
  end
29
33
 
30
- it "should retrieve the requested columns" do
31
- m = Multiset.columns("#{d2.id.to_i}.1,#{d1.id.to_i}.1,#{d2.id.to_i}.3,#{d1.id.to_i}.2").to_dataset
32
- m.data_table[0][1].should eq d2.data_table[0][1]
33
- m.data_table[0][2].should eq d1.data_table[0][1]
34
- m.data_table[0][3].should eq d2.data_table[0][3]
35
- m.data_table[0][4].should eq d1.data_table[0][2]
34
+ context "given descending columns" do
35
+
36
+ it "should return the expected columns" do
37
+ m = Multiset.columns("#{d1.id.to_i}.2,#{d1.id.to_i}.1").to_dataset
38
+ m.data_table[0][1].should_not eq m.data_table[0][2]
39
+ end
40
+
36
41
  end
37
-
42
+
38
43
  end
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quandl_cassinatra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.1.13
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: 2013-07-29 00:00:00.000000000 Z
12
+ date: 2013-08-06 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rake
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: :development
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,6 +30,7 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: rspec
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
35
  - - ~>
32
36
  - !ruby/object:Gem::Version
@@ -34,6 +38,7 @@ dependencies:
34
38
  type: :development
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
@@ -41,6 +46,7 @@ dependencies:
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: factory_girl
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: :development
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: fivemat
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: :development
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: pry
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: :development
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: activesupport
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: :runtime
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,20 +110,23 @@ dependencies:
97
110
  - !ruby/object:Gem::Dependency
98
111
  name: her
99
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
100
114
  requirements:
101
- - - ~>
115
+ - - '='
102
116
  - !ruby/object:Gem::Version
103
117
  version: 0.6.7
104
118
  type: :runtime
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
110
125
  version: 0.6.7
111
126
  - !ruby/object:Gem::Dependency
112
127
  name: yajl-ruby
113
128
  requirement: !ruby/object:Gem::Requirement
129
+ none: false
114
130
  requirements:
115
131
  - - ~>
116
132
  - !ruby/object:Gem::Version
@@ -118,6 +134,7 @@ dependencies:
118
134
  type: :runtime
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
@@ -125,6 +142,7 @@ dependencies:
125
142
  - !ruby/object:Gem::Dependency
126
143
  name: json
127
144
  requirement: !ruby/object:Gem::Requirement
145
+ none: false
128
146
  requirements:
129
147
  - - ~>
130
148
  - !ruby/object:Gem::Version
@@ -132,38 +150,75 @@ dependencies:
132
150
  type: :runtime
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
138
157
  version: 1.7.7
139
158
  - !ruby/object:Gem::Dependency
140
- name: quandl_data
159
+ name: scope_composer
141
160
  requirement: !ruby/object:Gem::Requirement
161
+ none: false
142
162
  requirements:
143
- - - '>='
163
+ - - ~>
144
164
  - !ruby/object:Gem::Version
145
- version: 0.1.8
165
+ version: '0.1'
146
166
  type: :runtime
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
- version: 0.1.8
173
+ version: '0.1'
153
174
  - !ruby/object:Gem::Dependency
154
- name: scope_composer
175
+ name: quandl_logger
155
176
  requirement: !ruby/object:Gem::Requirement
177
+ none: false
156
178
  requirements:
157
- - - '>='
179
+ - - ~>
158
180
  - !ruby/object:Gem::Version
159
- version: 0.1.0
181
+ version: '0.1'
160
182
  type: :runtime
161
183
  prerelease: false
162
184
  version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
163
186
  requirements:
164
- - - '>='
187
+ - - ~>
188
+ - !ruby/object:Gem::Version
189
+ version: '0.1'
190
+ - !ruby/object:Gem::Dependency
191
+ name: quandl_operation
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ~>
196
+ - !ruby/object:Gem::Version
197
+ version: '0.1'
198
+ type: :runtime
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ~>
204
+ - !ruby/object:Gem::Version
205
+ version: '0.1'
206
+ - !ruby/object:Gem::Dependency
207
+ name: quandl_data
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ~>
212
+ - !ruby/object:Gem::Version
213
+ version: '0.1'
214
+ type: :runtime
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ~>
165
220
  - !ruby/object:Gem::Version
166
- version: 0.1.0
221
+ version: '0.1'
167
222
  description: An orm for the cassinatra rest interface.
168
223
  email:
169
224
  - blake@hilscher.ca
@@ -198,35 +253,38 @@ files:
198
253
  - lib/quandl/her/patch.rb
199
254
  - quandl_cassinatra.gemspec
200
255
  - spec/factories/dataset.rb
201
- - spec/quandl/cassinatra/dataset_spec.rb
256
+ - spec/quandl/cassinatra/dataset/persistence_spec.rb
257
+ - spec/quandl/cassinatra/dataset/searchable_spec.rb
202
258
  - spec/quandl/cassinatra/multiset_spec.rb
203
259
  - spec/spec_helper.rb
204
260
  homepage: http://blake.hilscher.ca/
205
261
  licenses:
206
262
  - MIT
207
- metadata: {}
208
263
  post_install_message:
209
264
  rdoc_options: []
210
265
  require_paths:
211
266
  - lib
212
267
  required_ruby_version: !ruby/object:Gem::Requirement
268
+ none: false
213
269
  requirements:
214
270
  - - '>='
215
271
  - !ruby/object:Gem::Version
216
272
  version: '0'
217
273
  required_rubygems_version: !ruby/object:Gem::Requirement
274
+ none: false
218
275
  requirements:
219
276
  - - '>='
220
277
  - !ruby/object:Gem::Version
221
278
  version: '0'
222
279
  requirements: []
223
280
  rubyforge_project:
224
- rubygems_version: 2.0.5
281
+ rubygems_version: 1.8.25
225
282
  signing_key:
226
- specification_version: 4
283
+ specification_version: 3
227
284
  summary: Cassinatra rest orm.
228
285
  test_files:
229
286
  - spec/factories/dataset.rb
230
- - spec/quandl/cassinatra/dataset_spec.rb
287
+ - spec/quandl/cassinatra/dataset/persistence_spec.rb
288
+ - spec/quandl/cassinatra/dataset/searchable_spec.rb
231
289
  - spec/quandl/cassinatra/multiset_spec.rb
232
290
  - spec/spec_helper.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 321171d3425874e1162260fa7d05c1e596f3ee4a
4
- data.tar.gz: 46359ab27a5299eaa1cf10bbb1c56a45b76f031b
5
- SHA512:
6
- metadata.gz: f8b2d1bcf69667cb2ac29cead3f0e15b52156518c7dfd22f60ec96a8354ec43a7c3f3f3065f4e14d0772d65638154e8e3b6b00a9868b099587a3be02d3a35c01
7
- data.tar.gz: 67d46970e491418b852204319090e30308f8110b4c947737183b868f19bab286f307763f2945e584f6d325c4beee758588584e8fb197871c0c48a2d2bcdd4242
@@ -1,66 +0,0 @@
1
- # encoding: utf-8
2
- require 'spec_helper'
3
-
4
- describe Dataset do
5
- subject { Dataset.new }
6
-
7
- it { should respond_to :columns_count }
8
- it { should respond_to :data }
9
- it { should respond_to :data_table }
10
-
11
- context "create" do
12
-
13
- subject{ build(:dataset) }
14
-
15
- it "should have data" do
16
- subject.data_table.count.should eq 730
17
- end
18
-
19
- it "should have four columns" do
20
- subject.data_table[0].count.should eq 4
21
- end
22
-
23
- it "should create the dataset" do
24
- subject.save
25
- Dataset.find(subject.id).data.count.should eq 730
26
- end
27
-
28
- end
29
-
30
- context "searchable" do
31
-
32
- describe "trim_start" do
33
-
34
- it "should accept date" do
35
- date = Date.today
36
- Dataset.trim_start(date).attributes[:trim_start].should eq Date.today.jd
37
- end
38
-
39
- it "should accept string date" do
40
- date = Date.today.to_s
41
- Dataset.trim_start(date).attributes[:trim_start].should eq Date.today.jd
42
- end
43
-
44
- it "should accept string julian date" do
45
- date = Date.today.jd.to_s
46
- Dataset.trim_start(date).attributes[:trim_start].should eq Date.today.jd
47
- end
48
-
49
- it "should accept integer" do
50
- date = Date.today.jd
51
- Dataset.trim_start(date).attributes[:trim_start].should eq Date.today.jd
52
- end
53
-
54
- it "should reject invalid date" do
55
- Dataset.trim_start("").attributes[:trim_start].should eq nil
56
- end
57
-
58
- it "should reject invalid date" do
59
- Dataset.trim_start("asdf").attributes[:trim_start].should eq nil
60
- end
61
-
62
- end
63
-
64
- end
65
-
66
- end