preseason 0.0.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.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/CONTRIBUTING.md +18 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +100 -0
  6. data/LICENSE.txt +23 -0
  7. data/README.md +129 -0
  8. data/Rakefile +1 -0
  9. data/bin/preseason +8 -0
  10. data/lib/Gemfile +4 -0
  11. data/lib/Rakefile +1 -0
  12. data/lib/play.rb +2 -0
  13. data/lib/preseason/colorize.rb +57 -0
  14. data/lib/preseason/config/authentication.rb +31 -0
  15. data/lib/preseason/config/database.rb +48 -0
  16. data/lib/preseason/config/factory.rb +19 -0
  17. data/lib/preseason/config/heroku.rb +17 -0
  18. data/lib/preseason/config/ie8.rb +17 -0
  19. data/lib/preseason/config.rb +6 -0
  20. data/lib/preseason/generator_context.rb +20 -0
  21. data/lib/preseason/recipe/active_admin.rb +7 -0
  22. data/lib/preseason/recipe/application.rb +6 -0
  23. data/lib/preseason/recipe/authlogic.rb +50 -0
  24. data/lib/preseason/recipe/bundle.rb +7 -0
  25. data/lib/preseason/recipe/custom_error_pages.rb +30 -0
  26. data/lib/preseason/recipe/database.rb +28 -0
  27. data/lib/preseason/recipe/devise.rb +9 -0
  28. data/lib/preseason/recipe/flash.rb +6 -0
  29. data/lib/preseason/recipe/foreman.rb +5 -0
  30. data/lib/preseason/recipe/gemfile.rb +147 -0
  31. data/lib/preseason/recipe/git.rb +62 -0
  32. data/lib/preseason/recipe/gitignore.rb +22 -0
  33. data/lib/preseason/recipe/guard.rb +7 -0
  34. data/lib/preseason/recipe/heroku.rb +12 -0
  35. data/lib/preseason/recipe/ie8.rb +18 -0
  36. data/lib/preseason/recipe/initializer.rb +20 -0
  37. data/lib/preseason/recipe/playbook.rb +69 -0
  38. data/lib/preseason/recipe/production.rb +36 -0
  39. data/lib/preseason/recipe/routes.rb +21 -0
  40. data/lib/preseason/recipe/rspec.rb +5 -0
  41. data/lib/preseason/recipe/rvm.rb +10 -0
  42. data/lib/preseason/recipe/schedule.rb +5 -0
  43. data/lib/preseason/recipe/spork_rspec.rb +7 -0
  44. data/lib/preseason/recipe/whiskey_disk.rb +5 -0
  45. data/lib/preseason/recipe.rb +38 -0
  46. data/lib/preseason/templates/authlogic/POST_INSTALL +10 -0
  47. data/lib/preseason/templates/authlogic/app/controllers/application_controller.rb +40 -0
  48. data/lib/preseason/templates/authlogic/app/controllers/user_session_controller.rb +58 -0
  49. data/lib/preseason/templates/authlogic/app/mailers/site_mailer.rb +5 -0
  50. data/lib/preseason/templates/authlogic/app/models/user.rb +11 -0
  51. data/lib/preseason/templates/authlogic/app/models/user_session.rb +2 -0
  52. data/lib/preseason/templates/authlogic/app/views/site_mailer/password_reset_instructions.html.erb +22 -0
  53. data/lib/preseason/templates/authlogic/app/views/user_session/acquire_password.html.erb +14 -0
  54. data/lib/preseason/templates/authlogic/app/views/user_session/forgot_password.html.erb +11 -0
  55. data/lib/preseason/templates/authlogic/app/views/user_session/new.html.erb +17 -0
  56. data/lib/preseason/templates/authlogic/config/routes.rb +11 -0
  57. data/lib/preseason/templates/authlogic/spec/factories/users.rb +11 -0
  58. data/lib/preseason/templates/custom_error_pages/app/views/errors/application_error.html.erb +5 -0
  59. data/lib/preseason/templates/custom_error_pages/app/views/errors/not_found.html.erb +5 -0
  60. data/lib/preseason/templates/custom_error_pages/app/views/errors/unprocessable_entity.html.erb +5 -0
  61. data/lib/preseason/templates/custom_error_pages/config/routes.rb +5 -0
  62. data/lib/preseason/templates/database/config/database.yml.dist.erb +19 -0
  63. data/lib/preseason/templates/database/config/database.yml.erb +19 -0
  64. data/lib/preseason/templates/flash/app/views/shared/_flash.html.erb +6 -0
  65. data/lib/preseason/templates/ie8/app/assets/javascripts/ie8.coffee +8 -0
  66. data/lib/preseason/templates/playbook/app/views/layouts/application.html.erb +31 -0
  67. data/lib/preseason/templates/readme/README.md.erb +17 -0
  68. data/lib/preseason/templates/schedule/config/schedule.rb +7 -0
  69. data/lib/preseason/templates/spec/spec_helper.erb +61 -0
  70. data/lib/preseason/templates/sqlite/config/database.yml +17 -0
  71. data/lib/preseason/templates/whiskey_disk/config/deploy.yml +7 -0
  72. data/lib/preseason/version.rb +3 -0
  73. data/lib/preseason.rb +82 -0
  74. data/preseason.gemspec +27 -0
  75. metadata +175 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d3f322e9dc43834fa74890214948632d6d82b671
