suspenders 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- suspenders (0.3)
4
+ suspenders (0.3.2)
5
5
  bundler (>= 1.0.7)
6
6
  rails (= 3.1.1)
7
7
 
@@ -66,7 +66,7 @@ GEM
66
66
  i18n (>= 0.4.0)
67
67
  mime-types (~> 1.16)
68
68
  treetop (~> 1.4.8)
69
- mime-types (1.16)
69
+ mime-types (1.17.2)
70
70
  multi_json (1.0.3)
71
71
  polyglot (0.3.2)
72
72
  rack (1.3.5)
@@ -93,7 +93,7 @@ GEM
93
93
  rake (>= 0.8.7)
94
94
  rdoc (~> 3.4)
95
95
  thor (~> 0.14.6)
96
- rake (0.9.2)
96
+ rake (0.9.2.2)
97
97
  rdiscount (1.6.8)
98
98
  rdoc (3.11)
99
99
  json (~> 1.4)
data/README.md CHANGED
@@ -51,6 +51,25 @@ Suspenders also comes with:
51
51
  * Rails' flashes set up and in application layout.
52
52
  * A few nice time formats.
53
53
 
54
+ Heroku
55
+ ------
56
+
57
+ You can optionally create Heroku staging and production apps:
58
+
59
+ suspenders app --heroku true
60
+
61
+ This has the same effect as running:
62
+
63
+ heroku create app-staging --remote staging --stack cedar
64
+ heroku create app-production --remote production --stack cedar
65
+
66
+ Clearance
67
+ ---------
68
+
69
+ You can optionally not include Clearance:
70
+
71
+ suspenders app --clearance false
72
+
54
73
  Dependencies
55
74
  ------------
56
75
 
data/Rakefile CHANGED
@@ -1,98 +1,8 @@
1
- require 'rubygems'
2
- require 'rake'
1
+ require 'bundler/setup'
2
+ require 'bundler/gem_tasks'
3
3
  require 'cucumber/rake/task'
4
- require 'date'
5
-
6
- TEST_PROJECT = 'test_project'
7
- SUSPENDERS_GEM_VERSION = '0.3.1'
8
-
9
- #############################################################################
10
- #
11
- # Testing functions
12
- #
13
- #############################################################################
14
4
 
15
5
  Cucumber::Rake::Task.new
16
6
 
17
7
  desc 'Run the test suite'
18
8
  task :default => ['cucumber']
