tane 0.0.1 → 0.0.2
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/lib/tane/commands/create.rb +55 -10
- data/lib/tane/commands/init.rb +4 -0
- data/lib/tane/commands/login.rb +1 -1
- data/lib/tane/commands/open.rb +33 -0
- data/lib/tane/helpers/init_helper.rb +11 -15
- data/lib/tane/helpers.rb +80 -1
- data/lib/tane/version.rb +1 -1
- data/spec/helpers/init_helper_spec.rb +3 -3
- data/spec/helpers_spec.rb +4 -3
- data/tane.gemspec +2 -1
- metadata +23 -11
data/lib/tane/commands/create.rb
CHANGED
@@ -1,19 +1,38 @@
|
|
1
1
|
class Tane::Commands::Create < Tane::Commands::Base
|
2
|
-
|
3
2
|
class << self
|
4
3
|
def process(args)
|
4
|
+
verbose_say("Authenticating you...")
|
5
5
|
authenticate_user
|
6
|
+
verbose_say("done!")
|
7
|
+
|
6
8
|
app_name = args[0] ||= term.ask("Please enter a name for your new app: ") { |app_name| app_name }
|
7
9
|
template_url = ENV['KIMONO_URL'] || "https://raw.github.com/Bushido/kimono/master/kimono.rb"
|
8
10
|
|
9
|
-
print "Creating a new Bushido rails app in
|
11
|
+
print "Creating a new Bushido rails app in ./#{ app_name } (please wait, it'll take a few minutes) ... "
|
12
|
+
|
13
|
+
start_throbber!
|
10
14
|
|
11
|
-
|
15
|
+
File.open("tane.log", "w") do |file|
|
16
|
+
IO.popen("rails new #{app_name} -m #{ template_url }", :error => [:child, :out]) do |io|
|
17
|
+
file.puts(io.read)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
verbose_say("Finished creating rails app, initializing Bushido resources...")
|
12
21
|
|
13
22
|
Dir.chdir("./#{app_name}")do
|
14
|
-
|
23
|
+
File.open("tane.log", "w") do |file|
|
24
|
+
verbose = "--verbose" if opts.verbose
|
25
|
+
verbose ||= ""
|
26
|
+
IO.popen("bundle exec tane init #{verbose}", :error => [:child, :out]) do |io|
|
27
|
+
file.puts(io.read)
|
28
|
+
end
|
29
|
+
end
|
15
30
|
end
|
16
31
|
|
32
|
+
verbose_say("done!")
|
33
|
+
|
34
|
+
stop_throbber!
|
35
|
+
|
17
36
|
success_messages = ["Let the hacking commence!",
|
18
37
|
"Hacks and glory await!",
|
19
38
|
"Hack and be merry!",
|
@@ -21,24 +40,50 @@ class Tane::Commands::Create < Tane::Commands::Base
|
|
21
40
|
"May the source be with you!",
|
22
41
|
"Take this demi-REPL, dear friend, and may it serve you well.",
|
23
42
|
"Lemonodor-fame is but a hack away!",
|
24
|
-
"Go forth to #{ app_name }, and hack for all you're worth - for all
|
43
|
+
"Go forth to #{ app_name }, and hack for all you're worth - for all humankind!"]
|
44
|
+
|
45
|
+
bushirens = ["Sean", "Kevin", "Akash"]
|
25
46
|
|
26
47
|
success_message = success_messages[ rand(success_messages.length) ]
|
48
|
+
bushiren = bushirens [ rand(bushirens.length) ]
|
27
49
|
|
28
50
|
FileUtils.mv("./tane.log", "./#{ app_name }/log/tane.log")
|
29
|
-
|
30
|
-
|
51
|
+
term.say " Finished successfully!"
|
52
|
+
term.say "Your app is now in ./#{ app_name }"
|
53
|
+
|
54
|
+
|
55
|
+
Dir.chdir("./#{app_name}") do
|
56
|
+
term.say "Launching your new app!"
|
57
|
+
term.say "Check out once rails has finished booting http://localhost:3000"
|
58
|
+
term.say "#{bushiren} says, \"#{ success_message }\""
|
59
|
+
begin
|
60
|
+
# Do this in the background, it'll wait up to 120 seconds
|
61
|
+
# for the rails server to start up and launch a browser as
|
62
|
+
# soon as it's ready
|
63
|
+
verbose_say("Launching `tane open' in the background..")
|
64
|
+
system("tane open&")
|
65
|
+
verbose_say("done!")
|
66
|
+
|
67
|
+
suppress_env_vars("BUNDLE_BIN_PATH", "BUNDLE_GEMFILE", "RUBYOPT") do
|
68
|
+
verbose_say("launching rails app!")
|
69
|
+
exec("bundle exec tane exec rails s")
|
70
|
+
end
|
71
|
+
rescue Exception => ex
|
72
|
+
term.say "Oh no we tried to launch the app but failed. Please try launching it yourself with \n bundle exec tane exec rails s \n if you have problems let us know at support@bushi.do"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
31
76
|
end
|
32
77
|
|
33
78
|
def help_text
|
34
79
|
<<-EOL
|
35
80
|
Usage:
|
36
81
|
|
37
|
-
tane
|
82
|
+
tane create 'app_name'
|
38
83
|
|
39
|
-
|
84
|
+
Creates a new Bushido-enabled rails app from scratch and launches it. Use this to get started with Bushido quickly and easily
|
40
85
|
|
41
|
-
tane
|
86
|
+
tane create my_example_app
|
42
87
|
EOL
|
43
88
|
end
|
44
89
|
end
|
data/lib/tane/commands/init.rb
CHANGED
@@ -2,9 +2,13 @@ class Tane::Commands::Init < Tane::Commands::Base
|
|
2
2
|
|
3
3
|
class << self
|
4
4
|
def process(args)
|
5
|
+
verbose_say("authenticating you...")
|
5
6
|
authenticate_user
|
7
|
+
verbose_say("done!")
|
6
8
|
if in_rails_dir?
|
9
|
+
verbose_say("In a rails directory, tane initializing...")
|
7
10
|
Tane::Helpers::Init.initialize_app
|
11
|
+
verbose_say("finished initializing!")
|
8
12
|
else
|
9
13
|
term.say("You have to be in the local rails app's root directory when running `tane init`")
|
10
14
|
exit 1
|
data/lib/tane/commands/login.rb
CHANGED
@@ -31,7 +31,7 @@ class Tane::Commands::Login < Tane::Commands::Base
|
|
31
31
|
term.say("Invalid username, or password, sorry! Don't worry though, we'll get you through this!")
|
32
32
|
|
33
33
|
# returns auth_token on success
|
34
|
-
return signup_and_notify(email, password) if term.agree("would you like to try signing up with those credentials?")
|
34
|
+
return signup_and_notify(email, password) if term.agree("would you like to try signing up with those credentials? Y/N")
|
35
35
|
|
36
36
|
display_help_messages_and_exit
|
37
37
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'launchy'
|
2
|
+
|
3
|
+
class Tane::Commands::Open < Tane::Commands::Base
|
4
|
+
class << self
|
5
|
+
def process(args)
|
6
|
+
timeout = opts.timeout || 120
|
7
|
+
|
8
|
+
started = try_for(:seconds => timeout) do
|
9
|
+
begin
|
10
|
+
RestClient.get("http://localhost:3000/")
|
11
|
+
true
|
12
|
+
rescue => e
|
13
|
+
false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
Launchy.open("http://localhost:3000/") if started
|
18
|
+
end
|
19
|
+
|
20
|
+
def help_text
|
21
|
+
<<-EOL
|
22
|
+
Usage:
|
23
|
+
|
24
|
+
tane open
|
25
|
+
|
26
|
+
Waits until there's a webserver running at port 3000 and then opens the browser to it.
|
27
|
+
|
28
|
+
tane open
|
29
|
+
EOL
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -9,7 +9,7 @@ class Tane::Helpers::Init
|
|
9
9
|
else
|
10
10
|
app = create_app
|
11
11
|
make_app_bushido_dir
|
12
|
-
save_envs(get_app_envs(app['name']))
|
12
|
+
save_envs(get_app_envs(app['app']['name']))
|
13
13
|
save_emails
|
14
14
|
end
|
15
15
|
|
@@ -23,9 +23,7 @@ class Tane::Helpers::Init
|
|
23
23
|
# TODO: Replace envs_template with values retrieved from Bushido side
|
24
24
|
def save_envs(env_vars)
|
25
25
|
if File.exists?('.bushido/tane.yml')
|
26
|
-
if not term.agree('.bushido/tane.yml already exists! Are you sure you want to overwrite it?')
|
27
|
-
return
|
28
|
-
end
|
26
|
+
return if not term.agree('.bushido/tane.yml already exists! Are you sure you want to overwrite it? Y/N')
|
29
27
|
end
|
30
28
|
|
31
29
|
File.open('.bushido/tane.yml', 'w+') { |file| file.puts YAML.dump(envs_template(env_vars)) }
|
@@ -33,9 +31,7 @@ class Tane::Helpers::Init
|
|
33
31
|
|
34
32
|
def save_emails
|
35
33
|
if File.exists?("#{email_templates_path}/#{example_email_template.keys.first}")
|
36
|
-
if not term.agree("#{example_email_template.keys.first} already exists! Are you sure you want to overwrite it?")
|
37
|
-
return
|
38
|
-
end
|
34
|
+
return if not term.agree("#{example_email_template.keys.first} already exists! Are you sure you want to overwrite it? Y/N")
|
39
35
|
end
|
40
36
|
|
41
37
|
File.open("#{email_templates_path}/#{example_email_template.keys.first}", "w") do |file|
|
@@ -47,15 +43,15 @@ class Tane::Helpers::Init
|
|
47
43
|
def envs_template(app_envs)
|
48
44
|
envs = {}
|
49
45
|
env_var_keys = [
|
50
|
-
'APP_TLD', 'BUNDLE_WITHOUT', 'BUSHIDO_APP',
|
51
|
-
'BUSHIDO_DOMAIN', 'BUSHIDO_EVENTS', 'BUSHIDO_HOST',
|
52
|
-
'BUSHIDO_PROJECT_NAME', 'BUSHIDO_SALT', 'BUSHIDO_SUBDOMAIN',
|
53
|
-
'B_SQL_DB', 'B_SQL_PASS', 'B_SQL_USER',
|
54
|
-
'HOSTING_PLATFORM', 'LANG', 'PUBLIC_URL',
|
55
|
-
'RAILS_ENV', 'S3_ACCESS_KEY_ID', 'S3_ARN',
|
56
|
-
'SHARED_DATABASE_URL', 'S3_PREFIX', 'S3_SECRET_ACCESS_KEY',
|
46
|
+
'APP_TLD', 'BUNDLE_WITHOUT', 'BUSHIDO_APP', 'BUSHIDO_APP_KEY',
|
47
|
+
'BUSHIDO_DOMAIN', 'BUSHIDO_EVENTS', 'BUSHIDO_HOST', 'BUSHIDO_NAME',
|
48
|
+
'BUSHIDO_PROJECT_NAME', 'BUSHIDO_SALT', 'BUSHIDO_SUBDOMAIN',
|
49
|
+
'B_SQL_DB', 'B_SQL_PASS', 'B_SQL_USER', 'DATABASE_URL',
|
50
|
+
'HOSTING_PLATFORM', 'LANG', 'PUBLIC_URL', 'RACK_ENV',
|
51
|
+
'RAILS_ENV', 'S3_ACCESS_KEY_ID', 'S3_ARN', 'S3_BUCKET',
|
52
|
+
'SHARED_DATABASE_URL', 'S3_PREFIX', 'S3_SECRET_ACCESS_KEY', 'STS_SESSION_TOKEN',
|
57
53
|
'SMTP_AUTHENTICATION', 'SMTP_DOMAIN', 'SMTP_PASSWORD',
|
58
|
-
'SMTP_PORT', 'SMTP_SERVER', 'SMTP_TLS',
|
54
|
+
'SMTP_PORT', 'SMTP_SERVER', 'SMTP_TLS', 'SMTP_USER'
|
59
55
|
]
|
60
56
|
|
61
57
|
env_var_keys.each { |env_var_key| envs[env_var_key] = app_envs[env_var_key] }
|
data/lib/tane/helpers.rb
CHANGED
@@ -11,6 +11,8 @@ module Tane
|
|
11
11
|
end
|
12
12
|
|
13
13
|
module ClassMethods
|
14
|
+
@should_throb = false
|
15
|
+
|
14
16
|
def term
|
15
17
|
@hl ||= HighLine.new
|
16
18
|
end
|
@@ -64,7 +66,7 @@ module Tane
|
|
64
66
|
end
|
65
67
|
|
66
68
|
def bushido_app_exists?
|
67
|
-
File.exists?('.bushido/tane.yml') and File.
|
69
|
+
File.exists?('.bushido/tane.yml') and File.directory?('.bushido/emails')
|
68
70
|
end
|
69
71
|
|
70
72
|
def username
|
@@ -163,6 +165,83 @@ module Tane
|
|
163
165
|
|
164
166
|
result
|
165
167
|
end
|
168
|
+
|
169
|
+
def repeat_every(interval, &block)
|
170
|
+
Thread.new do
|
171
|
+
loop do
|
172
|
+
start_time = Time.now
|
173
|
+
yield
|
174
|
+
elapsed = Time.now - start_time
|
175
|
+
sleep([interval - elapsed, 0].max)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def start_throbber!
|
181
|
+
throbber_frames = ['|', '/', '-', '\\', 'X']
|
182
|
+
frame_counter = 0
|
183
|
+
|
184
|
+
@should_throb = true
|
185
|
+
|
186
|
+
thread = repeat_every(0.5) do
|
187
|
+
if @should_throb
|
188
|
+
print "\x08\x08\x08"
|
189
|
+
frame_counter += 1
|
190
|
+
frame_counter = 0 if frame_counter == throbber_frames.length
|
191
|
+
print "#{throbber_frames[frame_counter]} "
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
end
|
196
|
+
|
197
|
+
def stop_throbber!
|
198
|
+
@should_throb = false
|
199
|
+
end
|
200
|
+
|
201
|
+
def should_throb
|
202
|
+
@should_throb
|
203
|
+
end
|
204
|
+
|
205
|
+
def should_throb=(value)
|
206
|
+
@should_throb = value
|
207
|
+
end
|
208
|
+
|
209
|
+
# Takes a list of ENV vars, records their value,
|
210
|
+
# sets them to null, runs the block, then ensures
|
211
|
+
# the ENV vars are restored at the end.
|
212
|
+
def suppress_env_vars(*vars, &block)
|
213
|
+
cache = {}
|
214
|
+
vars.each do |var|
|
215
|
+
cache[var] = ENV[var]
|
216
|
+
end
|
217
|
+
|
218
|
+
begin
|
219
|
+
vars.each do |var|
|
220
|
+
ENV[var] = nil
|
221
|
+
end
|
222
|
+
yield block
|
223
|
+
ensure
|
224
|
+
cache.each_pair do |key, value|
|
225
|
+
ENV[key] = value
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
def try_for(options, &block)
|
231
|
+
options[:seconds] ||= 30
|
232
|
+
options[:sleep] ||= 5
|
233
|
+
|
234
|
+
start = Time.now
|
235
|
+
elapsed = 0
|
236
|
+
|
237
|
+
while elapsed < options[:seconds]
|
238
|
+
return true if yield elapsed
|
239
|
+
sleep options[:sleep]
|
240
|
+
elapsed = Time.now - start
|
241
|
+
end
|
242
|
+
|
243
|
+
return false
|
244
|
+
end
|
166
245
|
end
|
167
246
|
end
|
168
247
|
end
|
data/lib/tane/version.rb
CHANGED
@@ -64,14 +64,14 @@ describe Tane::Helpers::Init do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
describe "save_emails" do
|
67
|
-
it "should
|
67
|
+
it "should create a sample email template file to .bushido/emails dir if it does not exist" do
|
68
68
|
File.should_receive(:exists?).and_return(false)
|
69
69
|
File.should_receive(:open)
|
70
70
|
|
71
71
|
Tane::Helpers::Init.save_emails
|
72
72
|
end
|
73
73
|
|
74
|
-
it "should
|
74
|
+
it "should create a sample email template file if it already exists and if the user agrees to an overwrite" do
|
75
75
|
File.should_receive(:exists?).and_return(true)
|
76
76
|
Tane::Helpers::Init.term.should_receive(:agree).and_return(true)
|
77
77
|
File.should_receive(:open)
|
@@ -79,7 +79,7 @@ describe Tane::Helpers::Init do
|
|
79
79
|
Tane::Helpers::Init.save_emails
|
80
80
|
end
|
81
81
|
|
82
|
-
it "should not
|
82
|
+
it "should not create a sample email template file if the user says no to an overwrite" do
|
83
83
|
File.should_receive(:exists?).and_return(true)
|
84
84
|
Tane::Helpers::Init.term.should_receive(:agree).and_return(false)
|
85
85
|
File.should_not_receive(:open)
|
data/spec/helpers_spec.rb
CHANGED
@@ -81,8 +81,9 @@ describe "Tane::Helpers" do
|
|
81
81
|
end
|
82
82
|
|
83
83
|
describe "bushido_app_exists?" do
|
84
|
-
it "it should return true if the tane.yml and
|
85
|
-
File.should_receive(:exists?).
|
84
|
+
it "it should return true if the .bushido/tane.yml file and .bushido/emails dir exists in the current directory" do
|
85
|
+
File.should_receive(:exists?).and_return(true)
|
86
|
+
File.should_receive(:directory?).and_return(true)
|
86
87
|
Tane::Helpers::Example.bushido_app_exists?.should be_true
|
87
88
|
end
|
88
89
|
end
|
@@ -111,7 +112,7 @@ describe "Tane::Helpers" do
|
|
111
112
|
describe "make_app_bushido_dir" do
|
112
113
|
it "should create a .bushido dir in the current dir if it does not have one" do
|
113
114
|
Tane::Helpers::Example.should_receive(:bushido_app_exists?).and_return(false)
|
114
|
-
FileUtils.should_receive(:mkdir_p).with(".bushido")
|
115
|
+
FileUtils.should_receive(:mkdir_p).with(".bushido/emails")
|
115
116
|
Tane::Helpers::Example.make_app_bushido_dir
|
116
117
|
end
|
117
118
|
|
data/tane.gemspec
CHANGED
@@ -22,7 +22,8 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_development_dependency "rspec"
|
23
23
|
s.add_dependency "awesome_print"
|
24
24
|
s.add_dependency "rake"
|
25
|
-
s.add_dependency "
|
25
|
+
s.add_dependency "launchy"
|
26
|
+
s.add_dependency "rails", "~> 3.1.0"
|
26
27
|
s.add_runtime_dependency "erubis"
|
27
28
|
s.add_runtime_dependency "rest-client"
|
28
29
|
s.add_runtime_dependency "highline"
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: tane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Bushido Team
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date:
|
13
|
+
date: 2012-01-28 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
@@ -46,29 +46,29 @@ dependencies:
|
|
46
46
|
type: :runtime
|
47
47
|
version_requirements: *id003
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
|
-
name:
|
49
|
+
name: launchy
|
50
50
|
prerelease: false
|
51
51
|
requirement: &id004 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
|
-
- -
|
54
|
+
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version:
|
56
|
+
version: "0"
|
57
57
|
type: :runtime
|
58
58
|
version_requirements: *id004
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
|
-
name:
|
60
|
+
name: rails
|
61
61
|
prerelease: false
|
62
62
|
requirement: &id005 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
|
-
- -
|
65
|
+
- - ~>
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
67
|
+
version: 3.1.0
|
68
68
|
type: :runtime
|
69
69
|
version_requirements: *id005
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
71
|
+
name: erubis
|
72
72
|
prerelease: false
|
73
73
|
requirement: &id006 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
@@ -79,7 +79,7 @@ dependencies:
|
|
79
79
|
type: :runtime
|
80
80
|
version_requirements: *id006
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
|
-
name:
|
82
|
+
name: rest-client
|
83
83
|
prerelease: false
|
84
84
|
requirement: &id007 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
@@ -89,6 +89,17 @@ dependencies:
|
|
89
89
|
version: "0"
|
90
90
|
type: :runtime
|
91
91
|
version_requirements: *id007
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: highline
|
94
|
+
prerelease: false
|
95
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: "0"
|
101
|
+
type: :runtime
|
102
|
+
version_requirements: *id008
|
92
103
|
description: This gem provides all the tools necessary to develop a rails app meant for deployment on Bushido locally
|
93
104
|
email:
|
94
105
|
- support@gobushido.com
|
@@ -117,6 +128,7 @@ files:
|
|
117
128
|
- lib/tane/commands/init.rb
|
118
129
|
- lib/tane/commands/login.rb
|
119
130
|
- lib/tane/commands/logout.rb
|
131
|
+
- lib/tane/commands/open.rb
|
120
132
|
- lib/tane/commands/refresh.rb
|
121
133
|
- lib/tane/commands/signup.rb
|
122
134
|
- lib/tane/commands/support.rb
|
@@ -166,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
178
|
requirements: []
|
167
179
|
|
168
180
|
rubyforge_project: tane
|
169
|
-
rubygems_version: 1.8.
|
181
|
+
rubygems_version: 1.8.15
|
170
182
|
signing_key:
|
171
183
|
specification_version: 3
|
172
184
|
summary: Enables local development of Bushido apps
|