quandl 0.2.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +16 -0
  3. data/.travis.yml +20 -0
  4. data/Gemfile +14 -0
  5. data/Guardfile +8 -0
  6. data/LICENSE +7 -0
  7. data/README.md +316 -0
  8. data/Rakefile +39 -0
  9. data/UPGRADE.md +143 -0
  10. data/bin/quandl +26 -0
  11. data/dist/resources/pkg/Distribution.erb +15 -0
  12. data/dist/resources/pkg/PackageInfo.erb +6 -0
  13. data/dist/resources/pkg/postinstall +45 -0
  14. data/dist/resources/pkg/quandl +25 -0
  15. data/dist/resources/ruby/PackageInfo +3 -0
  16. data/lib/commander/command/quandl_ext.rb +21 -0
  17. data/lib/quandl/command.rb +45 -0
  18. data/lib/quandl/command/client_ext.rb +1 -0
  19. data/lib/quandl/command/client_ext/user.rb +11 -0
  20. data/lib/quandl/command/compatibility_check.rb +11 -0
  21. data/lib/quandl/command/qconfig.rb +76 -0
  22. data/lib/quandl/command/tasks.rb +15 -0
  23. data/lib/quandl/command/tasks/base.rb +263 -0
  24. data/lib/quandl/command/tasks/delete.rb +58 -0
  25. data/lib/quandl/command/tasks/download.rb +111 -0
  26. data/lib/quandl/command/tasks/info.rb +46 -0
  27. data/lib/quandl/command/tasks/list.rb +40 -0
  28. data/lib/quandl/command/tasks/login.rb +46 -0
  29. data/lib/quandl/command/tasks/update.rb +205 -0
  30. data/lib/quandl/command/tasks/upload.rb +69 -0
  31. data/lib/quandl/command/version.rb +5 -0
  32. data/lib/quandl/utility.rb +2 -0
  33. data/lib/quandl/utility/config.rb +43 -0
  34. data/lib/quandl/utility/ruby_version.rb +143 -0
  35. data/quandl.gemspec +39 -0
  36. data/scripts/compile_ruby_pkg.sh +34 -0
  37. data/scripts/install.sh +51 -0
  38. data/scripts/win/quandl_toolbelt.iss +82 -0
  39. data/spec/lib/quandl/command/delete_spec.rb +31 -0
  40. data/spec/lib/quandl/command/download_spec.rb +42 -0
  41. data/spec/lib/quandl/command/upload_spec.rb +39 -0
  42. data/spec/lib/quandl/command_spec.rb +46 -0
  43. data/spec/spec_helper.rb +20 -0
  44. data/tasks/toolbelt.rake +133 -0
  45. data/tasks/toolbelt.rb +92 -0
  46. data/tasks/toolbelt/build.rb +2 -0
  47. data/tasks/toolbelt/build/darwin.rb +71 -0
  48. data/tasks/toolbelt/build/ruby.rb +105 -0
  49. data/tasks/toolbelt/build/tarball.rb +73 -0
  50. data/tasks/toolbelt/build/windows.rb +25 -0
  51. data/tasks/toolbelt/push.rb +15 -0
  52. data/tasks/toolbelt/storage.rb +28 -0
  53. data/tasks/toolbelt/tar.rb +21 -0
  54. metadata +354 -0