4
+ data.tar.gz: 1a3f38dfe75b3f614929f1046622f9a58811b0cf
5
+ SHA512:
6
+ metadata.gz: 7622582d00ee54d3b46b16292142cbb662e7c5f75033703e5ccd0919dda375fa1c4db8bc6edb22145ef171f0e13d18f62316acbae81272e2c892c952a56b2652
7
+ data.tar.gz: f3ba95012bf1a9f4afd4c479e4a943a0a1e2628c95c7c56ed47a847b4259845bfa2044d6cb121222e78fe49741c7dd23bf410e1da59c214032fc407c22480b12
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ .DS_Store
2
+ logfile
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,18 @@
1
+ ## Contributing
2
+ 1. fork the repo
3
+ 2. exhibit your brilliance
4
+ 3. push to your fork
5
+ 4. submit a pull request
6
+
7
+ ### Submitting Bug Reports
8
+
9
+ If you're nice enough to submit a bug and make Preseason better, please
10
+ provide the following information to make resolving the bug easier.
11
+
12
+ 1. Your operating system (and version)
13
+ 2. Your shell type and version (Bash, Zsh, Bourne, etc)
14
+ 3. Clear steps to reproduce the bug. What answers did you select during
15
+ the prompts?
16
+ 4. Any error messages seen in the console
17
+ 5. A description of what you expected to happen
18
+ 6. A description of what actually happened
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in preseason.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,100 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ preseason (0.0.1)
5
+ rails (~> 4.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ actionmailer (4.1.5)
11
+ actionpack (= 4.1.5)
12
+ actionview (= 4.1.5)
13
+ mail (~> 2.5.4)
14
+ actionpack (4.1.5)
15
+ actionview (= 4.1.5)
16
+ activesupport (= 4.1.5)
17
+ rack (~> 1.5.2)
18
+ rack-test (~> 0.6.2)
19
+ actionview (4.1.5)
20
+ activesupport (= 4.1.5)
21
+ builder (~> 3.1)
22
+ erubis (~> 2.7.0)
23
+ activemodel (4.1.5)
24
+ activesupport (= 4.1.5)
25
+ builder (~> 3.1)
26
+ activerecord (4.1.5)
27
+ activemodel (= 4.1.5)
28
+ activesupport (= 4.1.5)
29
+ arel (~> 5.0.0)
30
+ activesupport (4.1.5)
31
+ i18n (~> 0.6, >= 0.6.9)
32
+ json (~> 1.7, >= 1.7.7)
33
+ minitest (~> 5.1)
34
+ thread_safe (~> 0.1)
35
+ tzinfo (~> 1.1)
36
+ arel (5.0.1.20140414130214)
37
+ builder (3.2.2)
38
+ coderay (1.1.0)
39
+ erubis (2.7.0)
40
+ hike (1.2.3)
41
+ i18n (0.6.11)
42
+ json (1.8.1)
43
+ mail (2.5.4)
44
+ mime-types (~> 1.16)
45
+ treetop (~> 1.4.8)
46
+ method_source (0.8.2)
47
+ mime-types (1.25.1)
48
+ minitest (5.4.0)
49
+ multi_json (1.10.1)
50
+ polyglot (0.3.5)
51
+ pry (0.10.1)
52
+ coderay (~> 1.1.0)
53
+ method_source (~> 0.8.1)
54
+ slop (~> 3.4)
55
+ rack (1.5.2)
56
+ rack-test (0.6.2)
57
+ rack (>= 1.0)
58
+ rails (4.1.5)
59
+ actionmailer (= 4.1.5)
60
+ actionpack (= 4.1.5)
61
+ actionview (= 4.1.5)
62
+ activemodel (= 4.1.5)
63
+ activerecord (= 4.1.5)
64
+ activesupport (= 4.1.5)
65
+ bundler (>= 1.3.0, < 2.0)
66
+ railties (= 4.1.5)
67
+ sprockets-rails (~> 2.0)
68
+ railties (4.1.5)
69
+ actionpack (= 4.1.5)
70
+ activesupport (= 4.1.5)
71
+ rake (>= 0.8.7)
72
+ thor (>= 0.18.1, < 2.0)
73
+ rake (0.9.6)
74
+ slop (3.6.0)
75
+ sprockets (2.12.1)
76
+ hike (~> 1.2)
77
+ multi_json (~> 1.0)
78
+ rack (~> 1.0)
79
+ tilt (~> 1.1, != 1.3.0)
80
+ sprockets-rails (2.1.3)
81
+ actionpack (>= 3.0)
82
+ activesupport (>= 3.0)
83
+ sprockets (~> 2.8)
84
+ thor (0.19.1)
85
+ thread_safe (0.3.4)
86
+ tilt (1.4.1)
87
+ treetop (1.4.15)
88
+ polyglot
89
+ polyglot (>= 0.3.1)
90
+ tzinfo (1.2.2)
91
+ thread_safe (~> 0.1)
92
+
93
+ PLATFORMS
94
+ ruby
95
+
96
+ DEPENDENCIES
97
+ bundler (~> 1.3)
98
+ preseason!
99
+ pry (~> 0)
100
+ rake (~> 0)
data/LICENSE.txt ADDED
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2014 Centresource Interactive Agency
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
data/README.md ADDED
@@ -0,0 +1,129 @@
1
+ # Preseason
2
+ A Centresource Interactive Agency open internal project for generating new Rails applications.
3
+
4
+ ### Why
5
+ We start new Ruby on Rails projects frequently. In doing so, we end up
6
+ repeating many of the same steps. As Rubyists, we are always looking for
7
+ ways to DRY things up. This project is intended to serve as a launching
8
+ pad for new Rails applications. Perhaps most importantly, it is **NOT** supposed to cover everything that every Rails app will ever need, but to be a good starting place.
9
+
10
+ ### How
11
+ N.B. This project assumes you have a development environment setup that is capable of installing Rails projects. If not, start with the [Rails Guides](http://guides.rubyonrails.org/getting_started.html "Rails Guides"). You must also have the rvm gem installed. It also assumes that you are using SSH if you plan to make your project a Github repo.
12
+
13
+ 0. Install the `rvm` gem if you don't already have it installed
14
+
15
+ `gem install rvm`
16
+
17
+ 1. Install the preseason gem into your global gemset:
18
+
19
+ `gem install preseason`
20
+
21
+ 2. Make sure your db is running (postgres/mysql/etc)
22
+
23
+ 3. Install a new Rails application with:
24
+
25
+ `preseason <name_of_your_project>`
26
+
27
+ 3. Follow the prompts to choose your database, etc.
28
+
29
+ 4. Make a mistake? Just `rm -rf` your application's directory and repeat steps 1-4.
30
+
31
+ 5. `cd` into your application directory
32
+
33
+ 6. Make magic happen and dreams come true.
34
+
35
+ ####Note About ERB Templates
36
+ If you need to write a template that executes ERB in the context of the running script and also outputs ERB for the purposes of the generated application code, be sure to escape your application-bound ERB as `<%%>`
37
+
38
+ ### What
39
+ #### Preseason does the following:
40
+
41
+ + asks for your db of preference
42
+ + asks for your preferences on a few gems
43
+ + creates an RVM gemset for your project and switches to that gemset
44
+ + creates a new config/database.yml file with info from your db of choice
45
+ + adds the database.yml to .gitignore and creates a database.yml.dist as a placeholder
46
+ + adds .ruby-version, .ruby-gemset, swp files, public/assets, s3 files, etc to .gitignore
47
+ + cleans up the Gemfile (removes comments and empty lines)
48
+ + enables lograge for production (for non-Heroku apps)
49
+ + installs gems via bundler
50
+ + creates a database
51
+ + cleans up routes.rb
52
+ + sets up flash messages in the application layout
53
+ + sets config.assets.initialize_on_precompile to false
54
+ + sets config.autoload_paths += %W(\#{config.root}/lib)
55
+ + sets up a template for using whenever for cronjobs (for non-Heroku apps)
56
+ + installs rspec
57
+ + installs and sets up bourbon and neat
58
+ + creates a template for your whiskey_disk deploy in config/deploy.yml (for non-Heroku apps)
59
+ + creates Procfile for foreman
60
+ + starts guard
61
+ + creates a new spec_helper with spork and simplecov
62
+ + removes the test unit directory, the smoke test page, and the Rails logo.
63
+ + migrates the db and recreates the test db from the DEV's schema
64
+ + initializes a git repository, makes an "initial commit", and checks out a 'develop' branch
65
+ + setup Heroku
66
+
67
+ #### Preseason offers use of the following technologies:
68
+
69
+ + Either postgresql, mysql2, or sqlite3
70
+ + [factory_girl](https://github.com/thoughtbot/factory_girl)
71
+ + [authlogic](https://github.com/binarylogic/authlogic), [devise](https://github.com/plataformatec/devise), or [activeadmin](http://www.activeadmin.info/) (with devise)
72
+ + [rvm](https://rvm.io/)
73
+ + [whiskey_disk](https://github.com/flogic/whiskey_disk) (for embarrassingly fast deployments)
74
+ + [lograge](https://github.com/roidrage/lograge)
75
+ + [whenever](https://github.com/javan/whenever)
76
+ + [foreman](https://github.com/ddollar/foreman)
77
+ + [guard](https://github.com/guard/guard)
78
+ + [spork](https://github.com/sporkrb/spork)
79
+ + [pry](http://pryrepl.org/)
80
+ + [awesome_print](https://github.com/michaeldv/awesome_print)
81
+ + [quiet_assets](https://github.com/evrone/quiet_assets)
82
+ + [rspec](http://rspec.info/)
83
+ + [database_cleaner](https://github.com/bmabey/database_cleaner)
84
+ + [shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers)
85
+ + [capybara-webkit](https://github.com/thoughtbot/capybara-webkit)
86
+ + [launchy](https://github.com/copiousfreetime/launchy)
87
+ + [fuubar](https://github.com/jeffkreeftmeijer/fuubar)
88
+ + [simplecov](https://github.com/colszowka/simplecov)
89
+ + [bourbon](http://bourbon.io/)
90
+ + [neat](http://neat.bourbon.io/)
91
+ + [bitters](http://bitters.bourbon.io)
92
+
93
+ ### Who
94
+
95
+ Preseason is a project by the development team at the [Centresource Interactive Agency](http://www.centresource.com) in Nashville, TN. The main push for this project is from [Cade Truitt](https://github.com/cade), [Travis Roberts](https://github.com/travisr), [Jeremy Holland](https://github.com/awebneck), [Adam Scott](https://github.com/ascot21), [Rian Rainey](https://github.com/rianrainey), and [Max Beizer](https://github.com/maxbeizer)
96
+
97
+ ### ToDos
98
+ * integration spec setup?
99
+ * add active admin precompile asset list to production.rb
100
+ * add logic to setup activeadmin for authlogic and allow choice between
101
+ devise and authlogic rather than y/n for authlogic
102
+
103
+ ### Developing Locally
104
+ 1. Fork the repo
105
+ 2. Clone it to your local machine
106
+ 3. `gem uninstall preseason` if you have it installed already
107
+ - you may be prompted about removing an executable called preseason. The answer is yes
108
+ 4. Crack the project open and make magic happen
109
+ 5. `gem build preseason.gemspec`
110
+ - should you receive an error message about the gem containing itself, try `rm preseason-0.0.1.gem` (or whatever version number we are on and stage that deletion
111
+ 6. `gem install preseason` in your global gemset
112
+ 7. In a separate terminal (or just outside the preseason dir), `presason <the name of your test project>`
113
+ 8. Information on tests coming soon.
114
+
115
+ ## Troubleshooting
116
+ * If you don't have QT libraries installed, you may get this error when installing Capybara
117
+ * `Command 'qmake -spec macx-g++' not available`
118
+ * Just run `brew install qt`. [Learn more](https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit)
119
+ * If you get the following error when building the gem, you need to stage the deletion of
120
+ `preseason.gem` file by `git stage -u preseason.x.x.x.gem`
121
+ ```
122
+ └[$] gem build preseason.gemspec
123
+ WARNING: See http://guides.rubygems.org/specification-reference/ for help
124
+ ERROR: While executing gem ... (Gem::InvalidSpecificationException)
125
+ from bin/rails:4:in `<main>'
126
+ ```
127
+
128
+ ## License
129
+ Preseason is Copyright © 2014 Centresource. It is free software, and may be redistributed under the terms specified in the [LICENSE](https://github.com/centresource/preseason/blob/master/LICENSE) file.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/preseason ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rails/generators'
4
+ require 'rails/generators/rails/app/app_generator'
5
+
6
+ #TODO remove any args except the project name
7
+ argv = ARGV + ['-m'] + ["#{File.dirname(__FILE__)}/../lib/play.rb"]
8
+ Rails::Generators::AppGenerator.start argv
data/lib/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in preseason.gemspec
4
+ gemspec
data/lib/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/lib/play.rb ADDED
@@ -0,0 +1,2 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'preseason'))
2
+ Preseason.new(self).game_on!
@@ -0,0 +1,57 @@
1
+ class Preseason
2
+ module Colorize
3
+ include Preseason::GeneratorContext
4
+
5
+ # override method from Thor::Shell::Basic
6
+ def ask(statement, *args)
7
+ statement = colorize(statement)
8
+ super
9
+ end
10
+
11
+ # override method from Thor::Shell::Basic
12
+ def yes?(statement, color = nil)
13
+ statement = colorize(statement)
14
+ super
15
+ end
16
+
17
+ # override method from Rails::Generators::Actions
18
+ def readme(path)
19
+ begin
20
+ say "#{option_color}"
21
+ super
22
+ ensure
23
+ say "#{no_color}"
24
+ end
25
+ end
26
+
27
+ private
28
+ def colorize(statement)
29
+ statement.insert 0, ask_color
30
+ statement.insert option_index(statement), option_color if option_index(statement)
31
+ statement.insert aside_index(statement) || -1, no_color
32
+
33
+ statement
34
+ end
35
+
36
+ def option_index(statement)
37
+ index = statement.rindex '['
38
+ index if index && index > ask_color.size
39
+ end
40
+
41
+ def aside_index(statement)
42
+ statement.rindex '('
43
+ end
44
+
45
+ def ask_color
46
+ "\033[35m" # magenta
47
+ end
48
+
49
+ def option_color
50
+ "\033[33m" # yellow
51
+ end
52
+
53
+ def no_color
54
+ "\033[0m" # reset
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,31 @@
1
+ class Preseason
2
+ module Config
3
+ class Authentication
4
+ include Config
5
+
6
+ attr_accessor :library
7
+
8
+ def ask_user
9
+ if yes? "Will you be using Authlogic? [y/n]"
10
+ self.library = :authlogic
11
+ elsif yes? "Will you be using ActiveAdmin? [y/n]"
12
+ self.library = :active_admin
13
+ elsif yes? "Ok then, how about Devise? [y/n]"
14
+ self.library = :devise
15
+ end
16
+ end
17
+
18
+ def authlogic?
19
+ library == :authlogic
20
+ end
21
+
22
+ def active_admin?
23
+ library == :active_admin
24
+ end
25
+
26
+ def devise?
27
+ library == :devise || active_admin?
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,48 @@
1
+ class Preseason
2
+ module Config
3
+ class Database
4
+ include Config
5
+
6
+ attr_accessor :database, :password
7
+ attr_reader :username
8
+
9
+ def ask_user
10
+ self.database ||= ask "What db will you be using?", :limited_to => gems.keys
11
+
12
+ unless database == 'sqlite'
13
+ self.username = ask "What is your #{database} database username? (leave blank for `whoami`)"
14
+ self.password = ask "What is your #{database} database password? (leave blank for none)"
15
+ end
16
+ end
17
+
18
+ def username=(other)
19
+ @username = other.blank? ? (`whoami`).chomp : other
20
+ end
21
+
22
+ def postgres?
23
+ database == 'postgres'
24
+ end
25
+
26
+ def sqlite?
27
+ database == 'sqlite'
28
+ end
29
+
30
+ def adapter_name
31
+ adapters[database]
32
+ end
33
+
34
+ def gem_name
35
+ gems[database]
36
+ end
37
+
38
+ private
39
+ def adapters
40
+ { 'postgres' => 'postgresql', 'mysql' => 'mysql2', 'sqlite' => 'sqlite3' }
41
+ end
42
+
43
+ def gems
44
+ { 'postgres' => 'pg', 'mysql' => 'mysql2', 'sqlite' => 'sqlite3' }
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,19 @@
1
+ class Preseason
2
+ module Config
3
+ class Factory
4
+ include Config
5
+
6
+ attr_accessor :library
7
+
8
+ def ask_user
9
+ if yes? "Will you be using Factory Girl? [y/n]"
10
+ self.library = :factory_girl
11
+ end
12
+ end
13
+
14
+ def factory_girl?
15
+ library == :factory_girl
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ class Preseason
2
+ module Config
3
+ class Heroku
4
+ include Config
5
+
6
+ attr_accessor :use
7
+
8
+ def ask_user
9
+ self.use = yes? "Will this app be deployed to Heroku? [y/n]"
10
+ end
11
+
12
+ def use?
13
+ use
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ class Preseason
2
+ module Config
3
+ class IE8
4
+ include Config
5
+
6
+ attr_accessor :enabled
7
+
8
+ def ask_user
9
+ self.enabled = yes? "Will this app need to support Internet Explorer 8 (install selectivizr.js and respond.js)? [y/n]"
10
+ end
11
+
12
+ def enabled?
13
+ enabled
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,6 @@
1
+ class Preseason
2
+ module Config
3
+ include Preseason::GeneratorContext
4
+ include Preseason::Colorize
5
+ end
6
+ end
@@ -0,0 +1,20 @@
1
+ class Preseason
2
+ module GeneratorContext
3
+ class << self
4
+ attr_reader :context
5
+
6
+ def context=(context)
7
+ # squashes `rails new` and `bundle exec spring binstub --all` attempts
8
+ # to run since we run it ourselves and the timing of `rails new` obscures
9
+ # our custom post_install messages
10
+ context.define_singleton_method(:run_bundle, -> {})
11
+ context.define_singleton_method(:generate_spring_binstubs, -> {})
12
+ @context = context
13
+ end
14
+ end
15
+
16
+ def method_missing(meth, *args, &blk)
17
+ GeneratorContext.context.send meth, *args, &blk
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ class Preseason::Recipe::ActiveAdmin < Preseason::Recipe
2
+ def prepare
3
+ return unless config.authentication.active_admin?
4
+
5
+ generate 'active_admin:install'
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ class Preseason::Recipe::Application < Preseason::Recipe
2
+ def prepare
3
+ insert_into_file 'config/application.rb', "\n config.assets.initialize_on_precompile = false\n", :before => /^ end$/
4
+ insert_into_file 'config/application.rb', " config.autoload_paths += %W(\#{config.root}/lib)", :after => /config.autoload_paths.*\n/
5
+ end
6
+ end
@@ -0,0 +1,50 @@
1
+ class Preseason::Recipe::Authlogic < Preseason::Recipe
2
+ def prepare
3
+ return unless config.authentication.authlogic?
4
+
5
+ setup_model
6
+ setup_factory
7
+ setup_routes
8
+ setup_controllers
9
+ setup_views
10
+ setup_mailer
11
+ end
12
+
13
+ def post_install_hook
14
+ 'POST_INSTALL' if config.authentication.authlogic?
15
+ end
16
+
17
+ private
18
+ def setup_model
19
+ # if you edit this, mirror your changes in the user_factory
20
+ generate 'model user first_name:string last_name:string email:string crypted_password:string password_salt:string persistence_token:string perishable_token:string'
21
+
22
+ insert 'app/models/user.rb', :before => /^end$/
23
+ mirror_file 'app/models/user_session.rb'
24
+ end
25
+
26
+ def setup_factory
27
+ mirror_file 'spec/factories/users.rb'
28
+ end
29
+
30
+ def setup_routes
31
+ insert 'config/routes.rb', :before => /^end$/
32
+ end
33
+
34
+ def setup_controllers
35
+ mirror_file 'app/controllers/user_session_controller.rb'
36
+ insert 'app/controllers/application_controller.rb', :after => 'protect_from_forgery'
37
+ end
38
+
39
+ def setup_views
40
+ %w(new forgot_password acquire_password).each do |file_name|
41
+ mirror_file "app/views/user_session/#{file_name}.html.erb"
42
+ end
43
+ end
44
+
45
+ def setup_mailer
46
+ generate 'mailer SiteMailer'
47
+ insert 'app/mailers/site_mailer.rb', :before => /^end$/
48
+ mirror_file 'app/views/site_mailer/password_reset_instructions.html.erb'
49
+ end
50
+ end
@@ -0,0 +1,7 @@
1
+ class Preseason::Recipe::Bundle < Preseason::Recipe
2
+ def prepare
3
+ run 'bundle install'
4
+ run 'bundle exec spring binstub --all'
5
+ run 'rake db:create'
6
+ end
7
+ end
@@ -0,0 +1,30 @@
1
+ class Preseason::Recipe::CustomErrorPages < Preseason::Recipe
2
+ def prepare
3
+ handle_errors_in_app
4
+ create_errors_controller
5
+ create_views
6
+ remove_default_error_pages
7
+ end
8
+
9
+ private
10
+ def handle_errors_in_app
11
+ insert_into_file 'config/application.rb', "\n\n config.exceptions_app = self.routes", :after => /config.active_record.whitelist_attributes = true$/
12
+ insert 'config/routes.rb', :before => /^end$/
13
+ end
14
+
15
+ def create_errors_controller
16
+ generate 'controller errors --no-helper --no-assets'
17
+ end
18
+
19
+ def create_views
20
+ mirror_file 'app/views/errors/application_error.html.erb'
21
+ mirror_file 'app/views/errors/not_found.html.erb'
22
+ mirror_file 'app/views/errors/unprocessable_entity.html.erb'
23
+ end
24
+
25
+ def remove_default_error_pages
26
+ remove_file 'public/404.html'
27
+ remove_file 'public/422.html'
28
+ remove_file 'public/500.html'
29
+ end
30
+ end
@@ -0,0 +1,28 @@
1
+ class Preseason::Recipe::Database < Preseason::Recipe
2
+ def recipe_root
3
+ # this is only used in the sqlite context
4
+ "#{template_path}/sqlite"
5
+ end
6
+
7
+ def prepare
8
+ config.database.sqlite? ? prepare_sqlite : prepare_default
9
+ append_to_file '.gitignore', "\n#{db_yml}"
10
+ end
11
+
12
+ private
13
+ def prepare_default
14
+ remove_file db_yml
15
+ create_file "#{db_yml}.dist", parse_template("database/#{db_yml}.dist.erb")
16
+ create_file db_yml, parse_template("database/#{db_yml}.erb")
17
+ end
18
+
19
+ def prepare_sqlite
20
+ mirror_file db_yml
21
+ copy_file "#{recipe_root}/#{db_yml}", "#{db_yml}.dist"
22
+ append_to_file '.gitignore', db_yml
23
+ end
24
+
25
+ def db_yml
26
+ 'config/database.yml'
27
+ end
28
+ end