Skip to content

Commit fb6d99c

Browse files
committed
KBP-138 #time 10m - fixed code
2 parents 7015df2 + 7769295 commit fb6d99c

25 files changed

+409
-179
lines changed

lib/cybele.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,5 @@
1515
require 'cybele/helpers/mailer'
1616
require 'cybele/helpers/paperclip'
1717
require 'cybele/helpers/devise'
18+
require 'cybele/helpers/error_pages'
1819
require 'cybele/app_builder'

lib/cybele/app_builder.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class AppBuilder < Rails::AppBuilder
1515
include Cybele::Helpers::Mailer
1616
include Cybele::Helpers::Paperclip
1717
include Cybele::Helpers::Devise
18+
include Cybele::Helpers::ErrorPages
1819

1920
def readme
2021
template 'README.md.erb',
@@ -82,7 +83,7 @@ def setup_gitignore_files
8283
end
8384

8485
def setup_gitignore_folders
85-
%w(
86+
%w[
8687
app/assets/images
8788
db/migrate
8889
spec/support
@@ -91,7 +92,7 @@ def setup_gitignore_folders
9192
spec/views
9293
spec/controllers
9394
spec/helpers
94-
).each do |dir|
95+
].each do |dir|
9596
empty_directory_with_keep_file dir
9697
end
9798
end

lib/cybele/generators/app_generator.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,11 @@ def gitignore_files_and_folders
218218
build :setup_gitignore_folders
219219
end
220220

221+
def configure_error_pages
222+
say 'Setup custom exception pages and 404 page'
223+
build :configure_error_pages
224+
end
225+
221226
def goodbye
222227
say 'Congratulations! That\'s all...', :green
223228
end

lib/cybele/helpers/error_pages.rb

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# frozen_string_literal: true
2+
3+
module Cybele
4+
module Helpers
5+
module ErrorPages
6+
def configure_error_pages
7+
inject_into_file 'app/controllers/application_controller.rb',
8+
template_content('error_pages/error_control.erb'),
9+
after: 'class ApplicationController < ActionController::Base'
10+
11+
inject_into_file 'app/controllers/application_controller.rb',
12+
template_content('error_pages/error_method.erb'),
13+
after: 'protect_from_forgery with: :exception'
14+
15+
inject_into_file 'config/routes.rb',
16+
template_content('error_pages/error_route.erb'),
17+
before: /^end/
18+
19+
create_error_pages_files
20+
end
21+
22+
private
23+
24+
def create_error_pages_files
25+
# Server Error
26+
template 'error_pages/internal_server_error.html.haml',
27+
'app/views/errors/internal_server_error.html.haml',
28+
force: true
29+
30+
# Not Found Error
31+
template 'error_pages/not_found.html.haml',
32+
'app/views/errors/not_found.html.haml',
33+
force: true
34+
end
35+
end
36+
end
37+
end

spec/features/new_default_project_spec.rb

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
expect(gemfile_file).to match(/^gem 'devise-async'/)
3232

3333
sidekiq_file = content('config/sidekiq.yml')
34-
expect(sidekiq_file).to match(/^:concurrency: 25/)
34+
expect(sidekiq_file).to match('[high_priority, 2]')
3535

3636
sidekiq_schedule_file = content('config/sidekiq_schedule.yml')
3737
expect(sidekiq_schedule_file).to match(/-> Daily at midnight/)
@@ -50,7 +50,7 @@
5050
end
5151

5252
it 'uses responders' do
53-
responder_test_helper
53+
responder_test
5454
end
5555

5656
it 'uses cybele_version' do
@@ -126,7 +126,7 @@
126126
end
127127

128128
it 'uses config and staging file' do
129-
config_test_helper
129+
config_test
130130
end
131131

132132
it 'uses recipient_interceptor' do
@@ -138,7 +138,7 @@
138138
end
139139

140140
it 'uses locale_language' do
141-
locale_language_test_helper
141+
locale_language_test
142142
end
143143

144144
it 'uses simple_form' do
@@ -164,11 +164,11 @@
164164
end
165165