19
-
20
- #############################################################################
21
- #
22
- # Helper functions
23
- #
24
- #############################################################################
25
-
26
- def name
27
- @name ||= Dir['*.gemspec'].first.split('.').first
28
- end
29
-
30
- def version
31
- SUSPENDERS_GEM_VERSION
32
- end
33
-
34
- def date
35
- Date.today.to_s
36
- end
37
-
38
- def gemspec_file
39
- "#{name}.gemspec"
40
- end
41
-
42
- def gem_file
43
- "#{name}-#{version}.gem"
44
- end
45
-
46
- def replace_header(head, header_name)
47
- head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
48
- end
49
-
50
- #############################################################################
51
- #
52
- # Packaging tasks
53
- #
54
- #############################################################################
55
-
56
- task :release => :build do
57
- unless `git branch` =~ /^\* master$/
58
- puts "You must be on the master branch to release!"
59
- exit!
60
- end
61
- sh "git commit --allow-empty -a -m 'Release #{version}'"
62
- sh "git tag v#{version}"
63
- sh "git push origin master"
64
- sh "git push --tags"
65
- sh "gem push pkg/#{name}-#{version}.gem"
66
- end
67
-
68
- task :build => :gemspec do
69
- sh "mkdir -p pkg"
70
- sh "gem build #{gemspec_file}"
71
- sh "mv #{gem_file} pkg"
72
- end
73
-
74
- task :gemspec do
75
- # read spec file and split out manifest section
76
- spec = File.read(gemspec_file)
77
- head, manifest, tail = spec.split(" # = MANIFEST =\n")
78
-
79
- # replace name version and date
80
- replace_header(head, :name)
81
- replace_header(head, :version)
82
- replace_header(head, :date)
83
-
84
- # determine file list from git ls-files
85
- files = `git ls-files`.
86
- split("\n").
87
- sort.
88
- reject { |file| file =~ /^\./ }.
89
- reject { |file| file =~ /^(rdoc|pkg)/ }.
90
- map { |file| " #{file}" }.
91
- join("\n")
92
-
93
- # piece file back together and write
94
- manifest = " s.files = %w[\n#{files}\n ]\n"
95
- spec = [head, manifest, tail].join(" # = MANIFEST =\n")
96
- File.open(gemspec_file, 'w') { |io| io.write(spec) }
97
- puts "Updated #{gemspec_file}"
98
- end
@@ -0,0 +1,9 @@
1
+ @disable-bundler
2
+ Feature: Creating a Heroku app when suspending a project
3
+
4
+ Scenario: User uses the --heroku=true command line argument
5
+ When I suspend a project called "test_project" with:
6
+ | argument | value |
7
+ | --heroku | true |
8
+ Then the "test_project-production" heroku app should exist
9
+ And the "test_project-production" heroku app should exist
@@ -0,0 +1,13 @@
1
+ @disable-bundler
2
+ Feature: Skipping clearance
3
+ As a developer
4
+ I want to suspend an app without clearance
5
+ So that I can build apps without users, or with other authentication libraries
6
+
7
+ Scenario: Passing --clearance=false
8
+ When I suspend a project called "test_project" with:
9
+ | argument | value |
10
+ | --clearance | false |
11
+ And I cd to the "test_project" root
12
+ Then "clearance" should not be installed
13
+ And I can cleanly rake the project
@@ -0,0 +1,5 @@
1
+ Then /^"(.*)" should not be installed$/ do |gem_name|
2
+ in_current_dir do
3
+ system("bundle show #{gem_name}").should be_false
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ Then /^the "([^"]*)" heroku app should exist$/ do |app_name|
2
+ FakeHeroku.should have_created_app(app_name)
3
+ end
@@ -1,13 +1,5 @@
1
1
  require 'aruba/cucumber'
2
2
 
3
- Before do
4
- @aruba_timeout_seconds = 60
5
- end
6
-
7
- After do
8
- FileUtils.rm_rf('test_project')
9
- end
10
-
11
3
  When 'I run the rake task "$task_name"' do |task_name|
12
4
  in_current_dir do
13
5
  run "bundle exec rake #{task_name}"
@@ -39,6 +31,25 @@ When 'I suspend a project called "$project_name"' do |project_name|
39
31
  assert_exit_status(0)
40
32
  end
41
33
 
34
+ When /^I suspend a project called "([^"]*)" with:$/ do |project_name, arguments_table|
35
+ suspenders_bin = File.expand_path(File.join('..', '..', 'bin', 'suspenders'), File.dirname(__FILE__))
36
+ arguments = arguments_table.hashes.inject([]) do |accum, argument|
37
+ accum << "#{argument['argument']}=#{argument['value']}"
38
+ end.join
39
+ run "#{suspenders_bin} #{project_name} #{arguments}"
40
+ assert_exit_status(0)
41
+ end
42
+
42
43
  When 'I cd to the "$test_project" root' do |dirname|
43
44
  cd dirname
44
45
  end
