shoestrap 0.4.1 → 1.0.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -18
  3. data/.rspec +1 -1
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +4 -11
  6. data/CHANGELOG.md +15 -1
  7. data/CONTRIBUTING +1 -0
  8. data/Gemfile +1 -1
  9. data/Guardfile +7 -0
  10. data/LICENSE +17 -4
  11. data/README.md +32 -14
  12. data/Rakefile +11 -10
  13. data/bin/shoestrap +2 -10
  14. data/features/features_helper.rb +91 -0
  15. data/features/shoestrap/commands/new_command_feature.rb +191 -0
  16. data/features/shoestrap/generators/bdd_generator_feature.rb +43 -0
  17. data/features/shoestrap/generators/bootstrap_generator_feature.rb +11 -0
  18. data/features/shoestrap/generators/coffee_files_generator_feature.rb +32 -0
  19. data/features/shoestrap/generators/foundation_generator_feature.rb +34 -0
  20. data/features/shoestrap/generators/kuhsaft_generator_feature.rb +38 -0
  21. data/features/shoestrap/generators/smacss_files_generator_feature.rb +45 -0
  22. data/lib/generators/shoestrap/bdd_generator.rb +34 -0
  23. data/lib/generators/shoestrap/bootstrap_generator.rb +6 -0
  24. data/lib/generators/shoestrap/coffee_files_generator.rb +19 -0
  25. data/lib/generators/shoestrap/database_generator.rb +9 -0
  26. data/lib/generators/shoestrap/foundation_generator.rb +24 -0
  27. data/lib/generators/shoestrap/gem_install_generator.rb +12 -0
  28. data/lib/generators/shoestrap/kuhsaft_generator.rb +34 -0
  29. data/lib/generators/shoestrap/mailcatcher_generator.rb +14 -0
  30. data/lib/generators/shoestrap/smacss_file_generator.rb +33 -0
  31. data/lib/shoestrap.rb +2 -6
  32. data/lib/shoestrap/application_generator.rb +96 -0
  33. data/lib/shoestrap/cli.rb +35 -0
  34. data/lib/shoestrap/railtie.rb +7 -0
  35. data/lib/shoestrap/shell.rb +9 -0
  36. data/lib/shoestrap/version.rb +3 -0
  37. data/shoestrap.gemspec +28 -21
  38. data/spec/shoestrap/application_generator_spec.rb +170 -0
  39. data/spec/shoestrap/cli_spec.rb +28 -0
  40. data/spec/spec_helper.rb +34 -0
  41. data/templates/application_generator/application.html.haml +51 -0
  42. data/templates/application_generator/application_helper.rb +6 -0
  43. data/templates/application_generator/application_template.rb +72 -0
  44. data/templates/application_generator/favicons/favicon-sc-129x129.png +0 -0
  45. data/templates/application_generator/favicons/favicon-sc-16x16.ico +0 -0
  46. data/templates/application_generator/favicons/favicon-sc-32x32.png +0 -0
  47. data/templates/bdd_generator/active_record_spec_helper.rb +19 -0
  48. data/templates/bdd_generator/dotrspec +2 -0
  49. data/templates/bdd_generator/fast_spec_helper.rb +6 -0
  50. data/templates/bdd_generator/spec_helper.rb +12 -0
  51. data/templates/coffee_generator/application.js.coffee +3 -0
  52. data/templates/foundation_generator/_ie8_grid.css +85 -0
  53. data/templates/foundation_generator/_settings.css.sass +171 -0
  54. data/templates/kuhsaft_generator/kuhsaft.rb +5 -0
  55. data/templates/smacss_generator/application.css.sass +18 -0
  56. metadata +165 -74
  57. data/.rvmrc +0 -34
  58. data/lib/generators/shoestrap/app_generator.rb +0 -35
  59. data/lib/generators/shoestrap/cms_generator.rb +0 -57
  60. data/lib/generators/shoestrap/deployment_generator.rb +0 -62
  61. data/lib/generators/shoestrap/templates/cms/migration.rb +0 -15
  62. data/lib/generators/shoestrap/templates/cms/model.rb +0 -10
  63. data/lib/generators/shoestrap/templates/cms/model.yml.erb +0 -9
  64. data/lib/generators/shoestrap/templates/cms/view.yml.erb +0 -10
  65. data/lib/generators/shoestrap/templates/deployment/airbrake.rb +0 -10
  66. data/lib/generators/shoestrap/templates/deployment/database.yml.erb +0 -30
  67. data/lib/generators/shoestrap/templates/deployment/deployment.rake.erb +0 -23
  68. data/lib/generators/shoestrap/templates/deployment/unicorn.rb +0 -38
  69. data/lib/shoestrap/app_builder.rb +0 -132
  70. data/lib/shoestrap/tasks/middleman.rb +0 -21
  71. data/lib/shoestrap/tasks/radiant.rb +0 -41
  72. data/lib/shoestrap/tasks/rails.rb +0 -81
  73. data/templates/Gemfile.erb +0 -43
  74. data/templates/Guardfile +0 -33
  75. data/templates/README.md.erb +0 -30
  76. data/templates/_main_navigation.html.haml.erb +0 -5
  77. data/templates/application.html.haml +0 -24
  78. data/templates/bootstrap_and_overrides.css.sass +0 -7
  79. data/templates/cms_navigation.rb +0 -9
  80. data/templates/development_mail_interceptor.rb +0 -7
  81. data/templates/haml/scaffold/_form.html.haml +0 -10
  82. data/templates/haml/scaffold/edit.html.haml +0 -8
  83. data/templates/haml/scaffold/index.html.haml +0 -29
  84. data/templates/haml/scaffold/new.html.haml +0 -5
  85. data/templates/haml/scaffold/show.html.haml +0 -11
  86. data/templates/index.html.haml +0 -27
  87. data/templates/kuhsaft.css.sass +0 -2
  88. data/templates/rails/scaffold_controller/controller.rb +0 -89
  89. data/templates/setup_mail.rb +0 -1
  90. data/templates/shoestrap.yml +0 -41
