re-rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/CONTRIBUTING.md +38 -0
  4. data/Gemfile +3 -0
  5. data/Gemfile.lock +133 -0
  6. data/LICENSE +21 -0
  7. data/README.md +181 -0
  8. data/Rakefile +13 -0
  9. data/bin/suspenders +18 -0
  10. data/lib/suspenders.rb +3 -0
  11. data/lib/suspenders/actions.rb +35 -0
  12. data/lib/suspenders/app_builder.rb +323 -0
  13. data/lib/suspenders/generators/app_generator.rb +199 -0
  14. data/lib/suspenders/version.rb +3 -0
  15. data/re-rails.gemspec +32 -0
  16. data/spec/fakes/bin/heroku +5 -0
  17. data/spec/fakes/bin/hub +5 -0
  18. data/spec/features/github_spec.rb +10 -0
  19. data/spec/features/heroku_spec.rb +12 -0
  20. data/spec/features/new_project_spec.rb +23 -0
  21. data/spec/spec_helper.rb +24 -0
  22. data/spec/support/fake_github.rb +21 -0
  23. data/spec/support/fake_heroku.rb +30 -0
  24. data/spec/support/suspenders.rb +50 -0
  25. data/templates/Gemfile_clean +49 -0
  26. data/templates/Procfile +2 -0
  27. data/templates/README.md.erb +25 -0
  28. data/templates/_flashes.html.erb +5 -0
  29. data/templates/_javascript.html.erb +10 -0
  30. data/templates/application.css.scss +8 -0
  31. data/templates/background_jobs_rspec.rb +19 -0
  32. data/templates/bin_setup +29 -0
  33. data/templates/config_locales_en.yml +11 -0
  34. data/templates/database_cleaner_rspec.rb +21 -0
  35. data/templates/disable_xml_params.rb +3 -0
  36. data/templates/errors.rb +28 -0
  37. data/templates/factories_spec.rb +13 -0
  38. data/templates/factories_spec_rake_task.rb +9 -0
  39. data/templates/factory_girl_syntax_rspec.rb +3 -0
  40. data/templates/postgresql_database.yml.erb +11 -0
  41. data/templates/rack_timeout.rb +1 -0
  42. data/templates/sample.env +3 -0
  43. data/templates/secret_token.rb +10 -0
  44. data/templates/smtp.rb +10 -0
  45. data/templates/spec_helper.rb +30 -0
  46. data/templates/staging.rb +3 -0
  47. data/templates/suspenders_gitignore +13 -0
  48. data/templates/suspenders_layout.html.erb.erb +15 -0
  49. data/templates/unicorn.rb +29 -0
  50. metadata +190 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 53239a141976bda37e896d53d22c1639799db73e