46
+
47
+ Then 'I can cleanly rake the project' do
48
+ steps %{
49
+ And I run the rake task "db:create"
50
+ And I run the rake task "db:migrate"
51
+ And I run the rake task "db:test:prepare"
52
+ And I run the rake task "cucumber"
53
+ Then I see a successful response in the shell
54
+ }
55
+ end
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(File.join('..', '..', 'support', 'fake_heroku'), File.dirname(__FILE__))
4
+
5
+ FakeHeroku.new(ARGV).run!
@@ -0,0 +1,15 @@
1
+ Before do
2
+ ENV['TESTING'] = 'true'
3
+ end
4
+
5
+ Before do
6
+ @aruba_timeout_seconds = 560
7
+ end
8
+
9
+ After do
10
+ FakeHeroku.clear!
11
+ end
12
+
13
+ After do
14
+ FileUtils.rm_rf('test_project')
15
+ end
@@ -0,0 +1,21 @@
1
+ class FakeHeroku
2
+ RECORDER = File.expand_path(File.join('..', '..', 'tmp', 'heroku_commands'), File.dirname(__FILE__))
3
+
4
+ def initialize(args)
5
+ @args = args
6
+ end
7
+
8
+ def run!
9
+ File.open(RECORDER, 'a') do |file|
10
+ file.write @args.join(' ')
11
+ end
12
+ end
13
+
14
+ def self.clear!
15
+ FileUtils.rm_rf(RECORDER)
16
+ end
17
+
18
+ def self.has_created_app?(app_name)
19
+ File.open(RECORDER, 'r').read.include?("create #{app_name}")
20
+ end
21
+ end
@@ -14,7 +14,11 @@ module Suspenders
14
14
  remove_file 'public/images/rails.png'
15
15
  end
16
16
 
17
- def setup_staging
17
+ def raise_delivery_errors
18
+ replace_in_file "config/environments/development.rb", "raise_delivery_errors = false", "raise_delivery_errors = true"
19
+ end
20
+
21
+ def setup_staging_environment
18
22
  run "cp config/environments/production.rb config/environments/staging.rb"
19
23
  end
20
24
 
@@ -49,7 +53,7 @@ module Suspenders
49
53
  end
50
54
 
51
55
  def create_database
52
- rake "db:create"
56
+ bundle_command('exec rake db:create')
53
57
  end
54
58
 
55
59
  def include_custom_gems
@@ -123,6 +127,22 @@ module Suspenders
123
127
  end
124
128
  end
125
129
 
130
+ def init_git
131
+ run "git init"
132
+ run "git add -A ."
133
+ run "git commit -m 'Initial commit - suspended project'"
134
+ end
135
+
136
+ def create_heroku_apps
137
+ path_additions = ''
138
+ if ENV['TESTING']
139
+ support_bin = File.expand_path(File.join('..', '..', '..', 'features', 'support', 'bin'))
140
+ path_addition = "PATH=#{support_bin}:$PATH"
141
+ end
142
+ run "#{path_addition} heroku create #{app_name}-production --remote=production --stack=cedar"
143
+ run "#{path_addition} heroku create #{app_name}-staging --remote=staging --stack=cedar"
144
+ end
145
+
126
146
  def copy_miscellaneous_files
127
147
  copy_file "errors.rb", "config/initializers/errors.rb"
128
148
  copy_file "time_formats.rb", "config/initializers/time_formats.rb"
@@ -143,6 +163,10 @@ module Suspenders
143
163
  :after => /include Clearance::User\n/
144
164
  end
145
165
 
166
+ def add_email_validator
167
+ copy_file "email_validator.rb", "app/validators/email_validator.rb"
168
+ end
169
+
146
170
  def include_clearance_matchers
147
171
  create_file "spec/support/clearance.rb", "require 'clearance/testing'"
148
172
  end
@@ -153,5 +177,9 @@ module Suspenders
153
177
  end
154
178
 
155
179
  end
180
+
181
+ def add_clearance_gem
182
+ insert_into_file("Gemfile", "\ngem 'clearance'", :after => /gem 'jquery-rails'/)
183
+ end
156
184
  end
157
185
  end
@@ -10,6 +10,12 @@ module Suspenders
10
10
  class_option :skip_test_unit, :type => :boolean, :aliases => "-T", :default => true,
11
11
  :desc => "Skip Test::Unit files"
12
12
 
13
+ class_option :heroku, :type => :boolean, :aliases => "-H", :default => false,
14
+ :desc => "Create staging and production heroku apps"
15
+
16
+ class_option :clearance, :type => :boolean, :aliases => "-C", :default => true,
17
+ :desc => "Add the clearance Rails authentication library"
18
+
13
19
  def finish_template