@@ -0,0 +1,35 @@
1
+ require "thor"
2
+
3
+ require_relative 'application_generator'
4
+
5
+ module Shoestrap
6
+ class CLI < Thor
7
+
8
+ method_option :css,
9
+ :type => :string,
10
+ :default => 'bootstrap',
11
+ :banner => 'Specify which CSS Framework is used by the Application Generator'
12
+
13
+ method_option :database,
14
+ :type => :string,
15
+ :default => 'postgresql',
16
+ :banner => 'Specify which database is used when creating new Rails app'
17
+
18
+ method_option :kuhsaft,
19
+ :type => :boolean,
20
+ :default => true,
21
+ :banner => 'Specify wether kuhsaft should be installed'
22
+
23
+ desc 'new <application_name>', 'Generate a new rails app with shoestrap'
24
+
25
+ def new(application_name)
26
+ application_generator.start(application_name, options)
27
+ end
28
+
29
+ private
30
+
31
+ def application_generator
32
+ @application_generator ||= ApplicationGenerator
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ module Shoestrap
2
+ class Railtie < ::Rails::Railtie
3
+ generators do
4
+ require '../generators/shoestrap/bootstrap_generator'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ module Shoestrap
2
+ module Shell
3
+ extend self
4
+
5
+ def self.exec(command)
6
+ system "#{command}"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Shoestrap
2
+ VERSION = "1.0.0.pre1"
3
+ end
data/shoestrap.gemspec CHANGED
@@ -1,26 +1,33 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'shoestrap/version'
3
5
 