166166
it 'control env.sample and .env files' do
167-
dotenv_test_helper
167+
dotenv_test
168168
end
169169

170170
it 'uses paperclip' do
171-
paperclip_test_helper
171+
paperclip_test
172172
end
173173

174174
it 'uses mailer' do
@@ -205,7 +205,15 @@
205205
end
206206

207207
it 'uses devise' do
208-
devise_test_helper
208+
devise_test
209+
end
210+
211+
it 'uses error_pages' do
212+
error_pages_test
213+
end
214+
215+
it 'uses gitignore' do
216+
git_ignore_test
209217
end
210218

211219
it 'uses ssl_setting' do

spec/features/new_not_default_project_spec.rb

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
end
4343

4444
it 'uses responders' do
45-
responder_test_helper
45+
responder_test
4646
end
4747

4848
it 'uses rollbar' do
@@ -108,11 +108,11 @@
108108
end
109109

110110
it 'uses config and staging file' do
111-
config_test_helper
111+
config_test
112112
end
113113

114114
it 'uses locale_language' do
115-
locale_language_test_helper
115+
locale_language_test
116116
end
117117

118118
it 'uses recipient_interceptor' do
@@ -152,11 +152,11 @@
152152
end
153153

154154
it 'uses paperclip' do
155-
paperclip_test_helper
155+
paperclip_test
156156
end
157157

158158
it 'control env.sample and .env files' do
159-
dotenv_test_helper
159+
dotenv_test
160160
end
161161

162162
it 'uses mailer' do
@@ -185,7 +185,15 @@
185185
end
186186

187187
it 'uses devise' do
188-
devise_test_helper
188+
devise_test
189+
end
190+
191+
it 'uses error_pages' do
192+
error_pages_test
193+
end
194+
195+
it 'uses gitignore' do
196+
git_ignore_test
189197
end
190198

191199
it 'uses ssl_setting' do

spec/spec_helper.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,16 @@
1111

1212
RSpec.configure do |config|
1313
config.include CybeleTestHelpers
14-
config.include GemTestHelpers
14+
config.include DotenvTestHelper
15+
config.include ConfigTestHelper
16+
config.include DeviseTestHelper
17+
config.include PaperclipTestHelper
18+
config.include LocaleLanguageTestHelper
19+
config.include ResponderTestHelper
20+
config.include ErrorPagesTestHelper
21+
config.include GitIgnoreTestHelper
1522
config.include MailTestHelpers
23+
config.include SSLTestHelper
1624

1725
config.before(:all) do
1826
create_tmp_directory

spec/support/config_test_helper.rb

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# frozen_string_literal: true
2+
3+
module ConfigTestHelper
4+
def config_test
5+
gemfile_file = content('Gemfile')
6+
expect(gemfile_file).to match(/^gem 'config'/)
7+
8+
config_development_file_test
9+
config_staging_file_test
10+
config_production_file_test
11+
config_test_file_test
12+
end
13+
14+
private
15+
16+
def config_development_file_test
17+
config_development_file = content('config/environments/development.rb')
18+
expect(config_development_file).to match(/^Rails.application.configure/)
19+
end
20+
21+
def config_staging_file_test
22+
config_staging_file = content('config/environments/staging.rb')
23+
expect(config_staging_file).to match(/^Rails.application.configure/)
24+
end
25+
26+
def config_production_file_test
27+
config_production_file = content('config/environments/production.rb')
28+
expect(config_production_file).to match(/^Rails.application.configure/)
29+
end
30+
31+
def config_test_file_test
32+
config_test_file = content('config/environments/test.rb')
33+
expect(config_test_file).to match(/^Rails.application.configure/)
34+
end
35+
end