14
20
  invoke :suspenders_customization
15
21
  super
@@ -17,7 +23,8 @@ module Suspenders
17
23
 
18
24
  def suspenders_customization
19
25
  invoke :remove_files_we_dont_need
20
- invoke :setup_staging
26
+ invoke :setup_development_environment
27
+ invoke :setup_staging_environment
21
28
  invoke :create_suspenders_views
22
29
  invoke :create_common_javascripts
23
30
  invoke :add_jquery_ui
@@ -25,11 +32,11 @@ module Suspenders
25
32
  invoke :customize_gemfile
26
33
  invoke :configure_app
27
34
  invoke :setup_stylesheets
28
- invoke :setup_gitignore
29
35
  invoke :copy_miscellaneous_files
30
36
  invoke :setup_root_route
31
37
  invoke :set_active_record_whitelist_attributes
32
- invoke :set_attr_accessibles_on_user
38
+ invoke :setup_git
39
+ invoke :create_heroku_apps
33
40
  invoke :outro
34
41
  end
35
42
 
@@ -38,9 +45,14 @@ module Suspenders
38
45
  build(:remove_public_images_rails)
39
46
  end
40
47
 
41
- def setup_staging
48
+ def setup_development_environment
49
+ say "Setting up the development environment"
50
+ build(:raise_delivery_errors)
51
+ end
52
+
53
+ def setup_staging_environment
42
54
  say "Setting up the staging environment"
43
- build(:setup_staging)
55
+ build(:setup_staging_environment)
44
56
  end
45
57
 
46
58
  def create_suspenders_views
@@ -71,6 +83,10 @@ module Suspenders
71
83
 
72
84
  def customize_gemfile
73
85
  build(:include_custom_gems)
86
+ if options[:clearance]
87
+ build(:add_clearance_gem)
88
+ end
89
+ bundle_command('install')
74
90
  end
75
91
 
76
92
  def configure_app
@@ -79,10 +95,20 @@ module Suspenders
79
95
  build(:configure_action_mailer)
80
96
  build(:generate_rspec)
81
97
  build(:generate_cucumber)
82
- build(:generate_clearance)
83
98
  build(:install_factory_girl_steps)
84
- build(:include_clearance_matchers)
99
+ build(:add_email_validator)
85
100
  build(:setup_default_rake_task)
101
+ build(:setup_clearance)
102
+ end
103
+
104
+ def setup_clearance
105
+ if options[:clearance]
106
+ build(:generate_clearance)
107
+ build(:include_clearance_matchers)
108
+ if using_active_record?
109
+ build(:set_attr_accessibles_on_user)
110
+ end
111
+ end
86
112
  end
87
113
 
88
114
  def setup_stylesheets
@@ -90,11 +116,27 @@ module Suspenders
90
116
  build(:setup_stylesheets)
91
117
  end
92
118
 
119
+ def setup_git
120
+ say "Initializing git and initial commit"
121
+ invoke :setup_gitignore
122
+ invoke :init_git
123
+ end
124
+
125
+ def create_heroku_apps
126
+ if options['heroku']
127
+ say "Creating heroku apps"
128
+ build(:create_heroku_apps)
129
+ end
130
+ end
131
+
93
132
  def setup_gitignore
94
- say "Ignore the right files"
95
133
  build(:gitignore_files)
96
134
  end
97
135
 
136
+ def init_git
137
+ build(:init_git)
138
+ end
139
+
98
140
  def copy_miscellaneous_files
99
141
  say "Copying miscellaneous support files"
100
142
  build(:copy_miscellaneous_files)
@@ -112,19 +154,17 @@ module Suspenders
112
154
  end
113
155
  end
114
156
 
115
- def set_attr_accessibles_on_user
116
- if using_active_record?
117
- say "Setting up writable attributes on user"
118
- build(:set_attr_accessibles_on_user)
119
- end
120
- end
121
-
122
157
  def outro
123
158
  say "Congratulations! You just pulled our suspenders."
124
159
  say "Remember to run 'rails generate airbrake' with your API key."
125
160
  end
