armadura 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +11 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE +19 -0
  7. data/README.md +218 -0
  8. data/Rakefile +8 -0
  9. data/USAGE +9 -0
  10. data/armadura.gemspec +29 -0
  11. data/bin/armadura +23 -0
  12. data/bin/rake +16 -0
  13. data/bin/rspec +16 -0
  14. data/bin/setup +13 -0
  15. data/lib/armadura.rb +7 -0
  16. data/lib/armadura/actions.rb +33 -0
  17. data/lib/armadura/adapters/heroku.rb +118 -0
  18. data/lib/armadura/app_builder.rb +484 -0
  19. data/lib/armadura/generators/app_generator.rb +245 -0
  20. data/lib/armadura/generators/static_generator.rb +10 -0
  21. data/lib/armadura/generators/stylesheet_base_generator.rb +37 -0
  22. data/lib/armadura/version.rb +8 -0
  23. data/spec/adapters/heroku_spec.rb +57 -0
  24. data/spec/fakes/bin/heroku +5 -0
  25. data/spec/fakes/bin/hub +5 -0
  26. data/spec/features/cli_help_spec.rb +36 -0
  27. data/spec/features/github_spec.rb +16 -0
  28. data/spec/features/heroku_spec.rb +75 -0
  29. data/spec/features/new_project_spec.rb +295 -0
  30. data/spec/features/sidekiq_spec.rb +30 -0
  31. data/spec/spec_helper.rb +20 -0
  32. data/spec/support/armadura.rb +83 -0
  33. data/spec/support/fake_github.rb +21 -0
  34. data/spec/support/fake_heroku.rb +53 -0
  35. data/templates/Gemfile.erb +60 -0
  36. data/templates/Procfile +2 -0
  37. data/templates/README.md.erb +28 -0
  38. data/templates/_analytics.html.erb +7 -0
  39. data/templates/_css_overrides.html.erb +7 -0
  40. data/templates/_flashes.html.erb +7 -0
  41. data/templates/_javascript.html.erb +12 -0
  42. data/templates/action_mailer.rb +5 -0
  43. data/templates/app.json.erb +39 -0
  44. data/templates/application.scss +9 -0
  45. data/templates/armadura_gitignore +14 -0
  46. data/templates/armadura_layout.html.erb.erb +22 -0
  47. data/templates/bin_deploy +12 -0
  48. data/templates/bin_setup +22 -0
  49. data/templates/bin_setup_review_app.erb +19 -0
  50. data/templates/browserslist +3 -0
  51. data/templates/bundler_audit.rake +12 -0
  52. data/templates/capybara_webkit.rb +5 -0
  53. data/templates/circle.yml.erb +6 -0
  54. data/templates/config_locales_en.yml.erb +19 -0
  55. data/templates/database_cleaner_rspec.rb +21 -0
  56. data/templates/dev.rake +12 -0
  57. data/templates/dotfiles/.ctags +2 -0
  58. data/templates/dotfiles/.env +14 -0
  59. data/templates/errors.rb +34 -0
  60. data/templates/factories.rb +2 -0
  61. data/templates/factory_girl_rspec.rb +3 -0
  62. data/templates/flashes_helper.rb +5 -0
  63. data/templates/hound.yml +14 -0
  64. data/templates/i18n.rb +3 -0
  65. data/templates/json_encoding.rb +1 -0
  66. data/templates/postgresql_database.yml.erb +21 -0
  67. data/templates/puma.rb +28 -0
  68. data/templates/rack_mini_profiler.rb +5 -0
  69. data/templates/rails_helper.rb +22 -0
  70. data/templates/secrets.yml +14 -0
  71. data/templates/shoulda_matchers_config_rspec.rb +6 -0
  72. data/templates/sidekiq.yml +6 -0
  73. data/templates/smtp.rb +13 -0
  74. data/templates/spec_helper.rb +29 -0
  75. metadata +188 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 36b26941170980cabf20c58b602706e6d4c78f68
