katapult 0.2.0 → 0.3.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.
- checksums.yaml +5 -5
- data/.rspec +1 -0
- data/.ruby-version +1 -1
- data/Gemfile +9 -0
- data/README.md +122 -94
- data/Rakefile +13 -0
- data/bin/katapult +59 -25
- data/features/application_model.feature +55 -0
- data/features/authenticate.feature +88 -62
- data/features/basics.feature +64 -402
- data/features/binary.feature +56 -42
- data/features/configuration.feature +4 -4
- data/features/model.feature +21 -30
- data/features/navigation.feature +35 -48
- data/features/step_definitions/aruba_steps.rb +3 -0
- data/features/step_definitions/katapult_steps.rb +307 -8
- data/features/step_definitions/rails_steps.rb +74 -14
- data/features/step_definitions/test_steps.rb +5 -5
- data/features/step_definitions/version_steps.rb +22 -0
- data/features/support/env.rb +11 -3
- data/features/{wui.feature → web_ui.feature} +175 -148
- data/katapult.gemspec +8 -13
- data/lib/generators/katapult/app_model/app_model_generator.rb +12 -0
- data/lib/generators/katapult/app_model/templates/lib/katapult/application_model.rb +40 -0
- data/lib/generators/katapult/basics/basics_generator.rb +186 -51
- data/lib/generators/katapult/basics/templates/.browserslistrc +1 -0
- data/lib/generators/katapult/basics/templates/.gitignore +20 -21
- data/lib/generators/katapult/basics/templates/.rspec_parallel +3 -0
- data/lib/generators/katapult/basics/templates/Capfile +5 -1
- data/lib/generators/katapult/basics/templates/Gemfile +23 -34
- data/lib/generators/katapult/basics/templates/Guardfile +0 -12
- data/lib/generators/katapult/basics/templates/app/controllers/errors_controller.rb +9 -0
- data/lib/generators/katapult/basics/templates/app/helpers/unpoly_helper.rb +13 -0
- data/lib/generators/katapult/{haml → basics}/templates/app/views/layouts/_flashes.html.haml +1 -1
- data/lib/generators/katapult/basics/templates/app/views/layouts/_menu_bar.html.haml.tt +12 -0
- data/lib/generators/katapult/basics/templates/app/views/layouts/application.html.haml.tt +25 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/images/.keep +0 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/index.js +16 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/javascripts/application.js +0 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/javascripts/bootstrap.js +12 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/javascripts/compilers/.keep +0 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/javascripts/macros/content_link.js +17 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/javascripts/macros/modal_link.js +17 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/javascripts/unpoly.js +9 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/_definitions.sass +25 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/_environment.sass +2 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/_mixins.sass +3 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/blocks/.keep +0 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/custom_bootstrap.sass +50 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/ext/.keep +0 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/ext/bootstrap/navbar.sass +83 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/theme.sass +11 -0
- data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/unpoly.sass +2 -0
- data/lib/generators/katapult/basics/templates/app/webpack/packs/application.js +13 -0
- data/lib/generators/katapult/basics/templates/config/database.sample.yml +1 -1
- data/lib/generators/katapult/basics/templates/config/deploy.rb +3 -4
- data/lib/generators/katapult/basics/templates/config/environments/staging.rb +5 -0
- data/lib/generators/katapult/basics/templates/config/initializers/better_errors.rb +23 -0
- data/lib/generators/katapult/basics/templates/config/initializers/exception_notification.rb.tt +1 -1
- data/lib/generators/katapult/basics/templates/config/initializers/ext.rb +1 -1
- data/lib/generators/katapult/basics/templates/config/webpack/loaders/unpoly.js +4 -0
- data/lib/generators/katapult/basics/templates/features/support/capybara_screenshot.rb +7 -0
- data/lib/generators/katapult/basics/templates/features/support/factory_bot.rb +1 -0
- data/lib/generators/katapult/basics/templates/features/support/paths.rb +7 -2
- data/lib/generators/katapult/basics/templates/features/support/rspec_doubles.rb +1 -0
- data/lib/generators/katapult/basics/templates/features/support/selectors.rb +3 -3
- data/lib/generators/katapult/basics/templates/features/support/selenium.rb +13 -0
- data/lib/generators/katapult/basics/templates/features/support/{env-custom.rb → spreewald.rb} +0 -0
- data/lib/generators/katapult/basics/templates/features/support/webpacker.rb +35 -0
- data/lib/generators/katapult/basics/templates/lib/ext/action_view/form_for_with_development_errors.rb +31 -31
- data/lib/generators/katapult/basics/templates/lib/ext/active_record/find_by_anything.rb +4 -3
- data/lib/generators/katapult/basics/templates/public/robots.txt +5 -0
- data/lib/generators/katapult/basics/templates/spec/assets/sample.pdf +0 -0
- data/lib/generators/katapult/basics/templates/spec/factories/factories.rb +1 -1
- data/lib/generators/katapult/basics/templates/spec/support/database_cleaner.rb +20 -0
- data/lib/generators/katapult/basics/templates/spec/support/factory_bot.rb +3 -0
- data/lib/generators/katapult/basics/templates/spec/support/fixture_file.rb +6 -0
- data/lib/generators/katapult/basics/templates/spec/support/postgresql_sequences.rb +15 -0
- data/lib/generators/katapult/basics/templates/spec/support/timecop.rb +3 -0
- data/lib/generators/katapult/clearance/clearance_generator.rb +14 -2
- data/lib/generators/katapult/clearance/templates/app/views/layouts/_current_user.html.haml +11 -0
- data/lib/generators/katapult/clearance/templates/app/views/passwords/create.html.haml +10 -4
- data/lib/generators/katapult/clearance/templates/app/views/passwords/edit.html.haml +12 -12
- data/lib/generators/katapult/clearance/templates/app/views/passwords/new.html.haml +14 -11
- data/lib/generators/katapult/clearance/templates/app/views/sessions/new.html.haml +16 -15
- data/lib/generators/katapult/clearance/templates/features/authentication.feature +3 -3
- data/lib/generators/katapult/cucumber_features/templates/feature.feature +1 -1
- data/lib/generators/katapult/model_specs/templates/model_spec.rb +3 -5
- data/lib/generators/katapult/navigation/navigation_generator.rb +7 -1
- data/lib/generators/katapult/navigation/templates/app/views/layouts/_navigation.html.haml +15 -0
- data/lib/generators/katapult/transform/transform_generator.rb +12 -17
- data/lib/generators/katapult/views/templates/_form.html.haml +48 -0
- data/lib/generators/katapult/views/templates/app/helpers/table_helper.rb +14 -0
- data/lib/generators/katapult/views/templates/app/webpack/assets/stylesheets/blocks/action_bar.sass +22 -0
- data/lib/generators/katapult/views/templates/app/webpack/assets/stylesheets/blocks/title.sass +11 -0
- data/lib/generators/katapult/views/templates/custom_action.html.haml +5 -0
- data/lib/generators/katapult/views/templates/edit.html.haml +4 -0
- data/lib/generators/katapult/views/templates/index.html.haml +26 -0
- data/lib/generators/katapult/{haml → views}/templates/new.html.haml +1 -1
- data/lib/generators/katapult/views/templates/show.html.haml +39 -0
- data/lib/generators/katapult/{haml/haml_generator.rb → views/views_generator.rb} +19 -25
- data/lib/generators/katapult/{w_u_i → web_ui}/templates/_route.rb +3 -3
- data/lib/generators/katapult/{w_u_i → web_ui}/templates/controller.rb +21 -23
- data/lib/generators/katapult/{w_u_i/w_u_i_generator.rb → web_ui/web_ui_generator.rb} +7 -12
- data/lib/katapult/action.rb +1 -1
- data/lib/katapult/application_model.rb +8 -8
- data/lib/katapult/binary_util.rb +48 -10
- data/lib/katapult/generator.rb +2 -10
- data/lib/katapult/generator_goodies.rb +23 -0
- data/lib/katapult/navigation.rb +10 -5
- data/lib/katapult/parser.rb +15 -8
- data/lib/katapult/version.rb +5 -1
- data/lib/katapult/{wui.rb → web_ui.rb} +19 -4
- data/lib/katapult.rb +0 -5
- data/script/console +5 -2
- data/script/kta +8 -0
- data/script/update +80 -0
- data/spec/action_spec.rb +0 -1
- data/spec/attribute_spec.rb +0 -1
- data/spec/element_spec.rb +0 -1
- data/spec/model_spec.rb +0 -1
- data/spec/parser_spec.rb +26 -0
- data/spec/util_spec.rb +0 -1
- data/spec/{wui_spec.rb → web_ui_spec.rb} +24 -12
- metadata +86 -124
- data/lib/generators/katapult/basics/templates/app/assets/stylesheets/application/blocks/_all.sass +0 -4
- data/lib/generators/katapult/basics/templates/app/assets/stylesheets/application/blocks/_items.sass +0 -11
- data/lib/generators/katapult/basics/templates/app/assets/stylesheets/application/blocks/_layout.sass +0 -26
- data/lib/generators/katapult/basics/templates/app/assets/stylesheets/application/blocks/_navigation.sass +0 -11
- data/lib/generators/katapult/basics/templates/app/assets/stylesheets/application/blocks/_tools.sass +0 -12
- data/lib/generators/katapult/basics/templates/app/assets/stylesheets/application.sass +0 -6
- data/lib/generators/katapult/basics/templates/config/spring.rb +0 -3
- data/lib/generators/katapult/basics/templates/features/support/factory_girl.rb +0 -1
- data/lib/generators/katapult/basics/templates/spec/support/factory_girl.rb +0 -3
- data/lib/generators/katapult/haml/templates/_form.html.haml +0 -38
- data/lib/generators/katapult/haml/templates/app/views/layouts/application.html.haml +0 -33
- data/lib/generators/katapult/haml/templates/custom_action.html.haml +0 -5
- data/lib/generators/katapult/haml/templates/edit.html.haml +0 -4
- data/lib/generators/katapult/haml/templates/index.html.haml +0 -29
- data/lib/generators/katapult/haml/templates/show.html.haml +0 -39
- data/lib/generators/katapult/install/install_generator.rb +0 -14
- data/lib/generators/katapult/install/templates/lib/katapult/application_model.rb +0 -20
- data/lib/generators/katapult/navigation/templates/app/models/navigation.rb +0 -12
|
@@ -1,78 +1,107 @@
|
|
|
1
1
|
# Generates model-independent application basics (see method names).
|
|
2
2
|
|
|
3
|
+
require 'katapult/generator_goodies'
|
|
4
|
+
require 'katapult/version' # For writing .ruby-version
|
|
5
|
+
|
|
3
6
|
module Katapult
|
|
4
7
|
module Generators
|
|
5
8
|
class BasicsGenerator < Rails::Generators::Base
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
include Katapult::GeneratorGoodies
|
|
10
|
+
|
|
11
|
+
WEBPACK_DIR = 'app/webpack'
|
|
12
|
+
YARN_PACKAGES = %w[
|
|
13
|
+
autoprefixer
|
|
14
|
+
autosize
|
|
15
|
+
bootstrap-sass
|
|
16
|
+
jquery
|
|
17
|
+
jquery-ujs
|
|
18
|
+
unpoly
|
|
19
|
+
]
|
|
8
20
|
|
|
9
21
|
desc 'Generate basics like test directories and gems'
|
|
10
22
|
source_root File.expand_path('../templates', __FILE__)
|
|
11
23
|
|
|
12
|
-
class_option :db_user, type: :string, default: '
|
|
24
|
+
class_option :db_user, type: :string, default: '',
|
|
13
25
|
description: 'The user to set in config/database.yml'
|
|
14
26
|
class_option :db_password, type: :string, default: '',
|
|
15
27
|
description: 'The password to set in config/database.yml'
|
|
16
28
|
|
|
29
|
+
def write_ruby_version
|
|
30
|
+
template '.ruby-version'
|
|
31
|
+
end
|
|
17
32
|
|
|
18
33
|
def add_gitignore
|
|
19
34
|
template '.gitignore', force: true
|
|
20
35
|
end
|
|
21
36
|
|
|
22
|
-
def
|
|
23
|
-
template '.
|
|
37
|
+
def add_robots_txt
|
|
38
|
+
template 'public/robots.txt', force: true
|
|
24
39
|
end
|
|
25
40
|
|
|
26
|
-
|
|
27
|
-
@db_user = options.db_user
|
|
28
|
-
@db_password = options.db_password
|
|
41
|
+
# Gems ###################################################################
|
|
29
42
|
|
|
30
|
-
template 'config/database.yml', force: true
|
|
31
|
-
template 'config/database.sample.yml'
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Overwrite Gemfile with the template, but transfer all gems that are not
|
|
35
|
-
# skipped (see SKIP_GEMS).
|
|
36
43
|
def enhance_gemfile
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
end
|
|
41
|
-
|
|
44
|
+
# Need to transfer the katapult line, because in tests, katapult is
|
|
45
|
+
# installed with a custom :path option
|
|
46
|
+
@katapult = File.readlines('Gemfile').find{ |line| line =~ /^gem 'katapult'/ }
|
|
42
47
|
template 'Gemfile', force: true
|
|
43
48
|
end
|
|
44
49
|
|
|
45
50
|
def bundle_install
|
|
46
51
|
run 'bundle install'
|
|
47
52
|
|
|
53
|
+
# Fix Bundler for parallel_tests
|
|
54
|
+
run 'bundle config --local disable_exec_load true'
|
|
55
|
+
|
|
48
56
|
# This is relevant for the server, so it may happen after bundling here.
|
|
49
57
|
# By having Nokogiri use system libraries, it will get automatic updates
|
|
50
58
|
# of the frequently broken libxml (i.e. when the system libxml updates).
|
|
51
59
|
run 'bundle config --local build.nokogiri --use-system-libraries'
|
|
52
60
|
end
|
|
53
61
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
62
|
+
|
|
63
|
+
# Database ###############################################################
|
|
64
|
+
|
|
65
|
+
def write_database_ymls
|
|
66
|
+
@db_user = options.db_user
|
|
67
|
+
@db_password = options.db_password
|
|
68
|
+
|
|
69
|
+
template 'config/database.yml', force: true
|
|
70
|
+
template 'config/database.sample.yml'
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def create_databases
|
|
74
|
+
# Need to unset RAILS_ENV variable for this sub command because
|
|
75
|
+
# parallel_tests defaults to "test" only if the variable is not set (<->
|
|
76
|
+
# empty string value). However, because this is run from a Rails
|
|
77
|
+
# generator, the variable is already set to "development". Cannot set to
|
|
78
|
+
# "test" either because parallel_tests is only loaded in development.
|
|
79
|
+
run 'unset RAILS_ENV; bundle exec rake db:drop db:create parallel:drop parallel:create'
|
|
57
80
|
end
|
|
58
81
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
82
|
+
|
|
83
|
+
# Configure Rails ########################################################
|
|
84
|
+
|
|
85
|
+
def install_application_layout
|
|
86
|
+
remove_file 'app/views/layouts/application.html.erb'
|
|
87
|
+
directory 'app/views/layouts'
|
|
65
88
|
end
|
|
66
89
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
90
|
+
# We're using Webpacker
|
|
91
|
+
def remove_asset_pipeline_traces
|
|
92
|
+
remove_dir 'app/assets'
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def disable_migration_errors
|
|
96
|
+
development = 'config/environments/development.rb'
|
|
97
|
+
gsub_file development, /(migration_error =) :page_load/, '\1 false'
|
|
70
98
|
end
|
|
71
99
|
|
|
72
100
|
def setup_staging
|
|
73
|
-
|
|
74
|
-
|
|
101
|
+
template 'config/environments/staging.rb'
|
|
102
|
+
|
|
75
103
|
# Cheating in the "staging" secret between "test" and "production"
|
|
104
|
+
secret = run('bundle exec rake secret', capture: true).chomp
|
|
76
105
|
insert_into_file 'config/secrets.yml', <<~SECRET, after: "test:\n"
|
|
77
106
|
secret_key_base: #{ secret }
|
|
78
107
|
|
|
@@ -80,14 +109,26 @@ module Katapult
|
|
|
80
109
|
SECRET
|
|
81
110
|
end
|
|
82
111
|
|
|
83
|
-
def
|
|
84
|
-
|
|
112
|
+
def configure_test_environment
|
|
113
|
+
test_env = 'config/environments/test.rb'
|
|
114
|
+
|
|
115
|
+
gsub_file test_env,
|
|
116
|
+
/# Do not eager load code on boot.*config\.eager_load = false/m,
|
|
117
|
+
'config.eager_load = true'
|
|
118
|
+
gsub_file test_env,
|
|
119
|
+
/ # Show full error.*\n config\.consider_all_requests_local\s.*$/,
|
|
120
|
+
' config.consider_all_requests_local = false'
|
|
121
|
+
gsub_file test_env,
|
|
122
|
+
/ # Disable request forgery protection.*\n config\.action_controller\.allow_forgery_protection\s.*$\n/,
|
|
123
|
+
''
|
|
124
|
+
gsub_file test_env, /config\.action_controller\.perform_caching\s.*$/,
|
|
125
|
+
'config.action_controller.perform_caching = true'
|
|
85
126
|
end
|
|
86
127
|
|
|
87
128
|
def configure_action_mailer
|
|
88
129
|
app_con = 'app/controllers/application_controller.rb'
|
|
89
130
|
inject_into_file app_con, <<-CONFIG, before: /end\n\z/
|
|
90
|
-
|
|
131
|
+
before_action :make_action_mailer_use_request_host_and_protocol
|
|
91
132
|
|
|
92
133
|
private
|
|
93
134
|
|
|
@@ -96,20 +137,42 @@ module Katapult
|
|
|
96
137
|
ActionMailer::Base.default_url_options[:host] = request.host_with_port
|
|
97
138
|
end
|
|
98
139
|
CONFIG
|
|
140
|
+
|
|
141
|
+
gsub_file 'app/mailers/application_mailer.rb',
|
|
142
|
+
/(^\s+default from:).*$/, '\1 Rails.configuration.system_email'
|
|
99
143
|
end
|
|
100
144
|
|
|
101
145
|
def set_timezone
|
|
146
|
+
# This results in correct indentation :)
|
|
147
|
+
application <<-'LOAD_PATHS'
|
|
148
|
+
config.time_zone = 'Berlin'
|
|
149
|
+
config.active_record.default_timezone = :local
|
|
150
|
+
config.active_record.time_zone_aware_attributes = false
|
|
151
|
+
LOAD_PATHS
|
|
102
152
|
gsub_file 'config/application.rb',
|
|
103
153
|
/# config\.time_zone =.*$/,
|
|
104
154
|
"config.time_zone = 'Berlin'"
|
|
105
155
|
end
|
|
106
156
|
|
|
157
|
+
def configure_system_email
|
|
158
|
+
application "config.system_email = 'system@#{app_name}.com'\n"
|
|
159
|
+
end
|
|
160
|
+
|
|
107
161
|
def disable_asset_debugging # Faster
|
|
108
162
|
gsub_file 'config/environments/development.rb',
|
|
109
163
|
/config\.assets\.debug =.*$/,
|
|
110
164
|
'config.assets.debug = false'
|
|
111
165
|
end
|
|
112
166
|
|
|
167
|
+
def install_helpers
|
|
168
|
+
directory 'app/helpers'
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def install_errors_controller
|
|
172
|
+
template 'app/controllers/errors_controller.rb'
|
|
173
|
+
route 'resources :errors, only: :new'
|
|
174
|
+
end
|
|
175
|
+
|
|
113
176
|
def install_initializers
|
|
114
177
|
directory 'config/initializers'
|
|
115
178
|
end
|
|
@@ -118,6 +181,42 @@ module Katapult
|
|
|
118
181
|
directory 'lib/ext'
|
|
119
182
|
end
|
|
120
183
|
|
|
184
|
+
|
|
185
|
+
# Configure 3rd party ####################################################
|
|
186
|
+
|
|
187
|
+
def setup_spring
|
|
188
|
+
run 'spring binstub --all'
|
|
189
|
+
|
|
190
|
+
# Enhance Spring config
|
|
191
|
+
config = 'config/spring.rb'
|
|
192
|
+
inject_into_file config, <<-DIR, after: /\A%w\(\n/
|
|
193
|
+
lib/templates
|
|
194
|
+
DIR
|
|
195
|
+
prepend_to_file config, <<-MKDIR
|
|
196
|
+
# Custom generator templates are put into lib/templates
|
|
197
|
+
FileUtils.mkdir_p 'lib/templates'
|
|
198
|
+
|
|
199
|
+
MKDIR
|
|
200
|
+
|
|
201
|
+
# Parallel-fix binstubs
|
|
202
|
+
Dir['bin/*'].each do |binstub|
|
|
203
|
+
if File.read(binstub) =~ /load.*spring/
|
|
204
|
+
inject_into_file binstub, <<-PARALLEL, after: /\A.*\n/
|
|
205
|
+
running_in_parallel = ENV.has_key?('TEST_ENV_NUMBER') || ARGV.any? { |arg| arg =~ /^parallel:/ }
|
|
206
|
+
|
|
207
|
+
PARALLEL
|
|
208
|
+
|
|
209
|
+
gsub_file binstub, /^(\s*load .*spring.*)$/, '\1 unless running_in_parallel'
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def setup_guard
|
|
215
|
+
template 'Guardfile'
|
|
216
|
+
environment "config.middleware.use Rack::LiveReload\n", env: :development
|
|
217
|
+
environment "config.assets.digest = false # For Guard::Livereload\n", env: :development
|
|
218
|
+
end
|
|
219
|
+
|
|
121
220
|
def add_modularity_load_paths
|
|
122
221
|
# This results in correct indentation :)
|
|
123
222
|
application <<-'LOAD_PATHS'
|
|
@@ -129,22 +228,36 @@ config.autoload_paths << "#{Rails.root}/app/controllers/shared"
|
|
|
129
228
|
end
|
|
130
229
|
|
|
131
230
|
def install_cucumber
|
|
231
|
+
run 'spring stop' # Spring constantly causes trouble here
|
|
232
|
+
|
|
132
233
|
generate 'cucumber:install'
|
|
133
234
|
directory 'features/support'
|
|
134
235
|
template 'config/cucumber.yml', force: true
|
|
135
236
|
|
|
136
237
|
# Remove cucumber section from database.yml. Don't need this.
|
|
137
238
|
gsub_file 'config/database.yml', /^cucumber.*\z/m, ''
|
|
239
|
+
|
|
240
|
+
environment <<~ACTIVE_JOB, env: 'test'
|
|
241
|
+
config.active_job.queue_adapter = :inline
|
|
242
|
+
ACTIVE_JOB
|
|
138
243
|
end
|
|
139
244
|
|
|
140
245
|
def install_rspec
|
|
141
246
|
generate 'rspec:install'
|
|
142
247
|
|
|
248
|
+
directory 'spec'
|
|
249
|
+
|
|
143
250
|
gsub_file '.rspec', "--warnings\n", '' # Don't show Ruby warnings
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
251
|
+
template '.rspec_parallel'
|
|
252
|
+
|
|
253
|
+
merge_rails_helper_into_spec_helper
|
|
254
|
+
|
|
255
|
+
uncomment_lines 'spec/spec_helper.rb', /Dir.Rails.root.join.+spec.support/
|
|
256
|
+
gsub_file 'spec/spec_helper.rb',
|
|
257
|
+
/^ config\.use_transactional_fixtures = true/, <<-CONTENT
|
|
258
|
+
# RSpec's transaction logic needs to be disabled for DatabaseCleaner to work
|
|
259
|
+
config.use_transactional_fixtures = false
|
|
260
|
+
CONTENT
|
|
148
261
|
end
|
|
149
262
|
|
|
150
263
|
def install_capistrano
|
|
@@ -153,6 +266,8 @@ config.autoload_paths << "#{Rails.root}/app/controllers/shared"
|
|
|
153
266
|
template 'Capfile', force: true
|
|
154
267
|
run 'cap install'
|
|
155
268
|
|
|
269
|
+
deploy_rb = File.read('config/deploy.rb')
|
|
270
|
+
@version = deploy_rb[/^lock.*?([\d\.]+)/, 1]
|
|
156
271
|
template 'config/deploy.rb', force: true
|
|
157
272
|
template 'config/deploy/staging.rb', force: true
|
|
158
273
|
template 'config/deploy/production.rb', force: true
|
|
@@ -161,22 +276,42 @@ config.autoload_paths << "#{Rails.root}/app/controllers/shared"
|
|
|
161
276
|
template 'lib/tasks/pending_migrations.rake'
|
|
162
277
|
end
|
|
163
278
|
|
|
164
|
-
def
|
|
165
|
-
|
|
166
|
-
directory
|
|
167
|
-
|
|
279
|
+
def setup_webpacker
|
|
280
|
+
remove_dir 'app/javascript'
|
|
281
|
+
directory WEBPACK_DIR
|
|
282
|
+
directory 'config/webpack'
|
|
168
283
|
|
|
284
|
+
gsub_file 'config/webpacker.yml', /^( source_path:).*$/, '\1 ' + WEBPACK_DIR
|
|
285
|
+
inject_into_file 'config/webpack/environment.js', <<~JQUERY, after: /\A.*\n/ # 1st line
|
|
286
|
+
const webpack = require('webpack')
|
|
169
287
|
|
|
170
|
-
|
|
288
|
+
environment.plugins.set('Provide', new webpack.ProvidePlugin({
|
|
289
|
+
$: 'jquery',
|
|
290
|
+
jQuery: 'jquery'
|
|
291
|
+
})
|
|
292
|
+
)
|
|
293
|
+
JQUERY
|
|
171
294
|
|
|
172
|
-
|
|
173
|
-
File.basename(Dir.pwd)
|
|
295
|
+
yarn :add, *YARN_PACKAGES
|
|
174
296
|
end
|
|
175
297
|
|
|
176
|
-
def
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
298
|
+
def configure_autoprefixer
|
|
299
|
+
template '.browserslistrc'
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
# Bundler prefers installed gems, but we want the newest versions possible
|
|
303
|
+
def update_gems
|
|
304
|
+
run 'bundle install'
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
private
|
|
308
|
+
|
|
309
|
+
def merge_rails_helper_into_spec_helper
|
|
310
|
+
spec_helper = File.read 'spec/spec_helper.rb'
|
|
311
|
+
spec_helper.gsub! /.*^RSpec\.configure.+?$/m, '' # Remove introduction
|
|
312
|
+
gsub_file 'spec/rails_helper.rb', /end\n\z/, spec_helper
|
|
313
|
+
|
|
314
|
+
FileUtils.mv 'spec/rails_helper.rb', 'spec/spec_helper.rb', force: true
|
|
180
315
|
end
|
|
181
316
|
|
|
182
317
|
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
> 1%
|
|
@@ -1,28 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
db/*.sqlite3
|
|
1
|
+
# See https://git-scm.com/docs/gitignore#_pattern_format
|
|
2
|
+
|
|
3
|
+
config/database.yml
|
|
5
4
|
db/schema.rb
|
|
6
5
|
db/structure.sql
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
public/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
public/
|
|
13
|
-
public/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
/log/*
|
|
7
|
+
/node_modules
|
|
8
|
+
/public/assets
|
|
9
|
+
/public/packs*
|
|
10
|
+
/public/system
|
|
11
|
+
/public/storage
|
|
12
|
+
/public/uploads
|
|
13
|
+
/storage
|
|
14
|
+
/tmp/*
|
|
15
|
+
|
|
16
|
+
/.idea
|
|
17
|
+
.byebug_history
|
|
19
18
|
.DS_Store
|
|
20
|
-
webrat-*.html
|
|
21
19
|
capybara-*.html
|
|
22
20
|
rerun.txt
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
yarn-error.log
|
|
22
|
+
|
|
23
|
+
*~
|
|
24
|
+
*#*
|
|
25
|
+
.#*
|
|
26
26
|
.~lock.*
|
|
27
27
|
.*.swp
|
|
28
|
-
.byebug_history
|
|
@@ -4,6 +4,10 @@ require 'capistrano/setup'
|
|
|
4
4
|
# Include default deployment tasks
|
|
5
5
|
require 'capistrano/deploy'
|
|
6
6
|
|
|
7
|
+
# Use Git
|
|
8
|
+
require 'capistrano/scm/git'
|
|
9
|
+
install_plugin Capistrano::SCM::Git
|
|
10
|
+
|
|
7
11
|
# Include tasks from other gems included in your Gemfile
|
|
8
12
|
require 'capistrano/bundler'
|
|
9
13
|
require 'capistrano/maintenance'
|
|
@@ -11,7 +15,7 @@ require 'capistrano/rails/assets'
|
|
|
11
15
|
require 'capistrano/rails/migrations'
|
|
12
16
|
require 'whenever/capistrano'
|
|
13
17
|
|
|
14
|
-
Dir.glob('lib/capistrano/tasks/*.rake').each do |r|
|
|
18
|
+
Dir.glob('lib/capistrano/tasks/*.rake').sort.each do |r|
|
|
15
19
|
# `import r` calls Rake.application.add_import(r), which imports the file only
|
|
16
20
|
# *after* this file has been processed, so the imported tasks would not be
|
|
17
21
|
# available to the hooks below.
|
|
@@ -1,63 +1,52 @@
|
|
|
1
1
|
source 'https://rubygems.org'
|
|
2
|
+
git_source(:github) { |repo_path| "https://github.com/#{repo_path}.git" }
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
gem 'rails'
|
|
5
|
+
gem 'pg'
|
|
6
|
+
gem 'webpacker'
|
|
7
|
+
<%= @katapult -%>
|
|
4
8
|
|
|
5
|
-
#
|
|
9
|
+
# Internals and security
|
|
6
10
|
gem 'exception_notification'
|
|
7
11
|
# gem 'admin_cleaner', git: 'git@code.makandra.de:makandra/admin_cleaner.git'
|
|
8
12
|
|
|
9
|
-
#
|
|
10
|
-
gem '
|
|
11
|
-
gem '
|
|
12
|
-
|
|
13
|
-
# better coding
|
|
14
|
-
gem 'modularity'
|
|
13
|
+
# Models
|
|
14
|
+
gem 'active_type'
|
|
15
|
+
gem 'assignable_values'
|
|
15
16
|
gem 'edge_rider'
|
|
16
|
-
gem 'andand'
|
|
17
|
-
|
|
18
|
-
# models
|
|
19
17
|
gem 'has_defaults'
|
|
20
|
-
gem '
|
|
21
|
-
|
|
22
|
-
# gem 'carrierwave'
|
|
23
|
-
# gem 'mini_magick'
|
|
24
|
-
|
|
25
|
-
# gem 'spreadsheet'
|
|
26
|
-
# gem 'vcard'
|
|
18
|
+
gem 'modularity'
|
|
27
19
|
|
|
28
|
-
#
|
|
29
|
-
|
|
30
|
-
# gem 'nested_form'
|
|
20
|
+
# Views
|
|
21
|
+
gem 'haml-rails'
|
|
31
22
|
gem 'will_paginate'
|
|
32
|
-
gem 'makandra-navy', require: 'navy'
|
|
33
23
|
|
|
34
|
-
#
|
|
35
|
-
gem '
|
|
36
|
-
gem 'bootstrap-sass'
|
|
37
|
-
gem 'sass-rails'
|
|
38
|
-
gem 'autoprefixer-rails'
|
|
39
|
-
gem 'coffee-rails'
|
|
40
|
-
gem 'therubyracer', platform: :ruby
|
|
41
|
-
gem 'uglifier'
|
|
42
|
-
gem 'compass-rails'
|
|
43
|
-
gem 'compass-rgbapng'
|
|
24
|
+
# Jobs
|
|
25
|
+
gem 'whenever'
|
|
44
26
|
|
|
45
27
|
group :development do
|
|
46
28
|
gem 'query_diet'
|
|
47
29
|
gem 'better_errors'
|
|
48
30
|
gem 'binding_of_caller'
|
|
31
|
+
|
|
32
|
+
gem 'web-console'
|
|
33
|
+
gem 'listen', '< 3.2'
|
|
34
|
+
|
|
49
35
|
gem 'thin'
|
|
50
36
|
|
|
51
37
|
gem 'parallel_tests'
|
|
38
|
+
|
|
52
39
|
gem 'guard-livereload', require: false
|
|
53
40
|
gem 'rack-livereload'
|
|
41
|
+
|
|
54
42
|
gem 'spring-commands-rspec'
|
|
55
43
|
gem 'spring-commands-cucumber'
|
|
56
44
|
end
|
|
57
45
|
|
|
58
46
|
group :development, :test do
|
|
59
47
|
gem 'byebug'
|
|
60
|
-
|
|
48
|
+
|
|
49
|
+
gem 'factory_bot_rails'
|
|
61
50
|
gem 'rspec-rails'
|
|
62
51
|
gem 'spring'
|
|
63
52
|
end
|
|
@@ -69,7 +58,7 @@ group :test do
|
|
|
69
58
|
|
|
70
59
|
gem 'capybara'
|
|
71
60
|
gem 'capybara-screenshot'
|
|
72
|
-
gem 'cucumber', '< 2' # Incompatible with Cucumber Factory
|
|
61
|
+
gem 'cucumber', '< 2.2' # Incompatible with Cucumber Factory
|
|
73
62
|
gem 'cucumber-rails', require: false
|
|
74
63
|
gem 'cucumber_factory'
|
|
75
64
|
gem 'selenium-webdriver'
|
|
@@ -25,20 +25,8 @@
|
|
|
25
25
|
|
|
26
26
|
guard 'livereload' do
|
|
27
27
|
watch %r{app/views/.+\.(erb|haml)$}
|
|
28
|
-
watch 'app/models/navigation.rb' # Navy
|
|
29
28
|
watch 'app/models/power.rb' # Consul
|
|
30
29
|
watch %r{app/helpers/.+\.rb}
|
|
31
|
-
watch %r{public/.+\.(css|js|html)}
|
|
32
30
|
watch %r{config/locales/.+\.yml}
|
|
33
31
|
watch %r{spec/javascripts/} # Jasmine
|
|
34
|
-
|
|
35
|
-
# Rails Assets Pipeline
|
|
36
|
-
watch(%r{(app|vendor)(/assets/\w+/(.+\.(css|sass|js|coffee|html|png|jpg))).*}) do |m|
|
|
37
|
-
filename = m[3]
|
|
38
|
-
# When a .sass (or .css.sass) file was changed, tell the client to load the .css version.
|
|
39
|
-
# Similarly, for .coffee / .js.coffee files we ask the client to reload the .js file.
|
|
40
|
-
filename.gsub! /(\.css)?\.sass$/, '.css'
|
|
41
|
-
filename.gsub! /(\.js)?\.coffee$/, '.js'
|
|
42
|
-
"/assets/#{filename}"
|
|
43
|
-
end
|
|
44
32
|
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module UnpolyHelper
|
|
2
|
+
|
|
3
|
+
def content_link_to(*args, **options, &block)
|
|
4
|
+
target = options.delete(:target) || ''
|
|
5
|
+
link_to *args, **options.merge('content-link': target), &block
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def modal_link_to(*args, **options, &block)
|
|
9
|
+
target = options.delete(:target) || ''
|
|
10
|
+
link_to *args, **options.merge('modal-link': target), &block
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
%nav.navbar.navbar-default
|
|
2
|
+
.container-fluid
|
|
3
|
+
.navbar-header
|
|
4
|
+
-# Mobile menu button
|
|
5
|
+
%button.navbar-toggle.collapsed{ data: { target: '#navbar', toggle: 'collapse' } }
|
|
6
|
+
%span.icon-bar
|
|
7
|
+
%span.icon-bar
|
|
8
|
+
%span.icon-bar
|
|
9
|
+
|
|
10
|
+
= link_to '<%= app_name.titleize %>', root_path, class: 'navbar-brand'
|
|
11
|
+
|
|
12
|
+
#navbar.navbar-collapse.collapse
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
!!!
|
|
2
|
+
%html{ lang: I18n.locale }
|
|
3
|
+
|
|
4
|
+
%head
|
|
5
|
+
%meta(charset='utf-8')
|
|
6
|
+
%meta(http-equiv='x-ua-compatible' content='ie=edge')
|
|
7
|
+
%meta(name='viewport' content='width=device-width, initial-scale=1, shrink-to-fit=no')
|
|
8
|
+
|
|
9
|
+
= csrf_meta_tags
|
|
10
|
+
|
|
11
|
+
%title
|
|
12
|
+
<%= app_name.titlecase %>
|
|
13
|
+
|
|
14
|
+
= javascript_pack_tag 'application'
|
|
15
|
+
= stylesheet_pack_tag 'application'
|
|
16
|
+
|
|
17
|
+
%body{ data: {env: Rails.env} }
|
|
18
|
+
= query_diet_widget(bad_count: 15) if Rails.env.development?
|
|
19
|
+
|
|
20
|
+
.container
|
|
21
|
+
= render 'layouts/menu_bar'
|
|
22
|
+
= render 'layouts/flashes'
|
|
23
|
+
|
|
24
|
+
.content
|
|
25
|
+
= yield
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// This file will be processed when the directory gets imported
|
|
2
|
+
|
|
3
|
+
// Javascript
|
|
4
|
+
let webpackContext = require.context('./javascripts', true, /\.js$/)
|
|
5
|
+
for(let key of webpackContext.keys()) { webpackContext(key) }
|
|
6
|
+
|
|
7
|
+
// Images
|
|
8
|
+
require.context('./images', true, /\.(?:png|jpg|gif|ico|svg)$/)
|
|
9
|
+
|
|
10
|
+
// Styles
|
|
11
|
+
import './stylesheets/custom_bootstrap'
|
|
12
|
+
import './stylesheets/theme'
|
|
13
|
+
import './stylesheets/unpoly'
|
|
14
|
+
|
|
15
|
+
require.context('./stylesheets/blocks', true, /\.sass$/)
|
|
16
|
+
require.context('./stylesheets/ext', true, /\.sass$/)
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// import 'bootstrap-sass/assets/javascripts/bootstrap/transition'
|
|
2
|
+
// import 'bootstrap-sass/assets/javascripts/bootstrap/alert'
|
|
3
|
+
// import 'bootstrap-sass/assets/javascripts/bootstrap/button'
|
|
4
|
+
// import 'bootstrap-sass/assets/javascripts/bootstrap/carousel'
|
|
5
|
+
// import 'bootstrap-sass/assets/javascripts/bootstrap/collapse'
|
|
6
|
+
import 'bootstrap-sass/assets/javascripts/bootstrap/dropdown'
|
|
7
|
+
// import 'bootstrap-sass/assets/javascripts/bootstrap/modal'
|
|
8
|
+
// import 'bootstrap-sass/assets/javascripts/bootstrap/tab'
|
|
9
|
+
// import 'bootstrap-sass/assets/javascripts/bootstrap/affix'
|
|
10
|
+
// import 'bootstrap-sass/assets/javascripts/bootstrap/scrollspy'
|
|
11
|
+
// import 'bootstrap-sass/assets/javascripts/bootstrap/tooltip'
|
|
12
|
+
// import 'bootstrap-sass/assets/javascripts/bootstrap/popover'
|
|
File without changes
|