sinatra_app_gen 0.2.0
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/.gitignore +9 -0
- data/Gemfile +6 -0
- data/README.md +23 -0
- data/Rakefile +47 -0
- data/bin/sinatra_app +21 -0
- data/features/generator.feature +104 -0
- data/features/support/env.rb +12 -0
- data/lib/cucumber/rvm.rb +47 -0
- data/lib/generators/sinatra_app/sinatra_app_generator.rb +117 -0
- data/lib/generators/sinatra_app/templates/Gemfile.erb +46 -0
- data/lib/generators/sinatra_app/templates/Rakefile.erb +8 -0
- data/lib/generators/sinatra_app/templates/app.rb.erb +95 -0
- data/lib/generators/sinatra_app/templates/config/test.yml.erb +8 -0
- data/lib/generators/sinatra_app/templates/config.ru.erb +11 -0
- data/lib/generators/sinatra_app/templates/features/step_definitions/web_steps.rb.erb +156 -0
- data/lib/generators/sinatra_app/templates/features/support/blueprints.rb.erb +0 -0
- data/lib/generators/sinatra_app/templates/features/support/env.rb.erb +21 -0
- data/lib/generators/sinatra_app/templates/features/support/paths.rb.erb +16 -0
- data/lib/generators/sinatra_app/templates/spec/models/demo_spec.rb.erb +7 -0
- data/lib/generators/sinatra_app/templates/spec/spec_helper.rb.erb +44 -0
- data/lib/generators/sinatra_app/templates/spec/support/blueprints.rb.erb +0 -0
- data/rvm.yml +11 -0
- data/sinatra_app_gen.gemspec +79 -0
- metadata +164 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
Sinatra App Gen
|
2
|
+
---------------
|
3
|
+
|
4
|
+
Simple rubigen-based sinatra application generator
|
5
|
+
|
6
|
+
How-to use ?
|
7
|
+
------------
|
8
|
+
|
9
|
+
gem install sinatra_app_gen
|
10
|
+
|
11
|
+
# By default it generate a Sequel backed app
|
12
|
+
sinatra_app my_app
|
13
|
+
|
14
|
+
# Change the application base module name
|
15
|
+
# given module name is camelized
|
16
|
+
sinatra_app my_app --namespace=sinatra_sequel
|
17
|
+
or
|
18
|
+
sinatra_app my_app --namespace=SinatraSequel
|
19
|
+
|
20
|
+
# Use MongoMapper instead of Sequel
|
21
|
+
sinatra_app my_app --orm=MongoMapper
|
22
|
+
|
23
|
+
... WIP
|
data/Rakefile
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "rake"
|
3
|
+
|
4
|
+
begin
|
5
|
+
require "jeweler"
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.version = "0.2.0"
|
8
|
+
gem.name = "sinatra_app_gen"
|
9
|
+
gem.summary = "Creates a new Sinatra / Sequel or MongoMapper / RSpec / Cucumber / Bundler app."
|
10
|
+
gem.description = "Our default app template"
|
11
|
+
gem.email = "team@openhood.com"
|
12
|
+
gem.homepage = "http://github.com/openhood/sinatra_app_gen"
|
13
|
+
gem.authors = ["Jonathan Tron", "Joseph Halter"]
|
14
|
+
gem.add_dependency "rubigen"
|
15
|
+
gem.add_development_dependency "jeweler"
|
16
|
+
gem.add_development_dependency "cucumber", ">= 0.6.2"
|
17
|
+
gem.add_development_dependency "rspec", ">= 2.0.0a"
|
18
|
+
gem.add_development_dependency "aruba", ">= 0.1.6"
|
19
|
+
gem.add_development_dependency "bundler", ">= 0.9.9"
|
20
|
+
end
|
21
|
+
Jeweler::GemcutterTasks.new
|
22
|
+
rescue LoadError
|
23
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
24
|
+
end
|
25
|
+
|
26
|
+
begin
|
27
|
+
require "cucumber/rake/task"
|
28
|
+
Cucumber::Rake::Task.new
|
29
|
+
task :cucumber => :check_dependencies
|
30
|
+
|
31
|
+
require "lib/cucumber/rvm"
|
32
|
+
namespace :rvm do
|
33
|
+
desc "Install all gemsets"
|
34
|
+
task :install_gems do
|
35
|
+
Cucumber::Rvm.each do |rvm|
|
36
|
+
rvm.install_gems
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
rescue LoadError
|
41
|
+
raise "ERROR: #{$!}"
|
42
|
+
task :cucumber do
|
43
|
+
abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
task :default => :cucumber
|
data/bin/sinatra_app
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "rubygems"
|
4
|
+
require "rubigen"
|
5
|
+
require "digest/sha1"
|
6
|
+
|
7
|
+
if %w(-v --version).include? ARGV.first
|
8
|
+
require File.dirname(__FILE__) + "/../lib/newgem"
|
9
|
+
puts "#{File.basename($0)} #{Newgem::VERSION}"
|
10
|
+
exit(0)
|
11
|
+
end
|
12
|
+
|
13
|
+
require "rubigen/scripts/generate"
|
14
|
+
|
15
|
+
require "pp"
|
16
|
+
RubiGen::Base.use_application_sources! :rubygems
|
17
|
+
RubiGen::Base.prepend_sources(*[
|
18
|
+
RubiGen::PathSource.new(:app, File.join(File.dirname(__FILE__), "..", "lib/generators"))
|
19
|
+
])
|
20
|
+
|
21
|
+
RubiGen::Scripts::Generate.new.run(ARGV, :generator => "sinatra_app", :backtrace => false)
|
@@ -0,0 +1,104 @@
|
|
1
|
+
@announce-cmd
|
2
|
+
Feature: Generator
|
3
|
+
In order to have a usable Sinatra app
|
4
|
+
Sinatra App Gen should generate a fully functionnal application on ruby 1.8.7, 1.9.1 and 1.9.2-head
|
5
|
+
|
6
|
+
Scenario Outline: without argument
|
7
|
+
Given I am using rvm "<ruby_version>"
|
8
|
+
And I am using rvm gemset "sinatra_app_gen"
|
9
|
+
When I successfully run "../../bin/sinatra_app"
|
10
|
+
Then it should pass with:
|
11
|
+
"""
|
12
|
+
Creates a new Sinatra / Sequel or MongoMapper / RSpec / Cucumber app.
|
13
|
+
|
14
|
+
USAGE: sinatra_app directory_name [options]
|
15
|
+
|
16
|
+
sinatra_app options:
|
17
|
+
--namespace my_namespace Use a different module name (default is camelized directory_name).
|
18
|
+
--orm ORM Specify which ORM to use (Default: Sequel; Possible: Sequel, MongoMapper)
|
19
|
+
--[no-]async Specify if you want to have async built-in via sinatra-async (Default: true)
|
20
|
+
--[no-]rspec Specify if you want to have RSpec built-in (Default: true)
|
21
|
+
--[no-]cucumber Specify if you want to have Cucumber built-in (Default: true)
|
22
|
+
-v, --version Show the sinatra_app version number and quit.
|
23
|
+
"""
|
24
|
+
|
25
|
+
Examples:
|
26
|
+
| ruby_version |
|
27
|
+
| ree-1.8.7 |
|
28
|
+
| 1.9.1 |
|
29
|
+
| 1.9.2-head |
|
30
|
+
|
31
|
+
Scenario Outline: with arguments
|
32
|
+
Given I am using rvm "<ruby_version>"
|
33
|
+
And I am using rvm gemset "sinatra_app_gen"
|
34
|
+
When I successfully run "../../bin/sinatra_app <args>"
|
35
|
+
And I cd to "demo_app"
|
36
|
+
Then the following files should exist:
|
37
|
+
| app.rb |
|
38
|
+
| config.ru |
|
39
|
+
| Rakefile |
|
40
|
+
| Gemfile |
|
41
|
+
| features/step_definitions/web_steps.rb |
|
42
|
+
| features/support/env.rb |
|
43
|
+
| features/support/paths.rb |
|
44
|
+
| spec/spec_helper.rb |
|
45
|
+
| spec/support/blueprints.rb |
|
46
|
+
And the file "app.rb" should contain "<app_name>::App"
|
47
|
+
And the file "config.ru" should contain "<app_name>::App"
|
48
|
+
And the file "Gemfile" should contain "<gemfile_1>"
|
49
|
+
And the file "Gemfile" should contain "<gemfile_2>"
|
50
|
+
|
51
|
+
Examples:
|
52
|
+
| ruby_version | args | app_name | gemfile_1 | gemfile_2 |
|
53
|
+
| ree-1.8.7 | demo_app | DemoApp | pg | sequel |
|
54
|
+
| ree-1.8.7 | demo_app --namespace=my_app | MyApp | pg | sequel |
|
55
|
+
| ree-1.8.7 | demo_app --orm=Sequel | DemoApp | pg | sequel |
|
56
|
+
| ree-1.8.7 | demo_app --orm=MongoMapper | DemoApp | mongo_ext | mongo_mapper |
|
57
|
+
| 1.9.1 | demo_app | DemoApp | pg | sequel |
|
58
|
+
| 1.9.1 | demo_app --namespace=my_app | MyApp | pg | sequel |
|
59
|
+
| 1.9.1 | demo_app --orm=Sequel | DemoApp | pg | sequel |
|
60
|
+
| 1.9.1 | demo_app --orm=MongoMapper | DemoApp | mongo_ext | mongo_mapper |
|
61
|
+
| 1.9.2-head | demo_app | DemoApp | pg | sequel |
|
62
|
+
| 1.9.2-head | demo_app --namespace=my_app | MyApp | pg | sequel |
|
63
|
+
| 1.9.2-head | demo_app --orm=Sequel | DemoApp | pg | sequel |
|
64
|
+
| 1.9.2-head | demo_app --orm=MongoMapper | DemoApp | mongo_ext | mongo_mapper |
|
65
|
+
|
66
|
+
Scenario Outline: generated app can run cucumber
|
67
|
+
Given I am using rvm "<ruby_version>"
|
68
|
+
And I am using rvm gemset "sinatra_app_gen"
|
69
|
+
When I successfully run "../../bin/sinatra_app demo_app"
|
70
|
+
And I cd to "demo_app"
|
71
|
+
When I successfully run "bundle install"
|
72
|
+
When I successfully run "bundle exec cucumber"
|
73
|
+
Then it should pass with:
|
74
|
+
"""
|
75
|
+
0 scenarios
|
76
|
+
0 steps
|
77
|
+
0m0.000s
|
78
|
+
"""
|
79
|
+
|
80
|
+
Examples:
|
81
|
+
| ruby_version |
|
82
|
+
| ree-1.8.7 |
|
83
|
+
# Bundler bug with gems requiring rake prevent the test to pass (http://github.com/carlhuda/bundler/issues#issue/15)
|
84
|
+
# | 1.9.1 |
|
85
|
+
# | 1.9.2-head |
|
86
|
+
|
87
|
+
Scenario Outline: generated app can run rspec
|
88
|
+
Given I am using rvm "<ruby_version>"
|
89
|
+
And I am using rvm gemset "sinatra_app_gen"
|
90
|
+
When I successfully run "../../bin/sinatra_app demo_app"
|
91
|
+
And I cd to "demo_app"
|
92
|
+
When I successfully run "bundle install"
|
93
|
+
When I run "bundle exec rake spec"
|
94
|
+
Then it should fail with:
|
95
|
+
"""
|
96
|
+
1 example, 1 failures
|
97
|
+
"""
|
98
|
+
|
99
|
+
Examples:
|
100
|
+
| ruby_version |
|
101
|
+
| ree-1.8.7 |
|
102
|
+
# Bundler bug with gems requiring rake prevent the test to pass (http://github.com/carlhuda/bundler/issues#issue/15)
|
103
|
+
# | 1.9.1 |
|
104
|
+
# | 1.9.2-head |
|
data/lib/cucumber/rvm.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# Initial idea and code from work on cucumber-rails by Aslak Hellesøy
|
2
|
+
# http://github.com/aslakhellesoy/cucumber-rails
|
3
|
+
module Cucumber
|
4
|
+
class Rvm #:nodoc:
|
5
|
+
RVMS = YAML.load_file(File.dirname(__FILE__) + '/../../rvm.yml')
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def each(&proc)
|
9
|
+
RVMS["rubies"].each do |ruby_name, ruby_version|
|
10
|
+
proc.call(new(ruby_name, RVMS["dev_gems"], nil))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(ruby_name, gems_with_version, world)
|
16
|
+
@ruby_version, @gems_with_version, @world = RVMS['rubies'][ruby_name], gems_with_version, world
|
17
|
+
raise "NO RUBY VERSION FOUND FOR #{ruby_name}. Check your rvms.yml" if @ruby_version.nil?
|
18
|
+
end
|
19
|
+
|
20
|
+
begin
|
21
|
+
require 'aruba/api'
|
22
|
+
include Aruba::Api
|
23
|
+
rescue LoadError => ignore
|
24
|
+
STDOUT.puts "The aruba gem ins not installed. That's ok."
|
25
|
+
def run(cmd)
|
26
|
+
system(cmd)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def rvm(cmd)
|
31
|
+
rvm_cmd = "rvm #{@ruby_version}%sinatra_app_gen #{cmd}"
|
32
|
+
if @world
|
33
|
+
@world.announce(rvm_cmd)
|
34
|
+
else
|
35
|
+
puts(rvm_cmd)
|
36
|
+
end
|
37
|
+
run(rvm_cmd)
|
38
|
+
raise "STDOUT:\n#{@last_stdout}\nSTDERR:\n#{@last_stderr}" if @last_exit_status && @last_exit_status != 0
|
39
|
+
end
|
40
|
+
|
41
|
+
def install_gems
|
42
|
+
@gems_with_version.each do |gem_with_version|
|
43
|
+
rvm("-S gem install #{gem_with_version}")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
class SinatraAppGenerator < RubiGen::Base
|
2
|
+
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
3
|
+
Config::CONFIG['ruby_install_name'])
|
4
|
+
|
5
|
+
default_options :namespace => nil,
|
6
|
+
:orm => "Sequel",
|
7
|
+
:async => true,
|
8
|
+
:rspec => true,
|
9
|
+
:cucumber => true
|
10
|
+
attr_reader :name
|
11
|
+
|
12
|
+
def initialize(runtime_args, runtime_options = {})
|
13
|
+
super
|
14
|
+
usage if args.empty?
|
15
|
+
@destination_root = File.expand_path(args.shift)
|
16
|
+
@name = (options[:namespace] || base_name).camelize
|
17
|
+
end
|
18
|
+
|
19
|
+
def template(m, filename)
|
20
|
+
m.template "#{filename}.erb", filename
|
21
|
+
end
|
22
|
+
|
23
|
+
def manifest
|
24
|
+
record do |m|
|
25
|
+
# Ensure appropriate folder(s) exists
|
26
|
+
m.directory ''
|
27
|
+
BASEDIRS.each { |path| m.directory path }
|
28
|
+
|
29
|
+
# root
|
30
|
+
template m, "app.rb"
|
31
|
+
template m, "config.ru"
|
32
|
+
template m, "Gemfile"
|
33
|
+
template m, "Rakefile"
|
34
|
+
|
35
|
+
# config
|
36
|
+
m.directory "config"
|
37
|
+
template m, "config/test.yml"
|
38
|
+
|
39
|
+
if use_cucumber?
|
40
|
+
# cucumber
|
41
|
+
m.directory "features/support"
|
42
|
+
m.directory "features/step_definitions"
|
43
|
+
template m, "features/support/env.rb"
|
44
|
+
template m, "features/support/paths.rb"
|
45
|
+
template m, "features/support/blueprints.rb" unless use_rspec?
|
46
|
+
template m, "features/step_definitions/web_steps.rb"
|
47
|
+
end
|
48
|
+
|
49
|
+
if use_rspec?
|
50
|
+
# rspec
|
51
|
+
m.directory "spec"
|
52
|
+
template m, "spec/spec_helper.rb"
|
53
|
+
m.directory "spec/support"
|
54
|
+
template m, "spec/support/blueprints.rb"
|
55
|
+
m.directory "spec/models"
|
56
|
+
template m, "spec/models/demo_spec.rb"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
protected
|
62
|
+
def use_sequel?
|
63
|
+
options[:orm].eql?("Sequel")
|
64
|
+
end
|
65
|
+
|
66
|
+
def use_mongomapper?
|
67
|
+
options[:orm].eql?("MongoMapper")
|
68
|
+
end
|
69
|
+
|
70
|
+
def use_async?
|
71
|
+
options[:async]
|
72
|
+
end
|
73
|
+
|
74
|
+
def use_rspec?
|
75
|
+
options[:rspec]
|
76
|
+
end
|
77
|
+
|
78
|
+
def use_cucumber?
|
79
|
+
options[:cucumber]
|
80
|
+
end
|
81
|
+
|
82
|
+
def banner
|
83
|
+
<<-EOS
|
84
|
+
Creates a new Sinatra / Sequel or MongoMapper / RSpec / Cucumber app.
|
85
|
+
|
86
|
+
USAGE: #{spec.name} directory_name [options]
|
87
|
+
EOS
|
88
|
+
end
|
89
|
+
|
90
|
+
def add_options!(opts)
|
91
|
+
opts.separator ''
|
92
|
+
opts.separator "#{File.basename($0)} options:"
|
93
|
+
opts.on("--namespace my_namespace", "Use a different module name (default is camelized directory_name).") do |o|
|
94
|
+
options[:namespace] = o
|
95
|
+
end
|
96
|
+
opts.on("--orm ORM", ["Sequel", "MongoMapper"], "Specify which ORM to use (Default: Sequel; Possible: Sequel, MongoMapper)") do |o|
|
97
|
+
options[:orm] = o
|
98
|
+
end
|
99
|
+
opts.on("--[no-]async", "Specify if you want to have async built-in via sinatra-async (Default: true)") do |o|
|
100
|
+
options[:async] = o
|
101
|
+
end
|
102
|
+
opts.on("--[no-]rspec", "Specify if you want to have RSpec built-in (Default: true)") do |o|
|
103
|
+
options[:rspec] = o
|
104
|
+
end
|
105
|
+
opts.on("--[no-]cucumber", "Specify if you want to have Cucumber built-in (Default: true)") do |o|
|
106
|
+
options[:cucumber] = o
|
107
|
+
end
|
108
|
+
opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
109
|
+
end
|
110
|
+
|
111
|
+
# Installation skeleton. Intermediate directories are automatically
|
112
|
+
# created so don't sweat their absence here.
|
113
|
+
BASEDIRS = %w(
|
114
|
+
lib
|
115
|
+
spec
|
116
|
+
)
|
117
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
source :gemcutter
|
2
|
+
source "http://gems.github.com"
|
3
|
+
|
4
|
+
gem "thin"
|
5
|
+
gem "sinatra", "~> 1.0a"
|
6
|
+
<% if use_async? -%>
|
7
|
+
gem "raggi-async_sinatra"
|
8
|
+
<% end -%>
|
9
|
+
gem "haml", ">= 2.2.2"
|
10
|
+
gem "yajl-ruby"
|
11
|
+
<% if use_sequel? -%>
|
12
|
+
gem "pg", "~> 0.9.0"
|
13
|
+
gem "sequel"
|
14
|
+
<% elsif use_mongomapper? -%>
|
15
|
+
gem "mongo_ext", "0.18.3", :require => nil
|
16
|
+
gem "mongo_mapper"
|
17
|
+
<% end -%>
|
18
|
+
gem "JosephHalter-string_cleaner"
|
19
|
+
gem "nakajima-rack-flash"
|
20
|
+
gem "sinatra_rake_tasks", ">= 0.2.0"
|
21
|
+
|
22
|
+
group :development do
|
23
|
+
gem "shotgun"
|
24
|
+
end
|
25
|
+
<% if use_rspec? || use_cucumber? %>
|
26
|
+
group :test, :cucumber do
|
27
|
+
gem "timecop"
|
28
|
+
gem "rspec", ">= 2.0.0.a"
|
29
|
+
<% if use_mongomapper? -%>
|
30
|
+
gem "machinist_mongo", :require => "machinist/mongo_mapper"
|
31
|
+
<% end -%>
|
32
|
+
end
|
33
|
+
<% end -%>
|
34
|
+
<% if use_rspec? %>
|
35
|
+
group :test do
|
36
|
+
<% if use_sequel? -%>
|
37
|
+
gem "rspec_sequel_matchers", ">= 0.2.0"
|
38
|
+
<% end -%>
|
39
|
+
end
|
40
|
+
<% end -%>
|
41
|
+
<% if use_cucumber? %>
|
42
|
+
group :cucumber do
|
43
|
+
gem "capybara", ">= 0.3.5"
|
44
|
+
gem "cucumber", ">= 0.6.2"
|
45
|
+
end
|
46
|
+
<% end -%>
|
@@ -0,0 +1,95 @@
|
|
1
|
+
begin
|
2
|
+
# Try to require the preresolved locked set of gems.
|
3
|
+
require ::File.expand_path('../.bundle/environment', __FILE__)
|
4
|
+
rescue LoadError
|
5
|
+
# Fall back on doing an unlocked resolve at runtime.
|
6
|
+
require "rubygems"
|
7
|
+
require "bundler"
|
8
|
+
Bundler.setup
|
9
|
+
end
|
10
|
+
|
11
|
+
bundle_env = [:default]
|
12
|
+
bundle_env << ENV["RACK_ENV"].to_sym if ENV["RACK_ENV"]
|
13
|
+
Bundler.require *bundle_env
|
14
|
+
|
15
|
+
require "yaml"
|
16
|
+
require "logger"
|
17
|
+
require "yajl"
|
18
|
+
require "logger"
|
19
|
+
require "haml"
|
20
|
+
<% if use_sequel? -%>
|
21
|
+
require "sequel"
|
22
|
+
require "sequel/extensions/blank"
|
23
|
+
require "sequel/extensions/inflector"
|
24
|
+
<% end -%>
|
25
|
+
require "sinatra/base"
|
26
|
+
<% if use_async? -%>
|
27
|
+
require "sinatra/async"
|
28
|
+
<% end %>
|
29
|
+
require "rack-flash"
|
30
|
+
require "string_cleaner"
|
31
|
+
|
32
|
+
module <%= name %>
|
33
|
+
class App < Sinatra::Base
|
34
|
+
|
35
|
+
# load environment config
|
36
|
+
def self.config
|
37
|
+
@@config ||= begin
|
38
|
+
filename = ::File.join(::File.dirname(__FILE__), "config", "#{environment}.yml")
|
39
|
+
::File.exists?(filename) ? YAML.load_file(filename) : raise("No config/#{environment}.yml found")
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
configure do
|
44
|
+
set :root, ::File.dirname(__FILE__)
|
45
|
+
set :static, true
|
46
|
+
set :public, ::File.join(root, "public")
|
47
|
+
set :views, ::File.join(root, "views")
|
48
|
+
enable :logging
|
49
|
+
enable :sessions
|
50
|
+
|
51
|
+
# setup logger and connect to db
|
52
|
+
FileUtils.mkdir_p ::File.join(root, "log")
|
53
|
+
logger = Logger.new(::File.join(root, "log", "#{environment}.log"))
|
54
|
+
logger.level = production? ? Logger::ERROR : Logger::DEBUG
|
55
|
+
<% if use_sequel? -%>
|
56
|
+
Sequel.connect(config[:db][:uri], :loggers => [logger])
|
57
|
+
<% elsif use_mongomapper? -%>
|
58
|
+
MongoMapper.connection = Mongo::Connection.new(config[:db][:host] || "127.0.0.1", config[:db][:port] || 27017, {:logger => logger})
|
59
|
+
MongoMapper.database = config[:db][:name] || "<%= name -%>-#{environment}"
|
60
|
+
<% end -%>
|
61
|
+
|
62
|
+
# load models
|
63
|
+
Dir.glob(::File.join(root, "models", "*.rb")).each do |m|
|
64
|
+
require m
|
65
|
+
end
|
66
|
+
|
67
|
+
# load helpers
|
68
|
+
helpers do
|
69
|
+
alias_method :h, :escape_html
|
70
|
+
def config
|
71
|
+
<%= name %>::App.config
|
72
|
+
end
|
73
|
+
Dir.glob(::File.join(root, "helpers", "*.rb")).each do |h|
|
74
|
+
require h
|
75
|
+
module_name = "#{::File.basename(h, ".rb").camelize}Helper"
|
76
|
+
include <%= name %>.const_get(module_name) if <%= name %>.const_defined?(module_name)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
use Rack::Session::Cookie
|
81
|
+
use Rack::Flash
|
82
|
+
end
|
83
|
+
|
84
|
+
# load fake controllers
|
85
|
+
Dir.glob(::File.join(root, "controllers", "*.rb")).each do |c|
|
86
|
+
require c
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# define default port if launched directly via "ruby app.rb"
|
93
|
+
if $0 == __FILE__
|
94
|
+
<%= name %>::App.run! :host => "localhost", :port => 4567
|
95
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
|
2
|
+
|
3
|
+
Given /^I am on (.+)$/ do |page_name|
|
4
|
+
visit path_to(page_name)
|
5
|
+
end
|
6
|
+
|
7
|
+
When /^I visit "([^\"]+)"$/ do |page_name|
|
8
|
+
visit path_to(page_name)
|
9
|
+
end
|
10
|
+
|
11
|
+
When /^I go to (.+)$/ do |page_name|
|
12
|
+
visit path_to(page_name)
|
13
|
+
end
|
14
|
+
|
15
|
+
When /^I press "([^\"]*)"$/ do |button|
|
16
|
+
click_button(button)
|
17
|
+
end
|
18
|
+
|
19
|
+
When /^I follow "([^\"]*)"$/ do |link|
|
20
|
+
click_link(link)
|
21
|
+
end
|
22
|
+
|
23
|
+
When /^I submit form "([^\"]*)"$/ do |form|
|
24
|
+
submit_form(form)
|
25
|
+
end
|
26
|
+
|
27
|
+
When /^I fill in "([^\"]*)" with "([^\"]*)"$/ do |field, value|
|
28
|
+
fill_in(field, :with => value)
|
29
|
+
end
|
30
|
+
|
31
|
+
When /^I select "([^\"]*)" from "([^\"]*)"$/ do |value, field|
|
32
|
+
select(value, :from => field)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Use this step in conjunction with Rail's datetime_select helper. For example:
|
36
|
+
# When I select "December 25, 2008 10:00" as the date and time
|
37
|
+
When /^I select "([^\"]*)" as the date and time$/ do |time|
|
38
|
+
select_datetime(time)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Use this step when using multiple datetime_select helpers on a page or
|
42
|
+
# you want to specify which datetime to select. Given the following view:
|
43
|
+
# <%%= f.label :preferred %><br />
|
44
|
+
# <%%= f.datetime_select :preferred %>
|
45
|
+
# <%%= f.label :alternative %><br />
|
46
|
+
# <%%= f.datetime_select :alternative %>
|
47
|
+
# The following steps would fill out the form:
|
48
|
+
# When I select "November 23, 2004 11:20" as the "Preferred" data and time
|
49
|
+
# And I select "November 25, 2004 10:30" as the "Alternative" data and time
|
50
|
+
When /^I select "([^\"]*)" as the "([^\"]*)" date and time$/ do |datetime, datetime_label|
|
51
|
+
select_datetime(datetime, :from => datetime_label)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Use this step in conjuction with Rail's time_select helper. For example:
|
55
|
+
# When I select "2:20PM" as the time
|
56
|
+
# Note: Rail's default time helper provides 24-hour time-- not 12 hour time. Webrat
|
57
|
+
# will convert the 2:20PM to 14:20 and then select it.
|
58
|
+
When /^I select "([^\"]*)" as the time$/ do |time|
|
59
|
+
select_time(time)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Use this step when using multiple time_select helpers on a page or you want to
|
63
|
+
# specify the name of the time on the form. For example:
|
64
|
+
# When I select "7:30AM" as the "Gym" time
|
65
|
+
When /^I select "([^\"]*)" as the "([^\"]*)" time$/ do |time, time_label|
|
66
|
+
select_time(time, :from => time_label)
|
67
|
+
end
|
68
|
+
|
69
|
+
# Use this step in conjuction with Rail's date_select helper. For example:
|
70
|
+
# When I select "February 20, 1981" as the date
|
71
|
+
When /^I select "([^\"]*)" as the date$/ do |date|
|
72
|
+
select_date(date)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Use this step when using multiple date_select helpers on one page or
|
76
|
+
# you want to specify the name of the date on the form. For example:
|
77
|
+
# When I select "April 26, 1982" as the "Date of Birth" date
|
78
|
+
When /^I select "([^\"]*)" as the "([^\"]*)" date$/ do |date, date_label|
|
79
|
+
select_date(date, :from => date_label)
|
80
|
+
end
|
81
|
+
|
82
|
+
When /^I check "([^\"]*)"$/ do |field|
|
83
|
+
check(field)
|
84
|
+
end
|
85
|
+
|
86
|
+
When /^I uncheck "([^\"]*)"$/ do |field|
|
87
|
+
uncheck(field)
|
88
|
+
end
|
89
|
+
|
90
|
+
When /^I choose "([^\"]*)"$/ do |field|
|
91
|
+
choose(field)
|
92
|
+
end
|
93
|
+
|
94
|
+
When /^I attach the file at "([^\"]*)" to "([^\"]*)"$/ do |filename, field|
|
95
|
+
path = File.join(Rails.root, "features", "fixtures", filename)
|
96
|
+
attach_file(field, path)
|
97
|
+
end
|
98
|
+
|
99
|
+
Then /^I should see "([^\"]*)"$/ do |text|
|
100
|
+
response.body.should =~ /#{Regexp.escape(text)}/m
|
101
|
+
end
|
102
|
+
|
103
|
+
Then /^I should not see "([^\"]*)"$/ do |text|
|
104
|
+
response.body.should_not =~ /#{Regexp.escape(text)}/m
|
105
|
+
end
|
106
|
+
|
107
|
+
Then /^the "([^\"]*)" checkbox should be checked$/ do |label|
|
108
|
+
field_labeled(label).should be_checked
|
109
|
+
end
|
110
|
+
|
111
|
+
Then /^the "([^\"]*)" checkbox should not be checked$/ do |label|
|
112
|
+
field_labeled(label).should_not be_checked
|
113
|
+
end
|
114
|
+
|
115
|
+
Then /^the "([^\"]*)" item from "([^\"]*)" should be selected$/ do |item, label|
|
116
|
+
field_locate(label).should have_tag("option[selected]", item)
|
117
|
+
end
|
118
|
+
|
119
|
+
Then /^the "([^\"]*)" field should contain "([^\"]*)"$/ do |field, value|
|
120
|
+
field_labeled(field).value.should =~ /#{value}/
|
121
|
+
end
|
122
|
+
|
123
|
+
Then /^the "([^\"]*)" field should not contain "([^\"]*)"$/ do |field, value|
|
124
|
+
field_labeled(field).value.should_not =~ /#{value}/
|
125
|
+
end
|
126
|
+
|
127
|
+
Then /^I should see a link to (.+)$/ do |page|
|
128
|
+
response.should have_tag("a[href=?]", path_to(page))
|
129
|
+
end
|
130
|
+
|
131
|
+
Then /^I should see a form with (delete|post|put|get) method to (.+)$/ do |method, page|
|
132
|
+
if ["delete", "put", "post"].include?(method)
|
133
|
+
form_tag = "form[method=post][action=?]"
|
134
|
+
else
|
135
|
+
form_tag = "form[method=get][action=?]"
|
136
|
+
end
|
137
|
+
|
138
|
+
response.body.should have_tag(form_tag, path_to(page)) do
|
139
|
+
if ["delete", "put"].include?(method)
|
140
|
+
with_tag("input[type=hidden][name=_method][value=?]", method)
|
141
|
+
else
|
142
|
+
without_tag("input[type=hidden][name=_method][value=?]", "delete")
|
143
|
+
without_tag("input[type=hidden][name=_method][value=?]", "put")
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
Then /^I should see a select with :$/ do |select_table|
|
149
|
+
select_table.hashes.each do |hash|
|
150
|
+
response.should have_tag("option", hash["display"])
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
Then /^I should be on (.+)$/ do |page_name|
|
155
|
+
URI.parse(current_url).path.should == path_to(page_name)
|
156
|
+
end
|
File without changes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
ENV["RACK_ENV"] = "test"
|
2
|
+
$VERBOSE=nil # until MongoMapper guy stop undefining object_id in belongs_to_proxy.rb
|
3
|
+
require File.join(File.dirname(__FILE__), *%w[.. .. app.rb])
|
4
|
+
<% if use_rspec? %>
|
5
|
+
require File.join(File.dirname(__FILE__), *%w[.. .. spec support blueprints.rb])
|
6
|
+
<% end %>
|
7
|
+
require "rspec/expectations"
|
8
|
+
require "capybara/cucumber"
|
9
|
+
require "capybara/session"
|
10
|
+
|
11
|
+
Capybara.app = <%= name -%>::App
|
12
|
+
Capybara.class_eval do
|
13
|
+
include Rspec::Matchers
|
14
|
+
end
|
15
|
+
|
16
|
+
<% if use_sequel? -%>
|
17
|
+
<% elsif use_mongomapper? -%>
|
18
|
+
Before do |scenario|
|
19
|
+
::MongoMapper.database.collections.each{|c| c.remove}
|
20
|
+
end
|
21
|
+
<% end -%>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module NavigationHelpers
|
2
|
+
def path_to(page_name)
|
3
|
+
case page_name
|
4
|
+
when /the home page/i
|
5
|
+
"/"
|
6
|
+
else
|
7
|
+
if page_name.include? "/"
|
8
|
+
page_name # page_name is already a path
|
9
|
+
else
|
10
|
+
raise "Can't find mapping from \"#{page_name}\" to a path."
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
World(NavigationHelpers)
|
@@ -0,0 +1,44 @@
|
|
1
|
+
ENV["RACK_ENV"] = "test"
|
2
|
+
|
3
|
+
# Load the Sinatra app
|
4
|
+
require File.join(File.dirname(__FILE__), "..", "app")
|
5
|
+
|
6
|
+
# Load the testing libraries
|
7
|
+
require "rspec"
|
8
|
+
|
9
|
+
<% if use_sequel? -%>
|
10
|
+
require "sequel/extensions/migration"
|
11
|
+
require "rspec_sequel_matchers"
|
12
|
+
<% end -%>
|
13
|
+
|
14
|
+
# Set the Sinatra environment
|
15
|
+
<%= name %>::App.configure do |c|
|
16
|
+
c.set :environment, :test
|
17
|
+
c.disable :run
|
18
|
+
c.enable :raise_errors
|
19
|
+
c.disable :logging
|
20
|
+
end
|
21
|
+
|
22
|
+
Rspec.configure do |c|
|
23
|
+
c.mock_framework = :rspec
|
24
|
+
c.color_enabled = true
|
25
|
+
<% if use_sequel? -%>
|
26
|
+
c.include(RspecSequel::Matchers)
|
27
|
+
c.before(:suite) do
|
28
|
+
Sequel::Model.db.tables.each do |table_name|
|
29
|
+
Sequel::Model.db.drop_table table_name
|
30
|
+
end
|
31
|
+
dirname = File.join(TestRspec::App.root, "..", "migrations")
|
32
|
+
Sequel::Migrator.apply(Sequel::Model.db, dirname) if File.directory?(dirname)
|
33
|
+
end
|
34
|
+
c.after(:each) do
|
35
|
+
Sequel::Model.db.tables.each do |table_name|
|
36
|
+
Sequel::Model.db["TRUNCATE #{table_name}"]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
<% elsif use_mongomapper? -%>
|
40
|
+
config.before(:each) do
|
41
|
+
::MongoMapper.database.collections.each{|c| c.remove}
|
42
|
+
end
|
43
|
+
<% end -%>
|
44
|
+
end
|
File without changes
|
data/rvm.yml
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{sinatra_app_gen}
|
8
|
+
s.version = "0.2.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Jonathan Tron", "Joseph Halter"]
|
12
|
+
s.date = %q{2010-03-03}
|
13
|
+
s.default_executable = %q{sinatra_app}
|
14
|
+
s.description = %q{Our default app template}
|
15
|
+
s.email = %q{team@openhood.com}
|
16
|
+
s.executables = ["sinatra_app"]
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"README.md"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
".gitignore",
|
22
|
+
"Gemfile",
|
23
|
+
"README.md",
|
24
|
+
"Rakefile",
|
25
|
+
"bin/sinatra_app",
|
26
|
+
"features/generator.feature",
|
27
|
+
"features/support/env.rb",
|
28
|
+
"lib/cucumber/rvm.rb",
|
29
|
+
"lib/generators/sinatra_app/sinatra_app_generator.rb",
|
30
|
+
"lib/generators/sinatra_app/templates/Gemfile.erb",
|
31
|
+
"lib/generators/sinatra_app/templates/Rakefile.erb",
|
32
|
+
"lib/generators/sinatra_app/templates/app.rb.erb",
|
33
|
+
"lib/generators/sinatra_app/templates/config.ru.erb",
|
34
|
+
"lib/generators/sinatra_app/templates/config/test.yml.erb",
|
35
|
+
"lib/generators/sinatra_app/templates/features/step_definitions/web_steps.rb.erb",
|
36
|
+
"lib/generators/sinatra_app/templates/features/support/blueprints.rb.erb",
|
37
|
+
"lib/generators/sinatra_app/templates/features/support/env.rb.erb",
|
38
|
+
"lib/generators/sinatra_app/templates/features/support/paths.rb.erb",
|
39
|
+
"lib/generators/sinatra_app/templates/spec/models/demo_spec.rb.erb",
|
40
|
+
"lib/generators/sinatra_app/templates/spec/spec_helper.rb.erb",
|
41
|
+
"lib/generators/sinatra_app/templates/spec/support/blueprints.rb.erb",
|
42
|
+
"rvm.yml",
|
43
|
+
"sinatra_app_gen.gemspec"
|
44
|
+
]
|
45
|
+
s.homepage = %q{http://github.com/openhood/sinatra_app_gen}
|
46
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
47
|
+
s.require_paths = ["lib"]
|
48
|
+
s.rubygems_version = %q{1.3.6}
|
49
|
+
s.summary = %q{Creates a new Sinatra / Sequel or MongoMapper / RSpec / Cucumber / Bundler app.}
|
50
|
+
|
51
|
+
if s.respond_to? :specification_version then
|
52
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
53
|
+
s.specification_version = 3
|
54
|
+
|
55
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
56
|
+
s.add_runtime_dependency(%q<rubigen>, [">= 0"])
|
57
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
58
|
+
s.add_development_dependency(%q<cucumber>, [">= 0.6.2"])
|
59
|
+
s.add_development_dependency(%q<rspec>, [">= 2.0.0a"])
|
60
|
+
s.add_development_dependency(%q<aruba>, [">= 0.1.6"])
|
61
|
+
s.add_development_dependency(%q<bundler>, [">= 0.9.9"])
|
62
|
+
else
|
63
|
+
s.add_dependency(%q<rubigen>, [">= 0"])
|
64
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
65
|
+
s.add_dependency(%q<cucumber>, [">= 0.6.2"])
|
66
|
+
s.add_dependency(%q<rspec>, [">= 2.0.0a"])
|
67
|
+
s.add_dependency(%q<aruba>, [">= 0.1.6"])
|
68
|
+
s.add_dependency(%q<bundler>, [">= 0.9.9"])
|
69
|
+
end
|
70
|
+
else
|
71
|
+
s.add_dependency(%q<rubigen>, [">= 0"])
|
72
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
73
|
+
s.add_dependency(%q<cucumber>, [">= 0.6.2"])
|
74
|
+
s.add_dependency(%q<rspec>, [">= 2.0.0a"])
|
75
|
+
s.add_dependency(%q<aruba>, [">= 0.1.6"])
|
76
|
+
s.add_dependency(%q<bundler>, [">= 0.9.9"])
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
metadata
ADDED
@@ -0,0 +1,164 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sinatra_app_gen
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Jonathan Tron
|
13
|
+
- Joseph Halter
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-03-03 00:00:00 +01:00
|
19
|
+
default_executable: sinatra_app
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rubigen
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: jeweler
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 0
|
42
|
+
version: "0"
|
43
|
+
type: :development
|
44
|
+
version_requirements: *id002
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: cucumber
|
47
|
+
prerelease: false
|
48
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
segments:
|
53
|
+
- 0
|
54
|
+
- 6
|
55
|
+
- 2
|
56
|
+
version: 0.6.2
|
57
|
+
type: :development
|
58
|
+
version_requirements: *id003
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: rspec
|
61
|
+
prerelease: false
|
62
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
segments:
|
67
|
+
- 2
|
68
|
+
- 0
|
69
|
+
- 0a
|
70
|
+
version: 2.0.0a
|
71
|
+
type: :development
|
72
|
+
version_requirements: *id004
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: aruba
|
75
|
+
prerelease: false
|
76
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
segments:
|
81
|
+
- 0
|
82
|
+
- 1
|
83
|
+
- 6
|
84
|
+
version: 0.1.6
|
85
|
+
type: :development
|
86
|
+
version_requirements: *id005
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: bundler
|
89
|
+
prerelease: false
|
90
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
segments:
|
95
|
+
- 0
|
96
|
+
- 9
|
97
|
+
- 9
|
98
|
+
version: 0.9.9
|
99
|
+
type: :development
|
100
|
+
version_requirements: *id006
|
101
|
+
description: Our default app template
|
102
|
+
email: team@openhood.com
|
103
|
+
executables:
|
104
|
+
- sinatra_app
|
105
|
+
extensions: []
|
106
|
+
|
107
|
+
extra_rdoc_files:
|
108
|
+
- README.md
|
109
|
+
files:
|
110
|
+
- .gitignore
|
111
|
+
- Gemfile
|
112
|
+
- README.md
|
113
|
+
- Rakefile
|
114
|
+
- bin/sinatra_app
|
115
|
+
- features/generator.feature
|
116
|
+
- features/support/env.rb
|
117
|
+
- lib/cucumber/rvm.rb
|
118
|
+
- lib/generators/sinatra_app/sinatra_app_generator.rb
|
119
|
+
- lib/generators/sinatra_app/templates/Gemfile.erb
|
120
|
+
- lib/generators/sinatra_app/templates/Rakefile.erb
|
121
|
+
- lib/generators/sinatra_app/templates/app.rb.erb
|
122
|
+
- lib/generators/sinatra_app/templates/config.ru.erb
|
123
|
+
- lib/generators/sinatra_app/templates/config/test.yml.erb
|
124
|
+
- lib/generators/sinatra_app/templates/features/step_definitions/web_steps.rb.erb
|
125
|
+
- lib/generators/sinatra_app/templates/features/support/blueprints.rb.erb
|
126
|
+
- lib/generators/sinatra_app/templates/features/support/env.rb.erb
|
127
|
+
- lib/generators/sinatra_app/templates/features/support/paths.rb.erb
|
128
|
+
- lib/generators/sinatra_app/templates/spec/models/demo_spec.rb.erb
|
129
|
+
- lib/generators/sinatra_app/templates/spec/spec_helper.rb.erb
|
130
|
+
- lib/generators/sinatra_app/templates/spec/support/blueprints.rb.erb
|
131
|
+
- rvm.yml
|
132
|
+
- sinatra_app_gen.gemspec
|
133
|
+
has_rdoc: true
|
134
|
+
homepage: http://github.com/openhood/sinatra_app_gen
|
135
|
+
licenses: []
|
136
|
+
|
137
|
+
post_install_message:
|
138
|
+
rdoc_options:
|
139
|
+
- --charset=UTF-8
|
140
|
+
require_paths:
|
141
|
+
- lib
|
142
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
segments:
|
147
|
+
- 0
|
148
|
+
version: "0"
|
149
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
segments:
|
154
|
+
- 0
|
155
|
+
version: "0"
|
156
|
+
requirements: []
|
157
|
+
|
158
|
+
rubyforge_project:
|
159
|
+
rubygems_version: 1.3.6
|
160
|
+
signing_key:
|
161
|
+
specification_version: 3
|
162
|
+
summary: Creates a new Sinatra / Sequel or MongoMapper / RSpec / Cucumber / Bundler app.
|
163
|
+
test_files: []
|
164
|
+
|