quandl 0.2.22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +16 -0
- data/.travis.yml +20 -0
- data/Gemfile +14 -0
- data/Guardfile +8 -0
- data/LICENSE +7 -0
- data/README.md +316 -0
- data/Rakefile +39 -0
- data/UPGRADE.md +143 -0
- data/bin/quandl +26 -0
- data/dist/resources/pkg/Distribution.erb +15 -0
- data/dist/resources/pkg/PackageInfo.erb +6 -0
- data/dist/resources/pkg/postinstall +45 -0
- data/dist/resources/pkg/quandl +25 -0
- data/dist/resources/ruby/PackageInfo +3 -0
- data/lib/commander/command/quandl_ext.rb +21 -0
- data/lib/quandl/command.rb +45 -0
- data/lib/quandl/command/client_ext.rb +1 -0
- data/lib/quandl/command/client_ext/user.rb +11 -0
- data/lib/quandl/command/compatibility_check.rb +11 -0
- data/lib/quandl/command/qconfig.rb +76 -0
- data/lib/quandl/command/tasks.rb +15 -0
- data/lib/quandl/command/tasks/base.rb +263 -0
- data/lib/quandl/command/tasks/delete.rb +58 -0
- data/lib/quandl/command/tasks/download.rb +111 -0
- data/lib/quandl/command/tasks/info.rb +46 -0
- data/lib/quandl/command/tasks/list.rb +40 -0
- data/lib/quandl/command/tasks/login.rb +46 -0
- data/lib/quandl/command/tasks/update.rb +205 -0
- data/lib/quandl/command/tasks/upload.rb +69 -0
- data/lib/quandl/command/version.rb +5 -0
- data/lib/quandl/utility.rb +2 -0
- data/lib/quandl/utility/config.rb +43 -0
- data/lib/quandl/utility/ruby_version.rb +143 -0
- data/quandl.gemspec +39 -0
- data/scripts/compile_ruby_pkg.sh +34 -0
- data/scripts/install.sh +51 -0
- data/scripts/win/quandl_toolbelt.iss +82 -0
- data/spec/lib/quandl/command/delete_spec.rb +31 -0
- data/spec/lib/quandl/command/download_spec.rb +42 -0
- data/spec/lib/quandl/command/upload_spec.rb +39 -0
- data/spec/lib/quandl/command_spec.rb +46 -0
- data/spec/spec_helper.rb +20 -0
- data/tasks/toolbelt.rake +133 -0
- data/tasks/toolbelt.rb +92 -0
- data/tasks/toolbelt/build.rb +2 -0
- data/tasks/toolbelt/build/darwin.rb +71 -0
- data/tasks/toolbelt/build/ruby.rb +105 -0
- data/tasks/toolbelt/build/tarball.rb +73 -0
- data/tasks/toolbelt/build/windows.rb +25 -0
- data/tasks/toolbelt/push.rb +15 -0
- data/tasks/toolbelt/storage.rb +28 -0
- data/tasks/toolbelt/tar.rb +21 -0
- metadata +354 -0
@@ -0,0 +1,143 @@
|
|
1
|
+
### usage examples
|
2
|
+
# RubyVersion
|
3
|
+
### check for the main version with a Float
|
4
|
+
# RubyVersion.is? 1.8
|
5
|
+
### use strings for exacter checking
|
6
|
+
# RubyVersion.is.above '1.8.7'
|
7
|
+
# RubyVersion.is.at_least '1.8.7' # or below, at_most, not
|
8
|
+
### you can use the common comparison operators
|
9
|
+
# RubyVersion >= '1.8.7'
|
10
|
+
# RubyVersion.is.between? '1.8.6', '1.8.7'
|
11
|
+
### relase date checks
|
12
|
+
# RubyVersion.is.older_than Date.today
|
13
|
+
# RubyVersion.is.newer_than '2009-08-19'
|
14
|
+
### accessors
|
15
|
+
# RubyVersion.major # e.g. => 1
|
16
|
+
# RubyVersion.minor # e.g. => 8
|
17
|
+
# RubyVersion.tiny # e.g. => 7
|
18
|
+
# RubyVersion.patchlevel # e.g. => 249
|
19
|
+
# RubyVersion.description # e.g. => "ruby 1.8.7 (2010-01-10 patchlevel 249) [i486-linux]"
|
20
|
+
|
21
|
+
require 'date'
|
22
|
+
require 'time'
|
23
|
+
|
24
|
+
module Quandl
|
25
|
+
module Utility
|
26
|
+
module RubyVersion
|
27
|
+
class << self
|
28
|
+
def to_s
|
29
|
+
RUBY_VERSION
|
30
|
+
end
|
31
|
+
|
32
|
+
def full_version
|
33
|
+
"#{RUBY_VERSION}-p#{patchlevel}"
|
34
|
+
end
|
35
|
+
|
36
|
+
# comparable
|
37
|
+
def <=>(other)
|
38
|
+
value = case other
|
39
|
+
when Integer
|
40
|
+
RUBY_VERSION.to_i
|
41
|
+
when Float
|
42
|
+
RUBY_VERSION.to_f
|
43
|
+
when String
|
44
|
+
RUBY_VERSION
|
45
|
+
when Date,Time
|
46
|
+
other.class.parse(RUBY_RELEASE_DATE)
|
47
|
+
else
|
48
|
+
other = other.to_s
|
49
|
+
RUBY_VERSION
|
50
|
+
end
|
51
|
+
value <=> other
|
52
|
+
end
|
53
|
+
include Comparable
|
54
|
+
|
55
|
+
# chaining for dsl-like language
|
56
|
+
def is?(other = nil)
|
57
|
+
if other
|
58
|
+
RubyVersion == other
|
59
|
+
else
|
60
|
+
RubyVersion
|
61
|
+
end
|
62
|
+
end
|
63
|
+
alias is is?
|
64
|
+
|
65
|
+
# aliases
|
66
|
+
alias below <
|
67
|
+
alias below? <
|
68
|
+
alias at_most <=
|
69
|
+
alias at_most? <=
|
70
|
+
alias above >
|
71
|
+
alias above? >
|
72
|
+
alias at_least >=
|
73
|
+
alias at_least? >=
|
74
|
+
alias exactly ==
|
75
|
+
alias exactly? ==
|
76
|
+
def not(other)
|
77
|
+
self != other
|
78
|
+
end
|
79
|
+
alias not? not
|
80
|
+
alias between between?
|
81
|
+
|
82
|
+
# compare dates
|
83
|
+
def newer_than(other)
|
84
|
+
if other.is_a? Date or other.is_a? Time
|
85
|
+
RubyVersion > other
|
86
|
+
else
|
87
|
+
RUBY_RELEASE_DATE > other.to_s
|
88
|
+
end
|
89
|
+
end
|
90
|
+
alias newer_than? newer_than
|
91
|
+
|
92
|
+
def older_than(other)
|
93
|
+
if other.is_a? Date or other.is_a? Time
|
94
|
+
RubyVersion < other
|
95
|
+
else
|
96
|
+
RUBY_RELEASE_DATE < other.to_s
|
97
|
+
end
|
98
|
+
end
|
99
|
+
alias older_than? older_than
|
100
|
+
|
101
|
+
def released_today
|
102
|
+
RubyVersion.date == Date.today
|
103
|
+
end
|
104
|
+
alias released_today? released_today
|
105
|
+
|
106
|
+
# accessors
|
107
|
+
|
108
|
+
def major
|
109
|
+
RUBY_VERSION.to_i
|
110
|
+
end
|
111
|
+
alias main major
|
112
|
+
|
113
|
+
def minor
|
114
|
+
RUBY_VERSION.split('.')[1].to_i
|
115
|
+
end
|
116
|
+
alias mini minor
|
117
|
+
|
118
|
+
def tiny
|
119
|
+
RUBY_VERSION.split('.')[2].to_i
|
120
|
+
end
|
121
|
+
|
122
|
+
alias teeny tiny
|
123
|
+
|
124
|
+
def patchlevel
|
125
|
+
RUBY_PATCHLEVEL
|
126
|
+
end
|
127
|
+
|
128
|
+
def platform
|
129
|
+
RUBY_PLATFORM
|
130
|
+
end
|
131
|
+
|
132
|
+
def release_date
|
133
|
+
Date.parse RUBY_RELEASE_DATE
|
134
|
+
end
|
135
|
+
alias date release_date
|
136
|
+
|
137
|
+
def description
|
138
|
+
RUBY_DESCRIPTION
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
data/quandl.gemspec
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "quandl/command/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "quandl"
|
7
|
+
s.version = Quandl::Command::VERSION
|
8
|
+
s.authors = ["Blake Hilscher"]
|
9
|
+
s.email = ["blake@hilscher.ca"]
|
10
|
+
s.homepage = "http://blake.hilscher.ca/"
|
11
|
+
s.license = "MIT"
|
12
|
+
s.summary = "Quandl Toolbelt"
|
13
|
+
s.description = "http://quandl.com/help/toolbelt"
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = ["quandl"]
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_runtime_dependency "commander", '4.1.5'
|
21
|
+
s.add_runtime_dependency "quandl_format", "0.2.8"
|
22
|
+
s.add_runtime_dependency "quandl_client", '2.5.1'
|
23
|
+
s.add_runtime_dependency "quandl_data", '1.3.9'
|
24
|
+
s.add_runtime_dependency "quandl_operation", '0.3.2'
|
25
|
+
s.add_runtime_dependency "quandl_babelfish", '0.0.9'
|
26
|
+
s.add_runtime_dependency "quandl_logger", '0.2.5'
|
27
|
+
s.add_runtime_dependency "json", '1.7.7'
|
28
|
+
s.add_runtime_dependency "minitar", '0.5.4'
|
29
|
+
s.add_runtime_dependency "thread", "0.1.3"
|
30
|
+
|
31
|
+
s.add_development_dependency "rake", "~> 10.1"
|
32
|
+
s.add_development_dependency "fog", "~> 1.19"
|
33
|
+
s.add_development_dependency "factory_girl", "~> 4.3"
|
34
|
+
s.add_development_dependency "rspec", "~> 2.13"
|
35
|
+
s.add_development_dependency "fivemat", "~> 1.2"
|
36
|
+
s.add_development_dependency "pry", "~> 0.9"
|
37
|
+
s.add_development_dependency "guard", "~> 2.3"
|
38
|
+
s.add_development_dependency "guard-rspec", "~> 4.2"
|
39
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# configure
|
2
|
+
arch_flags="-mmacosx-version-min=10.5"
|
3
|
+
export CFLAGS="$arch_flags "
|
4
|
+
export CXXFLAGS="$arch_flags"
|
5
|
+
export CPPFLAGS="$arch_flags"
|
6
|
+
export LDFLAGS="$arch_flags"
|
7
|
+
export OBJCFLAGS="$arch_flags"
|
8
|
+
export OBJCXXFLAGS="$arch_flags"
|
9
|
+
|
10
|
+
QUANDL_PATH=/usr/local/quandl
|
11
|
+
INSTALL_PATH=$QUANDL_PATH/ruby/
|
12
|
+
ROOT_DIR=$(pwd)
|
13
|
+
# clean
|
14
|
+
rm -rf $INSTALL_PATH
|
15
|
+
rm -rf $ROOT_DIR/*
|
16
|
+
# download
|
17
|
+
wget http://xyz.lcs.mit.edu/ruby/ruby-1.9.3-p448.zip
|
18
|
+
extract ruby-1.9.3-p448.zip
|
19
|
+
cd ruby-1.9.3-p448
|
20
|
+
# compile
|
21
|
+
./configure --with-static-linked-ext --prefix=$INSTALL_PATH
|
22
|
+
make
|
23
|
+
sudo make install
|
24
|
+
# make package
|
25
|
+
sudo chown $USER:staff $QUANDL_PATH
|
26
|
+
mkdir $QUANDL_PATH/ruby-1.9.3-p448-pkg/
|
27
|
+
cp $ROOT_DIR/../dist/resources/ruby/PackageInfo $QUANDL_PATH/ruby-1.9.3-p448-pkg/PackageInfo
|
28
|
+
cd $INSTALL_PATH
|
29
|
+
mkbom -s . $QUANDL_PATH/ruby-1.9.3-p448-pkg/Bom
|
30
|
+
pax -wz -x cpio . > $QUANDL_PATH/ruby-1.9.3-p448-pkg/Payload
|
31
|
+
# package
|
32
|
+
cd $QUANDL_PATH
|
33
|
+
pkgutil --flatten ruby-1.9.3-p448-pkg $ROOT_DIR/ruby.pkg
|
34
|
+
cd $ROOT_DIR
|
data/scripts/install.sh
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
{
|
3
|
+
PACKAGE_URL="https://s3.amazonaws.com/quandl-command/quandl-command$1.tar.gz"
|
4
|
+
PACKAGE_PATH="/usr/local/quandl"
|
5
|
+
|
6
|
+
echo "Welcome to the Quandl Toolbelt."
|
7
|
+
ruby -v >/dev/null 2>&1 || { echo -e >&2 "\033[0;31mI require ruby 1.9 but it's not installed. Aborting.
|
8
|
+
\033[0;33mapt-get install ruby1.9.1\033[0;29m"; exit 1; }
|
9
|
+
echo "Superuser is required, you will be prompted for your password."
|
10
|
+
|
11
|
+
# clear sudo
|
12
|
+
sudo -k
|
13
|
+
# run inside sudo
|
14
|
+
sudo bash <<SCRIPT
|
15
|
+
|
16
|
+
rm -rf "$PACKAGE_PATH.new"
|
17
|
+
mkdir -p "$PACKAGE_PATH.new"
|
18
|
+
cd "$PACKAGE_PATH.new"
|
19
|
+
|
20
|
+
if [[ -z "$(which wget)" ]]; then
|
21
|
+
curl -s $PACKAGE_URL | tar xz
|
22
|
+
else
|
23
|
+
wget -qO- $PACKAGE_URL | tar xz
|
24
|
+
fi
|
25
|
+
|
26
|
+
if [ -d "quandl-command" ]; then
|
27
|
+
mv quandl-command/* .
|
28
|
+
rmdir quandl-command
|
29
|
+
rm -rf $PACKAGE_PATH
|
30
|
+
mv "$PACKAGE_PATH.new" "$PACKAGE_PATH"
|
31
|
+
sudo chown -R $USER:$GROUP $PACKAGE_PATH
|
32
|
+
else
|
33
|
+
echo -e "\033[0;33mWARNING: Revision $1 not found. \033[0;29m"
|
34
|
+
rmdir "$PACKAGE_PATH.new"
|
35
|
+
fi
|
36
|
+
SCRIPT
|
37
|
+
# remind the user to add to $PATH
|
38
|
+
if [[ ":$PATH:" != *":/usr/local/quandl/bin:"* ]]; then
|
39
|
+
echo "----"
|
40
|
+
echo -e "Installation is complete, but there is one more step you need to take."
|
41
|
+
echo -e "\033[0;33mBefore you start using Quandl Toolbelt, you must type: 'source $HOME/.bash_profile'\033[0;29m"
|
42
|
+
|
43
|
+
echo "
|
44
|
+
# Added by Quandl Toolbelt
|
45
|
+
PATH=\"/usr/local/quandl/bin:\$PATH\"" >> "$HOME/.bash_profile"
|
46
|
+
else
|
47
|
+
echo "----"
|
48
|
+
echo -e "\033[0;32mInstallation complete!\033[0;29m"
|
49
|
+
fi
|
50
|
+
|
51
|
+
}
|
@@ -0,0 +1,82 @@
|
|
1
|
+
; Script generated by the Inno Setup Script Wizard.
|
2
|
+
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
3
|
+
|
4
|
+
#define MyAppName "Quandl Toolbelt"
|
5
|
+
#define MyAppVersion "0.1"
|
6
|
+
#define MyAppPublisher "Quandl"
|
7
|
+
#define MyAppURL "http://www.quandl.com/"
|
8
|
+
#define MyAppExeName "quandl.bat"
|
9
|
+
|
10
|
+
[Setup]
|
11
|
+
; NOTE: The value of AppId uniquely identifies this application.
|
12
|
+
; Do not use the same AppId value in installers for other applications.
|
13
|
+
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
14
|
+
AppId={{BC3A2597-57FE-4B8E-8105-B2945862AA97}
|
15
|
+
AppName={#MyAppName}
|
16
|
+
AppVersion={#MyAppVersion}
|
17
|
+
;AppVerName={#MyAppName} {#MyAppVersion}
|
18
|
+
AppPublisher={#MyAppPublisher}
|
19
|
+
AppPublisherURL={#MyAppURL}
|
20
|
+
AppSupportURL={#MyAppURL}
|
21
|
+
AppUpdatesURL={#MyAppURL}
|
22
|
+
DefaultDirName=c:\Quandl
|
23
|
+
DisableDirPage=yes
|
24
|
+
DefaultGroupName={#MyAppName}
|
25
|
+
OutputBaseFilename=Quandl Setup
|
26
|
+
OutputDir=..\..\build\pkg\
|
27
|
+
Compression=lzma
|
28
|
+
SolidCompression=yes
|
29
|
+
|
30
|
+
[Languages]
|
31
|
+
Name: "english"; MessagesFile: "compiler:Default.isl"
|
32
|
+
|
33
|
+
[Files]
|
34
|
+
Source: "..\..\build\tarball\installer\rubyinstaller.exe"; DestDir: "{tmp}";
|
35
|
+
Source: "..\..\build\tarball\quandl-command\bin\*.*"; DestDir: "{app}\bin"; Flags: recursesubdirs;
|
36
|
+
Source: "..\..\build\tarball\quandl-command\lib\*.*"; DestDir: "{app}\lib"; Flags: recursesubdirs;
|
37
|
+
Source: "..\..\build\tarball\quandl-command\vendor\*.*"; DestDir: "{app}\vendor"; Flags: recursesubdirs;
|
38
|
+
Source: "..\..\build\tarball\quandl\quandl.bat"; DestDir: "{app}\bin"; Flags: recursesubdirs;
|
39
|
+
|
40
|
+
[Registry]
|
41
|
+
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: "expandsz"; ValueName: "QuandlPath"; \
|
42
|
+
ValueData: "{app}"
|
43
|
+
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: "expandsz"; ValueName: "Path"; \
|
44
|
+
ValueData: "{olddata};{app}\bin"; Check: NeedsAddPath(ExpandConstant('{app}\bin'))
|
45
|
+
|
46
|
+
[Run]
|
47
|
+
Filename: "{tmp}\rubyinstaller.exe"; Parameters: "/verysilent /noreboot /nocancel /noicons /dir=""{app}/ruby-1.9.3"""; \
|
48
|
+
Flags: shellexec waituntilterminated; StatusMsg: "Installing Ruby"; AfterInstall: MyProgress(1);
|
49
|
+
[Code]
|
50
|
+
|
51
|
+
procedure MyProgress(Mult: Integer);
|
52
|
+
begin
|
53
|
+
WizardForm.ProgressGauge.Min := 0;
|
54
|
+
WizardForm.ProgressGauge.Max := 100;
|
55
|
+
WizardForm.ProgressGauge.Position := Mult*33;
|
56
|
+
end;
|
57
|
+
|
58
|
+
function NeedsAddPath(Param: string): boolean;
|
59
|
+
var
|
60
|
+
OrigPath: string;
|
61
|
+
begin
|
62
|
+
if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
|
63
|
+
'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
|
64
|
+
'Path', OrigPath)
|
65
|
+
then begin
|
66
|
+
Result := True;
|
67
|
+
exit;
|
68
|
+
end;
|
69
|
+
// look for the path with leading and trailing semicolon
|
70
|
+
// Pos() returns 0 if not found
|
71
|
+
Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0;
|
72
|
+
end;
|
73
|
+
|
74
|
+
[UninstallDelete]
|
75
|
+
Type: filesandordirs; Name: "{app}/bin"
|
76
|
+
Type: filesandordirs; Name: "{app}/lib"
|
77
|
+
Type: filesandordirs; Name: "{app}/ruby-1.9.3"
|
78
|
+
Type: filesandordirs; Name: "{app}/vendor"
|
79
|
+
Type: filesandordirs; Name: "{app}/backup"
|
80
|
+
Type: filesandordirs; Name: "{app}/update"
|
81
|
+
Type: files; Name: "{app}/*"
|
82
|
+
Type: dirifempty; Name: "{app}"
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Quandl::Command::Tasks::Delete do
|
5
|
+
|
6
|
+
let(:subject_args){ [] }
|
7
|
+
subject{ Quandl::Command::Tasks::Delete.call(*subject_args) }
|
8
|
+
|
9
|
+
context "spec/fixtures/data/datasets.qdf" do
|
10
|
+
|
11
|
+
before(:each){ Quandl::Command::Tasks::Upload.call( 'spec/fixtures/data/datasets.qdf' ) }
|
12
|
+
|
13
|
+
it "should delete spec/fixtures/data/datasets.qdf" do
|
14
|
+
Quandl::Logger.should_receive(:info).with(/Deleted/).exactly(4).times
|
15
|
+
# load each dataset from file
|
16
|
+
datasets = Quandl::Format::Dataset.load_from_file('spec/fixtures/data/datasets.qdf')
|
17
|
+
# send command to delete each dataset
|
18
|
+
datasets.each{|d| Quandl::Command::Tasks::Delete.call( d.code, force_yes: true ) }
|
19
|
+
|
20
|
+
Quandl::Logger.should_receive(:error).with(/Not Found/).exactly(4).times
|
21
|
+
datasets.each{|d| Quandl::Command::Tasks::Download.call( d.code ) }
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should fail to delete missing dataset" do
|
27
|
+
Quandl::Logger.should_receive(:error).with(/Not Found/).exactly(1).times
|
28
|
+
Quandl::Command::Tasks::Delete.call("DOES_NOT_EXIST", force_yes: true )
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Quandl::Command::Tasks::Download do
|
5
|
+
|
6
|
+
def self.it_should_download(code, options={})
|
7
|
+
it "should download #{code}, #{options}" do
|
8
|
+
Quandl::Logger.should_receive(:info).with(/code: #{code}/)
|
9
|
+
Quandl::Command::Tasks::Download.call( code, options )
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context "spec/fixtures/data/datasets.qdf" do
|
14
|
+
|
15
|
+
before(:all){ Quandl::Command::Tasks::Upload.call( 'spec/fixtures/data/datasets.qdf' ) }
|
16
|
+
|
17
|
+
it_should_download 'TEST_1'
|
18
|
+
it_should_download 'TEST_2'
|
19
|
+
it_should_download 'TEST_4', column: 2
|
20
|
+
it_should_download 'TEST_4', order: 'asc'
|
21
|
+
it_should_download 'TEST_4', order: 'desc'
|
22
|
+
it_should_download 'TEST_4', limit: 10
|
23
|
+
it_should_download 'TEST_4', row: 10
|
24
|
+
it_should_download 'TEST_4', offset: 10
|
25
|
+
# test each transformation
|
26
|
+
Quandl::Operation::Transform.valid_transformations.each{|v| it_should_download('TEST_4', transformation: v.to_s ) }
|
27
|
+
# test each collapse
|
28
|
+
Quandl::Operation::Collapse.valid_collapses.each{|v| it_should_download('TEST_4', collapse: v.to_s ) }
|
29
|
+
|
30
|
+
after(:all){
|
31
|
+
Quandl::Format::Dataset.load_from_file('spec/fixtures/data/datasets.qdf').each{|d|
|
32
|
+
Quandl::Command::Tasks::Delete.call( d.code, force_yes: true ) }
|
33
|
+
}
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should not download TEST_DOES_NOT_EXIST." do
|
38
|
+
Quandl::Logger.should_receive(:error).with(/Not Found/)
|
39
|
+
Quandl::Command::Tasks::Download.call( 'TEST_DOES_NOT_EXIST' )
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Quandl::Command::Tasks::Upload do
|
5
|
+
|
6
|
+
it "should upload spec/fixtures/data/datasets.qdf" do
|
7
|
+
Quandl::Logger.should_receive(:info).with(/OK|Created/).exactly(4).times
|
8
|
+
Quandl::Command::Tasks::Upload.call( 'spec/fixtures/data/datasets.qdf' )
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should upload spec/fixtures/data/metadata.qdf" do
|
12
|
+
Quandl::Logger.should_receive(:info).with(/OK|Created/).exactly(3).times
|
13
|
+
Quandl::Command::Tasks::Upload.call( 'spec/fixtures/data/metadata.qdf' )
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should upload spec/fixtures/data/QUGC-42.qdf" do
|
17
|
+
Quandl::Logger.should_receive(:info).with(/OK|Created/).exactly(1).times
|
18
|
+
Quandl::Command::Tasks::Upload.call( 'spec/fixtures/data/QUGC-42.qdf' )
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.it_should_expect_error(file, error)
|
22
|
+
it "#{file}.qdf should error with #{error}" do
|
23
|
+
Quandl::Logger.should_receive(:error).with(error).exactly(1).times
|
24
|
+
Quandl::Command::Tasks::Upload.call( "spec/fixtures/data/errors/#{file}.qdf" )
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it_should_expect_error :invalid_code, /code is invalid/
|
29
|
+
it_should_expect_error :column_count_mismatch, /Expected 4 but found 5 based/
|
30
|
+
it_should_expect_error :date_parse_error, /DateParseError/
|
31
|
+
it_should_expect_error :invalid_date, /InvalidDate/
|
32
|
+
it_should_expect_error :psych, /Could not find expected ':'/
|
33
|
+
it_should_expect_error :unknown_attribute, /UnknownAttribute/
|
34
|
+
|
35
|
+
# delete test data after run
|
36
|
+
after(:all){ Quandl::Format::Dataset.load_from_file('spec/fixtures/data/datasets.qdf')
|
37
|
+
.collect(&:client).each(&:destroy) }
|
38
|
+
|
39
|
+
end
|