4
- Gem::Specification.new do |s|
5
- s.name = "shoestrap"
6
- s.version = '0.4.1'
7
- s.platform = Gem::Platform::RUBY
8
- s.authors = ["Immanuel Häussermann", "Felipe Kaufmann", "Phil Schilter", "Noëlle Rosenberg"]
9
- s.email = "info@screenconcept.ch"
10
- s.homepage = "http://github.com/screenconcept/shoestrap"
11
- s.summary = %q{A tool that helps you bootstrap your rails projects}
12
- s.description = %q{shoestrap is a rails app bootstrapper}
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "shoestrap"
8
+ spec.version = Shoestrap::VERSION
9
+ spec.authors = ["Felipe Kaufmann"]
10
+ spec.email = ["felipekaufmann@gmail.com"]
11
+ spec.description = %q{SC Bootstrapper and Generators}
12
+ spec.summary = %q{Rails App Bootstrapper and Generator used at Screen Concept}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
13
15
 
14
- s.rubyforge_project = "shoestrap"
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
15
20
 
16
- s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
- s.require_paths = ["lib"]
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "pry"
24
+ spec.add_development_dependency "rspec", '2.14.0.rc1'
25
+ spec.add_development_dependency "guard"
26
+ spec.add_development_dependency "guard-rspec"
27
+ spec.add_development_dependency "ruby_gntp"
20
28
 
21
- s.add_development_dependency 'rspec'
22
- s.add_development_dependency 'pry'
23
- s.add_dependency 'rails'
24
- s.add_dependency 'airbrake'
25
- s.add_dependency 'blazing', '0.4.0.beta3'
29
+ spec.add_dependency 'rails', '4.0.0'
30
+ spec.add_dependency 'airbrake'
31
+ spec.add_dependency 'thor'
32
+ spec.add_dependency 'blazing', '0.4.0.beta3'
26
33
  end
