quandl 0.2.22

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.
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