data/UPGRADE.md ADDED
@@ -0,0 +1,143 @@
1
+ ## 0.2.22
2
+
3
+ * update permits adding new folders
4
+
5
+
6
+
7
+ ## 0.2.21
8
+
9
+ * QUGC-75 darwin build process will compile ruby if its missing
10
+ * QUGC-71 Add failing spec for "quandl list not working v 20"
11
+ * QUGC-65 Check for updates once every 24 hour period
12
+ * QUGC-65 Add QConfig that stores configuration information in ~/.quandl/config
13
+ * QUGC-60 add compatibility check
14
+
15
+
16
+ ## 0.2.20
17
+
18
+ * QUGC-57 move data validation from Quandl::Format into Quandl::Client.
19
+ * QUGC-54 write failing spec for input with nil row value
20
+ * QUGC-53 numeric codes require the full code
21
+
22
+
23
+ ## 0.2.19
24
+
25
+ * many bugfixes
26
+
27
+
28
+ ## 0.2.18
29
+
30
+ * QUGC-49 Revise installer to use bash shell for [[ bashism
31
+ * QUGC-48 rename to toolbelt
32
+ * uniform table stdout for consistent parsing
33
+ * dont export bin/quandl as an executable. If you want to use quandl cli install the package
34
+
35
+
36
+ ## 0.2.17
37
+
38
+ * QUGC-42 Write failing specs for should not have to include data
39
+ * QUGC-45 quandl info package versions are sent to debug instead of info. remove user id
40
+ * QUGC-44 quandl delete should delete the datasets or raise an error
41
+ * QUGC-44 Write failing spec that checks whether delete has succeeeded.
42
+ * rake package:release takes an argument for building pre releases
43
+ * quandl update has an option called --revision
44
+
45
+
46
+ ## 0.2.16
47
+
48
+ * Add quandl update
49
+
50
+
51
+ ## 0.2.15
52
+
53
+ * QUGC-37 quandl info: report my username not just my token
54
+ * QUGC-37 reject unauthenticated requests
55
+ * QUGC-39 Download. added validation for trim_start, trim_end, order, collapse, transform.
56
+
57
+
58
+ ## 0.2.14
59
+
60
+ * QUGC-38 Add spec for download with column option failing
61
+
62
+
63
+ ## 0.2.13
64
+
65
+ * QUGC-36 Should except null entry in 2 column dataset
66
+ * QUGC-35 Pure Meta Data Send or Update
67
+
68
+
69
+ ## 0.2.12
70
+
71
+ * add quandl list
72
+
73
+
74
+ ## 0.2.10
75
+
76
+ * add specific version requirements
77
+ * add info command for displaying quandl package information
78
+
79
+
80
+ ## 0.2.9
81
+
82
+ * replace full_code regexp with Quandl::Pattern
83
+ * remove --url global option
84
+ * add validations
85
+ * update token env var
86
+ * add shortcuts to global options
87
+
88
+
89
+ ## 0.2.8
90
+
91
+ * use updated Quandl::Format::Dataset.each_line to upload dataset's line by line as they become availabe from whichever interface. Allows ruby GC to operate and avoid having 20k datasets in memory ...
92
+
93
+
94
+ ## 0.2.7
95
+
96
+ * refactor delete, download, upload
97
+ * add convience methods for outputting info
98
+ * remove command logger
99
+
100
+
101
+ ## 0.2.6
102
+
103
+ * add quandl delete quandl delete (SOURCE_CODE/)CODE
104
+ * dont try to load from STDIN if file_path was provided.
105
+
106
+
107
+ ## 0.2.4
108
+
109
+ * refactor authorize to: quandl login login accepts username or email and password login outputs error or auth_token to ~/.quandl
110
+
111
+
112
+ ## 0.2.0
113
+
114
+ * update gemspec to only require quandl_format
115
+ * use Quandl::Commmand::Logger to log messages
116
+ * update local gems
117
+ * add Quandl::Command::Logger that writes to STDOUT and STDERR
118
+ * display dataset.human_errors
119
+ * refactor Action#upload into Command::Upload
120
+ * refactor download to inherit from Action::Base
121
+ * refactor action into Quandl::Command::Download
122
+ * add options to download. extend Commander::Command::Options to support #each, #to_a, #[], #to_h
123
+
124
+
125
+ ## 0.1.2
126
+
127
+ * use quandl_format instead of QDFormat
128
+
129
+ ## 0.1.1
130
+
131
+ * bump quandl_operation to support revised QDFormat
132
+ * refactor examples
133
+ * improve log messages
134
+
135
+
136
+ ## 0.1.0
137
+
138
+ * refactor commands to be more human friendly
139
+
140
+
141
+ ## 0.0.1
142
+
143
+ * init
data/bin/quandl ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require "pathname"
5
+ bin_file = Pathname.new(__FILE__).realpath
6
+
7
+ # vendored gems path
8
+ gem_dir = File.expand_path("../../vendor/gems", bin_file)
9
+ # vendored gems?
10
+ if Dir.exists?(gem_dir)
11
+ Dir["#{gem_dir}/**/lib"].each do |libdir|
12
+ $:.unshift libdir
13
+ end
14
+ else
15
+ require 'rubygems'
16
+ end
17
+
18
+ # add self to libpath
19
+ $:.unshift File.expand_path("../../lib", bin_file)
20
+
21
+ require 'quandl/command/compatibility_check'
22
+ require 'quandl/command'
23
+ require 'commander/import'
24
+ require 'commander/command/quandl_ext'
25
+
26
+ include Quandl::Command
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <installer-script minSpecVersion="1.000000" authoringTool="org.ruby-lang.rake" authoringToolVersion="10.1.1">
3
+ <title>Quandl Toolbelt <%= version %></title>
4
+ <options customize="allow" allow-external-scripts="no"/>
5
+ <domains enable_localSystem="true"/>
6
+ <choices-outline>
7
+ <line choice="quandl-toolbelt"/>
8
+ </choices-outline>
9
+ <choice id="quandl-toolbelt" title="Quandl Toolbelt <%= version %>">
10
+ <pkg-ref id="com.quandl.toolbelt"/>
11
+ <pkg-ref id="org.ruby-lang.installer"/>
12
+ </choice>
13
+ <pkg-ref id="com.quandl.toolbelt" installKBytes="<%= kbytes %>" version="<%= version %>" auth="Root">#quandl-toolbelt.pkg</pkg-ref>
14
+ <pkg-ref id="org.ruby-lang.installer" installKBytes="9132" auth="Root">#ruby.pkg</pkg-ref>
15
+ </installer-script>
@@ -0,0 +1,6 @@
1
+ <pkg-info format-version="2" identifier="com.quandl.toolbelt" version="<%= version %>" install-location="/usr/local/quandl" auth="root">
2
+ <payload installKBytes="<%= kbytes %>" numberOfFiles="<%= num_files %>"/>
3
+ <scripts>
4
+ <postinstall file="./postinstall"/>
5
+ </scripts>
6
+ </pkg-info>
@@ -0,0 +1,45 @@
1
+ #!/bin/sh
2
+
3
+ usershell=$(dscl localhost -read /Local/Default/Users/$USER shell | sed -e 's/[^ ]* //')
4
+
5
+ startup_files() {
6
+ case $(basename $usershell) in
7
+ zsh)
8
+ echo ".zlogin .zshrc .zprofile .zshenv"
9
+ ;;
10
+ bash)
11
+ echo ".bashrc .bash_profile .bash_login .profile"
12
+ ;;
13
+ *)
14
+ echo ".bash_profile .zshrc .profile"
15
+ ;;
16
+ esac
17
+ }
18
+
19
+ install_path() {
20
+ for file in $(startup_files); do
21
+ [ -f $HOME/$file ] || continue
22
+ (grep "Added by the Quandl" $HOME/$file >/dev/null) && break
23
+
24
+ cat <<MESSAGE >>$HOME/$file
25
+
26
+ ### Added by the Quandl Toolbelt
27
+ export PATH="/usr/local/quandl/bin:\$PATH"
28
+ MESSAGE
29
+
30
+ # done after we add to one file
31
+ break
32
+ done
33
+ }
34
+
35
+ # if the toolbelt is not returned by `which`, let's add to the PATH
36
+ case $(which quandl) in
37
+ /usr/bin/quandl|/usr/local/quandl/bin/quandl)
38
+ ;;
39
+ *)
40
+ install_path
41
+ ;;
42
+ esac
43
+
44
+ # symlink binary to /usr/bin/quandl
45
+ ln -sf /usr/local/quandl/bin/quandl /usr/bin/quandl
@@ -0,0 +1,25 @@
1
+ #!/usr/local/quandl/ruby/bin/ruby
2
+ # encoding: UTF-8
3
+
4
+ require "pathname"
5
+ bin_file = Pathname.new(__FILE__).realpath
6
+
7
+ # vendored gems path
8
+ gem_dir = File.expand_path("../../vendor/gems", bin_file)
9
+ # vendored gems?
10
+ if Dir.exists?(gem_dir)
11
+ Dir["#{gem_dir}/**/lib"].each do |libdir|
12
+ $:.unshift libdir
13
+ end
14
+ else
15
+ require 'rubygems'
16
+ end
17
+
18
+ # add self to libpath
19
+ $:.unshift File.expand_path("../../lib", bin_file)
20
+
21
+ require 'quandl/command'
22
+ require 'commander/import'
23
+ require 'commander/command/quandl_ext'
24
+
25
+ include Quandl::Command
@@ -0,0 +1,3 @@
1
+ <pkg-info format-version="2" identifier="org.ruby-lang.installer" version="1.9.3-p448" install-location="/usr/local/quandl/ruby" auth="root">
2
+ <payload installKBytes="78196" numberOfFiles="16186"/>
3
+ </pkg-info>
@@ -0,0 +1,21 @@
1
+ module Commander
2
+ class Command
3
+ class Options
4
+
5
+ delegate :each, :to_a, :[], to: :to_h
6
+
7
+ def class
8
+ Commander::Command::Options
9
+ end
10
+
11
+ def try(key)
12
+ self.to_h[key.to_sym]
13
+ end
14
+
15
+ def to_h
16
+ __hash__
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,45 @@
1
+ require 'pry' if ENV['BUNDLE_LOCAL_GEMS']
2
+
3
+ require "quandl/command/version"
4
+ require 'quandl/format'
5
+ require 'quandl/command/qconfig'
6
+ require 'quandl/command/tasks'
7
+ require 'quandl/command/client_ext'
8
+
9
+ # update tracking information
10
+ Quandl::Client.request_source = 'quandl_command'
11
+ Quandl::Client.request_version = Quandl::Command::VERSION
12
+
13
+ Quandl::Logger.use(Quandl::Logger::Outputs)
14
+
15
+ module Quandl::Command
16
+
17
+ extend ActiveSupport::Concern
18
+
19
+ included do
20
+
21
+ program :name, 'Quandl Toolbelt'
22
+ program :description, 'http://quandl.com/ command line interface.'
23
+ program :version, Quandl::Command::VERSION
24
+
25
+ default_command :help
26
+
27
+ global_option '-T', '--token STRING', 'secret token used to authenticate requests.'
28
+ global_option '-V', '--verbose', 'display detailed log messages'
29
+ global_option '-U', '--url STRING', 'API url.'
30
+ global_option '--force-yes', 'force y/n with yes'
31
+
32
+ [
33
+ Tasks::Delete,
34
+ Tasks::Download,
35
+ Tasks::Info,
36
+ Tasks::List,
37
+ Tasks::Login,
38
+ Tasks::Update,
39
+ Tasks::Upload,
40
+ # register each task
41
+ ].each{|task| task.configure(self) }
42
+
43
+ end
44
+
45
+ end
@@ -0,0 +1 @@
1
+ require 'quandl/command/client_ext/user'
@@ -0,0 +1,11 @@
1
+ class Quandl::Client::User# < Quandl::Client::Base
2
+
3
+ def info
4
+ return "username: You are not authenticated!" unless present?
5
+ [
6
+ "username: #{username}",
7
+ "email: #{email}",
8
+ ].join("\n")
9
+ end
10
+
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'quandl/utility/ruby_version'
2
+
3
+ err = "UNSUPPORTED ruby version (#{Quandl::Utility::RubyVersion.full_version}) Quandl Toolbelt requires ruby >="
4
+
5
+ if Quandl::Utility::RubyVersion <= '1.9.2'
6
+ puts "#{err} 1.9.3"
7
+ raise LoadError, "#{err} 1.9.3"
8
+ elsif Quandl::Utility::RubyVersion.is?(2.0) && Quandl::Utility::RubyVersion.patchlevel < 353
9
+ puts "#{err} 2.0.0-p353"
10
+ raise LoadError, "#{err} 2.0.0-p353"
11
+ end
@@ -0,0 +1,76 @@
1
+ require 'fileutils'
2
+ require 'yaml'
3
+
4
+ module Quandl
5
+ module Command
6
+ class QConfig
7
+
8
+ class << self
9
+
10
+ def configuration
11
+ @configuration ||= self.new( config_file: config_file )
12
+ end
13
+
14
+ def convert_legacy_config
15
+ return if File.directory?(root_path)
16
+ # otherwise move the old .quandl into .quandl/config
17
+ FileUtils.mv(root_path, "#{root_path}.old")
18
+ FileUtils.mkdir(root_path)
19
+ token = File.read("#{root_path}.old")
20
+ File.write(config_file, "token: #{token}")
21
+ end
22
+
23
+ def config_file
24
+ convert_legacy_config
25
+ @config_file ||= File.join(root_path, 'config')
26
+ end
27
+
28
+ def root_path
29
+ @root_path ||= File.join(ENV['HOME'], '.quandl')
30
+ end
31
+
32
+ protected
33
+
34
+ def define_attributes(*attr_names)
35
+ attr_names.each do |attr_name|
36
+ define_attribute(attr_name)
37
+ end
38
+ end
39
+
40
+ def define_attribute(name)
41
+ define_method(name){ read_attribute(name) }
42
+ define_method("#{name}="){|v| write_attribute(name, v) }
43
+ end
44
+
45
+ end
46
+
47
+ attr_accessor :options
48
+
49
+ define_attributes :token, :quandl_url, :last_checked_for_update
50
+
51
+ def initialize(*args)
52
+ self.options = OpenStruct.new(args.extract_options!)
53
+ end
54
+
55
+ def config
56
+ @config ||= OpenStruct.new(YAML.load(File.read(options.config_file)))
57
+ end
58
+
59
+ private
60
+
61
+ def read_attribute(name)
62
+ config.send(name)
63
+ end
64
+
65
+ def write_attribute(name, value)
66
+ config.send("#{name}=", value)
67
+ commit_config
68
+ end
69
+
70
+ def commit_config
71
+ File.write( options.config_file, YAML.dump(config.marshal_dump) )
72
+ end
73
+
74
+ end
75
+ end
76
+ end