railslove-suspenders 0.1.0

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 (61) hide show
  1. data/.gitignore +9 -0
  2. data/.travis.yml +6 -0
  3. data/CONTRIBUTING.md +38 -0
  4. data/Gemfile +3 -0
  5. data/Gemfile.lock +94 -0
  6. data/LICENSE +21 -0
  7. data/NEWS.md +99 -0
  8. data/README.md +125 -0
  9. data/Rakefile +8 -0
  10. data/bin/railslove-suspenders +16 -0
  11. data/features/github_repo.feature +8 -0
  12. data/features/heroku_true.feature +9 -0
  13. data/features/rake_clean.feature +15 -0
  14. data/features/step_definitions/suspenders_steps.rb +68 -0
  15. data/features/support/bin/heroku +5 -0
  16. data/features/support/bin/hub +5 -0
  17. data/features/support/env.rb +10 -0
  18. data/features/support/fake_github.rb +21 -0
  19. data/features/support/fake_heroku.rb +21 -0
  20. data/lib/railslove-suspenders/actions.rb +40 -0
  21. data/lib/railslove-suspenders/app_builder.rb +335 -0
  22. data/lib/railslove-suspenders/generators/app_generator.rb +202 -0
  23. data/lib/railslove-suspenders/version.rb +4 -0
  24. data/railslove-suspenders.gemspec +33 -0
  25. data/templates/Gemfile_clean +42 -0
  26. data/templates/Procfile +2 -0
  27. data/templates/README.md.erb +9 -0
  28. data/templates/_flashes.html.haml +3 -0
  29. data/templates/_javascript.html.haml +3 -0
  30. data/templates/background_jobs_rspec.rb +19 -0
  31. data/templates/bin_setup +11 -0
  32. data/templates/config_locales_en.yml +11 -0
  33. data/templates/database_cleaner_rspec.rb +21 -0
  34. data/templates/disable_xml_params.rb +3 -0
  35. data/templates/email_validator.rb +7 -0
  36. data/templates/errors.rb +28 -0
  37. data/templates/factories_spec.rb +14 -0
  38. data/templates/factories_spec_rake_task.rb +9 -0
  39. data/templates/factory_girl_syntax_rspec.rb +3 -0
  40. data/templates/import_scss_styles +3 -0
  41. data/templates/javascripts/prefilled_input.js +59 -0
  42. data/templates/postgresql_database.yml.erb +11 -0
  43. data/templates/rack_timeout.rb +1 -0
  44. data/templates/rspec +3 -0
  45. data/templates/sample.env +2 -0
  46. data/templates/simplecov_init.rb +3 -0
  47. data/templates/smtp.rb +10 -0
  48. data/templates/strong_parameters.rb +1 -0
  49. data/templates/stylesheets/_shame.css.sass +0 -0
  50. data/templates/stylesheets/application.css.sass +14 -0
  51. data/templates/stylesheets/base/_colors.css.sass +7 -0
  52. data/templates/stylesheets/base/_dimension.css.sass +2 -0
  53. data/templates/stylesheets/base/_element_defaults.css.sass +5 -0
  54. data/templates/stylesheets/base/_global_mixins.css.sass +3 -0
  55. data/templates/stylesheets/base/_icon_font.css.sass +0 -0
  56. data/templates/stylesheets/base/_sprites.css.sass +0 -0
  57. data/templates/stylesheets/base/_typography.css.sass +3 -0
  58. data/templates/suspenders_gitignore +10 -0
  59. data/templates/suspenders_layout.html.haml +12 -0
  60. data/templates/unicorn.rb +26 -0
  61. metadata +175 -0
