bushido 0.0.1
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.
- data/Gemfile +4 -0
- data/Rakefile +2 -0
- data/bin/bushido +50 -0
- data/bushido.gemspec +21 -0
- data/lib/bushido/app.rb +84 -0
- data/lib/bushido/command.rb +28 -0
- data/lib/bushido/user.rb +120 -0
- data/lib/bushido/utils.rb +14 -0
- data/lib/bushido/version.rb +3 -0
- data/lib/bushido.rb +15 -0
- metadata +74 -0
data/Gemfile
ADDED
data/Rakefile
ADDED
data/bin/bushido
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require './lib/bushido'
|
3
|
+
|
4
|
+
options = {}
|
5
|
+
|
6
|
+
commands = [:create, :destroy, :reload]
|
7
|
+
help_docs = {:create => "bushido create [NAME] - creates a new app"}
|
8
|
+
|
9
|
+
OptionParser.new do |opts|
|
10
|
+
opts.banner = "Usage: bushido <command>"
|
11
|
+
|
12
|
+
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
13
|
+
options[:verbose] = v
|
14
|
+
end
|
15
|
+
|
16
|
+
opts.on("-h", "--help [command]", commands, "Help (this screen)") do |h|
|
17
|
+
if h.nil?
|
18
|
+
puts opts
|
19
|
+
puts "Supported commands: create, names"
|
20
|
+
exit
|
21
|
+
end
|
22
|
+
|
23
|
+
puts help_docs[h]
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on_tail("-V", "--version", "Show version") do
|
28
|
+
puts Bushido::VERSION.join('.')
|
29
|
+
exit
|
30
|
+
end
|
31
|
+
end.parse!
|
32
|
+
|
33
|
+
command = ARGV.first
|
34
|
+
|
35
|
+
if command
|
36
|
+
case command.downcase.to_sym
|
37
|
+
when :reauth then Bushido::User.reauth
|
38
|
+
when :claim then Bushido::App.claim(ARGV[1])
|
39
|
+
when :list then Bushido::App.list()
|
40
|
+
when :create then Bushido::App.create(ARGV[1])
|
41
|
+
when :show then Bushido::App.show(ARGV[1])
|
42
|
+
when :start then Bushido::App.start(ARGV[1])
|
43
|
+
when :stop then Bushido::App.stop(ARGV[1])
|
44
|
+
when :restart then Bushido::App.restart(ARGV[1])
|
45
|
+
when :update then Bushido::App.update(ARGV[1])
|
46
|
+
end
|
47
|
+
else
|
48
|
+
puts "usage: bushido <command>\n\nSee bushido -h for more detailed instructions"
|
49
|
+
puts "Supported commands: create, names"
|
50
|
+
end
|
data/bushido.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "bushido/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "bushido"
|
7
|
+
s.version = Bushido::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Sean Grove"]
|
10
|
+
s.email = ["s@bushi.do"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{Command-lin interface for bushi.do}
|
13
|
+
s.description = %q{A command line tool to do everything with bushido, from signing up and deploying apps, to claiming, restarting, and updating existing apps}
|
14
|
+
|
15
|
+
s.rubyforge_project = "bushido"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
data/lib/bushido/app.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
module Bushido
|
2
|
+
class App
|
3
|
+
class << self
|
4
|
+
def create(url)
|
5
|
+
puts "Creating account for #{Bushido::User.email}..."
|
6
|
+
|
7
|
+
post({:app => {:url => url}})
|
8
|
+
end
|
9
|
+
|
10
|
+
def list
|
11
|
+
response = Bushido::Command.get_command("#{Temple}/apps")
|
12
|
+
|
13
|
+
response.each do |app|
|
14
|
+
puts app["app"]['subdomain']
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def get(name, params={})
|
19
|
+
url = "#{Temple}/apps/#{name}"
|
20
|
+
Bushido::Command.get_command(url, params)
|
21
|
+
end
|
22
|
+
|
23
|
+
def put(app, command)
|
24
|
+
url = "#{Temple}/apps/#{app}.json"
|
25
|
+
params = {:command => command}
|
26
|
+
|
27
|
+
show_response Bushido::Command.put_command(url, params)
|
28
|
+
end
|
29
|
+
|
30
|
+
def post(params)
|
31
|
+
url = "#{Temple}/apps"
|
32
|
+
show_response Bushido::Command.post_command(url, params)
|
33
|
+
end
|
34
|
+
|
35
|
+
def show_response(response)
|
36
|
+
show_messages response
|
37
|
+
show_errors response
|
38
|
+
end
|
39
|
+
|
40
|
+
def show_messages(response)
|
41
|
+
if response["messages"]
|
42
|
+
puts "Messages:"
|
43
|
+
response["messages"].each_with_index do |error, counter|
|
44
|
+
puts "\t#{counter + 1}. #{error}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def show_errors(response)
|
50
|
+
if response["errors"]
|
51
|
+
puts "Errors:"
|
52
|
+
response["errors"].each_with_index do |error, counter|
|
53
|
+
puts "\t#{counter + 1}. #{error}"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def show(name)
|
59
|
+
result = get name
|
60
|
+
puts result.inspect
|
61
|
+
end
|
62
|
+
|
63
|
+
def start(name)
|
64
|
+
put name, :start
|
65
|
+
end
|
66
|
+
|
67
|
+
def stop(name)
|
68
|
+
put name, :stop
|
69
|
+
end
|
70
|
+
|
71
|
+
def restart(name)
|
72
|
+
put name, :restart
|
73
|
+
end
|
74
|
+
|
75
|
+
def claim(name)
|
76
|
+
put name, :claim
|
77
|
+
end
|
78
|
+
|
79
|
+
def update(name)
|
80
|
+
put name, :update
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Bushido
|
2
|
+
class Command
|
3
|
+
class << self
|
4
|
+
def get_command(url, params={})
|
5
|
+
params.merge!({:auth_token => Bushido::User.authentication_token}) if params[:auth_token].nil? unless Bushido::User.authentication_token.nil?
|
6
|
+
|
7
|
+
raw = RestClient.get(url, {:params => params, :accept => :json})
|
8
|
+
response = JSON.parse raw
|
9
|
+
end
|
10
|
+
|
11
|
+
def post_command(url, params)
|
12
|
+
params.merge!({:auth_token => Bushido::User.authentication_token}) if params[:auth_token].nil? unless Bushido::User.authentication_token.nil?
|
13
|
+
|
14
|
+
raw = RestClient.post(url, params.to_json, :content_type => :json, :accept => :json)
|
15
|
+
response = JSON.parse raw
|
16
|
+
end
|
17
|
+
|
18
|
+
def put_command(url, params)
|
19
|
+
Bushido::Utils.while_authorized do
|
20
|
+
params.merge!({:auth_token => Bushido::User.authentication_token}) if params[:auth_token].nil? unless Bushido::User.authentication_token.nil?
|
21
|
+
|
22
|
+
raw = RestClient.put(url, params.to_json, :content_type => :json)
|
23
|
+
response = JSON.parse raw
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/bushido/user.rb
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
module Bushido
|
2
|
+
class User
|
3
|
+
class << self
|
4
|
+
def account
|
5
|
+
load_config || {}
|
6
|
+
end
|
7
|
+
|
8
|
+
def load_config
|
9
|
+
begin
|
10
|
+
return JSON.parse(File.open(File.expand_path("~/.bushido/config.json"), 'r') { |l| l.read })
|
11
|
+
rescue Errno::ENOENT
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def load_account
|
16
|
+
begin
|
17
|
+
@account = JSON.parse(File.open(File.expand_path("~/.bushido/config.json"), 'r') { |l| l.read })
|
18
|
+
rescue Errno::ENOENT
|
19
|
+
@account = retrieve_account
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def reauth
|
24
|
+
retrieve_account
|
25
|
+
end
|
26
|
+
|
27
|
+
def update_account(account)
|
28
|
+
print "Storing account information..."
|
29
|
+
File.open(File.expand_path("~/.bushido/config.json"), 'w') { |f| f.write(account.to_json) }
|
30
|
+
puts " Done!"
|
31
|
+
end
|
32
|
+
|
33
|
+
def retrieve_account
|
34
|
+
credentials = self.prompt_for_credentials
|
35
|
+
|
36
|
+
raw = RestClient.get "#{Bushido::Temple}/users/verify.json", {:params => {:email => credentials[:email], :password => credentials[:password]}, :accept => :json}
|
37
|
+
|
38
|
+
begin
|
39
|
+
result = JSON.parse(raw)
|
40
|
+
rescue
|
41
|
+
puts "Our servers didn't respond properly while trying to retrieve the account, this seems to be an issue on our end. Please email us at support@bushi.do to clear this up."
|
42
|
+
exit 1
|
43
|
+
end
|
44
|
+
|
45
|
+
if result["authentication_token"] and result["error"].nil?
|
46
|
+
update_account({:email => credentials[:email], :authentication_token => result["authentication_token"]})
|
47
|
+
return {:email => credentials[:email], :authentication_token => result["authentication_token"]}
|
48
|
+
else
|
49
|
+
puts result["error"]
|
50
|
+
if result["error_type"] == "verification_failure"
|
51
|
+
puts ""
|
52
|
+
print "If this is your first time using Bushido, would you like to create an account using the email and password you just entered?\n[y/n]"
|
53
|
+
if $stdin.gets.chomp == "y"
|
54
|
+
self.create_account(credentials)
|
55
|
+
else
|
56
|
+
exit 1
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def create_account(credentials)
|
63
|
+
# GET instead of POST because of AuthenticityToken issues. Deal with it later.
|
64
|
+
begin
|
65
|
+
raw = RestClient.get "#{Bushido::Temple}/users/create.json", {:params => {:email => credentials[:email], :password => credentials[:password], :accept => :json}}
|
66
|
+
rescue RestClient::UnprocessableEntity
|
67
|
+
puts "We ran into an error registering, either our site is down or that name is registered."
|
68
|
+
exit 1
|
69
|
+
end
|
70
|
+
|
71
|
+
begin
|
72
|
+
result = JSON.parse(raw)
|
73
|
+
#puts result.inspect
|
74
|
+
#puts "----------------------------------------------------------------------"
|
75
|
+
rescue JSON::ParserError
|
76
|
+
puts "Our servers didn't respond properly while trying to create an account, this seems to be an issue on our end. Please email us at support@bushi.do to clear this up."
|
77
|
+
exit 1
|
78
|
+
end
|
79
|
+
|
80
|
+
if result["errors"]
|
81
|
+
puts "There were some errors registering: "
|
82
|
+
|
83
|
+
result["errors"].each_pair { |field, error| puts " #{field.capitalize} #{error}" }
|
84
|
+
exit 1
|
85
|
+
end
|
86
|
+
|
87
|
+
update_account result
|
88
|
+
return credentials
|
89
|
+
end
|
90
|
+
|
91
|
+
def authentication_token
|
92
|
+
account["authentication_token"]
|
93
|
+
end
|
94
|
+
|
95
|
+
def email
|
96
|
+
account["email"]
|
97
|
+
end
|
98
|
+
|
99
|
+
def prompt_for_credentials(confirm=false)
|
100
|
+
result = {
|
101
|
+
:email => self.prompt_for_email,
|
102
|
+
:password => self.prompt_for_password
|
103
|
+
}
|
104
|
+
|
105
|
+
result.merge!({:password_confirmation => self.prompt_for_password(" Confirm: ")}) if confirm
|
106
|
+
|
107
|
+
return result
|
108
|
+
end
|
109
|
+
|
110
|
+
def prompt_for_email
|
111
|
+
print " Email: "
|
112
|
+
email = $stdin.gets.chomp
|
113
|
+
end
|
114
|
+
|
115
|
+
def prompt_for_password(prompt=" Password:")
|
116
|
+
ask(prompt) { |q| q.echo = false }
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Bushido
|
2
|
+
class Utils
|
3
|
+
class << self
|
4
|
+
def while_authorized(&block)
|
5
|
+
if Bushido::User.authentication_token.nil? or Bushido::User.email.nil?
|
6
|
+
puts "Please authorized before attempting that command. You can run `bushido reauth` to update your credentials."
|
7
|
+
exit 1
|
8
|
+
else
|
9
|
+
yield
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/bushido.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
module Bushido
|
2
|
+
require 'rubygems'
|
3
|
+
require 'optparse'
|
4
|
+
require 'rest-client'
|
5
|
+
require 'json'
|
6
|
+
require 'highline/import'
|
7
|
+
|
8
|
+
require "./lib/bushido/user"
|
9
|
+
require "./lib/bushido/utils"
|
10
|
+
require "./lib/bushido/command"
|
11
|
+
require "./lib/bushido/app"
|
12
|
+
|
13
|
+
|
14
|
+
Temple = ENV["HOST"] || "http://nok.tea.sh/"
|
15
|
+
end
|
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bushido
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Sean Grove
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-01-26 00:00:00 -08:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: A command line tool to do everything with bushido, from signing up and deploying apps, to claiming, restarting, and updating existing apps
|
22
|
+
email:
|
23
|
+
- s@bushi.do
|
24
|
+
executables:
|
25
|
+
- bushido
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- Gemfile
|
32
|
+
- Rakefile
|
33
|
+
- bin/bushido
|
34
|
+
- bushido.gemspec
|
35
|
+
- lib/bushido.rb
|
36
|
+
- lib/bushido/app.rb
|
37
|
+
- lib/bushido/command.rb
|
38
|
+
- lib/bushido/user.rb
|
39
|
+
- lib/bushido/utils.rb
|
40
|
+
- lib/bushido/version.rb
|
41
|
+
has_rdoc: true
|
42
|
+
homepage: ""
|
43
|
+
licenses: []
|
44
|
+
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options: []
|
47
|
+
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
version: "0"
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
66
|
+
requirements: []
|
67
|
+
|
68
|
+
rubyforge_project: bushido
|
69
|
+
rubygems_version: 1.3.7
|
70
|
+
signing_key:
|
71
|
+
specification_version: 3
|
72
|
+
summary: Command-lin interface for bushi.do
|
73
|
+
test_files: []
|
74
|
+
|