4
+ data.tar.gz: c54079e4c2e3c51d0bfb1fa4da0d4e6cb0ed7e9b
5
+ SHA512:
6
+ metadata.gz: ddcb0b5185a19ac82b5f3cf60848f2d4f89d98b0d519fb10e664e65e01de781f158ce1e1ef15d2e91040ab0d70882e83544b719e7db4bbdd81e4f99009bcbafa
7
+ data.tar.gz: 9b6c5cf924ea45ba115b4c3ae0b4f8ab0eacbc63b3e343dc9266439ff8d1b935ac94eb08bc8c5b6dbaaf872ac5f6f75170f37454344645d9a90e01b1f68c2f25
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ *.swp
3
+ Gemfile.lock
4
+ /.bundle
5
+ /tmp
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.3.1
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ rvm: 2.3.1
3
+ cache: bundler
4
+ sudo: false
5
+ before_install:
6
+ - "echo '--colour' > ~/.rspec"
7
+ - git config --global user.name 'Travis CI'
8
+ - git config --global user.email 'travis-ci@example.com'
9
+ install: bundle install
10
+ notifications:
11
+ email: false
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ The MIT License
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,218 @@
1
+ # Armadura [![Build Status](https://secure.travis-ci.org/mcmire/armadura.svg?branch=master)](http://travis-ci.org/mcmire/armadura)
2
+
3
+ Armadura is a gem that lets you generate a Rails application, preconfigured with
4
+ sensible defaults.
5
+
6
+ ## Installation
7
+
8
+ First install the armadura gem:
9
+
10
+ gem install armadura
11
+
12
+ Then run:
13
+
14
+ armadura projectname
15
+
16
+ This will create a Rails app in `projectname` using the latest version of Rails.
17
+
18
+ ### Associated services
19
+
20
+ * Enable [Circle CI](https://circleci.com/) Continuous Integration
21
+ * Enable [GitHub auto deploys to Heroku staging and review
22
+ apps](https://dashboard.heroku.com/apps/app-name-staging/deploy/github).
23
+
24
+ ## Gemfile
25
+
26
+ To see the latest and greatest gems, look at Armadura's
27
+ [Gemfile](templates/Gemfile.erb), which will be appended to the default
28
+ generated projectname/Gemfile.
29
+
30
+ It includes application gems like:
31
+
32
+ * [Autoprefixer Rails](https://github.com/ai/autoprefixer-rails) for CSS vendor prefixes
33
+ * [Bourbon](https://github.com/thoughtbot/bourbon) for Sass mixins
34
+ * [Bitters](https://github.com/thoughtbot/bitters) for scaffold application styles
35
+ * [Sidekiq](https://github.com/mperham/sidekiq) for background
36
+ processing
37
+ * [Flutie](https://github.com/thoughtbot/flutie) for `page_title` and `body_class` view
38
+ helpers
39
+ * [High Voltage](https://github.com/thoughtbot/high_voltage) for static pages
40
+ * [jQuery Rails](https://github.com/rails/jquery-rails) for jQuery
41
+ * [Neat](https://github.com/thoughtbot/neat) for semantic grids
42
+ * [Normalize](https://necolas.github.io/normalize.css/) for resetting browser styles
43
+ * [Postgres](https://github.com/ged/ruby-pg) for access to the Postgres database
44
+ * [Rack Canonical Host](https://github.com/tylerhunt/rack-canonical-host) to
45
+ ensure all requests are served from the same domain
46
+ * [Rack Timeout](https://github.com/heroku/rack-timeout) to abort requests that are
47
+ taking too long
48
+ * [Recipient Interceptor](https://github.com/croaky/recipient_interceptor) to
49
+ avoid accidentally sending emails to real people from staging
50
+ * [Refills](https://github.com/thoughtbot/refills) for “copy-paste” components
51
+ and patterns based on Bourbon, Neat and Bitters
52
+ * [Sentry](https://sentry.io) for exception notification
53
+ * [Simple Form](https://github.com/plataformatec/simple_form) for form markup
54
+ and style
55
+ * [Skylight](https://www.skylight.io/) for monitoring performance
56
+ * [Title](https://github.com/calebthompson/title) for storing titles in
57
+ translations
58
+ * [Puma](https://github.com/puma/puma) to serve HTTP requests
59
+
60
+ And development gems like:
61
+
62
+ * [Dotenv](https://github.com/bkeepers/dotenv) for loading environment variables
63
+ * [Pry Rails](https://github.com/rweng/pry-rails) for interactively exploring
64
+ objects
65
+ * [ByeBug](https://github.com/deivid-rodriguez/byebug) for interactively
66
+ debugging behavior
67
+ * [Bullet](https://github.com/flyerhzm/bullet) for help to kill N+1 queries and
68
+ unused eager loading
69
+ * [Bundler Audit](https://github.com/rubysec/bundler-audit) for scanning the
70
+ Gemfile for insecure dependencies based on published CVEs
71
+ * [Spring](https://github.com/rails/spring) for fast Rails actions via
72
+ pre-loading
73
+ * [Web Console](https://github.com/rails/web-console) for better debugging via
74
+ in-browser IRB consoles.
75
+
76
+ And testing gems like:
77
+
78
+ * [Capybara](https://github.com/jnicklas/capybara) and
79
+ [Capybara WebKit](https://github.com/thoughtbot/capybara-webkit) for
80
+ integration testing
81
+ * [Factory Girl](https://github.com/thoughtbot/factory_girl) for test data
82
+ * [Formulaic](https://github.com/thoughtbot/formulaic) for integration testing
83
+ HTML forms
84
+ * [RSpec](https://github.com/rspec/rspec) for unit testing
85
+ * [RSpec Mocks](https://github.com/rspec/rspec-mocks) for stubbing and spying
86
+ * [Shoulda Matchers](https://github.com/thoughtbot/shoulda-matchers) for common
87
+ RSpec matchers
88
+ * [Timecop](https://github.com/ferndopolis/timecop-console) for testing time
89
+
90
+ ## Other goodies
91
+
92
+ Armadura also comes with:
93
+
94
+ * The [`./bin/setup`][setup] convention for new developer setup
95
+ * The `./bin/deploy` convention for deploying to Heroku
96
+ * Rails' flashes set up and in application layout
97
+ * A few nice time formats set up for localization
98
+ * `Rack::Deflater` to [compress responses with Gzip][compress]
99
+ * A [low database connection pool limit][pool]
100
+ * [Safe binstubs][binstub]
101
+ * [t() and l() in specs without prefixing with I18n][i18n]
102
+ * An automatically-created `SECRET_KEY_BASE` environment variable in all
103
+ environments
104
+ * Configuration for [CircleCI][circle] Continuous Integration (tests)
105
+ * Configuration for [Hound][hound] Continuous Integration (style)
106
+ * The analytics adapter [Segment][segment] (and therefore config for Google
107
+ Analytics, Intercom, Facebook Ads, Twitter Ads, etc.)
108
+
109
+ [setup]: https://robots.thoughtbot.com/bin-setup
110
+ [compress]: https://robots.thoughtbot.com/content-compression-with-rack-deflater
111
+ [pool]: https://devcenter.heroku.com/articles/concurrency-and-database-connections
112
+ [binstub]: https://github.com/thoughtbot/suspenders/pull/282
113
+ [i18n]: https://github.com/thoughtbot/suspenders/pull/304
114
+ [circle]: https://circleci.com/docs
115
+ [hound]: https://houndci.com
116
+ [segment]: https://segment.com
117
+
118
+ ## Heroku
119
+
120
+ You can optionally create Heroku staging and production apps:
121
+
122
+ armadura app --heroku true
123
+
124
+ This:
125
+
126
+ * Creates a staging and production Heroku app
127
+ * Sets them as `staging` and `production` Git remotes
128
+ * Configures staging with `RACK_ENV` environment variable set
129
+ to `staging`
130
+ * Adds the [Rails Stdout Logging][logging-gem] gem
131
+ to configure the app to log to standard out,
132
+ which is how [Heroku's logging][heroku-logging] works.
133
+ * Creates a [Heroku Pipeline] for review apps
134
+
135
+ [logging-gem]: https://github.com/heroku/rails_stdout_logging
136
+ [heroku-logging]: https://devcenter.heroku.com/articles/logging#writing-to-your-log
137
+ [Heroku Pipeline]: https://devcenter.heroku.com/articles/pipelines
138
+
139
+ You can optionally specify alternate Heroku flags:
140
+
141
+ armadura app \
142
+ --heroku true \
143
+ --heroku-flags "--region eu --addons sendgrid,ssl"
144
+
145
+ See all possible Heroku flags:
146
+
147
+ heroku help create
148
+
149
+ ## Git
150
+
151
+ This will initialize a new git repository for your Rails app. You can
152
+ bypass this with the `--skip-git` option:
153
+
154
+ armadura app --skip-git true
155
+
156
+ ## GitHub
157
+
158
+ You can optionally create a GitHub repository for the suspended Rails app. It
159
+ requires that you have [Hub](https://github.com/github/hub) on your system:
160
+
161
+ curl http://hub.github.com/standalone -sLo ~/bin/hub && chmod +x ~/bin/hub
162
+ armadura app --github organization/project
163
+
164
+ This has the same effect as running:
165
+
166
+ hub create organization/project
167
+
168
+ ## Spring
169
+
170
+ Armadura uses [spring](https://github.com/rails/spring) by default.
171
+ It makes Rails applications load faster, but it might introduce confusing issues
172
+ around stale code not being refreshed.
173
+ If you think your application is running old code, run `spring stop`.
174
+ And if you'd rather not use spring, add `DISABLE_SPRING=1` to your login file.
175
+
176
+ ## Dependencies
177
+
178
+ Armadura requires the latest version of Ruby.
179
+
180
+ Some gems included in Armadura have native extensions. You should have GCC
181
+ installed on your machine before generating an app with Armadura.
182
+
183
+ Use [OS X GCC Installer](https://github.com/kennethreitz/osx-gcc-installer/) for
184
+ Snow Leopard (OS X 10.6).
185
+
186
+ Use [Command Line Tools for Xcode](https://developer.apple.com/downloads/index.action)
187
+ for Lion (OS X 10.7) or Mountain Lion (OS X 10.8).
188
+
189
+ We use [Capybara WebKit](https://github.com/thoughtbot/capybara-webkit) for
190
+ full-stack JavaScript integration testing. It requires QT. Instructions for
191
+ installing QT are
192
+ [here](https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit).
193
+
194
+ PostgreSQL needs to be installed and running for the `db:create` rake task.
195
+
196
+ ## Issues
197
+
198
+ If you have problems, please create a
199
+ [GitHub Issue](https://github.com/mcmire/armadura/issues).
200
+
201
+ ## Contributing
202
+
203
+ See [CONTRIBUTING.md](CONTRIBUTING.md).
204
+
205
+ Thank you, [contributors]!
206
+
207
+ [contributors]: https://github.com/thoughtbot/armadura/graphs/contributors
208
+
209
+ ## License
210
+
211
+ Armadura is copyright © 2016 Elliot Winkler.
212
+ It is adapted from [Suspenders], a [thoughtbot] project.
213
+ It is free software, and may be redistributed under the terms specified in the
214
+ [LICENSE] file.
215
+
216
+ [Suspenders]: https://github.com/thoughtbot/suspenders
217
+ [thoughtbot]: http://thoughtbot.com
218
+ [LICENSE]: LICENSE
data/Rakefile ADDED
@@ -0,0 +1,8 @@
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
data/USAGE ADDED
@@ -0,0 +1,9 @@
1
+ Description:
2
+ Armadura is a gem that lets you generate a Rails application, preconfigured
3
+ with sensible defaults.
4
+
5
+ Example usage:
6
+ # Instead of saying:
7
+ rails new weblog
8
+ # say:
9
+ armadura weblog
data/armadura.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'armadura/version'
4
+ require 'date'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.required_ruby_version = ">= #{Armadura::RUBY_VERSION}"
8
+ s.authors = ['Elliot Winkler <elliot.winkler@gmail.com>']
9
+ s.date = Date.today.strftime('%Y-%m-%d')
10
+ s.description = "Armadura generates Rails projects, preconfigured with sensible defaults."
11
+ s.summary = "Armadura generates Rails projects, preconfigured with sensible defaults."
12
+ s.email = 'elliot.winkler@gmail.com'
13
+ s.executables = ['armadura']
14
+ s.extra_rdoc_files = %w[README.md LICENSE]
15
+ s.files = `git ls-files`.split("\n")
16
+ s.homepage = 'https://github.com/mcmire/armadura'
17
+ s.license = 'MIT'
18
+ s.name = 'armadura'
19
+ s.rdoc_options = ['--charset=UTF-8']
20
+ s.require_paths = ['lib']
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.version = Armadura::VERSION
23
+
24
+ s.add_dependency 'bitters', '~> 1.3'
25
+ s.add_dependency 'bundler', '~> 1.3'
26
+ s.add_dependency 'rails', Armadura::RAILS_VERSION
27
+
28
+ s.add_development_dependency 'rspec', '~> 3.2'
29
+ end
data/bin/armadura ADDED
@@ -0,0 +1,23 @@
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 'armadura'
8
+
9
+ if ARGV.empty?
10
+ puts "Please provide a path for the new application"
11
+ puts
12
+ puts "See --help for more info"
13
+ exit 0
14
+ elsif ['-v', '--version'].include? ARGV[0]
15
+ puts Armadura::VERSION
16
+ exit 0
17
+ end
18
+
19
+ templates_root = File.expand_path(File.join("..", "templates"), File.dirname(__FILE__))
20
+ Armadura::AppGenerator.source_root templates_root
21
+ Armadura::AppGenerator.source_paths << Rails::Generators::AppGenerator.source_root << templates_root
22
+
23
+ Armadura::AppGenerator.start
data/bin/rake ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rake' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rake', 'rake')
data/bin/rspec ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rspec' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('rspec-core', 'rspec')
data/bin/setup ADDED
@@ -0,0 +1,13 @@
1
+ #!/bin/sh
2
+
3
+ # Run this script immediately after cloning the codebase.
4
+
5
+ # Exit if any subcommand fails
6
+ set -e
7
+
8
+ # Set up Ruby dependencies via Bundler
9
+ bundle install
10
+
11
+ # Add binstubs to PATH in ~/.zshenv like this:
12
+ # export PATH=".git/safe/../../bin:$PATH"
13
+ mkdir -p .git/safe
data/lib/armadura.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'armadura/version'
2
+ require 'armadura/generators/app_generator'
3
+ require 'armadura/generators/static_generator'
4
+ require 'armadura/generators/stylesheet_base_generator'
5
+ require 'armadura/actions'
6
+ require "armadura/adapters/heroku"
7
+ require 'armadura/app_builder'
@@ -0,0 +1,33 @@
1
+ module Armadura
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
+ config = "config.action_mailer.default_url_options = { host: #{host} }"
14
+ configure_environment(rails_env, config)
15
+ end
16
+
17
+ def configure_application_file(config)
18
+ inject_into_file(
19
+ "config/application.rb",
20
+ "\n\n #{config}",
21
+ before: "\n end"
22
+ )
23
+ end
24
+
25
+ def configure_environment(rails_env, config)
26
+ inject_into_file(
27
+ "config/environments/#{rails_env}.rb",
28
+ "\n\n #{config}",
29
+ before: "\nend"
30
+ )
31
+ end
32
+ end
33
+ end