quandl_cassinatra 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4b8d25612594dd020d1b619b4c9703d70b8888a0
4
+ data.tar.gz: e12019b69f406457d3e07e4e01ce5d98a4acdf78
5
+ SHA512:
6
+ metadata.gz: 6e647716771a280d710088fda2bed819771e833ddb0debabea968bfb0d58d9d80939e86d9d7a913c3b3aa1eb3c903fcf08a71c0e205fd6c05f746d0e67023cda
7
+ data.tar.gz: 172393e908cf8a343a74490b697af4c1b0a287fe40b83f976b49f1f885a37103a07f2a9a849e7667d7d0c6aca4ce8d1ff9c2fe227f555e94c89dabf56997add3
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ /Gemfile.lock
2
+ /pkg
3
+ /tmp
4
+ quandl_cassinatra-*
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour --format=Fivemat
data/.travis.yml ADDED
@@ -0,0 +1,20 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.0.0
5
+ - 1.9.3
6
+ - 1.9.2
7
+ - 1.8.7
8
+
9
+ gemfile:
10
+ - Gemfile
11
+ - gemfiles/activemodel-4.0.gemfile
12
+
13
+ matrix:
14
+ exclude:
15
+ - rvm: 1.8.7
16
+ gemfile: gemfiles/activemodel-4.0.gemfile
17
+ - rvm: 1.9.2
18
+ gemfile: gemfiles/activemodel-4.0.gemfile
19
+
20
+ script: "echo 'COME ON!' && bundle exec rake spec"
data/.yardopts ADDED
@@ -0,0 +1,2 @@
1
+ --protected
2
+ --no-private
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org"
2
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ Copyright (c) 2012-2013 Blake Hilscher
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # Quandl::Cassinatra
2
+
3
+ ### Quandl::Cassinatra::Table
4
+
5
+ ```ruby
6
+
7
+ require 'quandl/cassinatra'
8
+
9
+ decade_of_daily_data_as_csv = Quandl::Cassinatra::Random.table( rows: 3650, columns: 4, nils: false ).to_csv
10
+
11
+ table = Quandl::Cassinatra::Table.new( decade_of_daily_data_as_csv )
12
+ table.collapse(:monthly).transform(:rdiff).to_date
13
+
14
+ ```
15
+
16
+
17
+ ### Quandl::Cassinatra::Random
18
+
19
+ ```ruby
20
+
21
+ require 'quandl/cassinatra'
22
+
23
+ data = Quandl::Cassinatra::Random.table( rows: 4, columns: 2, nils: false )
24
+ data.to_csv
25
+
26
+ => "2456459,9.75573946698621,11.003327581245657\n2456460,9.815208080651333,11.06123640714187\n2456461,9.85055418685121,11.054083764705883\n2456462,9.915882352941177,10.96635294117647\n"
27
+
28
+ ```
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require "bundler"
2
+ require "rake"
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ task :default => :spec
7
+
8
+ desc "Run all specs"
9
+ RSpec::Core::RakeTask.new(:spec) do |task|
10
+ task.pattern = "spec/**/*_spec.rb"
11
+ end
data/UPGRADE.md ADDED
@@ -0,0 +1,3 @@
1
+ ## 0.1
2
+
3
+ Initial
@@ -0,0 +1,32 @@
1
+ module Quandl
2
+ module Cassinatra
3
+ class << self
4
+
5
+ def use(url)
6
+ self.rest_url = url
7
+ end
8
+
9
+ def her_api
10
+ # setup api
11
+ api = Her::API.new
12
+ api.setup url: rest_url do |c|
13
+ c.use Faraday::Request::UrlEncoded
14
+ c.use Her::Middleware::DefaultParseJSON
15
+ c.use Faraday::Adapter::NetHttp
16
+ end
17
+ end
18
+
19
+ def rest_url
20
+ @rest_url ||= 'http://localhost:9292/'
21
+ end
22
+
23
+ def rest_url=(url)
24
+ url = "http://#{url}" if ( url =~ /^http:\/\// ) == nil
25
+ @rest_url = url
26
+ Model.use_api( her_api )
27
+ @rest_url
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,41 @@
1
+ module Quandl
2
+ module Cassinatra
3
+ module Model
4
+ class Dataset
5
+
6
+ module RestOrm
7
+
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+
12
+ include Her::Model
13
+ use_api Cassinatra.her_api
14
+
15
+ attributes :id, :column_ids, :data
16
+
17
+ delegate :columns_count, :created_at, :frequency, :rows_count, :type, :updated_at, to: :dataset_attribute
18
+
19
+ def data_table
20
+ Data::Table.new( self.data || [] )
21
+ end
22
+ def data_table=(value)
23
+ self.data = Data::Table.new(value).to_jd.to_csv
24
+ end
25
+
26
+ def dataset_attribute(*args)
27
+ return @dataset_attribute if @dataset_attribute
28
+ # options
29
+ options = args.extract_options!
30
+ count = options[:count] == true
31
+ # grab dataset_attribute
32
+ @dataset_attribute = DatasetAttribute.where( count: count ).find(id)
33
+ end
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,85 @@
1
+ module Quandl
2
+ module Cassinatra
3
+ module Model
4
+ class Dataset
5
+
6
+ module Searchable
7
+
8
+ extend ActiveSupport::Concern
9
+
10
+ module ClassMethods
11
+
12
+ def valid_transformation?(type)
13
+ valid_transformations.include?( type )
14
+ end
15
+
16
+ def valid_transformations
17
+ [ :diff, :rdiff, :cumul, :normalize ]
18
+ end
19
+
20
+ def search_scopes
21
+ @search_scopes ||+ search_scope.scopes.keys
22
+ end
23
+
24
+ end
25
+
26
+ included do
27
+
28
+ include Quandl
29
+ include ScopeBuilder::Model
30
+
31
+ scope_builder_for :search
32
+
33
+ search_helper :column_ids, -> { dataset.column_ids }
34
+ search_helper :data_table, -> { dataset.data_table }
35
+
36
+ search_helper :dataset, -> { find(attributes[:id]) }
37
+
38
+ search_scope.class_eval do
39
+ delegate *Array.forwardable_methods, to: :data_table
40
+ delegate *Data::Table.forwardable_methods, to: :data_table
41
+ end
42
+
43
+ search_scope :limit, ->(amount) { where( limit: amount.to_i ) }
44
+ search_scope :column, ->(index) { where( column: index.to_i ) }
45
+ search_scope :order, ->(dir) { where( order: (dir.to_sym == :asc) ? 'asc' : 'desc' ) }
46
+ search_scope :trim_start, ->(date) { where( trim_start: format_trim_date(date, :start)) }
47
+ search_scope :trim_end, ->(date) { where( trim_end: format_trim_date(date, :end)) }
48
+ search_scope :transform, ->(value) { where( transform: value ) if self.class.parent.valid_transformation?(value) }
49
+ search_scope :with_id, ->(value) { where( id: value.to_i )}
50
+
51
+ search_scope :collapse, ->(name){
52
+ # set collapse
53
+ where( collapse: name )
54
+ # reset trims to force them to edge of frequency
55
+ trim_start(trim_start) if trim_start
56
+ trim_end(trim_end) if trim_end
57
+ }
58
+
59
+ search_helper :format_trim_date, ->( date, start_or_end ){
60
+ date = Date.jd(date) if date.is_a?(Integer)
61
+ date = Date.parse(date) if date.is_a?(String)
62
+ date = date.send("#{start_or_end}_of_frequency", collapse) if collapse.present?
63
+ date.jd
64
+ }
65
+
66
+ search_helper :find, ->(id){
67
+ begin
68
+ t1 = Time.now
69
+ result = self.class.parent.where(attributes).find(id)
70
+ puts "parent.where(#{attributes.to_param if attributes.respond_to?(:to_param)}).find(#{id}) (#{t1.elapsed_ms})"
71
+ rescue => error
72
+ puts "ERROR: Cassandra #{error}"
73
+ end
74
+ result = self.class.parent.new(id: id) if result.nil?
75
+ result
76
+ }
77
+
78
+ end
79
+
80
+ end
81
+
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,16 @@
1
+ require 'quandl/cassinatra/model/dataset/searchable'
2
+ require 'quandl/cassinatra/model/dataset/rest_orm'
3
+
4
+ module Quandl
5
+ module Cassinatra
6
+ module Model
7
+
8
+ class Dataset
9
+
10
+ include Searchable
11
+ include RestOrm
12
+
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ module Quandl
2
+ module Cassinatra
3
+ module Model
4
+
5
+ class DatasetAttribute
6
+
7
+ include Her::Model
8
+ use_api Quandl::Cassinatra.her_api
9
+
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ module Quandl
2
+ module Cassinatra
3
+ module Model
4
+
5
+ class Multiset
6
+
7
+ include Model::Dataset::Searchable
8
+ include Model::Dataset::RestOrm
9
+
10
+ search_helper :dataset, -> { find('multiset') }
11
+ search_scope :columns
12
+
13
+ def data_table=(value)
14
+ false
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,27 @@
1
+ require 'quandl/cassinatra/model/dataset'
2
+ require 'quandl/cassinatra/model/dataset_attribute'
3
+ require 'quandl/cassinatra/model/multiset'
4
+
5
+ module Quandl
6
+ module Cassinatra
7
+ module Model
8
+ class << self
9
+
10
+ def use_api(api)
11
+ each{|k| k.use_api(api) }
12
+ end
13
+
14
+ def each(&block)
15
+ models.each do |k|
16
+ block.call(k)
17
+ end
18
+ end
19
+
20
+ def models
21
+ [Dataset, DatasetAttribute, Multiset]
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ module Quandl
2
+ module Cassinatra
3
+ VERSION = '0.0.1'
4
+ end
5
+ end
@@ -0,0 +1,19 @@
1
+ require "quandl/cassinatra/version"
2
+
3
+ require "active_support"
4
+ require "active_support/inflector"
5
+ require "active_support/core_ext/hash"
6
+ require "active_support/core_ext/object"
7
+
8
+ require 'her'
9
+ require 'quandl/her/patch'
10
+ require 'scope_builder'
11
+ require "quandl/data"
12
+
13
+ require 'quandl/cassinatra/her'
14
+ require 'quandl/cassinatra/model'
15
+
16
+ module Quandl
17
+ module Cassinatra
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ module Her
2
+ module Model
3
+ # remove deprecated data method since cassinatra returns data: []
4
+ module DeprecatedMethods
5
+ remove_method :data
6
+ remove_method :data=
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "quandl/cassinatra/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "quandl_cassinatra"
7
+ s.version = Quandl::Cassinatra::VERSION
8
+ s.authors = ["Blkae Hilscher"]
9
+ s.email = ["blake@hilscher.ca"]
10
+ s.homepage = "http://blake.hilscher.ca/"
11
+ s.license = "MIT"
12
+ s.summary = "Cassinatra rest orm."
13
+ s.description = "An orm for the cassinatra rest interface."
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_development_dependency "rake", "~> 10.0"
21
+ s.add_development_dependency "rspec", "~> 2.13"
22
+ s.add_development_dependency "fivemat", "~> 1.2"
23
+ s.add_development_dependency "pry"
24
+
25
+ s.add_runtime_dependency "activesupport", ">= 3.0.0"
26
+ s.add_runtime_dependency "her", "~> 0.6.7"
27
+ s.add_runtime_dependency "scope_builder", "~> 0.0.6"
28
+ s.add_runtime_dependency "quandl_data", "~> 0.0.3"
29
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Quandl::Cassinatra do
5
+ end
@@ -0,0 +1,4 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
2
+
3
+ require "rspec"
4
+ require "quandl/cassinatra"
metadata ADDED
@@ -0,0 +1,180 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: quandl_cassinatra
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Blkae Hilscher
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-06-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '10.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '10.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '2.13'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '2.13'
41
+ - !ruby/object:Gem::Dependency
42
+ name: fivemat
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: 3.0.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: 3.0.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: her
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 0.6.7
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 0.6.7
97
+ - !ruby/object:Gem::Dependency
98
+ name: scope_builder
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 0.0.6
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 0.0.6
111
+ - !ruby/object:Gem::Dependency
112
+ name: quandl_data
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 0.0.3
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: 0.0.3
125
+ description: An orm for the cassinatra rest interface.
126
+ email:
127
+ - blake@hilscher.ca
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - .gitignore
133
+ - .rspec
134
+ - .travis.yml
135
+ - .yardopts
136
+ - Gemfile
137
+ - LICENSE
138
+ - README.md
139
+ - Rakefile
140
+ - UPGRADE.md
141
+ - lib/quandl/cassinatra.rb
142
+ - lib/quandl/cassinatra/her.rb
143
+ - lib/quandl/cassinatra/model.rb
144
+ - lib/quandl/cassinatra/model/dataset.rb
145
+ - lib/quandl/cassinatra/model/dataset/rest_orm.rb
146
+ - lib/quandl/cassinatra/model/dataset/searchable.rb
147
+ - lib/quandl/cassinatra/model/dataset_attribute.rb
148
+ - lib/quandl/cassinatra/model/multiset.rb
149
+ - lib/quandl/cassinatra/version.rb
150
+ - lib/quandl/her/patch.rb
151
+ - quandl_cassinatra.gemspec
152
+ - spec/quandl_cassinatra.rb
153
+ - spec/spec_helper.rb
154
+ homepage: http://blake.hilscher.ca/
155
+ licenses:
156
+ - MIT
157
+ metadata: {}
158
+ post_install_message:
159
+ rdoc_options: []
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - '>='
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ requirements: []
173
+ rubyforge_project:
174
+ rubygems_version: 2.0.3
175
+ signing_key:
176
+ specification_version: 4
177
+ summary: Cassinatra rest orm.
178
+ test_files:
179
+ - spec/quandl_cassinatra.rb
180
+ - spec/spec_helper.rb