126
161
 
162
+ def run_bundle
163
+ # Let's not: We'll bundle manually at the right spot
164
+ end
165
+
127
166
  protected
167
+
128
168
  def get_builder_class
129
169
  Suspenders::AppBuilder
130
170
  end
@@ -132,8 +172,5 @@ module Suspenders
132
172
  def using_active_record?
133
173
  !options[:skip_active_record]
134
174
  end
135
-
136
175
  end
137
176
  end
138
-
139
-
@@ -0,0 +1,3 @@
1
+ module Suspenders
2
+ VERSION = '0.3.2'
3
+ end
data/suspenders.gemspec CHANGED
@@ -1,11 +1,14 @@
1
- Gem::Specification.new do |s|
2
- s.specification_version = 2 if s.respond_to? :specification_version=
3
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
4
- s.rubygems_version = '1.3.5'
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "suspenders/version"
5
4
 
6
- s.name = 'suspenders'
7
- s.version = '0.3.1'
8
- s.date = '2011-10-28'
5
+ Gem::Specification.new do |s|
6
+ s.name = 'suspenders'
7
+ s.version = Suspenders::VERSION
8
+ s.date = Date.today.strftime('%Y-%m-%d')
9
+ s.authors = ["thoughtbot"]
10
+ s.email = 'support@thoughtbot.com'
11
+ s.homepage = 'http://github.com/thoughtbot/suspenders'
9
12
 
10
13
  s.summary = "Generate a Rails app using thoughtbot's best practices."
11
14
  s.description = <<-HERE
@@ -14,51 +17,19 @@ thoughtbot to get a jump start on a working app. Use Suspenders if you're in a
14
17
  rush to build something amazing; don't use it if you like missing deadlines.
15
18
  HERE
16
19
 
17
- s.authors = ["thoughtbot"]
18
- s.email = 'support@thoughtbot.com'
19
- s.homepage = 'http://github.com/thoughtbot/suspenders'
20
-
21
- s.executables = ["suspenders"]
22
- s.default_executable = 'suspenders'
20
+ s.files = `git ls-files`.split("\n").
21
+ reject { |file| file =~ /^\./ }.
22
+ reject { |file| file =~ /^(rdoc|pkg)/ }
23
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
24
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
25
+ s.require_paths = ["lib"]
23
26
 
24
27
  s.rdoc_options = ["--charset=UTF-8"]
25
28
  s.extra_rdoc_files = %w[README.md LICENSE]
26
29
 
27
30
  s.add_dependency('rails', '3.1.1')
28
31
  s.add_dependency('bundler', '>= 1.0.7')
32
+
29
33
  s.add_development_dependency('cucumber', '~> 1.1.0')
30
34
  s.add_development_dependency('aruba', '~> 0.4.6')
31
-
32
- # = MANIFEST =
33
- s.files = %w[
34
- CONTRIBUTING.md
35
- Gemfile
36
- Gemfile.lock
37
- LICENSE
38
- README.md
39
- Rakefile
40
- bin/suspenders
41
- features/rake_clean.feature
42
- features/step_definitions/shell.rb
43
- lib/suspenders/actions.rb
44
- lib/suspenders/app_builder.rb
45
- lib/suspenders/generators/app_generator.rb
46
- suspenders.gemspec
47
- templates/Gemfile_additions
48
- templates/Procfile
49
- templates/README_FOR_SUSPENDERS
50
- templates/_flashes.html.erb
51
- templates/_javascript.html.erb
52
- templates/errors.rb
53
- templates/factory_girl_steps.rb
54
- templates/import_scss_styles
55
- templates/javascripts/prefilled_input.js
56
- templates/postgresql_database.yml.erb
57
- templates/suspenders_gitignore
58
- templates/suspenders_layout.html.erb.erb
59
- templates/time_formats.rb
60
- ]
61
- # = MANIFEST =
62
-
63
- s.test_files = s.files.select {|path| path =~ /^features/ }
64
35
  end
@@ -1,6 +1,5 @@
1
1
  gem 'thin'
