valley-rails-generator 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/README.md +16 -0
- data/bin/valleyrailsgen +11 -0
- data/lib/valley-rails-generator/actions.rb +40 -0
- data/lib/valley-rails-generator/app_builder.rb +291 -0
- data/lib/valley-rails-generator/generators/app_generator.rb +182 -0
- data/lib/valley-rails-generator/version.rb +3 -0
- data/templates/Gemfile_clean +37 -0
- data/templates/Guardfile_example +22 -0
- data/templates/README.md.erb +4 -0
- data/templates/_flashes.html.erb +5 -0
- data/templates/_javascript.html.erb +3 -0
- data/templates/config_locales_en.yml +11 -0
- data/templates/database_cleaner_rspec.rb +21 -0
- data/templates/disable_xml_params.rb +3 -0
- data/templates/email_validator.rb +7 -0
- data/templates/errors.rb +28 -0
- data/templates/factories_spec.rb +14 -0
- data/templates/factories_spec_rake_task.rb +8 -0
- data/templates/factory_girl_syntax_rspec.rb +3 -0
- data/templates/import_scss_styles +0 -0
- data/templates/mysql_database.yml.erb +18 -0
- data/templates/postgresql_database.yml.erb +11 -0
- data/templates/rspec +3 -0
- data/templates/simplecov_init.rb +2 -0
- data/templates/smtp.rb +10 -0
- data/templates/spring.rb +3 -0
- data/templates/sqlite3_database.yml.erb +20 -0
- data/templates/valley_gitignore +10 -0
- data/templates/valley_layout.html.erb.erb +15 -0
- data/valley-rails-generator.gemspec +30 -0
- metadata +113 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MTcyMTMxNWFjNTgwOTZlMTkzYzE4MzI4ZmM0NDliNDdmZDhlMjc3Mg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
N2Q4YWUwYWJmN2VlNGFiNmI5YWI0ZjRmODNlYzZjNDliOWQ0YWE3YQ==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MzhkYzNhZTYyM2Y2OTNkZDRlNjE1YWRmODhlOTI4MDg2NmI3ZGI1YmE3YzAw
|
10
|
+
MzVjZjk1MWIxMmQ1ZTZlYjhkOGY0MjQ3ZWQ3ZDU2YmU5YTA2OTkyNDlkM2Nm
|
11
|
+
MThmMGI2OWUyYzZiYjYwZDI3MDZiMGFjYzAwZTA2YTI4NjEwMWQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZWQ5ZmZmMjM0N2UwYWI0ZGU1MWUwNWExOWYyMGM3OWI1ZTNjYTliZWEwOTA4
|
14
|
+
Y2Q3NTQ3MzQ4M2ZhMDhkOWFiZDI1ZWFjYjBmMjNkYjZhYjlkZDBlZmNhOWZj
|
15
|
+
OTAwY2Q5MWM5OWQyMWQwZWZkOWZkYWI2NTJlYzMzMGVhMGVkN2Q=
|
data/Gemfile
ADDED
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,16 @@
|
|
1
|
+
Valley Rails Generator
|
2
|
+
======================
|
3
|
+
|
4
|
+
The Valley Rails Generator is a project heavily based on [suspenders](https://github.com/thoughtbot/suspenders) by thoughtbot
|
5
|
+
and used to generate our base rails applications at OSU Libraries & Press.
|
6
|
+
|
7
|
+
It includes our common testing solutions and what we consider "best practice" defaults.
|
8
|
+
|
9
|
+
Installation
|
10
|
+
------------
|
11
|
+
|
12
|
+
Install the gem
|
13
|
+
|
14
|
+
```
|
15
|
+
gem install valley-rails-generator
|
16
|
+
```
|
data/bin/valleyrailsgen
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require File.expand_path(File.join('..', 'lib', 'valley-rails-generator', 'generators', 'app_generator'), File.dirname(__FILE__))
|
4
|
+
require File.expand_path(File.join('..', 'lib', 'valley-rails-generator', 'actions'), File.dirname(__FILE__))
|
5
|
+
require File.expand_path(File.join('..', 'lib', 'valley-rails-generator', 'app_builder'), File.dirname(__FILE__))
|
6
|
+
|
7
|
+
templates_root = File.expand_path(File.join("..", "templates"), File.dirname(__FILE__))
|
8
|
+
ValleyRailsGenerator::AppGenerator.source_root templates_root
|
9
|
+
ValleyRailsGenerator::AppGenerator.source_paths << Rails::Generators::AppGenerator.source_root << templates_root
|
10
|
+
|
11
|
+
ValleyRailsGenerator::AppGenerator.start
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module ValleyRailsGenerator
|
2
|
+
module Actions
|
3
|
+
def concat_file(source, destination)
|
4
|
+
contents = IO.read(find_in_source_paths(source))
|
5
|
+
append_file destination, contents
|
6
|
+
end
|
7
|
+
|
8
|
+
def replace_in_file(relative_path, find, replace)
|
9
|
+
path = File.join(destination_root, relative_path)
|
10
|
+
contents = IO.read(path)
|
11
|
+
unless contents.gsub!(find, replace)
|
12
|
+
raise "#{find.inspect} not found in #{relative_path}"
|
13
|
+
end
|
14
|
+
File.open(path, "w") { |file| file.write(contents) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def action_mailer_host(rails_env, host)
|
18
|
+
host_config = "config.action_mailer.default_url_option = { host: '#{host}' }"
|
19
|
+
configure_environment(rails_env, host_config)
|
20
|
+
end
|
21
|
+
|
22
|
+
def configure_environment(rails_env, config)
|
23
|
+
inject_into_file(
|
24
|
+
"config/environments/#{rails_env}.rb",
|
25
|
+
"\n\n #{config}",
|
26
|
+
before: "\nend"
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
def download_file(uri_string, destination)
|
31
|
+
uri = URI.parse(uri_string)
|
32
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
33
|
+
http.use_ssl = true if uri_string =~ /^https/
|
34
|
+
request = Net::HTTP::Get.new(uri.path)
|
35
|
+
contents = http.request(request).body
|
36
|
+
path = File.join(destination_root, destination)
|
37
|
+
File.open(path, "w") { |file| file.write(contents) }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,291 @@
|
|
1
|
+
module ValleyRailsGenerator
|
2
|
+
class AppBuilder < Rails::AppBuilder
|
3
|
+
include ValleyRailsGenerator::Actions
|
4
|
+
|
5
|
+
def readme
|
6
|
+
template 'README.md.erb', 'README.md'
|
7
|
+
end
|
8
|
+
|
9
|
+
def remove_public_index
|
10
|
+
remove_file 'public/index.html'
|
11
|
+
end
|
12
|
+
|
13
|
+
def remove_rails_logo_image
|
14
|
+
remove_file 'app/assets/images/rails.png'
|
15
|
+
end
|
16
|
+
|
17
|
+
def raise_on_delivery_errors
|
18
|
+
replace_in_file 'config/environments/development.rb',
|
19
|
+
'raise_delivery_errors = false', 'raise_delivery_errors = true'
|
20
|
+
end
|
21
|
+
|
22
|
+
def raise_on_unpermitted_parameters
|
23
|
+
configure_environment 'development',
|
24
|
+
'config.action_controller.action_on_unpermitted_parameters = :raise'
|
25
|
+
end
|
26
|
+
|
27
|
+
def enable_factory_girl_syntax
|
28
|
+
copy_file 'factory_girl_syntax_rspec.rb', 'spec/support/factory_girl.rb'
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_factories_first
|
32
|
+
copy_file 'factories_spec.rb', 'spec/models/factories_spec.rb'
|
33
|
+
append_file 'Rakefile', factories_spec_rake_task
|
34
|
+
end
|
35
|
+
|
36
|
+
def configure_smtp
|
37
|
+
copy_file 'smtp.rb', 'config/initializers/smtp.rb'
|
38
|
+
|
39
|
+
prepend_file 'config/environments/production.rb',
|
40
|
+
"require Rails.root.join('config/initializers/smtp')\n"
|
41
|
+
|
42
|
+
config = <<-RUBY
|
43
|
+
|
44
|
+
config.action_mailer.delivery_method = :smtp
|
45
|
+
config.action_mailer.smtp_settings = SMTP_SETTINGS
|
46
|
+
RUBY
|
47
|
+
|
48
|
+
inject_into_file 'config/environments/production.rb', config,
|
49
|
+
:after => 'config.action_mailer.raise_delivery_errors = false'
|
50
|
+
end
|
51
|
+
|
52
|
+
def initialize_on_precompile
|
53
|
+
inject_into_file 'config/application.rb',
|
54
|
+
"\n config.assets.initialize_on_precompile = false",
|
55
|
+
:after => 'config.assets.enabled = true'
|
56
|
+
end
|
57
|
+
|
58
|
+
def create_partials_directory
|
59
|
+
empty_directory 'app/views/application'
|
60
|
+
end
|
61
|
+
|
62
|
+
def create_shared_flashes
|
63
|
+
copy_file '_flashes.html.erb', 'app/views/application/_flashes.html.erb'
|
64
|
+
end
|
65
|
+
# CHANGE?
|
66
|
+
def create_shared_javascripts
|
67
|
+
copy_file '_javascript.html.erb', 'app/views/application/_javascript.html.erb'
|
68
|
+
end
|
69
|
+
|
70
|
+
def create_application_layout
|
71
|
+
template 'valley_layout.html.erb.erb',
|
72
|
+
'app/views/layouts/application.html.erb',
|
73
|
+
:force => true
|
74
|
+
end
|
75
|
+
# CHANGE
|
76
|
+
def create_common_javascripts
|
77
|
+
directory 'javascripts', 'app/assets/javascripts'
|
78
|
+
end
|
79
|
+
|
80
|
+
def add_jquery_ui
|
81
|
+
inject_into_file 'app/assets/javascripts/application.js',
|
82
|
+
"//= require jquery-ui\n", :before => '//= require_tree .'
|
83
|
+
end
|
84
|
+
|
85
|
+
def use_postgres_config_template
|
86
|
+
template 'postgresql_database.yml.erb', 'config/database.yml',
|
87
|
+
:force => true
|
88
|
+
end
|
89
|
+
|
90
|
+
def use_mysql_config_template
|
91
|
+
template 'mysql_database.yml.erb', 'config/database.yml',
|
92
|
+
:force => true
|
93
|
+
end
|
94
|
+
|
95
|
+
def use_sqlite3_config_templatje
|
96
|
+
template 'sqlite3_database.yml.erb', 'config/database.yml',
|
97
|
+
:force => true
|
98
|
+
end
|
99
|
+
|
100
|
+
def create_database
|
101
|
+
bundle_command 'exec rake db:create'
|
102
|
+
end
|
103
|
+
|
104
|
+
def replace_gemfile
|
105
|
+
remove_file 'Gemfile'
|
106
|
+
copy_file 'Gemfile_clean', 'Gemfile'
|
107
|
+
end
|
108
|
+
|
109
|
+
def set_ruby_to_version_being_used
|
110
|
+
inject_into_file 'Gemfile', "\n\nruby '#{RUBY_VERSION}'",
|
111
|
+
after: /source 'https:\/\/rubygems.org'/
|
112
|
+
end
|
113
|
+
|
114
|
+
def enable_database_cleaner
|
115
|
+
replace_in_file 'spec/spec_helper.rb',
|
116
|
+
'config.use_transactional_fixtures = true',
|
117
|
+
'config.use_transactional_fixtures = false'
|
118
|
+
|
119
|
+
copy_file 'database_cleaner_rspec.rb', 'spec/support/database_cleaner.rb'
|
120
|
+
end
|
121
|
+
|
122
|
+
def configure_rspec
|
123
|
+
remove_file '.rspec'
|
124
|
+
copy_file 'rspec', '.rspec'
|
125
|
+
prepend_file 'spec/spec_helper.rb', simplecov_init
|
126
|
+
|
127
|
+
rspec_expect_syntax = <<-RUBY
|
128
|
+
|
129
|
+
config.expect_with :rspec do |c|
|
130
|
+
c.syntax = :should
|
131
|
+
end
|
132
|
+
RUBY
|
133
|
+
|
134
|
+
config = <<-RUBY
|
135
|
+
config.generators do |generate|
|
136
|
+
generate.test_framework :rspec
|
137
|
+
generate.helper false
|
138
|
+
generate.stylesheets false
|
139
|
+
generate.javascript_engine false
|
140
|
+
generate.view_specs false
|
141
|
+
end
|
142
|
+
|
143
|
+
RUBY
|
144
|
+
|
145
|
+
inject_into_file 'spec/spec_helper.rb', rspec_expect_syntax,
|
146
|
+
:after => 'RSpec.configure do |config|'
|
147
|
+
inject_into_class 'config/application.rb', 'Application', config
|
148
|
+
end
|
149
|
+
|
150
|
+
def configure_background_jobs_for_rspec
|
151
|
+
copy_file 'background_jobs_rspec.rb', 'spec/support/background_jobs.rb'
|
152
|
+
run 'rails g delayed_job:active_record'
|
153
|
+
end
|
154
|
+
|
155
|
+
def blacklist_active_record_attributes
|
156
|
+
replace_in_file 'config/application.rb',
|
157
|
+
'config.active_record.whitelist_attributes = true',
|
158
|
+
'config.active_record.whitelist_attributes = false'
|
159
|
+
end
|
160
|
+
|
161
|
+
def configure_strong_parameters
|
162
|
+
copy_file 'strong_parameters.rb', 'config/initializers/strong_parameters.rb'
|
163
|
+
end
|
164
|
+
|
165
|
+
def configure_time_zone
|
166
|
+
config = <<-RUBY
|
167
|
+
config.active_record.default_timezone = :utc
|
168
|
+
|
169
|
+
RUBY
|
170
|
+
inject_into_class 'config/application.rb', 'Application', config
|
171
|
+
end
|
172
|
+
|
173
|
+
def configure_time_formats
|
174
|
+
remove_file 'config/locales/en.yml'
|
175
|
+
copy_file 'config_locales_en.yml', 'config/locales/en.yml'
|
176
|
+
end
|
177
|
+
|
178
|
+
def configure_action_mailer
|
179
|
+
action_mailer_host 'development', "#{app_name}.local"
|
180
|
+
action_mailer_host 'test', 'www.example.com'
|
181
|
+
#action_mailer_host 'staging', "staging.#{app_name}.com"
|
182
|
+
action_mailer_host 'production', "#{app_name}.com"
|
183
|
+
end
|
184
|
+
|
185
|
+
def generate_rspec
|
186
|
+
generate 'rspec:install'
|
187
|
+
end
|
188
|
+
# Stop using this - switch to PhantomJS/Poltergeist
|
189
|
+
def configure_capybara_webkit
|
190
|
+
append_file 'spec/spec_helper.rb' do
|
191
|
+
"\nCapybara.javascript_driver = :webkit"
|
192
|
+
end
|
193
|
+
end
|
194
|
+
def configure_poltergeist
|
195
|
+
append_file 'spec/spec_helper.rb' do
|
196
|
+
"\nCapybara.javascript_driver = :poltergeist"
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def setup_stylesheets
|
201
|
+
copy_file 'app/assets/stylesheets/application.css',
|
202
|
+
'app/assets/stylesheets/application.css.scss'
|
203
|
+
remove_file 'app/assets/stylesheets/application.css'
|
204
|
+
concat_file 'import_scss_styles', 'app/assets/stylesheets/application.css.scss'
|
205
|
+
end
|
206
|
+
|
207
|
+
def gitignore_files
|
208
|
+
concat_file 'valley_gitignore', '.gitignore'
|
209
|
+
[
|
210
|
+
'app/models',
|
211
|
+
'app/assets/images',
|
212
|
+
'app/views/pages',
|
213
|
+
'db/migrate',
|
214
|
+
'log',
|
215
|
+
'spec/support',
|
216
|
+
'spec/lib',
|
217
|
+
'spec/models',
|
218
|
+
'spec/views',
|
219
|
+
'spec/controllers',
|
220
|
+
'spec/helpers',
|
221
|
+
'spec/support/matchers',
|
222
|
+
'spec/support/mixins',
|
223
|
+
'spec/support/shared_examples',
|
224
|
+
'spec/factories',
|
225
|
+
'db'
|
226
|
+
].each do |dir|
|
227
|
+
empty_directory_with_gitkeep dir
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
def init_git
|
232
|
+
run 'git init'
|
233
|
+
end
|
234
|
+
|
235
|
+
# Figure out what this does.
|
236
|
+
def copy_miscellaneous_files
|
237
|
+
copy_file 'errors.rb', 'config/initializers/errors.rb'
|
238
|
+
end
|
239
|
+
|
240
|
+
def customize_error_pages
|
241
|
+
meta_tags =<<-EOS
|
242
|
+
<meta charset='utf-8' />
|
243
|
+
<meta name='ROBOTS' content='NOODP' />
|
244
|
+
EOS
|
245
|
+
style_tags =<<-EOS
|
246
|
+
<link href='/assets/application.css' media='all' rel='stylesheet' type='text/css' />
|
247
|
+
EOS
|
248
|
+
|
249
|
+
%w(500 404 422).each do |page|
|
250
|
+
inject_into_file "public/#{page}.html", meta_tags, :after => "<head>\n"
|
251
|
+
replace_in_file "public/#{page}.html", /<style.+>.+<\/style>/mi, style_tags.strip
|
252
|
+
replace_in_file "public/#{page}.html", /<!--.+-->\n/, ''
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
def remove_routes_comment_lines
|
257
|
+
replace_in_file 'config/routes.rb',
|
258
|
+
/Application\.routes\.draw do.*end/m,
|
259
|
+
"Application.routes.draw do\nend"
|
260
|
+
end
|
261
|
+
|
262
|
+
def add_email_validator
|
263
|
+
copy_file 'email_validator.rb', 'app/validators/email_validator.rb'
|
264
|
+
end
|
265
|
+
|
266
|
+
def disable_xml_params
|
267
|
+
copy_file 'disable_xml_params.rb', 'config/initializers/disable_xml_params.rb'
|
268
|
+
end
|
269
|
+
|
270
|
+
def setup_default_rake_task
|
271
|
+
append_file 'Rakefile' do
|
272
|
+
"task(:default).clear\ntask :default => [:spec]"
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
def setup_guard
|
277
|
+
copy_file 'Guardfile_example', 'Guardfile'
|
278
|
+
copy_file 'spring.rb', 'config/spring.rb'
|
279
|
+
end
|
280
|
+
|
281
|
+
private
|
282
|
+
|
283
|
+
def factories_spec_rake_task
|
284
|
+
IO.read find_in_source_paths('factories_spec_rake_task.rb')
|
285
|
+
end
|
286
|
+
|
287
|
+
def simplecov_init
|
288
|
+
IO.read find_in_source_paths('simplecov_init.rb')
|
289
|
+
end
|
290
|
+
end
|
291
|
+
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/rails/app/app_generator'
|
3
|
+
|
4
|
+
module ValleyRailsGenerator
|
5
|
+
class AppGenerator < Rails::Generators::AppGenerator
|
6
|
+
class_option :database, :type => :string, :aliases => '-d', :default => 'sqlite3',
|
7
|
+
:desc => "Preconfigure for selected database (options: #{DATABASES.join('/')})"
|
8
|
+
|
9
|
+
class_option :skip_test_unit, :type => :boolean, :aliases => '-T', :default => true,
|
10
|
+
:desc => 'Skip Test::Unit files'
|
11
|
+
|
12
|
+
def finish_template
|
13
|
+
invoke :valley_customization
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
def valley_customization
|
18
|
+
invoke :remove_files_we_dont_need
|
19
|
+
invoke :customize_gemfile
|
20
|
+
invoke :setup_database
|
21
|
+
invoke :setup_development_environment
|
22
|
+
invoke :setup_test_environment
|
23
|
+
invoke :setup_production_environment
|
24
|
+
invoke :setup_staging_environment
|
25
|
+
invoke :create_valley_views
|
26
|
+
#invoke :create_common_javascripts
|
27
|
+
#invoke :add_jquery_ui
|
28
|
+
invoke :configure_app
|
29
|
+
invoke :setup_stylesheets
|
30
|
+
invoke :copy_miscellaneous_files
|
31
|
+
invoke :customize_error_pages
|
32
|
+
invoke :remove_routes_comment_lines
|
33
|
+
invoke :setup_git
|
34
|
+
invoke :outro
|
35
|
+
end
|
36
|
+
|
37
|
+
def remove_files_we_dont_need
|
38
|
+
build :remove_public_index
|
39
|
+
build :remove_rails_logo_image
|
40
|
+
end
|
41
|
+
|
42
|
+
def customize_gemfile
|
43
|
+
build :replace_gemfile
|
44
|
+
build :set_ruby_to_version_being_used
|
45
|
+
bundle_command 'install --binstubs=bin/stubs'
|
46
|
+
end
|
47
|
+
|
48
|
+
def setup_database
|
49
|
+
say 'Setting up database'
|
50
|
+
|
51
|
+
if 'postgresql' == options[:database]
|
52
|
+
build :use_postgres_config_template
|
53
|
+
end
|
54
|
+
|
55
|
+
if 'mysql' == options[:database]
|
56
|
+
build :use_mysql_config_template
|
57
|
+
end
|
58
|
+
|
59
|
+
if 'sqlite3' == options[:database]
|
60
|
+
build :use_sqlite3_config_template
|
61
|
+
end
|
62
|
+
|
63
|
+
build :create_database
|
64
|
+
end
|
65
|
+
|
66
|
+
def setup_development_environment
|
67
|
+
say 'Setting up the development environment'
|
68
|
+
build :raise_on_delivery_errors
|
69
|
+
build :raise_on_unpermitted_parameters
|
70
|
+
end
|
71
|
+
|
72
|
+
def setup_test_environment
|
73
|
+
say 'Setting up the test environment'
|
74
|
+
build :enable_factory_girl_syntax
|
75
|
+
build :test_factories_first
|
76
|
+
build :generate_rspec
|
77
|
+
build :configure_rspec
|
78
|
+
build :enable_database_cleaner
|
79
|
+
build :configure_poltergeist
|
80
|
+
build :setup_guard
|
81
|
+
end
|
82
|
+
|
83
|
+
def setup_production_environment
|
84
|
+
say 'Setting up the production environment'
|
85
|
+
build :configure_smtp
|
86
|
+
end
|
87
|
+
|
88
|
+
def setup_staging_environment
|
89
|
+
say 'Setting up the staging environment'
|
90
|
+
build :initialize_on_precompile
|
91
|
+
end
|
92
|
+
|
93
|
+
def create_valley_views
|
94
|
+
say 'Creating valley views'
|
95
|
+
build :create_partials_directory
|
96
|
+
build :create_shared_flashes
|
97
|
+
build :create_shared_javascripts
|
98
|
+
build :create_application_layout
|
99
|
+
end
|
100
|
+
|
101
|
+
def configure_app
|
102
|
+
say 'Configuring app'
|
103
|
+
build :configure_action_mailer
|
104
|
+
build :blacklist_active_record_attributes
|
105
|
+
build :configure_time_zone
|
106
|
+
build :configure_time_formats
|
107
|
+
build :disable_xml_params
|
108
|
+
build :add_email_validator
|
109
|
+
build :setup_default_rake_task
|
110
|
+
end
|
111
|
+
|
112
|
+
def setup_stylesheets
|
113
|
+
say 'Set up stylesheets'
|
114
|
+
build :setup_stylesheets
|
115
|
+
end
|
116
|
+
|
117
|
+
def setup_git
|
118
|
+
say 'Initializing git'
|
119
|
+
invoke :setup_gitignore
|
120
|
+
invoke :init_git
|
121
|
+
end
|
122
|
+
|
123
|
+
def create_heroku_apps
|
124
|
+
if options[:heroku]
|
125
|
+
say 'Creating Heroku apps'
|
126
|
+
build :create_heroku_apps
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def create_github_repo
|
131
|
+
if options[:github]
|
132
|
+
say 'Creating Github repo'
|
133
|
+
build :create_github_repo, options[:github]
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def setup_gitignore
|
138
|
+
build :gitignore_files
|
139
|
+
end
|
140
|
+
|
141
|
+
def init_git
|
142
|
+
build :init_git
|
143
|
+
end
|
144
|
+
|
145
|
+
def copy_libraries
|
146
|
+
say 'Copying libraries'
|
147
|
+
build :copy_libraries
|
148
|
+
end
|
149
|
+
|
150
|
+
def copy_miscellaneous_files
|
151
|
+
say 'Copying miscellaneous support files'
|
152
|
+
build :copy_miscellaneous_files
|
153
|
+
end
|
154
|
+
|
155
|
+
def customize_error_pages
|
156
|
+
say 'Customizing the 500/404/422 pages'
|
157
|
+
build :customize_error_pages
|
158
|
+
end
|
159
|
+
|
160
|
+
def remove_routes_comment_lines
|
161
|
+
build :remove_routes_comment_lines
|
162
|
+
end
|
163
|
+
|
164
|
+
def outro
|
165
|
+
say 'Generation Complete'
|
166
|
+
end
|
167
|
+
|
168
|
+
def run_bundle
|
169
|
+
# Let's not: We'll bundle manually at the right spot
|
170
|
+
end
|
171
|
+
|
172
|
+
protected
|
173
|
+
|
174
|
+
def get_builder_class
|
175
|
+
ValleyRailsGenerator::AppBuilder
|
176
|
+
end
|
177
|
+
|
178
|
+
def using_active_record?
|
179
|
+
!options[:skip_active_record]
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gem 'jquery-rails'
|
4
|
+
gem 'mysql2'
|
5
|
+
gem 'sqlite3'
|
6
|
+
gem 'rails', '>= 3.2.12'
|
7
|
+
gem 'simple_form'
|
8
|
+
gem 'yard'
|
9
|
+
gem 'active_model_serializers', '~> 0.7.0'
|
10
|
+
|
11
|
+
group :assets do
|
12
|
+
gem 'coffee-rails'
|
13
|
+
gem 'sass-rails'
|
14
|
+
gem 'uglifier'
|
15
|
+
end
|
16
|
+
|
17
|
+
group :development do
|
18
|
+
gem 'better_errors'
|
19
|
+
gem 'binding_of_caller'
|
20
|
+
gem 'jazz_hands'
|
21
|
+
gem 'meta_request'
|
22
|
+
end
|
23
|
+
|
24
|
+
group :development, :test do
|
25
|
+
gem 'factory_girl_rails'
|
26
|
+
gem 'rspec-rails'
|
27
|
+
gem 'spring'
|
28
|
+
gem 'guard'
|
29
|
+
gem 'guard-rspec'
|
30
|
+
end
|
31
|
+
|
32
|
+
group :test do
|
33
|
+
gem 'poltergeist'
|
34
|
+
gem 'database_cleaner'
|
35
|
+
gem 'shoulda-matchers'
|
36
|
+
gem 'simplecov', require: false
|
37
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
guard 'rspec', :cli => '--color --drb --format documentation', :env => {'SPRING_TMP_PATH' => "/tmp"}, :spring => true do
|
2
|
+
watch('config/routes.rb')
|
3
|
+
watch(%r{^spec/.+_spec.rb$})
|
4
|
+
watch(%r{^lib/(.+).rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
5
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
6
|
+
|
7
|
+
# Rails example
|
8
|
+
watch(%r{^app/(.+).rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
9
|
+
watch(%r{^app/(.*)(.erb|.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
10
|
+
watch(%r{^app/controllers/(.+)_(controller).rb$}) { |m| %W(spec/routing/#{m[1]}_routing_spec.rb spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb spec/acceptance/#{m[1]}_spec.rb) }
|
11
|
+
watch(%r{^spec/support/(.+).rb$}) { 'spec' }
|
12
|
+
watch('config/routes.rb') { 'spec/routing' }
|
13
|
+
watch('app/controllers/application_controller.rb') { 'spec/controllers' }
|
14
|
+
watch(%r{^spec/factories/.+.rb$}) { 'spec' }
|
15
|
+
|
16
|
+
# Capybara features specs
|
17
|
+
watch(%r{^app/views/(.+)/.*.(erb|haml)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
|
18
|
+
|
19
|
+
# Turnip features and steps
|
20
|
+
watch(%r{^spec/acceptance/(.+).feature$})
|
21
|
+
watch(%r{^spec/acceptance/steps/(.+)_steps.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
|
22
|
+
end
|
@@ -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
|
data/templates/errors.rb
ADDED
@@ -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
|
File without changes
|
@@ -0,0 +1,18 @@
|
|
1
|
+
development: &default
|
2
|
+
adapter: <%%= ENV["<%= app_name.upcase %>_ADAPTER"] || "mysql2" %>
|
3
|
+
database: <%= app_name %>_development
|
4
|
+
encoding: utf8
|
5
|
+
min_messages: warning
|
6
|
+
pool: 5
|
7
|
+
timeout: 5000
|
8
|
+
username: <%%= ENV["<%= app_name.upcase %>_DB_USERNAME"] %>
|
9
|
+
password: <%%= ENV["<%= app_name.upcase %>_DB_PASSWORD"] %>
|
10
|
+
host: <%%= ENV["<%= app_name.upcase %>_DB_HOST"] %>
|
11
|
+
|
12
|
+
test:
|
13
|
+
<<: *default
|
14
|
+
database: <%= app_name %>_test
|
15
|
+
|
16
|
+
production:
|
17
|
+
<<: *default
|
18
|
+
database: <%= app_name %>_production
|
data/templates/rspec
ADDED
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
|
data/templates/spring.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
development: &default
|
2
|
+
adapter: sqlite3
|
3
|
+
database: db/development.sqlite3
|
4
|
+
pool: 5
|
5
|
+
timeout: 5000
|
6
|
+
|
7
|
+
test:
|
8
|
+
<<: *default
|
9
|
+
database: db/test.sqlite3
|
10
|
+
|
11
|
+
production:
|
12
|
+
adapter: <%%= ENV["<%= app_name.upcase %>_ADAPTER"] || "mysql2" %>
|
13
|
+
database: <%= app_name %>_production
|
14
|
+
encoding: utf8
|
15
|
+
min_messages: warning
|
16
|
+
pool: 5
|
17
|
+
timeout: 5000
|
18
|
+
username: <%%= ENV["<%= app_name.upcase %>_DB_USERNAME"] %>
|
19
|
+
password: <%%= ENV["<%= app_name.upcase %>_DB_PASSWORD"] %>
|
20
|
+
host: <%%= ENV["<%= app_name.upcase %>_DB_HOST"] %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8" />
|
5
|
+
<meta name="ROBOTS" content="NOODP" />
|
6
|
+
<title><%%= page_title %></title>
|
7
|
+
<%%= stylesheet_link_tag :application, :media => 'all' %>
|
8
|
+
<%%= csrf_meta_tags %>
|
9
|
+
</head>
|
10
|
+
<body class="<%%= body_class %>">
|
11
|
+
<%%= render 'flashes' -%>
|
12
|
+
<%%= yield %>
|
13
|
+
<%%= render 'javascript' %>
|
14
|
+
</body>
|
15
|
+
</html>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'valley-rails-generator/version'
|
4
|
+
require 'date'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.required_ruby_version = '>= 1.9.2'
|
8
|
+
s.add_dependency 'bundler', '~> 1.3'
|
9
|
+
s.add_dependency 'rails', '>=3.2.11'
|
10
|
+
s.authors = ['osulp']
|
11
|
+
s.date = Date.today.strftime('%Y-%m-%d')
|
12
|
+
|
13
|
+
s.description = <<-HERE
|
14
|
+
Valley Rails Generator is a rails generator developed by OSU Libraries & Press
|
15
|
+
to speed up the creation of new Rails projects. It contains our commonly-used
|
16
|
+
defaults.
|
17
|
+
HERE
|
18
|
+
|
19
|
+
s.email = 'lib.dev@oregonstate.edu'
|
20
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |file| File.basename(file) }
|
21
|
+
s.extra_rdoc_files = %w[README.md LICENSE]
|
22
|
+
s.files = `git ls-files`.split("\n")
|
23
|
+
s.homepage = 'http://github.com/osulp/valley-rails-generator'
|
24
|
+
s.name = 'valley-rails-generator'
|
25
|
+
s.rdoc_options = ['--charset=UTF-8']
|
26
|
+
s.require_paths = ['lib']
|
27
|
+
s.summary = "Generates a rails app with OSU Valley Library's defaults."
|
28
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
29
|
+
s.version = ValleyRailsGenerator::VERSION
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: valley-rails-generator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- osulp
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-05-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rails
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.2.11
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.2.11
|
41
|
+
description: ! 'Valley Rails Generator is a rails generator developed by OSU Libraries
|
42
|
+
& Press
|
43
|
+
|
44
|
+
to speed up the creation of new Rails projects. It contains our commonly-used
|
45
|
+
|
46
|
+
defaults.
|
47
|
+
|
48
|
+
'
|
49
|
+
email: lib.dev@oregonstate.edu
|
50
|
+
executables:
|
51
|
+
- valleyrailsgen
|
52
|
+
extensions: []
|
53
|
+
extra_rdoc_files:
|
54
|
+
- README.md
|
55
|
+
- LICENSE
|
56
|
+
files:
|
57
|
+
- Gemfile
|
58
|
+
- LICENSE
|
59
|
+
- README.md
|
60
|
+
- bin/valleyrailsgen
|
61
|
+
- lib/valley-rails-generator/actions.rb
|
62
|
+
- lib/valley-rails-generator/app_builder.rb
|
63
|
+
- lib/valley-rails-generator/generators/app_generator.rb
|
64
|
+
- lib/valley-rails-generator/version.rb
|
65
|
+
- templates/Gemfile_clean
|
66
|
+
- templates/Guardfile_example
|
67
|
+
- templates/README.md.erb
|
68
|
+
- templates/_flashes.html.erb
|
69
|
+
- templates/_javascript.html.erb
|
70
|
+
- templates/config_locales_en.yml
|
71
|
+
- templates/database_cleaner_rspec.rb
|
72
|
+
- templates/disable_xml_params.rb
|
73
|
+
- templates/email_validator.rb
|
74
|
+
- templates/errors.rb
|
75
|
+
- templates/factories_spec.rb
|
76
|
+
- templates/factories_spec_rake_task.rb
|
77
|
+
- templates/factory_girl_syntax_rspec.rb
|
78
|
+
- templates/import_scss_styles
|
79
|
+
- templates/mysql_database.yml.erb
|
80
|
+
- templates/postgresql_database.yml.erb
|
81
|
+
- templates/rspec
|
82
|
+
- templates/simplecov_init.rb
|
83
|
+
- templates/smtp.rb
|
84
|
+
- templates/spring.rb
|
85
|
+
- templates/sqlite3_database.yml.erb
|
86
|
+
- templates/valley_gitignore
|
87
|
+
- templates/valley_layout.html.erb.erb
|
88
|
+
- valley-rails-generator.gemspec
|
89
|
+
homepage: http://github.com/osulp/valley-rails-generator
|
90
|
+
licenses: []
|
91
|
+
metadata: {}
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options:
|
94
|
+
- --charset=UTF-8
|
95
|
+
require_paths:
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.9.2
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ! '>='
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
requirements: []
|
108
|
+
rubyforge_project:
|
109
|
+
rubygems_version: 2.0.3
|
110
|
+
signing_key:
|
111
|
+
specification_version: 4
|
112
|
+
summary: Generates a rails app with OSU Valley Library's defaults.
|
113
|
+
test_files: []
|