class Quandl::Command::Tasks::Schedule < Quandl::Command::Task autoload_quandl_client authenticated_users_only! description "Schedule a script to be run in the quandl cloud." syntax %{quandl schedule command [file] COMMANDS: schedule list schedule add file schedule show file schedule delete file schedule replace file EXAMPLES: $ quandl schedule add scraper.rb You have successfully scheduled scraper.rb to be run daily. $ quandl schedule add scraper.rb --name weekly_scraper.rb --frequency weekly You have successfully scheduled weekly-scraper.rb to be run weekly. $ quandl schedule replace scraper.rb You have successfully replace scraper.rb} options({ String => { name: "The name used to reference your scraper in the quandl cloud.", frequency: "How often the scraper should be run. [ daily, weekly, monthly, quaterly, annually ]", } }) def list present(scrapers) end def show present(scraper) end def add Quandl::Client::Scraper.create( name: name, scraper: args.first ) info("'#{scraper.name}' was added.") info("#{schedule_message}") end def download begin require 'open-uri' open( scraper.name, 'wb') do |file| $stdout << open(scraper.scraper_url).read end rescue => err present err end end def delete (info("'#{name}' does not exist "); return;) if scraper.blank? info("You are about to delete '#{scraper.name}'") return unless confirmed? scraper.destroy if scraper.respond_to?(:destroy) info("'#{scraper.name}' was deleted") end def replace (info("'#{name}' does not exist "); return;) if scraper.blank? info("You are about to replace '#{scraper.name}'") return unless confirmed? scraper.destroy if scraper.respond_to?(:destroy) Quandl::Client::Scraper.create( name: name, scraper: args.first ) info("'#{scraper.name}' was replaced.") info("#{schedule_message}") end private def schedule_message "It will run 3 times a day starting immediately. Check your scrapers run status at #{quandl_url.gsub(/\/api\/?/,'')}/scrapers" end def scrapers @scrapers ||= Quandl::Client::Scraper.where( page: page ).fetch end def scraper defined?(@scraper) ? @scraper : ( @scraper = find_scraper ) end def find_scraper return nil unless args.first.present? # if the arg is numeric lookup the id. otherwise search for a scraper by name and grab the id id = args.first.numeric? ? args.first : Quandl::Client::Scraper.where( name: name ).try(:first).try(:id) # find the scraper with the id Quandl::Client::Scraper.find(id) unless id.nil? end def name return options.name if options.name.present? return File.basename(args.first) if args.first.present? end end