spec/support/devise_test_helper.rb

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# frozen_string_literal: true
2+
3+
module DeviseTestHelper
4+
def devise_test
5+
gemfile_file = content('Gemfile')
6+
expect(gemfile_file).to match(/^gem 'devise'/)
7+
8+
devise_initializers_test
9+
devise_route_file_test
10+
devise_model_file_test
11+
file_control_test
12+
end
13+
14+
private
15+
16+
def devise_initializers_test
17+
initializers_devise = content('config/initializers/devise.rb')
18+
expect(initializers_devise).to match('mailer')
19+
expect(initializers_devise).to match('mailer_sender')
20+
21+
filter_parameter_logging = content('config/initializers/filter_parameter_logging.rb')
22+
expect(filter_parameter_logging).to match(':password')
23+
expect(filter_parameter_logging).to match(':password_confirmation')
24+
end
25+
26+
def devise_route_file_test
27+
devise_route = content('config/routes.rb')
28+
expect(devise_route).to match('devise_for :users')
29+
end
30+
31+
def devise_model_file_test # rubocop:disable Metrics/AbcSize
32+
devise_model_file = content('app/models/user.rb')
33+
expect(devise_model_file).to match(':database_authenticatable')
34+
expect(devise_model_file).to match(':registerable')
35+
expect(devise_model_file).to match(':recoverable')
36+
expect(devise_model_file).to match(':rememberable')
37+
expect(devise_model_file).to match(':trackable')
38+
expect(devise_model_file).to match(':validatable')
39+
end
40+
41+
def file_control_test # rubocop:disable Metrics/AbcSize
42+
expect(File).to exist(file_project_path('app/views/devise/confirmations'))
43+
expect(File).to exist(file_project_path('app/views/devise/mailer'))
44+
expect(File).to exist(file_project_path('app/views/devise/passwords'))
45+
expect(File).to exist(file_project_path('app/views/devise/registrations'))
46+
expect(File).to exist(file_project_path('app/views/devise/sessions'))
47+
expect(File).to exist(file_project_path('app/views/devise/shared'))
48+
expect(File).to exist(file_project_path('app/views/devise/unlocks'))
49+
50+
expect(File).not_to exist(file_project_path('config/locales/devise.en.yml'))
51+
end
52+
end

spec/support/dotenv_test_helper.rb

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# frozen_string_literal: true
2+
3+
module DotenvTestHelper
4+
def dotenv_test
5+
gemfile_file = content('Gemfile')
6+
expect(gemfile_file).to match(/^gem 'dotenv-rails'/)
7+
8+
env_sample_file_test
9+
env_local_file_test
10+
env_staging_file_test
11+
env_production_file_test
12+
end
13+
14+
private
15+
16+
def env_sample_file_test
17+
env_sample_file = content('env.sample')
18+
expect(env_sample_file).to match('ROOT_PATH=http://localhost:3000')
19+
end
20+
21+
def env_local_file_test
22+
env_local_file = content('.env.local')
23+
expect(env_local_file).to match('ROOT_PATH=http://localhost:3000')
24+
end
25+
26+
def env_staging_file_test
27+
env_staging_file = content('.env.staging')
28+
expect(env_staging_file).to match('ROOT_PATH=https://staging-dummy_app.herokuapp.com')
29+
end
30+
31+
def env_production_file_test
32+
env_production_file = content('.env.production')
33+
expect(env_production_file).to match('ROOT_PATH=https://dummy_app.herokuapp.com')
34+
end
35+
end
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# frozen_string_literal: true
2+
3+
module ErrorPagesTestHelper
4+
def error_pages_test
5+
controller_file_test
6+
routes_file_test
7+
end
8+
9+
private
10+
11+
def controller_file_test # rubocop:disable Metrics/AbcSize
12+
application_controller_file = content('app/controllers/application_controller.rb')
13+
expect(application_controller_file).to match('rescue_from Exception')
14+
expect(application_controller_file).to match('rescue_from ActiveRecord::RecordNotFound')
15+
expect(application_controller_file).to match('rescue_from ActionController::RoutingError')
16+
expect(application_controller_file).to match('server_error')
17+
expect(application_controller_file).to match('page_not_found')
18+
end
19+
20+
def routes_file_test
21+
route_file = content('config/routes.rb')
22+
expect(route_file).to match('unmatched_route')
23+
end
24+
end

0 commit comments

Comments
 (0)