4
+ data.tar.gz: 062c449e1aa6e9e2687c82465db42d1a91efe48c
5
+ SHA512:
6
+ metadata.gz: 07a57ed4e907b685485c2a5967b2ba71e0d1b43d10f2a96fcd257c73d2bb27e7cfd87c3129f2bcfbae7e897bfd761fc9f19e4c2684f682c030553f823ce51d0c
7
+ data.tar.gz: c7dc4ce8bb01dce1ff60cca5ba994f0969db2e9e7c457abcb5ec73fbc5ca4b70a18080d4bba4127b1d307d65cf298b55c9449ce7444fd7aa1168081aaada304e
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ *.swp
3
+ /.bundle
4
+ /tmp/dummy
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,38 @@
1
+ We love pull requests. Here's a quick guide:
2
+
3
+ 1. Fork the repo.
4
+
5
+ 2. Run the tests. We only take pull requests with passing tests, and it's great
6
+ to know that you have a clean slate: `bundle && rake`
7
+
8
+ 3. Add a test for your change. Only refactoring and documentation changes
9
+ require no new tests. If you are adding functionality or fixing a bug, we need
10
+ a test!
11
+
12
+ 4. Make the test pass.
13
+
14
+ 5. Push to your fork and submit a pull request.
15
+
16
+
17
+ At this point you're waiting on us. We like to at least comment on, if not
18
+ accept, pull requests within three business days (and, typically, one business
19
+ day). We may suggest some changes or improvements or alternatives.
20
+
21
+ Some things that will increase the chance that your pull request is accepted,
22
+ taken straight from the Ruby on Rails guide:
23
+
24
+ * Use Rails idioms and helpers
25
+ * Include tests that fail without your code, and pass with it
26
+ * Update the documentation, the surrounding one, examples elsewhere, guides,
27
+ whatever is affected by your contribution
28
+
29
+ Syntax:
30
+
31
+ * Two spaces, no tabs.
32
+ * No trailing whitespace. Blank lines should not have any space.
33
+ * Prefer &&/|| over and/or.
34
+ * my_method(my_arg) not my_method( my_arg ) or my_method my_arg.
35
+ * a = b and not a=b.
36
+ * Follow the conventions you see used in the source already.
37
+
38
+ And in case we didn't emphasize it enough: we love tests!
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,133 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ re-rails (0.1.0)
5
+ bundler (~> 1.3)
6
+ rails (= 4.0.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actionmailer (4.0.0)
12
+ actionpack (= 4.0.0)
13
+ mail (~> 2.5.3)
14
+ actionpack (4.0.0)
15
+ activesupport (= 4.0.0)
16
+ builder (~> 3.1.0)
17
+ erubis (~> 2.7.0)
18
+ rack (~> 1.5.2)
19
+ rack-test (~> 0.6.2)
20
+ activemodel (4.0.0)
21
+ activesupport (= 4.0.0)
22
+ builder (~> 3.1.0)
23
+ activerecord (4.0.0)
24
+ activemodel (= 4.0.0)
25
+ activerecord-deprecated_finders (~> 1.0.2)
26
+ activesupport (= 4.0.0)
27
+ arel (~> 4.0.0)
28
+ activerecord-deprecated_finders (1.0.3)
29
+ activesupport (4.0.0)
30
+ i18n (~> 0.6, >= 0.6.4)
31
+ minitest (~> 4.2)
32
+ multi_json (~> 1.3)
33
+ thread_safe (~> 0.1)
34
+ tzinfo (~> 0.3.37)
35
+ arel (4.0.2)
36
+ aruba (0.5.3)
37
+ childprocess (>= 0.3.6)
38
+ cucumber (>= 1.1.1)
39
+ rspec-expectations (>= 2.7.0)
40
+ atomic (1.1.14)
41
+ builder (3.1.4)
42
+ capybara (2.2.0)
43
+ mime-types (>= 1.16)
44
+ nokogiri (>= 1.3.3)
45
+ rack (>= 1.0.0)
46
+ rack-test (>= 0.5.4)
47
+ xpath (~> 2.0)
48
+ childprocess (0.3.9)
49
+ ffi (~> 1.0, >= 1.0.11)
50
+ cucumber (1.3.3)
51
+ builder (>= 2.1.2)
52
+ diff-lcs (>= 1.1.3)
53
+ gherkin (~> 2.12.0)
54
+ multi_json (~> 1.7.5)
55
+ multi_test (~> 0.0.1)
56
+ diff-lcs (1.2.4)
57
+ erubis (2.7.0)
58
+ ffi (1.9.0)
59
+ ffi (1.9.0-x86-mingw32)
60
+ gherkin (2.12.0)
61
+ multi_json (~> 1.3)
62
+ gherkin (2.12.0-x86-mingw32)
63
+ multi_json (~> 1.3)
64
+ hike (1.2.3)
65
+ i18n (0.6.9)
66
+ mail (2.5.4)
67
+ mime-types (~> 1.16)
68
+ treetop (~> 1.4.8)
69
+ mime-types (1.25.1)
70
+ mini_portile (0.5.2)
71
+ minitest (4.7.5)
72
+ multi_json (1.7.7)
73
+ multi_test (0.0.1)
74
+ nokogiri (1.6.1)
75
+ mini_portile (~> 0.5.0)
76
+ nokogiri (1.6.1-x86-mingw32)
77
+ mini_portile (~> 0.5.0)
78
+ polyglot (0.3.3)
79
+ rack (1.5.2)
80
+ rack-test (0.6.2)
81
+ rack (>= 1.0)
82
+ rails (4.0.0)
83
+ actionmailer (= 4.0.0)
84
+ actionpack (= 4.0.0)
85
+ activerecord (= 4.0.0)
86
+ activesupport (= 4.0.0)
87
+ bundler (>= 1.3.0, < 2.0)
88
+ railties (= 4.0.0)
89
+ sprockets-rails (~> 2.0.0)
90
+ railties (4.0.0)
91
+ actionpack (= 4.0.0)
92
+ activesupport (= 4.0.0)
93
+ rake (>= 0.8.7)
94
+ thor (>= 0.18.1, < 2.0)
95
+ rake (10.1.1)
96
+ rspec (2.14.1)
97
+ rspec-core (~> 2.14.0)
98
+ rspec-expectations (~> 2.14.0)
99
+ rspec-mocks (~> 2.14.0)
100
+ rspec-core (2.14.7)
101
+ rspec-expectations (2.14.0)
102
+ diff-lcs (>= 1.1.3, < 2.0)
103
+ rspec-mocks (2.14.4)
104
+ sprockets (2.10.1)
105
+ hike (~> 1.2)
106
+ multi_json (~> 1.0)
107
+ rack (~> 1.0)
108
+ tilt (~> 1.1, != 1.3.0)
109
+ sprockets-rails (2.0.1)
110
+ actionpack (>= 3.0)
111
+ activesupport (>= 3.0)
112
+ sprockets (~> 2.8)
113
+ thor (0.18.1)
114
+ thread_safe (0.1.3)
115
+ atomic
116
+ tilt (1.4.1)
117
+ treetop (1.4.15)
118
+ polyglot
119
+ polyglot (>= 0.3.1)
120
+ tzinfo (0.3.38)
121
+ xpath (2.0.0)
122
+ nokogiri (~> 1.3)
123
+
124
+ PLATFORMS
125
+ ruby
126
+ x86-mingw32
127
+
128
+ DEPENDENCIES
129
+ aruba (~> 0.5.2)
130
+ capybara
131
+ cucumber (~> 1.2)
132
+ re-rails!
133
+ rspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2010-2012 Mike Burns and thoughtbot, inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,181 @@
1
+ # re-rails
2
+ re-rails is a customized version of [Suspenders](https://github.com/thoughtbot/suspenders)the base Rails application used at [thoughtbot](http://thoughtbot.com/community).
3
+
4
+ Installation
5
+ ------------
6
+ ### From Ruby-Gems
7
+ First install the re-rails gem:
8
+
9
+ gem install re-rails
10
+
11
+ Then run:
12
+
13
+ re-rails projectname
14
+
15
+ This will create a Rails 4.0 app in `projectname`.
16
+
17
+ By default this script creates a new git repository. See below if you
18
+ want to use it against an existing repo.
19
+
20
+ ### From Source
21
+
22
+ First Clone the repo
23
+
24
+ git clone git@github.com:re-analytics/re-rails.git
25
+
26
+ _or_
27
+
28
+ hub clone re-analytics/re-rails
29
+
30
+ then cd into the directory and run `rake build`
31
+
32
+ Gemfile
33
+ -------
34
+
35
+ To see the latest and greatest gems, look at re-rails'
36
+ [templates/Gemfile_clean](templates/Gemfile_clean),
37
+ which will be appended to the default generated projectname/Gemfile.
38
+
39
+ It includes application gems like:
40
+
41
+ * [Bourbon](https://github.com/thoughtbot/bourbon) for Sass mixins
42
+ * [Delayed Job](https://github.com/collectiveidea/delayed_job) for background
43
+ processing
44
+ * [Email Validator](https://github.com/balexand/email_validator) for email
45
+ validation
46
+ * [Flutie](https://github.com/thoughtbot/flutie) for `page_title` and
47
+ `body_class` view helpers
48
+ * [High Voltage](https://github.com/thoughtbot/high_voltage) for static pages
49
+ * [jQuery Rails](https://github.com/rails/jquery-rails) for jQuery
50
+ * [Neat](https://github.com/thoughtbot/neat) for semantic grids
51
+ * [Postgres](https://github.com/ged/ruby-pg) for access to the Postgres database
52
+ * [Rack Timeout](https://github.com/kch/rack-timeout) to abort requests that are
53
+ taking too long
54
+ * [Recipient Interceptor](https://github.com/croaky/recipient_interceptor) to
55
+ avoid accidentally sending emails to real people from staging
56
+ * [Simple Form](https://github.com/plataformatec/simple_form) for form markup
57
+ and style
58
+ * [Unicorn](https://github.com/defunkt/unicorn) to serve HTTP requests
59
+ * [Cancan](https://github.com/ryanb/cancan) for authorization
60
+ * [Devise](https://github.com/plataformatec/devise) for authentication
61
+ And gems only for staging and production like:
62
+
63
+ * [New Relic RPM](https://github.com/newrelic/rpm) for monitoring performance
64
+ * [Rails 12 Factor](https://github.com/heroku/rails_12factor) to make running
65
+ Rails 4 apps easier on Heroku
66
+
67
+ And testing gems like:
68
+
69
+ * [Capybara](https://github.com/jnicklas/capybara) and
70
+ [Capybara Webkit](https://github.com/thoughtbot/capybara-webkit) for
71
+ integration testing
72
+ * [Factory Girl](https://github.com/thoughtbot/factory_girl) for test data
73
+ * [RSpec](https://github.com/rspec/rspec) for unit testing
74
+ * [RSpec Mocks](https://github.com/rspec/rspec-mocks) for stubbing and spying
75
+ * [Shoulda Matchers](https://github.com/thoughtbot/shoulda-matchers) for common
76
+ RSpec matchers
77
+ * [Timecop](https://github.com/jtrupiano/timecop-console) for testing time
78
+
79
+ Other goodies
80
+ -------------
81
+
82
+ re-rails also comes with:
83
+
84
+ * The [`./bin/setup`][bin] convention for new developer setup
85
+ * Rails' flashes set up and in application layout
86
+ * A few nice time formats set up for localization
87
+ * `Rack::Deflater` to [compress responses with Gzip][compress]
88
+ * [Fast-failing factories][fast]
89
+
90
+ [bin]: http://robots.thoughtbot.com/bin-setup
91
+ [compress]: http://robots.thoughtbot.com/content-compression-with-rack-deflater/
92
+ [fast]: http://robots.thoughtbot.com/testing-your-factories-first
93
+
94
+ re-rails fixes several of Rails' [insecure defaults]:
95
+
96
+ * re-rails uses Unicorn instead of WEBrick, allowing less verbose Server
97
+ headers.
98
+ * re-rails is configured to pull your application secret key base from an
99
+ environment variable, which means you won't need to risk placing it in version
100
+ control.
101
+
102
+ [insecure defaults]: http://blog.codeclimate.com/blog/2013/03/27/rails-insecure-defaults/
103
+
104
+ Heroku
105
+ ------
106
+
107
+ You can optionally create Heroku staging and production apps:
108
+
109
+ re-rails app --heroku true
110
+
111
+ This:
112
+
113
+ * Creates a staging and production Heroku app
114
+ * Sets them as `staging` and `production` Git remotes
115
+ * Configures staging with `RACK_ENV` and `RAILS_ENV` environment variables set
116
+ to `staging`
117
+
118
+ Git
119
+ ---
120
+
121
+ This will initialize a new git repository for your Rails app. You can
122
+ bypass this with the `--skip-git` option:
123
+
124
+ re-rails app --skip-git true
125
+
126
+ GitHub
127
+ ------
128
+
129
+ You can optionally create a GitHub repository for the suspended Rails app. It
130
+ requires that you have [Hub](https://github.com/github/hub) on your system:
131
+
132
+ curl http://hub.github.com/standalone -sLo ~/bin/hub && chmod +x ~/bin/hub
133
+ re-rails app --github organization/project
134
+
135
+ This has the same effect as running:
136
+
137
+ hub create organization/project
138
+
139
+ Dependencies
140
+ ------------
141
+
142
+ re-rails requires Ruby 1.9.2 or greater.
143
+
144
+ Some gems included in re-rails have native extensions. You should have GCC
145
+ installed on your machine before generating an app with re-rails.
146
+
147
+ Use [OS X GCC Installer](https://github.com/kennethreitz/osx-gcc-installer/) for
148
+ Snow Leopard (OS X 10.6).
149
+
150
+ Use [Command Line Tools for XCode](https://developer.apple.com/downloads/index.action)
151
+ for Lion (OS X 10.7) or Mountain Lion (OS X 10.8).
152
+
153
+ We use [Capybara Webkit](https://github.com/thoughtbot/capybara-webkit) for
154
+ full-stack Javascript integration testing. It requires QT. Instructions for
155
+ installing QT are
156
+ [here](https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit).
157
+
158
+ PostgreSQL needs to be installed and running for the `db:create` rake task.
159
+
160
+ Issues
161
+ ------
162
+
163
+ If you have problems, please create a
164
+ [Github Issue](https://github.com/re-analytics/re-rails/issues).
165
+
166
+ Contributing
167
+ ------------
168
+
169
+ Please see CONTRIBUTING.md for details.
170
+
171
+ Credits
172
+ -------
173
+
174
+ ![thoughtbot](http://thoughtbot.com/images/tm/logo.png)
175
+ re-rails is based off [Suspenders](https://github.com/thoughtbot/suspenders) which is maintained and funded by [thoughtbot, inc](http://thoughtbot.com/community).
176
+
177
+ The names and logos for thoughtbot are trademarks of thoughtbot, inc.
178
+
179
+ License
180
+ -------
181
+ Licensed Under MIT
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require 'bundler/setup'
2
+ require 'bundler/gem_tasks'
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:rspec)
6
+
7
+ desc 'Run the test suite'
8
+ task :default => :rspec
9
+
10
+ desc 'Update Ruby gems'
11
+ task :update_gem do
12
+ exec 'gem update --system'
13
+ end
data/bin/suspenders ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+
4
+ source_path = (Pathname.new(__FILE__).dirname + '../lib').expand_path
5
+ $LOAD_PATH << source_path
6
+
7
+ require 'suspenders'
8
+
9
+ if ['create', '--create'].include? ARGV[0]
10
+ ARGV.shift
11
+ puts "[WARNING] the suspenders create argument is deprecated. Just use `suspenders #{ARGV.join}` instead"
12
+ end
13
+
14
+ templates_root = File.expand_path(File.join("..", "templates"), File.dirname(__FILE__))
15
+ Suspenders::AppGenerator.source_root templates_root
16
+ Suspenders::AppGenerator.source_paths << Rails::Generators::AppGenerator.source_root << templates_root
17
+
18
+ Suspenders::AppGenerator.start
data/lib/suspenders.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'suspenders/generators/app_generator'
2
+ require 'suspenders/actions'
3
+ require 'suspenders/app_builder'
@@ -0,0 +1,35 @@
1
+ module Suspenders
2
+ module Actions
3
+ def replace_in_file(relative_path, find, replace)
4
+ path = File.join(destination_root, relative_path)
5
+ contents = IO.read(path)
6
+ unless contents.gsub!(find, replace)
7
+ raise "#{find.inspect} not found in #{relative_path}"
8
+ end
9
+ File.open(path, "w") { |file| file.write(contents) }
10
+ end
11
+
12
+ def action_mailer_host(rails_env, host)
13
+ host_config = "config.action_mailer.default_url_options = { host: '#{host}' }"
14
+ configure_environment(rails_env, host_config)
15
+ end
16
+
17
+ def configure_environment(rails_env, config)
18
+ inject_into_file(
19
+ "config/environments/#{rails_env}.rb",
20
+ "\n\n #{config}",
21
+ before: "\nend"
22
+ )
23
+ end
24
+
25
+ def download_file(uri_string, destination)
26
+ uri = URI.parse(uri_string)
27
+ http = Net::HTTP.new(uri.host, uri.port)
28
+ http.use_ssl = true if uri_string =~ /^https/
29
+ request = Net::HTTP::Get.new(uri.path)
30
+ contents = http.request(request).body
31
+ path = File.join(destination_root, destination)
32
+ File.open(path, "w") { |file| file.write(contents) }
33
+ end
34
+ end
35
+ end