2
2
  gem 'sass'
3
- gem 'clearance', '~> 0.13.0'
4
3
  gem 'high_voltage'
5
4
  gem 'paperclip'
6
5
  gem 'formtastic'
@@ -0,0 +1,7 @@
1
+ class EmailValidator < ActiveModel::EachValidator
2
+ def validate_each(record, attribute, value)
3
+ unless value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
4
+ record.errors[attribute] << (options[:message] || "is not an email")
5
+ end
6
+ end
7
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: suspenders
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
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: 2011-10-28 00:00:00.000000000Z
12
+ date: 2011-11-23 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &2161798380 !ruby/object:Gem::Requirement
16
+ requirement: &70184024161620 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - =
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.1.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2161798380
24
+ version_requirements: *70184024161620
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &2161797800 !ruby/object:Gem::Requirement
27
+ requirement: &70184024160860 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.0.7
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2161797800
35
+ version_requirements: *70184024160860
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: cucumber
38
- requirement: &2161797320 !ruby/object:Gem::Requirement
38
+ requirement: &70184024153740 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.1.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2161797320
46
+ version_requirements: *70184024153740
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: aruba
49
- requirement: &2161796760 !ruby/object:Gem::Requirement
49
+ requirement: &70184024152920 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: 0.4.6
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2161796760
57
+ version_requirements: *70184024152920
58
58
  description: ! 'Suspenders is a base Rails project that you can upgrade. It is used
59
59
  by
60
60
 
@@ -78,17 +78,26 @@ files:
78
78
  - README.md
79
79
  - Rakefile
80
80
  - bin/suspenders
81
+ - features/creating_a_heroku_app.feature
81
82
  - features/rake_clean.feature
82
- - features/step_definitions/shell.rb
83
+ - features/skipping_clearance.feature
84
+ - features/step_definitions/gem_steps.rb
85
+ - features/step_definitions/heroku_steps.rb
86
+ - features/step_definitions/shell_steps.rb
87
+ - features/support/bin/heroku
88
+ - features/support/env.rb
89
+ - features/support/fake_heroku.rb
83
90
  - lib/suspenders/actions.rb
84
91
  - lib/suspenders/app_builder.rb
85
92
  - lib/suspenders/generators/app_generator.rb
93
+ - lib/suspenders/version.rb
86
94
  - suspenders.gemspec
87
95
  - templates/Gemfile_additions
88
96
  - templates/Procfile
89
97
  - templates/README_FOR_SUSPENDERS
90
98
  - templates/_flashes.html.erb
91
99
  - templates/_javascript.html.erb
100
+ - templates/email_validator.rb
92
101
  - templates/errors.rb
93
102
  - templates/factory_girl_steps.rb
94
103
  - templates/import_scss_styles
@@ -110,18 +119,31 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
119
  - - ! '>='
111
120
  - !ruby/object:Gem::Version
112
121
  version: '0'
122
+ segments:
123
+ - 0
124
+ hash: 804092796871748007
113
125
  required_rubygems_version: !ruby/object:Gem::Requirement
114
126
  none: false
115
127
  requirements:
116
128
  - - ! '>='
117
129
  - !ruby/object:Gem::Version
118
130
  version: '0'
131
+ segments:
132
+ - 0
133
+ hash: 804092796871748007
119
134
  requirements: []
120
135
  rubyforge_project:
121
136
  rubygems_version: 1.8.6
122
137
  signing_key:
123
- specification_version: 2
138
+ specification_version: 3
124
139
  summary: Generate a Rails app using thoughtbot's best practices.
125
140
  test_files:
141
+ - features/creating_a_heroku_app.feature
126
142
  - features/rake_clean.feature
127
- - features/step_definitions/shell.rb
143
+ - features/skipping_clearance.feature
144
+ - features/step_definitions/gem_steps.rb
145
+ - features/step_definitions/heroku_steps.rb
146
+ - features/step_definitions/shell_steps.rb
147
+ - features/support/bin/heroku
148
+ - features/support/env.rb
149
+ - features/support/fake_heroku.rb