sinatra-gen 0.4.0 → 0.4.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/History.txt +5 -0
- data/app_generators/sinatra_app/sinatra_app_generator.rb +43 -31
- data/app_generators/sinatra_app/templates/lib/app.rb.erb +2 -2
- data/app_generators/sinatra_app/templates/test/test_app_bacon.rb.erb +3 -4
- data/app_generators/sinatra_app/templates/test/test_app_rspec.rb.erb +3 -3
- data/app_generators/sinatra_app/templates/test/test_app_shoulda.rb.erb +3 -3
- data/app_generators/sinatra_app/templates/test/test_app_spec.rb.erb +6 -6
- data/app_generators/sinatra_app/templates/test/test_app_unit.rb.erb +2 -2
- data/app_generators/sinatra_app/templates/test/test_helper.rb.erb +10 -9
- data/app_generators/sinatra_app/templates/views/erb_layout.erb +0 -3
- data/lib/sinatra-gen.rb +1 -1
- data/test/test_sinatra_app_generator.rb +13 -1
- metadata +53 -26
data/History.txt
CHANGED
@@ -18,16 +18,17 @@ class SinatraAppGenerator < RubiGen::Base
|
|
18
18
|
|
19
19
|
default_options :author => nil
|
20
20
|
|
21
|
-
attr_accessor :app_name,
|
22
|
-
:vendor,
|
23
|
-
:tiny,
|
24
|
-
:git,
|
25
|
-
:git_init,
|
26
|
-
:heroku,
|
27
|
-
:test_framework,
|
28
|
-
:
|
29
|
-
:
|
30
|
-
:
|
21
|
+
attr_accessor :app_name,
|
22
|
+
:vendor,
|
23
|
+
:tiny,
|
24
|
+
:git,
|
25
|
+
:git_init,
|
26
|
+
:heroku,
|
27
|
+
:test_framework,
|
28
|
+
:integration_framework,
|
29
|
+
:view_framework,
|
30
|
+
:install_scripts,
|
31
|
+
:cap,
|
31
32
|
:actions,
|
32
33
|
:middleware,
|
33
34
|
:bin_name
|
@@ -45,26 +46,34 @@ class SinatraAppGenerator < RubiGen::Base
|
|
45
46
|
record do |m|
|
46
47
|
# Ensure appropriate folder(s) exists
|
47
48
|
m.directory ''
|
48
|
-
|
49
|
+
|
49
50
|
if git_init
|
50
51
|
m.run("#{git} init")
|
51
|
-
end
|
52
|
+
end
|
52
53
|
|
53
54
|
m.template 'config.ru.erb', 'config.ru'
|
54
55
|
m.template 'Rakefile.erb' , 'Rakefile'
|
55
|
-
|
56
|
+
|
56
57
|
test_dir = (tests_are_specs? ? 'spec' : 'test')
|
57
|
-
|
58
|
+
|
58
59
|
unless tiny
|
59
60
|
BASEDIRS.each { |path| m.directory path }
|
60
61
|
m.directory test_dir
|
61
62
|
m.file 'config.yml', 'config.yml'
|
62
63
|
m.template 'lib/app.rb.erb', "lib/#{app_name}.rb"
|
63
64
|
m.template 'test/test_helper.rb.erb', "#{test_dir}/#{test_dir}_helper.rb"
|
64
|
-
m.template "test/test_app_#{test_framework}.rb.erb",
|
65
|
+
m.template "test/test_app_#{test_framework}.rb.erb",
|
65
66
|
"#{test_dir}/#{(tests_are_specs? ? "#{app_name}_spec" : "test_#{app_name}")}.rb"
|
66
67
|
m.template "views/#{view_framework}_index.erb", "views/index.#{view_framework}"
|
67
68
|
m.template "views/#{view_framework}_layout.erb", "views/layout.#{view_framework}" unless view_framework == 'builder'
|
69
|
+
|
70
|
+
case options[:integration_framework]
|
71
|
+
when 'cucumber'
|
72
|
+
m.directory 'features'
|
73
|
+
m.directory 'features/support'
|
74
|
+
m.template 'features/support/env.rb.erb', 'features/support/env.rb'
|
75
|
+
m.directory 'features/step_definitions'
|
76
|
+
end
|
68
77
|
else
|
69
78
|
m.template "lib/app.rb.erb", "#{app_name}.rb"
|
70
79
|
end
|
@@ -78,7 +87,7 @@ class SinatraAppGenerator < RubiGen::Base
|
|
78
87
|
m.directory 'vendor'
|
79
88
|
if git_init || File.exists?(File.join(@destination_root, '.git'))
|
80
89
|
command = "#{git} submodule add #{SINATRA_GIT_URL} vendor/sinatra"
|
81
|
-
else
|
90
|
+
else
|
82
91
|
command = "#{git} clone #{SINATRA_GIT_URL} vendor/sinatra"
|
83
92
|
end
|
84
93
|
m.run(command)
|
@@ -93,11 +102,12 @@ class SinatraAppGenerator < RubiGen::Base
|
|
93
102
|
if install_scripts
|
94
103
|
m.dependency "install_rubigen_scripts", [destination_root, 'sinatra-gen'], :shebang => options[:shebang], :collision => :force
|
95
104
|
end
|
96
|
-
|
105
|
+
|
97
106
|
if heroku
|
107
|
+
m.template 'dot_gems', '.gems'
|
98
108
|
m.run("#{heroku} create #{app_name}")
|
99
109
|
end
|
100
|
-
|
110
|
+
|
101
111
|
end
|
102
112
|
end
|
103
113
|
|
@@ -123,6 +133,7 @@ class SinatraAppGenerator < RubiGen::Base
|
|
123
133
|
opts.on("--scripts", "Install the rubigen scripts (script/generate, script/destroy)") {|o| options[:scripts] = o }
|
124
134
|
opts.on("--git /path/to/git", "Specify a different path for 'git'") {|o| options[:git] = o }
|
125
135
|
opts.on("--test=test_framework", String, "Specify your testing framework (bacon (default)/rspec/spec/shoulda/test)") {|o| options[:test_framework] = o }
|
136
|
+
opts.on("--integration=integration_framework", String, "Specify your integration framework (cucumber)") {|o| options[:integration_framework] = o }
|
126
137
|
opts.on("--views=view_framework", "Specify your view framework (haml (default)/erb/builder)") {|o| options[:view_framework] = o }
|
127
138
|
opts.on("--middleware=rack-middleware", Array, "Specify Rack Middleware to be required and included (comma delimited)") {|o| options[:middleware] = o }
|
128
139
|
opts.on("--vegas=[bin_name]", "--bin=[bin_name]", "Create an executable bin using Vegas. Pass an optional bin_name") {|o| options[:bin] = true; options[:bin_name] = o }
|
@@ -132,21 +143,22 @@ class SinatraAppGenerator < RubiGen::Base
|
|
132
143
|
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
133
144
|
# Templates can access these value via the attr_reader-generated methods, but not the
|
134
145
|
# raw instance variable value.
|
135
|
-
self.vendor
|
136
|
-
self.tiny
|
137
|
-
self.cap
|
138
|
-
self.git
|
139
|
-
self.heroku
|
140
|
-
self.git_init
|
141
|
-
self.test_framework
|
142
|
-
self.
|
143
|
-
self.
|
144
|
-
self.
|
145
|
-
self.
|
146
|
+
self.vendor = options[:vendor]
|
147
|
+
self.tiny = options[:tiny]
|
148
|
+
self.cap = options[:cap]
|
149
|
+
self.git = options[:git] || `which git`.strip
|
150
|
+
self.heroku = options[:heroku] ? `which heroku`.strip : false
|
151
|
+
self.git_init = options[:init] || !!heroku || false
|
152
|
+
self.test_framework = options[:test_framework] || 'bacon'
|
153
|
+
self.integration_framework = options[:integration_framework]
|
154
|
+
self.view_framework = options[:view_framework] || 'haml'
|
155
|
+
self.install_scripts = options[:scripts] || false
|
156
|
+
self.middleware = options[:middleware] ? options[:middleware].reject {|m| m.blank? } : []
|
157
|
+
self.bin_name = options[:bin_name] || app_name
|
146
158
|
end
|
147
159
|
|
148
160
|
def klass_name
|
149
|
-
app_name.classify
|
161
|
+
app_name.tr('.','_').classify
|
150
162
|
end
|
151
163
|
|
152
164
|
def app_klass
|
@@ -156,7 +168,7 @@ class SinatraAppGenerator < RubiGen::Base
|
|
156
168
|
def parse_actions(*action_args)
|
157
169
|
@actions = action_args.flatten.collect { |a| a.split(':', 2) }
|
158
170
|
end
|
159
|
-
|
171
|
+
|
160
172
|
def tests_are_specs?
|
161
173
|
['rspec','spec','bacon'].include?(test_framework)
|
162
174
|
end
|
@@ -3,18 +3,17 @@ require 'spec_helper'
|
|
3
3
|
describe '<%= klass_name %>' do
|
4
4
|
|
5
5
|
<%- unless actions.empty? -%>
|
6
|
-
<% actions.each do |meth, path| %>
|
6
|
+
<% actions.each do |meth, path| %>
|
7
7
|
it 'should <%= meth %> <%= path %>' do
|
8
8
|
<%= meth %> '<%= path %>'
|
9
9
|
last_response.should.be.ok
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
<%- end -%>
|
13
|
-
<%- else -%>
|
13
|
+
<%- else -%>
|
14
14
|
it 'should load the index' do
|
15
15
|
get '/'
|
16
16
|
last_response.should.be.ok
|
17
17
|
end
|
18
18
|
<%- end -%>
|
19
19
|
end
|
20
|
-
|
@@ -3,14 +3,14 @@ require 'spec_helper'
|
|
3
3
|
describe '<%= klass_name %>' do
|
4
4
|
|
5
5
|
<%- unless actions.empty? -%>
|
6
|
-
<% actions.each do |meth, path| %>
|
6
|
+
<% actions.each do |meth, path| %>
|
7
7
|
it 'should <%= meth %> <%= path %>' do
|
8
8
|
<%= meth %> '<%= path %>'
|
9
9
|
last_response.should be_ok
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
<%- end -%>
|
13
|
-
<%- else -%>
|
13
|
+
<%- else -%>
|
14
14
|
it 'should load the index' do
|
15
15
|
get '/'
|
16
16
|
last_response.should be_ok
|
@@ -9,19 +9,19 @@ class <%= klass_name -%>Test < Test::Unit::TestCase
|
|
9
9
|
setup do
|
10
10
|
<%= meth %> '<%= path %>'
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
should "respond" do
|
14
14
|
assert body
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
<%- end -%>
|
19
19
|
<%- else -%>
|
20
20
|
context "getting the index" do
|
21
21
|
setup do
|
22
22
|
get '/'
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
should "respond" do
|
26
26
|
assert body
|
27
27
|
end
|
@@ -1,20 +1,20 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe '<%= klass_name %>' do
|
4
|
-
|
4
|
+
|
5
5
|
<%- unless actions.empty? -%>
|
6
|
-
<% actions.each do |meth, path| %>
|
6
|
+
<% actions.each do |meth, path| %>
|
7
7
|
it 'should <%= meth %> <%= path %>' do
|
8
8
|
<%= meth %> '<%= path %>'
|
9
9
|
last_response.should.be.ok
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
<%- end -%>
|
13
|
-
<%- else -%>
|
13
|
+
<%- else -%>
|
14
14
|
it 'should load the index' do
|
15
15
|
get '/'
|
16
|
-
last_response.should.be.ok
|
16
|
+
last_response.should.be.ok
|
17
17
|
end
|
18
|
+
|
18
19
|
<%- end -%>
|
19
|
-
|
20
20
|
end
|
@@ -3,13 +3,13 @@ require 'test_helper'
|
|
3
3
|
class <%= klass_name -%>Test < Test::Unit::TestCase
|
4
4
|
|
5
5
|
<%- unless actions.empty? -%>
|
6
|
-
<% actions.each do |meth, path| %>
|
6
|
+
<% actions.each do |meth, path| %>
|
7
7
|
def test_<%= meth %>_<%= path.to_s.gsub(/[^a-z0-9\_]/, '') %>_should
|
8
8
|
<%= meth %> '<%= path %>'
|
9
9
|
end
|
10
10
|
|
11
11
|
<%- end -%>
|
12
|
-
<%- else -%>
|
12
|
+
<%- else -%>
|
13
13
|
def test_my_default
|
14
14
|
get '/'
|
15
15
|
end
|
@@ -4,6 +4,10 @@ $:.unshift File.join(File.dirname(__FILE__), '..', 'vendor', 'sinatra', 'lib')
|
|
4
4
|
require 'sinatra'
|
5
5
|
require 'rack/test'
|
6
6
|
|
7
|
+
ENV['RACK_ENV'] = 'test'
|
8
|
+
|
9
|
+
require File.join(File.dirname(__FILE__), '..', <%- unless tiny -%>'lib', <%- end -%>'<%= app_name %>.rb')
|
10
|
+
|
7
11
|
<%= app_klass -%>.set(
|
8
12
|
:environment => :test,
|
9
13
|
:run => false,
|
@@ -11,23 +15,20 @@ require 'rack/test'
|
|
11
15
|
:logging => false
|
12
16
|
)
|
13
17
|
|
14
|
-
require File.join(File.dirname(__FILE__), '..', <%- unless tiny -%>'lib', <%- end -%>'<%= app_name %>.rb')
|
15
|
-
|
16
18
|
module TestHelper
|
17
|
-
|
19
|
+
|
18
20
|
def app
|
19
|
-
|
20
|
-
Sinatra::Application.new
|
21
|
+
<%= app_klass %>.new
|
21
22
|
end
|
22
|
-
|
23
|
+
|
23
24
|
def body
|
24
25
|
last_response.body
|
25
26
|
end
|
26
|
-
|
27
|
+
|
27
28
|
def status
|
28
29
|
last_response.status
|
29
30
|
end
|
30
|
-
|
31
|
+
|
31
32
|
include Rack::Test::Methods
|
32
33
|
|
33
34
|
end
|
@@ -55,4 +56,4 @@ Test::Unit::TestCase.send(:include, TestHelper)
|
|
55
56
|
require 'test/unit'
|
56
57
|
|
57
58
|
Test::Unit::TestCase.send(:include, TestHelper)
|
58
|
-
<%- end -%>
|
59
|
+
<%- end -%>
|
@@ -1,12 +1,9 @@
|
|
1
1
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
2
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
-
|
4
3
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
4
|
<head>
|
6
5
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
7
|
-
|
8
6
|
<title><%= app_name %></title>
|
9
|
-
|
10
7
|
</head>
|
11
8
|
|
12
9
|
<body>
|
data/lib/sinatra-gen.rb
CHANGED
@@ -35,7 +35,7 @@ class TestSinatraAppGenerator < Test::Unit::TestCase
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def test_generate_app_with_init_option
|
38
|
-
run_generator('sinatra_app', [APP_ROOT, '
|
38
|
+
run_generator('sinatra_app', [APP_ROOT, '--init'], sources)
|
39
39
|
assert_basic_paths_and_files('spec')
|
40
40
|
assert_directory_exists '.git'
|
41
41
|
end
|
@@ -43,6 +43,9 @@ class TestSinatraAppGenerator < Test::Unit::TestCase
|
|
43
43
|
def test_generate_app_with_heroku_option
|
44
44
|
run_generator('sinatra_app', [APP_ROOT, '--heroku'], sources)
|
45
45
|
assert_basic_paths_and_files('spec')
|
46
|
+
assert_generated_file '.gems' do |contents|
|
47
|
+
assert_match(/sinatra/, contents)
|
48
|
+
end
|
46
49
|
assert_directory_exists '.git'
|
47
50
|
assert_generated_file '.git/config' do |config_contents|
|
48
51
|
assert_match(/\[remote "heroku"\]/, config_contents)
|
@@ -115,6 +118,15 @@ class TestSinatraAppGenerator < Test::Unit::TestCase
|
|
115
118
|
end
|
116
119
|
end
|
117
120
|
|
121
|
+
def test_generate_app_with_integration_cucumber_option
|
122
|
+
run_generator('sinatra_app', [APP_ROOT, '--integration=cucumber'], sources)
|
123
|
+
assert_basic_paths_and_files('features')
|
124
|
+
assert_basic_paths_and_files('features/support')
|
125
|
+
assert_generated_file 'features/support/env.rb' do |env_contents|
|
126
|
+
assert_match(/World/, env_contents)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
118
130
|
def test_generate_app_with_views_erb_option
|
119
131
|
run_generator('sinatra_app', [APP_ROOT, '--views=erb'], sources)
|
120
132
|
assert_basic_paths_and_files('spec')
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra-gen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 4
|
8
|
+
- 1
|
9
|
+
version: 0.4.1
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Aaron Quint
|
@@ -9,59 +14,79 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2010-05-15 00:00:00 -04:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: rubigen
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - "="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 5
|
30
|
+
- 2
|
23
31
|
version: 1.5.2
|
24
|
-
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
25
34
|
- !ruby/object:Gem::Dependency
|
26
35
|
name: sinatra
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
38
|
requirements:
|
31
39
|
- - ">="
|
32
40
|
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
- 9
|
44
|
+
- 4
|
33
45
|
version: 0.9.4
|
34
|
-
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
35
48
|
- !ruby/object:Gem::Dependency
|
36
49
|
name: rack-test
|
37
|
-
|
38
|
-
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
52
|
requirements:
|
41
53
|
- - ">="
|
42
54
|
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
- 4
|
58
|
+
- 1
|
43
59
|
version: 0.4.1
|
44
|
-
|
60
|
+
type: :runtime
|
61
|
+
version_requirements: *id003
|
45
62
|
- !ruby/object:Gem::Dependency
|
46
63
|
name: newgem
|
47
|
-
|
48
|
-
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
50
66
|
requirements:
|
51
67
|
- - ">="
|
52
68
|
- !ruby/object:Gem::Version
|
69
|
+
segments:
|
70
|
+
- 1
|
71
|
+
- 5
|
72
|
+
- 2
|
53
73
|
version: 1.5.2
|
54
|
-
|
74
|
+
type: :development
|
75
|
+
version_requirements: *id004
|
55
76
|
- !ruby/object:Gem::Dependency
|
56
77
|
name: hoe
|
57
|
-
|
58
|
-
|
59
|
-
version_requirements: !ruby/object:Gem::Requirement
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
60
80
|
requirements:
|
61
81
|
- - ">="
|
62
82
|
- !ruby/object:Gem::Version
|
63
|
-
|
64
|
-
|
83
|
+
segments:
|
84
|
+
- 2
|
85
|
+
- 6
|
86
|
+
- 0
|
87
|
+
version: 2.6.0
|
88
|
+
type: :development
|
89
|
+
version_requirements: *id005
|
65
90
|
description: sinatra-gen generates a common file structure and basic app files for a web app utilizing the sinatra framework. For more information on sinatra, check out http://sinatrarb.com
|
66
91
|
email:
|
67
92
|
- aaron@quirkey.com
|
@@ -116,18 +141,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
116
141
|
requirements:
|
117
142
|
- - ">="
|
118
143
|
- !ruby/object:Gem::Version
|
144
|
+
segments:
|
145
|
+
- 0
|
119
146
|
version: "0"
|
120
|
-
version:
|
121
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
148
|
requirements:
|
123
149
|
- - ">="
|
124
150
|
- !ruby/object:Gem::Version
|
151
|
+
segments:
|
152
|
+
- 0
|
125
153
|
version: "0"
|
126
|
-
version:
|
127
154
|
requirements: []
|
128
155
|
|
129
156
|
rubyforge_project: quirkey
|
130
|
-
rubygems_version: 1.3.
|
157
|
+
rubygems_version: 1.3.6
|
131
158
|
signing_key:
|
132
159
|
specification_version: 3
|
133
160
|
summary: sinatra-gen generates a common file structure and basic app files for a web app utilizing the sinatra framework
|