@@ -0,0 +1,21 @@
1
+ RSpec.configure do |config|
2
+ config.before(:suite) do
3
+ DatabaseCleaner.clean_with(:deletion)
4
+ end
5
+
6
+ config.before(:each) do
7
+ DatabaseCleaner.strategy = :transaction
8
+ end
9
+
10
+ config.before(:each, :js => true) do
11
+ DatabaseCleaner.strategy = :deletion
12
+ end
13
+
14
+ config.before(:each) do
15
+ DatabaseCleaner.start
16
+ end
17
+
18
+ config.after(:each) do
19
+ DatabaseCleaner.clean
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ # Protect against injection attacks
2
+ # http://www.kb.cert.org/vuls/id/380039
3
+ ActionDispatch::ParamsParser::DEFAULT_PARSERS.delete(Mime::XML)
@@ -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
@@ -0,0 +1,28 @@
1
+ require 'net/http'
2
+ require 'net/smtp'
3
+
4
+ # Example:
5
+ # begin
6
+ # some http call
7
+ # rescue *HTTP_ERRORS => error
8
+ # notify_hoptoad error
9
+ # end
10
+
11
+ HTTP_ERRORS = [Timeout::Error,
12
+ Errno::EINVAL,
13
+ Errno::ECONNRESET,
14
+ EOFError,
15
+ Net::HTTPBadResponse,
16
+ Net::HTTPHeaderSyntaxError,
17
+ Net::ProtocolError]
18
+
19
+ SMTP_SERVER_ERRORS = [TimeoutError,
20
+ IOError,
21
+ Net::SMTPUnknownError,
22
+ Net::SMTPServerBusy,
23
+ Net::SMTPAuthenticationError]
24
+
25
+ SMTP_CLIENT_ERRORS = [Net::SMTPFatalError,
26
+ Net::SMTPSyntaxError]
27
+
28
+ SMTP_ERRORS = SMTP_SERVER_ERRORS + SMTP_CLIENT_ERRORS
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'validate FactoryGirl factories' do
4
+ FactoryGirl.factories.each do |factory|
5
+ context "with factory for :#{factory.name}" do
6
+ subject { FactoryGirl.build(factory.name) }
7
+
8
+ it 'is valid' do
9
+ is_valid = subject.valid?
10
+ expect(is_valid).to be_true, subject.errors.full_messages.join(',')
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+
2
+ if defined?(RSpec)
3
+ desc 'Run factory specs.'
4
+ RSpec::Core::RakeTask.new(:factory_specs) do |t|
5
+ t.pattern = './spec/models/factories_spec.rb'
6
+ end
7
+
8
+ task spec: :factory_specs
9
+ end
@@ -0,0 +1,3 @@
1
+ RSpec.configure do |config|
2
+ config.include FactoryGirl::Syntax::Methods
3
+ end
@@ -0,0 +1,3 @@
1
+
2
+
3
+ @import 'bourbon';
@@ -0,0 +1,59 @@
1
+ // clear inputs with starter values
2
+ new function($) {
3
+ $.fn.prefilledInput = function() {
4
+
5
+ var focus = function () {
6
+ $(this).removeClass('prefilled');
7
+ if (this.value == this.prefilledValue) {
8
+ this.value = '';
9
+ }
10
+ };
11
+
12
+ var blur = function () {
13
+ if (this.value == '') {
14
+ $(this).addClass('prefilled').val(this.prefilledValue);
15
+ } else if (this.value != this.prefilledValue) {
16
+ $(this).removeClass('prefilled');
17
+ }
18
+ };
19
+
20
+ var extractPrefilledValue = function () {
21
+ if (this.title) {
22
+ this.prefilledValue = this.title;
23
+ this.title = '';
24
+ } else if (this.id) {
25
+ this.prefilledValue = $('label[for=' + this.id + ']').hide().text();
26
+ }
27
+ if (this.prefilledValue) {
28
+ this.prefilledValue = this.prefilledValue.replace(/\*$/, '');
29
+ }
30
+ };
31
+
32
+ var initialize = function (index) {
33
+ if (!this.prefilledValue) {
34
+ this.extractPrefilledValue = extractPrefilledValue;
35
+ this.extractPrefilledValue();
36
+ $(this).trigger('blur');
37
+ }
38
+ };
39
+
40
+ return this.filter(":input").
41
+ focus(focus).
42
+ blur(blur).
43
+ each(initialize);
44
+ };
45
+
46
+ var clearPrefilledInputs = function () {
47
+ var form = this.form || this;
48
+ $(form).find("input.prefilled, textarea.prefilled").val("");
49
+ };
50
+
51
+ var prefilledSetup = function () {
52
+ $('input.prefilled, textarea.prefilled').prefilledInput();
53
+ $('form').submit(clearPrefilledInputs);
54
+ $('input:submit, button:submit').click(clearPrefilledInputs);
55
+ };
56
+
57
+ $(document).ready(prefilledSetup);
58
+ $(document).ajaxComplete(prefilledSetup);
59
+ }(jQuery);
@@ -0,0 +1,11 @@
1
+ development: &default
2
+ adapter: postgresql
3
+ database: <%= app_name %>_development
4
+ encoding: utf8
5
+ min_messages: warning
6
+ pool: 5
7
+ timeout: 5000
8
+
9
+ test:
10
+ <<: *default
11
+ database: <%= app_name %>_test
@@ -0,0 +1 @@
1
+ Rack::Timeout.timeout = (ENV['TIMEOUT_IN_SECONDS'] || 5).to_i
data/templates/rspec ADDED
@@ -0,0 +1,3 @@
1
+ --colour
2
+ --drb
3
+ --profile
@@ -0,0 +1,2 @@
1
+ # http://ddollar.github.com/foreman/
2
+ RACK_ENV=development
@@ -0,0 +1,3 @@
1
+ require 'simplecov'
2
+ SimpleCov.start 'rails'
3
+
data/templates/smtp.rb ADDED
@@ -0,0 +1,10 @@
1
+ if Rails.env.staging? || Rails.env.production?
2
+ SMTP_SETTINGS = {
3
+ address: ENV['SMTP_ADDRESS'], # example: 'smtp.sendgrid.net'
4
+ authentication: :plain,
5
+ domain: ENV['SMTP_DOMAIN'], # example: 'this-app.com'
6
+ password: ENV['SMTP_PASSWORD'],
7
+ port: '587',
8
+ user_name: ENV['SMTP_USERNAME']
9
+ }
10
+ end
@@ -0,0 +1 @@
1
+ ActiveRecord::Base.send :include, ActiveModel::ForbiddenAttributesProtection
File without changes
@@ -0,0 +1,14 @@
1
+ // gems
2
+ @import compass
3
+
4
+ // base
5
+ @import base/colors
6
+ @import base/dimensions
7
+ @import base/global_mixins
8
+ @import base/element_defaults
9
+ @import base/icon_font
10
+ @import base/sprites
11
+ @import base/typography
12
+
13
+ @import layout/*
14
+ @import modules/*
@@ -0,0 +1,7 @@
1
+ $black: #000
2
+ $white: #FFF
3
+
4
+ // ----- color mappings ------
5
+
6
+ // backgrounds
7
+ // $background-color: $white
@@ -0,0 +1,2 @@
1
+ $padding: 10px
2
+ $margin: 20px
@@ -0,0 +1,5 @@
1
+ html, body
2
+ margin: 0
3
+ padding: 0
4
+ img
5
+ border: none
@@ -0,0 +1,3 @@
1
+ =layout_width($width)
2
+ width: $width
3
+ margin: 0 auto
File without changes
File without changes
@@ -0,0 +1,3 @@
1
+ // $big-font-size: 20px
2
+ // $default-font-size: 14px
3
+ // $small-font-size: 12px
@@ -0,0 +1,10 @@
1
+ !.keep
2
+ *.DS_Store
3
+ *.swp
4
+ .env
5
+ bin/stubs
6
+ coverage/*
7
+ public/system
8
+ rerun.txt
9
+ tags
10
+ vendor/bundler_gems
@@ -0,0 +1,12 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %meta{:charset => "utf-8"}/
5
+ %meta{:content => "NOODP", :name => "ROBOTS"}/
6
+ %title = page_title
7
+ = stylesheet_link_tag :application, :media => 'all'
8
+ = csrf_meta_tags
9
+ %body{class: controller_name, id: "#{controller_name}_#{action_name}"}
10
+ = render 'flashes'
11
+ = yield
12
+ = render 'javascript'
@@ -0,0 +1,26 @@
1
+ # https://devcenter.heroku.com/articles/rails-unicorn
2
+
3
+ worker_processes (ENV['WEB_CONCURRENCY'] || 3).to_i
4
+ timeout (ENV['WEB_TIMEOUT'] || 5).to_i
5
+ preload_app true
6
+
7
+ before_fork do |server, worker|
8
+ Signal.trap 'TERM' do
9
+ puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
10
+ Process.kill 'QUIT', Process.pid
11
+ end
12
+
13
+ if defined? ActiveRecord::Base
14
+ ActiveRecord::Base.connection.disconnect!
15
+ end
16
+ end
17
+
18
+ after_fork do |server, worker|
19
+ Signal.trap 'TERM' do
20
+ puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to sent QUIT'
21
+ end
22
+
23
+ if defined? ActiveRecord::Base
24
+ ActiveRecord::Base.establish_connection
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: railslove-suspenders
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - stephanpavlovic
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: hub
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '1.10'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '1.10'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rails
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - '='
52
+ - !ruby/object:Gem::Version
53
+ version: 3.2.13
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 3.2.13
62
+ description: ! 'Suspenders is a base Rails project that you can upgrade. It is used
63
+ by
64
+
65
+ thoughtbot to get a jump start on a working app. Use Suspenders if you''re in a
66
+
67
+ rush to build something amazing; don''t use it if you like missing deadlines.
68
+
69
+ '
70
+ email: stephan@railslove.com
71
+ executables:
72
+ - railslove-suspenders
73
+ extensions: []
74
+ extra_rdoc_files:
75
+ - README.md
76
+ - LICENSE
77
+ files:
78
+ - .gitignore
79
+ - .travis.yml
80
+ - CONTRIBUTING.md
81
+ - Gemfile
82
+ - Gemfile.lock
83
+ - LICENSE
84
+ - NEWS.md
85
+ - README.md
86
+ - Rakefile
87
+ - bin/railslove-suspenders
88
+ - features/github_repo.feature
89
+ - features/heroku_true.feature
90
+ - features/rake_clean.feature
91
+ - features/step_definitions/suspenders_steps.rb
92
+ - features/support/bin/heroku
93
+ - features/support/bin/hub
94
+ - features/support/env.rb
95
+ - features/support/fake_github.rb
96
+ - features/support/fake_heroku.rb
97
+ - lib/railslove-suspenders/actions.rb
98
+ - lib/railslove-suspenders/app_builder.rb
99
+ - lib/railslove-suspenders/generators/app_generator.rb
100
+ - lib/railslove-suspenders/version.rb
101
+ - railslove-suspenders.gemspec
102
+ - templates/Gemfile_clean
103
+ - templates/Procfile
104
+ - templates/README.md.erb
105
+ - templates/_flashes.html.haml
106
+ - templates/_javascript.html.haml
107
+ - templates/background_jobs_rspec.rb
108
+ - templates/bin_setup
109
+ - templates/config_locales_en.yml
110
+ - templates/database_cleaner_rspec.rb
111
+ - templates/disable_xml_params.rb
112
+ - templates/email_validator.rb
113
+ - templates/errors.rb
114
+ - templates/factories_spec.rb
115
+ - templates/factories_spec_rake_task.rb
116
+ - templates/factory_girl_syntax_rspec.rb
117
+ - templates/import_scss_styles
118
+ - templates/javascripts/prefilled_input.js
119
+ - templates/postgresql_database.yml.erb
120
+ - templates/rack_timeout.rb
121
+ - templates/rspec
122
+ - templates/sample.env
123
+ - templates/simplecov_init.rb
124
+ - templates/smtp.rb
125
+ - templates/strong_parameters.rb
126
+ - templates/stylesheets/_shame.css.sass
127
+ - templates/stylesheets/application.css.sass
128
+ - templates/stylesheets/base/_colors.css.sass
129
+ - templates/stylesheets/base/_dimension.css.sass
130
+ - templates/stylesheets/base/_element_defaults.css.sass
131
+ - templates/stylesheets/base/_global_mixins.css.sass
132
+ - templates/stylesheets/base/_icon_font.css.sass
133
+ - templates/stylesheets/base/_sprites.css.sass
134
+ - templates/stylesheets/base/_typography.css.sass
135
+ - templates/suspenders_gitignore
136
+ - templates/suspenders_layout.html.haml
137
+ - templates/unicorn.rb
138
+ homepage: http://github.com/railslove/railslove-suspenders
139
+ licenses: []
140
+ post_install_message:
141
+ rdoc_options:
142
+ - --charset=UTF-8
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: 1.9.2
151
+ required_rubygems_version: !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ segments:
158
+ - 0
159
+ hash: -4278784182071573656
160
+ requirements: []
161
+ rubyforge_project:
162
+ rubygems_version: 1.8.21
163
+ signing_key:
164
+ specification_version: 3
165
+ summary: Generate a Rails app using thoughtbot's best practices.
166
+ test_files:
167
+ - features/github_repo.feature
168
+ - features/heroku_true.feature
169
+ - features/rake_clean.feature
170
+ - features/step_definitions/suspenders_steps.rb
171
+ - features/support/bin/heroku
172
+ - features/support/bin/hub
173
+ - features/support/env.rb
174
+ - features/support/fake_github.rb
175
+ - features/support/fake_heroku.rb