summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorpseudomuto <david.muto@gmail.com>2013-12-18 19:12:43 -0500
committerpseudomuto <david.muto@gmail.com>2013-12-18 19:12:43 -0500
commitd0eef2dbe9d1178111cd768116a66b32a3a4b2b5 (patch)
tree208b1a82ca184af59c8ac95f6541ea1cc181b588 /lib
parentc3a72795ecab47f94527e079b60549051843caa4 (diff)
moving cli to lib and updating bin file
Diffstat (limited to 'lib')
-rw-r--r--lib/dashing.rb3
-rw-r--r--lib/dashing/cli.rb105
-rw-r--r--lib/dashing/downloader.rb18
3 files changed, 126 insertions, 0 deletions
diff --git a/lib/dashing.rb b/lib/dashing.rb
index 7c4f25a..54579dd 100644
--- a/lib/dashing.rb
+++ b/lib/dashing.rb
@@ -7,6 +7,9 @@ require 'sass'
require 'json'
require 'yaml'
+require 'dashing/cli'
+require 'dashing/downloader'
+
SCHEDULER = Rufus::Scheduler.new
set :root, Dir.pwd
diff --git a/lib/dashing/cli.rb b/lib/dashing/cli.rb
new file mode 100644
index 0000000..001a92e
--- /dev/null
+++ b/lib/dashing/cli.rb
@@ -0,0 +1,105 @@
+require 'thor'
+require 'open-uri'
+
+module Dashing
+ class CLI < Thor
+ include Thor::Actions
+
+ attr_reader :name
+
+ class << self
+ attr_accessor :auth_token
+
+ def CLI.hyphenate(str)
+ return str.downcase if str =~ /^[A-Z-]+$/
+ str.gsub('_', '-').gsub(/\B[A-Z]/, '-\&').squeeze('-').downcase
+ end
+ end
+
+ no_tasks do
+ %w(widget dashboard job).each do |type|
+ define_method "generate_#{type}" do |name|
+ @name = Thor::Util.snake_case(name)
+ directory(type.to_sym, "#{type}s")
+ end
+ end
+ end
+
+ desc "new PROJECT_NAME", "Sets up ALL THE THINGS needed for your dashboard project."
+ def new(name)
+ @name = Thor::Util.snake_case(name)
+ directory(:project, @name)
+ end
+
+ desc "generate (widget/dashboard/job) NAME", "Creates a new widget, dashboard, or job."
+ def generate(type, name)
+ public_send("generate_#{type}".to_sym, name)
+ rescue NoMethodError => e
+ puts "Invalid generator. Either use widget, dashboard, or job"
+ end
+
+ desc "install GIST_ID", "Installs a new widget from a gist."
+ def install(gist_id)
+ gist = Downloader.get_gist(gist_id)
+ public_url = "https://gist.github.com/#{gist_id}"
+
+ gist['files'].each do |file, details|
+ if file =~ /\.(html|coffee|scss)\z/
+ widget_name = File.basename(file, '.*')
+ new_path = File.join(Dir.pwd, 'widgets', widget_name, file)
+ create_file(new_path, details['content'])
+ elsif file.end_with?('.rb')
+ new_path = File.join(Dir.pwd, 'jobs', file)
+ create_file(new_path, details['content'])
+ end
+ end
+
+ print set_color("Don't forget to edit the ", :yellow)
+ print set_color("Gemfile ", :yellow, :bold)
+ print set_color("and run ", :yellow)
+ print set_color("bundle install ", :yellow, :bold)
+ say set_color("if needed. More information for this widget can be found at #{public_url}", :yellow)
+ rescue OpenURI::HTTPError => http_error
+ say set_color("Could not find gist at #{public_url}"), :red
+ end
+
+ desc "start", "Starts the server in style!"
+ method_option :job_path, :desc => "Specify the directory where jobs are stored"
+ def start(*args)
+ port_option = args.include?('-p') ? '' : ' -p 3030'
+ args = args.join(' ')
+ command = "bundle exec thin -R config.ru start#{port_option} #{args}"
+ command.prepend "export JOB_PATH=#{options[:job_path]}; " if options[:job_path]
+ run_command(command)
+ end
+
+ desc "stop", "Stops the thin server"
+ def stop
+ command = "bundle exec thin stop"
+ run_command(command)
+ end
+
+ desc "job JOB_NAME AUTH_TOKEN(optional)", "Runs the specified job. Make sure to supply your auth token if you have one set."
+ def job(name, auth_token = "")
+ Dir[File.join(Dir.pwd, 'lib/**/*.rb')].each {|file| require_file(file) }
+ self.class.auth_token = auth_token
+ f = File.join(Dir.pwd, "jobs", "#{name}.rb")
+ require_file(f)
+ end
+
+ # map some commands
+ map 'g' => :generate
+ map 'i' => :install
+ map 's' => :start
+
+ private
+
+ def run_command(command)
+ system(command)
+ end
+
+ def require_file(file)
+ require file
+ end
+ end
+end
diff --git a/lib/dashing/downloader.rb b/lib/dashing/downloader.rb
new file mode 100644
index 0000000..140e862
--- /dev/null
+++ b/lib/dashing/downloader.rb
@@ -0,0 +1,18 @@
+require 'net/http'
+require 'open-uri'
+require 'json'
+
+module Dashing
+ module Downloader
+ extend self
+
+ def get_gist(gist_id)
+ get_json("https://api.github.com/gists/#{gist_id}")
+ end
+
+ def get_json(url)
+ response = open(url).read
+ JSON.parse(response)
+ end
+ end
+end