@@ -0,0 +1,170 @@
1
+ require_relative '../../lib/shoestrap/application_generator'
2
+ require_relative '../spec_helper'
3
+
4
+ module Shoestrap
5
+ describe ApplicationGenerator do
6
+
7
+ let(:default_options) { { css: 'bootstrap', database: 'postgresql', kuhsaft: true } }
8
+
9
+ describe '#start' do
10
+ it 'says it is going to generate an app' do
11
+ ApplicationGenerator.stub(:shoestrap_generators).and_return(:true)
12
+ output = capture(:stdout, :stderr) do
13
+ ApplicationGenerator.start('test_app', default_options)
14
+ end
15
+ expect(output).to match(/\[shoestrap\] Generating new Rails Application test_app/)
16
+ end
17
+
18
+ it 'calls rails new with the shoestrap template' do
19
+ ApplicationGenerator.stub(:shoestrap_generators).and_return(:true)
20
+ capture(:stdout, :stderr) do
21
+ expect(Shell).to receive(:exec).with("rails new test_app -m #{File.join(
22
+ File.dirname(__FILE__).gsub('spec','lib'),
23
+ '../../templates/application_generator/application_template.rb')} -d postgresql")
24
+ ApplicationGenerator.start('test_app', default_options)
25
+ end
26
+ end
27
+
28
+ it 'runs the shoestrap generators' do
29
+ capture(:stdout, :stderr) do
30
+ expect(ApplicationGenerator).to receive(:shoestrap_generators)
31
+ ApplicationGenerator.start('test_app', default_options)
32
+ end
33
+ end
34
+ end
35
+
36
+ describe '#shoestrap_generators' do
37
+
38
+ before :each do
39
+ ApplicationGenerator.stub(:setup_bdd_environment)
40
+ ApplicationGenerator.stub(:setup_database)
41
+ ApplicationGenerator.stub(:setup_css_framework)
42
+ ApplicationGenerator.stub(:setup_smacss_files)
43
+ ApplicationGenerator.stub(:setup_coffee_files)
44
+ ApplicationGenerator.stub(:setup_kuhsaft)
45
+ ApplicationGenerator.stub(:install_gems)
46
+ ApplicationGenerator.stub(:apply_special_sauce)
47
+ ApplicationGenerator.stub(:setup_mailcatcher)
48
+ Dir.stub(:chdir).and_yield
49
+ end
50
+
51
+ it 'installs requried gems' do
52
+ expect(ApplicationGenerator).to receive(:install_gems)
53
+ ApplicationGenerator.shoestrap_generators('test_app', default_options)
54
+ end
55
+
56
+ it 'sets up the css framework' do
57
+ expect(ApplicationGenerator).to receive(:setup_css_framework)
58
+ ApplicationGenerator.shoestrap_generators('test_app', default_options)
59
+ end
60
+
61
+ it 'sets up the smacss files' do
62
+ expect(ApplicationGenerator).to receive(:setup_smacss_files)
63
+ ApplicationGenerator.shoestrap_generators('test_app', default_options)
64
+ end
65
+
66
+ it 'sets up the coffee files' do
67
+ expect(ApplicationGenerator).to receive(:setup_coffee_files)
68
+ ApplicationGenerator.shoestrap_generators('test_app', default_options)
69
+ end
70
+
71
+ it 'sets up the bdd environment' do
72
+ expect(ApplicationGenerator).to receive(:setup_bdd_environment)
73
+ ApplicationGenerator.shoestrap_generators('test_app', default_options)
74
+ end
75
+
76
+ it 'sets up kuhsaft' do
77
+ expect(ApplicationGenerator).to receive(:setup_kuhsaft)
78
+ ApplicationGenerator.shoestrap_generators('test_app', default_options)
79
+ end
80
+
81
+ it 'applies special sauce when the correct environment variable is set' do
82
+ original_value = ENV['GIVE_ME_SPECIAL_SAUCE']
83
+ ENV['GIVE_ME_SPECIAL_SAUCE'] = "true"
84
+ expect(ApplicationGenerator).to receive(:apply_special_sauce)
85
+ ApplicationGenerator.shoestrap_generators('test_app', default_options)
86
+ ENV['GIVE_ME_SPECIAL_SAUCE'] = original_value
87
+ end
88
+
89
+ it 'does not apply special sauce normally' do
90
+ original_value = ENV['GIVE_ME_SPECIAL_SAUCE']
91
+ ENV['GIVE_ME_SPECIAL_SAUCE'] = nil
92
+ expect(ApplicationGenerator).not_to receive(:apply_special_sauce)
93
+ ApplicationGenerator.shoestrap_generators('test_app', default_options)
94
+ ENV['GIVE_ME_SPECIAL_SAUCE'] = original_value
95
+ end
96
+ end
97
+
98
+ describe '#install_gems' do
99
+ it 'delegates to the Gem Install Generator' do
100
+ Shell.stub(:exec)
101
+ expect(GemInstallGenerator).to receive(:start)
102
+ ApplicationGenerator.install_gems([])
103
+ end
104
+
105
+ it 'delegates to the Gem Install Generator' do
106
+ GemInstallGenerator.stub(:start)
107
+ expect(Shell).to receive(:exec).with('bundle')
108
+ ApplicationGenerator.install_gems([])
109
+ end
110
+ end
111
+
112
+ describe '#setup_css_framework' do
113
+ it 'runs the generator it was called with' do
114
+ DummyGenerator = double
115
+ expect(DummyGenerator).to receive('start')
116
+ ApplicationGenerator.setup_css_framework('dummy')
117
+ end
118
+ end
119
+
120
+ describe '#setup_smacss_files' do
121
+ it 'runs the smacss files generator' do
122
+ expect(SmacssFilesGenerator).to receive('start')
123
+ ApplicationGenerator.setup_smacss_files
124
+ end
125
+ end
126
+
127
+ describe '#setup_coffee_files' do
128
+ it 'runs the coffee files generator' do
129
+ expect(CoffeeFilesGenerator).to receive('start')
130
+ ApplicationGenerator.setup_coffee_files
131
+ end
132
+ end
133
+
134
+ describe '#setup_bdd_environment' do
135
+ it 'runs the rspec generator' do
136
+ expect(BddGenerator).to receive('start')
137
+ ApplicationGenerator.setup_bdd_environment
138
+ end
139
+ end
140
+
141
+ describe '#setup_kuhsaft' do
142
+ it 'delegates to the Gem Install Generator' do
143
+ expect(KuhsaftGenerator).to receive(:start)
144
+ ApplicationGenerator.setup_kuhsaft
145
+ end
146
+ end
147
+
148
+ describe '#apply_special_sauce' do
149
+ it 'calls sauce apply on current directory' do
150
+ expect(Shell).to receive(:exec).with('sauce apply . --appname=foo')
151
+ ApplicationGenerator.apply_special_sauce('foo')
152
+ end
153
+ end
154
+
155
+ describe '#required_gems' do
156
+ it 'includes kuhsaft by default' do
157
+ pending "waiting for kuhsaft pre-release"
158
+ #expect(ApplicationGenerator.required_gems(default_options)).to include('kuhsaft')
159
+ end
160
+
161
+ it 'includes bootstrap-sass by default' do
162
+ expect(ApplicationGenerator.required_gems(default_options)).to include('bootstrap-sass')
163
+ end
164
+
165
+ it 'includes zurb-foundation when css option is set to foundation' do
166
+ expect(ApplicationGenerator.required_gems(default_options.merge( css: 'foundation' ))).to include('zurb-foundation')
167
+ end
168
+ end
169
+ end
170
+ end
@@ -0,0 +1,28 @@
1
+ require_relative '../../lib/shoestrap/cli'
2
+ require_relative '../spec_helper'
3
+
4
+ module Shoestrap
5
+ describe CLI do
6
+
7
+ subject { CLI }
8
+
9
+ describe '#new' do
10
+ it 'delegates to ApplicationGenerator' do
11
+ expect(ApplicationGenerator).to receive(:start)
12
+ subject.start(['new', 'foo'])
13
+ end
14
+
15
+ it 'does not delegate to ApplicationGenerator when no application name is provided' do
16
+ capture(:stdout, :stderr) do
17
+ expect(ApplicationGenerator).not_to receive(:start)
18
+ subject.start(['new'])
19
+ end
20
+ end
21
+
22
+ it 'passes bootstrap & postgresql & kuhsaft as default to the ApplicationGenerator' do
23
+ expect(ApplicationGenerator).to receive(:start).with('test_app', { 'css' => 'bootstrap', 'database' => 'postgresql', 'kuhsaft' => true })
24
+ subject.start(['new', 'test_app'])
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,34 @@
1
+ require 'rspec'
2
+
3
+ #
4
+ # Override Shoestrap::Shell.exec so no acutal shelling out
5
+ # happens when running tests.
6
+ #
7
+ # You can set expectations for system calls like so:
8
+ # Shell.expects(:exec).with('rails new test_app')
9
+ #
10
+ module Shoestrap
11
+ module Shell
12
+ extend self
13
+
14
+ def self.exec(command)
15
+ puts "#{command}"
16
+ end
17
+ end
18
+ end
19
+
20
+ #
21
+ # Use capture to silece and capture stderr/stdout
22
+ # Useful to hide logged messages etc. in test run
23
+ #
24
+ def capture(*streams)
25
+ streams.map! { |stream| stream.to_s }
26
+ begin
27
+ result = StringIO.new
28
+ streams.each { |stream| eval "$#{stream} = result" }
29
+ yield
30
+ ensure
31
+ streams.each { |stream| eval("$#{stream} = #{stream.upcase}") }
32
+ end
33
+ result.string
34
+ end
@@ -0,0 +1,51 @@
1
+ !!! 5
2
+ /[if lt IE 7] <html class='no-js lt-ie9 lt-ie8 lt-ie7'>
3
+ /[if IE 7] <html class='no-js lt-ie9 lt-ie8'>
4
+ /[if IE 8] <html class='no-js lt-ie9'>
5
+ /[if gt IE 8]><!
6
+ %html.no-js{ lang: I18n.locale }
7
+ / <![endif]
8
+ %head
9
+ %title= content_for?(:title) ? yield(:title) : 'Untitled'
10
+
11
+ %meta{ charset: 'utf-8' }
12
+ %meta{ 'http-equiv' => 'X-UA-Compatible', content: 'IE=edge,chrome=1' }
13
+ %meta{ name: 'keywords', content: '' }
14
+ %meta{ name: 'description', content: '' }
15
+ %meta{ name: 'viewport', content: 'width=device-width, initial-scale=1.0' }
16
+
17
+ -# Favicons
18
+ = favicon_link_tag('favicons/favicon-sc-129x129.png', rel: 'apple-touch-icon', type: 'image/png')
19
+ = favicon_link_tag('favicons/favicon-sc-32x32.png', rel: 'icon', type: 'image/png')
20
+ <!--[if IE]>
21
+ = favicon_link_tag('favicons/favicon-sc-16x16.ico')
22
+ <![endif]-->
23
+
24
+ -# Typekit
25
+ = javascript_include_tag '//use.typekit.net/XXXX.js', :media => 'all'
26
+ :javascript
27
+ try{Typekit.load();}catch(e){}
28
+
29
+ = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
30
+ = javascript_include_tag 'modernizr', 'data-turbolinks-track' => true
31
+ = csrf_meta_tags
32
+
33
+ %body{ class: body_class }
34
+ = render_navigation
35
+
36
+ = yield
37
+
38
+ -# Application JavaScripts
39
+ = javascript_include_tag 'application', 'data-turbolinks-track' => true
40
+
41
+ -# Selectivizr
42
+ <!--[if lte IE 8]>
43
+ = javascript_include_tag 'selectivizr'
44
+ <![endif]-->
45
+
46
+ -# Google Analytics
47
+ :javascript
48
+ var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview'],['_trackPageLoadTime']];
49
+ (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.async=1;
50
+ g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js';
51
+ s.parentNode.insertBefore(g,s)}(document,'script'));
@@ -0,0 +1,6 @@
1
+ module ApplicationHelper
2
+
3
+ def body_class
4
+ "controller-#{controller_name} action-#{action_name}"
5
+ end
6
+ end
@@ -0,0 +1,72 @@
1
+ #
2
+ # SC Rails Application Template
3
+ #
4
+ def source_paths
5
+ [File.expand_path(File.dirname(__FILE__))]
6
+ end
7
+
8
+ #
9
+ # Locale and Timezone
10
+ #
11
+ application "config.time_zone = 'Bern'"
12
+ application "config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]"
13
+ application "config.i18n.available_locales = [:de]"
14
+ application "config.i18n.default_locale = :de"
15
+
16
+ inject_into_file 'config/application.rb', :after => "Application < Rails::Application" do
17
+ <<-eos
18
+ # Customize generators
19
+ config.generators do |g|
20
+ g.stylesheets false
21
+ g.form_builder :simple_form
22
+ g.template_engine :haml
23
+ g.test_framework :rspec
24
+ g.javascripts false
25
+ g.assets false
26
+ g.helper false
27
+ end
28
+ eos
29
+ end
30
+
31
+ #
32
+ # Default Gems (others are added to gemfile by individual generators called after app generation)
33
+ #
34
+ gem 'simple_form', '3.0.0.rc'
35
+ gem 'haml'
36
+ gem 'haml-rails'
37
+ gem 'simple-navigation'
38
+ gem 'mail'
39
+ gem 'fabrication'
40
+ gem 'shoestrap'
41
+ gem 'kuhsaft'
42
+ gem 'selectivizr-rails'
43
+ gem 'modernizr-rails'
44
+ gem 'bourbon'
45
+
46
+ gem_group :development, :test do
47
+ gem 'pry'
48
+ gem 'ruby_gntp'
49
+ gem 'rspec-rails'
50
+ gem 'guard-rspec'
51
+ gem 'guard-spring'
52
+ end
53
+
54
+ gem_group :test do
55
+ gem 'database_cleaner'
56
+ end
57
+
58
+ #
59
+ # Application layout
60
+ #
61
+ remove_file "app/views/layouts/application.html.erb"
62
+ copy_file "application.html.haml", "app/views/layouts/application.html.haml"
63
+
64
+ #
65
+ # Application helper
66
+ #
67
+ copy_file "application_helper.rb", "app/helpers/application_helper.rb", force: true
68
+
69
+ #
70
+ # Favicons
71
+ #
72
+ directory "favicons", "app/assets/images/favicons/"