sinatra_bootstrap 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +36 -0
- data/lib/sinatra_bootstrap/stage.rb +12 -6
- data/lib/sinatra_bootstrap/templates/Gemfile-heroku +9 -0
- data/lib/sinatra_bootstrap/templates/Procfile +1 -0
- data/lib/sinatra_bootstrap/templates/config.ru +2 -0
- data/spec/spec_helper.rb +34 -0
- data/spec/stage_spec.rb +121 -0
- metadata +27 -10
data/README.md
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
Sinatra Bootstrap
|
2
|
+
=================
|
3
|
+
|
4
|
+
Get a skeleton [sinatra](http://www.sinatrarb.com/) app up and running before you finish wishing you
|
5
|
+
had an idea
|
6
|
+
|
7
|
+
Install
|
8
|
+
-------
|
9
|
+
|
10
|
+
gem install sinatra_bootstrap
|
11
|
+
|
12
|
+
Usage
|
13
|
+
-----
|
14
|
+
|
15
|
+
### Sinatra-only application
|
16
|
+
|
17
|
+
take_the_stage sinatra
|
18
|
+
|
19
|
+
Wow, that was easy. `take_the_stage sinatra` will generate a `Gemfile`
|
20
|
+
specifying only `gem 'sinatra', '~> 1.3'` as well as a `main.rb` file to
|
21
|
+
hold your application.
|
22
|
+
|
23
|
+
### Rack application
|
24
|
+
|
25
|
+
take_the_stage sinatra --rackup
|
26
|
+
|
27
|
+
The `rackup` variant will also generate a `config.ru` file suitable for
|
28
|
+
deploying your application on a Rack-based server.
|
29
|
+
|
30
|
+
### Heroku
|
31
|
+
|
32
|
+
take_the_stage heroku
|
33
|
+
|
34
|
+
When passed `heroku` sinatra bootstrap will generate a more complete
|
35
|
+
`Gemfile` containing [thin](http://code.macournoyer.com/thin/),
|
36
|
+
[heroku](https://github.com/heroku/heroku), and [foreman](https://github.com/ddollar/foreman). It also outputs a simple `config.ru` and `Procfile`
|
@@ -9,20 +9,26 @@ module SinatraBootstrap
|
|
9
9
|
end
|
10
10
|
|
11
11
|
desc 'sinatra', 'Installs Gemfile and main.rb'
|
12
|
+
method_option :rackup, :type => :boolean, :desc => 'Create a config.ru file', :default => false
|
12
13
|
def sinatra
|
13
14
|
copy_file 'Gemfile-bare', 'Gemfile'
|
15
|
+
copy_file 'config.ru' if options[:rackup]
|
14
16
|
copy_file 'main.rb'
|
15
17
|
say 'Simple startup:'
|
16
18
|
say ' bundle install'
|
17
19
|
say ' ruby ./main.rb'
|
18
20
|
end
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
desc 'heroku', 'Install base files for running Sinatra on Heroku'
|
23
|
+
def heroku
|
24
|
+
copy_file 'Gemfile-heroku', 'Gemfile'
|
25
|
+
copy_file 'config.ru'
|
26
|
+
copy_file 'Procfile'
|
27
|
+
copy_file 'main.rb'
|
28
|
+
say 'Simple development startup:'
|
29
|
+
say ' bundle install'
|
30
|
+
say ' foreman start'
|
31
|
+
end
|
26
32
|
end
|
27
33
|
|
28
34
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
web: bundle exec thin -p $PORT -e $RACK_ENV start
|
data/spec/spec_helper.rb
CHANGED
@@ -4,8 +4,42 @@
|
|
4
4
|
# loaded once.
|
5
5
|
#
|
6
6
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
|
+
|
8
|
+
require 'simplecov'
|
9
|
+
SimpleCov.start do
|
10
|
+
add_group 'Libraries', 'lib'
|
11
|
+
add_group 'Specs', 'spec'
|
12
|
+
end
|
13
|
+
|
14
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..' 'lib'))
|
15
|
+
require 'sinatra_bootstrap'
|
16
|
+
|
17
|
+
$0 = 'take_the_stage'
|
18
|
+
ARGV.clear
|
19
|
+
|
20
|
+
|
7
21
|
RSpec.configure do |config|
|
8
22
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
9
23
|
config.run_all_when_everything_filtered = true
|
10
24
|
config.filter_run :focus
|
25
|
+
|
26
|
+
def capture(stream)
|
27
|
+
begin
|
28
|
+
stream = stream.to_s
|
29
|
+
eval "$#{stream} = StringIO.new"
|
30
|
+
yield
|
31
|
+
result = eval("$#{stream}").string
|
32
|
+
ensure
|
33
|
+
eval "$#{stream} = #{stream.upcase}"
|
34
|
+
end
|
35
|
+
|
36
|
+
result
|
37
|
+
end
|
38
|
+
|
39
|
+
def in_tmpdir
|
40
|
+
Dir.mktmpdir do |tmp|
|
41
|
+
Dir.chdir(tmp) { yield }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
11
45
|
end
|
data/spec/stage_spec.rb
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SinatraBootstrap::Stage do
|
4
|
+
|
5
|
+
describe "#sinatra" do
|
6
|
+
let(:sinatra) { described_class.start ['sinatra'] }
|
7
|
+
|
8
|
+
it "outputs the instructions for starting sinatra" do
|
9
|
+
Thor::Actions::CreateFile.stub(:new).and_return stub :invoke! => true
|
10
|
+
stdout = capture(:stdout) { sinatra }
|
11
|
+
stdout.should =~ /Simple startup:/
|
12
|
+
stdout.should =~ / bundle install/
|
13
|
+
stdout.should =~ / ruby \.\/main.rb/
|
14
|
+
end
|
15
|
+
|
16
|
+
it "creates a Gemfile" do
|
17
|
+
in_tmpdir do
|
18
|
+
capture(:stdout) { sinatra }
|
19
|
+
File.exists?('Gemfile').should be_true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
it "Gemfile has only sinatra in it" do
|
24
|
+
in_tmpdir do
|
25
|
+
capture(:stdout) { sinatra }
|
26
|
+
gemfile = File.read 'Gemfile'
|
27
|
+
gemfile.should =~ /^gem 'sinatra', '~> 1.3'$/
|
28
|
+
gemfile.lines.map do |line|
|
29
|
+
line if line =~ /^gem/
|
30
|
+
end.compact.length.should == 1
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it "copies main.rb" do
|
35
|
+
in_tmpdir do
|
36
|
+
capture(:stdout) { sinatra }
|
37
|
+
File.exists?('main.rb').should be_true
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it "does not copy config.ru" do
|
42
|
+
in_tmpdir do
|
43
|
+
capture(:stdout) { sinatra }
|
44
|
+
File.exists?('config.ru').should be_false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "with --rackup" do
|
49
|
+
let(:sinatra) { described_class.start ['sinatra', '--rackup'] }
|
50
|
+
|
51
|
+
it "copies config.ru" do
|
52
|
+
in_tmpdir do
|
53
|
+
capture(:stdout) { sinatra }
|
54
|
+
File.exists?('config.ru').should be_true
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "with --no-rackup" do
|
60
|
+
let(:sinatra) { described_class.start ['sinatra', '--no-rackup'] }
|
61
|
+
|
62
|
+
it "does not copy config.ru" do
|
63
|
+
in_tmpdir do
|
64
|
+
capture(:stdout) { sinatra }
|
65
|
+
File.exists?('config.ru').should be_false
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "#heroku" do
|
72
|
+
let(:sinatra) { described_class.start ['heroku'] }
|
73
|
+
|
74
|
+
it "outputs the instructions for starting foreman" do
|
75
|
+
Thor::Actions::CreateFile.stub(:new).and_return stub :invoke! => true
|
76
|
+
stdout = capture(:stdout) { sinatra }
|
77
|
+
stdout.should =~ /Simple development startup:/
|
78
|
+
stdout.should =~ / bundle install/
|
79
|
+
stdout.should =~ / foreman start/
|
80
|
+
end
|
81
|
+
|
82
|
+
it "creates a Gemfile" do
|
83
|
+
in_tmpdir do
|
84
|
+
capture(:stdout) { sinatra }
|
85
|
+
File.exists?('Gemfile').should be_true
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
it "Gemfile has sinatra, thin, heroku, and foreman in it" do
|
90
|
+
in_tmpdir do
|
91
|
+
capture(:stdout) { sinatra }
|
92
|
+
gemfile = File.read 'Gemfile'
|
93
|
+
gemfile.should =~ /^gem 'sinatra', '~> 1.3'$/
|
94
|
+
gemfile.should =~ /^gem 'thin'$/
|
95
|
+
gemfile.should =~ /^ gem 'heroku'$/
|
96
|
+
gemfile.should =~ /^ gem 'foreman'$/
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
it "copies main.rb" do
|
101
|
+
in_tmpdir do
|
102
|
+
capture(:stdout) { sinatra }
|
103
|
+
File.exists?('main.rb').should be_true
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
it "copies config.ru" do
|
108
|
+
in_tmpdir do
|
109
|
+
capture(:stdout) { sinatra }
|
110
|
+
File.exists?('config.ru').should be_true
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
it "copies Procfile" do
|
115
|
+
in_tmpdir do
|
116
|
+
capture(:stdout) { sinatra }
|
117
|
+
File.exists?('Procfile').should be_true
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra_bootstrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
16
|
-
requirement: &
|
16
|
+
requirement: &70305607699660 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0.14'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70305607699660
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70305607698320 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0.9'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70305607698320
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &70305607697240 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,21 @@ dependencies:
|
|
43
43
|
version: '2.9'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70305607697240
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: simplecov
|
49
|
+
requirement: &70305607696720 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.6'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70305607696720
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: bundler
|
49
|
-
requirement: &
|
60
|
+
requirement: &70305607696160 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ~>
|
@@ -54,7 +65,7 @@ dependencies:
|
|
54
65
|
version: '1.0'
|
55
66
|
type: :development
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *70305607696160
|
58
69
|
description: Quick Sinatra app setup
|
59
70
|
email: ryan@coshx.com
|
60
71
|
executables:
|
@@ -65,8 +76,13 @@ files:
|
|
65
76
|
- lib/sinatra_bootstrap.rb
|
66
77
|
- lib/sinatra_bootstrap/stage.rb
|
67
78
|
- lib/sinatra_bootstrap/templates/Gemfile-bare
|
79
|
+
- lib/sinatra_bootstrap/templates/Gemfile-heroku
|
80
|
+
- lib/sinatra_bootstrap/templates/Procfile
|
81
|
+
- lib/sinatra_bootstrap/templates/config.ru
|
68
82
|
- lib/sinatra_bootstrap/templates/main.rb
|
83
|
+
- README.md
|
69
84
|
- spec/spec_helper.rb
|
85
|
+
- spec/stage_spec.rb
|
70
86
|
- bin/take_the_stage
|
71
87
|
homepage: http://github.com/rahearn/sinatra_bootstrap
|
72
88
|
licenses:
|
@@ -95,3 +111,4 @@ specification_version: 3
|
|
95
111
|
summary: sinatra_bootstrap
|
96
112
|
test_files:
|
97
113
|
- spec/spec_helper.rb
|
114
|
+
- spec/stage_spec.rb
|