katapult 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/features/basics.feature
CHANGED
@@ -1,203 +1,33 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
Given a pristine Rails application
|
5
|
-
|
6
|
-
|
7
|
-
Scenario: Install katapult
|
8
|
-
When I install katapult
|
9
|
-
Then the file "lib/katapult/application_model.rb" should contain exactly:
|
10
|
-
"""
|
11
|
-
# Here you define the fundamentals of your application.
|
12
|
-
#
|
13
|
-
# Add a model:
|
14
|
-
# model 'user' do |user|
|
15
|
-
# user.attr :name
|
16
|
-
# user.attr :birth, type: :datetime
|
17
|
-
# user.attr :email
|
18
|
-
# end
|
19
|
-
#
|
20
|
-
# Add a web user interface:
|
21
|
-
# wui 'user' do |wui|
|
22
|
-
# wui.crud # Creates all CRUD actions: index, new, show, etc.
|
23
|
-
# wui.action :lock, scope: :member, method: :post
|
24
|
-
# end
|
25
|
-
#
|
26
|
-
# Add navigation
|
27
|
-
# navigation :main
|
28
|
-
#
|
29
|
-
# Add authentication
|
30
|
-
# authenticate 'user', system_email: 'system@example.com'
|
31
|
-
|
32
|
-
"""
|
33
|
-
|
1
|
+
#@announce-output
|
2
|
+
#@announce-stderr
|
3
|
+
Feature: Preparation of a new Rails app (basics generator)
|
34
4
|
|
35
5
|
Scenario: Generate basic files and settings
|
36
|
-
Given
|
6
|
+
Given a pristine Rails application
|
7
|
+
And I install katapult
|
37
8
|
|
38
9
|
When I generate katapult basics
|
39
|
-
Then the
|
40
|
-
|
10
|
+
Then the ruby-version file should be up-to-date
|
41
11
|
|
42
|
-
And the file "
|
43
|
-
|
44
|
-
|
45
|
-
wip: --tags @wip:3 --wip features
|
46
|
-
parallel: <%= std_opts %> features <%= log_failures %>
|
47
|
-
rerun: -r features --format pretty --strict <%= rerun_failures %> <%= log_failures %>
|
48
|
-
"""
|
49
|
-
|
50
|
-
|
51
|
-
And the file ".gitignore" should contain "config/database.yml"
|
52
|
-
And the file ".bundle/config" should match /NOKOGIRI.*--use-system-libraries/
|
53
|
-
And the file "Guardfile" should contain:
|
12
|
+
And the file ".gitignore" should contain "config/database.yml"
|
13
|
+
And the file ".bundle/config" should match /NOKOGIRI.*--use-system-libraries/
|
14
|
+
And the file "Guardfile" should contain:
|
54
15
|
"""
|
55
16
|
guard 'livereload' do
|
56
17
|
watch %r{app/views/.+\.(erb|haml)$}
|
57
|
-
watch 'app/models/navigation.rb' # Navy
|
58
18
|
watch 'app/models/power.rb' # Consul
|
59
19
|
watch %r{app/helpers/.+\.rb}
|
60
|
-
watch %r{public/.+\.(css|js|html)}
|
61
20
|
watch %r{config/locales/.+\.yml}
|
62
21
|
watch %r{spec/javascripts/} # Jasmine
|
63
|
-
|
64
|
-
# Rails Assets Pipeline
|
65
|
-
watch(%r{(app|vendor)(/assets/\w+/(.+\.(css|sass|js|coffee|html|png|jpg))).*}) do |m|
|
66
|
-
filename = m[3]
|
67
|
-
# When a .sass (or .css.sass) file was changed, tell the client to load the .css version.
|
68
|
-
# Similarly, for .coffee / .js.coffee files we ask the client to reload the .js file.
|
69
|
-
filename.gsub! /(\.css)?\.sass$/, '.css'
|
70
|
-
filename.gsub! /(\.js)?\.coffee$/, '.js'
|
71
|
-
"/assets/#{filename}"
|
72
|
-
end
|
73
22
|
end
|
74
23
|
"""
|
75
|
-
And the file "Capfile" should contain:
|
76
|
-
"""
|
77
|
-
# Load DSL and set up stages
|
78
|
-
require 'capistrano/setup'
|
79
|
-
|
80
|
-
# Include default deployment tasks
|
81
|
-
require 'capistrano/deploy'
|
82
|
-
|
83
|
-
# Include tasks from other gems included in your Gemfile
|
84
|
-
require 'capistrano/bundler'
|
85
|
-
require 'capistrano/maintenance'
|
86
|
-
require 'capistrano/rails/assets'
|
87
|
-
require 'capistrano/rails/migrations'
|
88
|
-
require 'whenever/capistrano'
|
89
|
-
|
90
|
-
Dir.glob('lib/capistrano/tasks/*.rake').each do |r|
|
91
|
-
# `import r` calls Rake.application.add_import(r), which imports the file only
|
92
|
-
# *after* this file has been processed, so the imported tasks would not be
|
93
|
-
# available to the hooks below.
|
94
|
-
Rake.load_rakefile r
|
95
|
-
end
|
96
24
|
|
97
|
-
|
98
|
-
|
99
|
-
after 'deploy:published', 'db:warn_if_pending_migrations'
|
100
|
-
after 'deploy:published', 'db:show_dump_usage'
|
101
|
-
after 'deploy:finished', 'deploy:cleanup' # https://makandracards.com/makandra/1432
|
102
|
-
"""
|
103
|
-
And the file "Gemfile" should contain "gem 'rails', '4.2.6'"
|
104
|
-
And the file "Gemfile" should contain exactly:
|
105
|
-
"""
|
106
|
-
source 'https://rubygems.org'
|
107
|
-
|
108
|
-
gem 'rails', '4.2.6'
|
109
|
-
gem 'pg', '~> 0.15'
|
110
|
-
gem 'jquery-rails'
|
111
|
-
gem 'jbuilder', '~> 2.0'
|
112
|
-
gem 'katapult', path: '../../..'
|
113
|
-
|
114
|
-
# internal
|
115
|
-
gem 'exception_notification'
|
116
|
-
# gem 'admin_cleaner', git: 'git@code.makandra.de:makandra/admin_cleaner.git'
|
117
|
-
|
118
|
-
# security
|
119
|
-
gem 'breach-mitigation-rails'
|
120
|
-
gem 'safe_cookies'
|
121
|
-
|
122
|
-
# better coding
|
123
|
-
gem 'modularity'
|
124
|
-
gem 'edge_rider'
|
125
|
-
gem 'andand'
|
126
|
-
|
127
|
-
# models
|
128
|
-
gem 'has_defaults'
|
129
|
-
gem 'assignable_values'
|
130
|
-
|
131
|
-
# gem 'carrierwave'
|
132
|
-
# gem 'mini_magick'
|
133
|
-
|
134
|
-
# gem 'spreadsheet'
|
135
|
-
# gem 'vcard'
|
136
|
-
|
137
|
-
# views
|
138
|
-
# gem 'simple_form'
|
139
|
-
# gem 'nested_form'
|
140
|
-
gem 'will_paginate'
|
141
|
-
gem 'makandra-navy', require: 'navy'
|
142
|
-
|
143
|
-
# assets
|
144
|
-
gem 'haml-rails'
|
145
|
-
gem 'bootstrap-sass'
|
146
|
-
gem 'sass-rails'
|
147
|
-
gem 'autoprefixer-rails'
|
148
|
-
gem 'coffee-rails'
|
149
|
-
gem 'therubyracer', platform: :ruby
|
150
|
-
gem 'uglifier'
|
151
|
-
gem 'compass-rails'
|
152
|
-
gem 'compass-rgbapng'
|
153
|
-
|
154
|
-
group :development do
|
155
|
-
gem 'query_diet'
|
156
|
-
gem 'better_errors'
|
157
|
-
gem 'binding_of_caller'
|
158
|
-
gem 'thin'
|
159
|
-
|
160
|
-
gem 'parallel_tests'
|
161
|
-
gem 'guard-livereload', require: false
|
162
|
-
gem 'rack-livereload'
|
163
|
-
gem 'spring-commands-rspec'
|
164
|
-
gem 'spring-commands-cucumber'
|
165
|
-
end
|
166
|
-
|
167
|
-
group :development, :test do
|
168
|
-
gem 'byebug'
|
169
|
-
gem 'factory_girl_rails'
|
170
|
-
gem 'rspec-rails'
|
171
|
-
gem 'spring'
|
172
|
-
end
|
173
|
-
|
174
|
-
group :test do
|
175
|
-
gem 'database_cleaner'
|
176
|
-
gem 'timecop'
|
177
|
-
gem 'launchy'
|
178
|
-
|
179
|
-
gem 'capybara'
|
180
|
-
gem 'capybara-screenshot'
|
181
|
-
gem 'cucumber', '< 2' # Incompatible with Cucumber Factory
|
182
|
-
gem 'cucumber-rails', require: false
|
183
|
-
gem 'cucumber_factory'
|
184
|
-
gem 'selenium-webdriver'
|
185
|
-
gem 'spreewald'
|
186
|
-
|
187
|
-
gem 'rspec'
|
188
|
-
gem 'shoulda-matchers', require: false
|
189
|
-
end
|
190
|
-
|
191
|
-
group :deploy do
|
192
|
-
gem 'capistrano-rails', require: false
|
193
|
-
gem 'capistrano-bundler', require: false
|
194
|
-
gem 'capistrano-maintenance'
|
195
|
-
end
|
196
|
-
"""
|
25
|
+
And the configured Rails version should be listed in the Gemfile.lock
|
26
|
+
And the file "Gemfile" should contain "gem 'katapult', path: '../../..'"
|
197
27
|
|
198
28
|
And the file "app/controllers/application_controller.rb" should contain:
|
199
29
|
"""
|
200
|
-
|
30
|
+
before_action :make_action_mailer_use_request_host_and_protocol
|
201
31
|
|
202
32
|
private
|
203
33
|
|
@@ -206,25 +36,47 @@ Feature: Katapult in general
|
|
206
36
|
ActionMailer::Base.default_url_options[:host] = request.host_with_port
|
207
37
|
end
|
208
38
|
"""
|
39
|
+
And the file "app/mailers/application_mailer.rb" should contain "default from: Rails.configuration.system_email"
|
209
40
|
|
210
|
-
|
211
|
-
And
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
41
|
+
And a file named "public/robots.txt" should exist
|
42
|
+
And Turbolinks should be removed
|
43
|
+
And the Asset Pipeline should be removed
|
44
|
+
|
45
|
+
But Webpacker should be employed
|
46
|
+
And styles should be prepared
|
47
|
+
And Unpoly should be installed
|
48
|
+
And the file ".browserslistrc" should contain "> 1%"
|
49
|
+
|
50
|
+
And the application layout should be set up
|
51
|
+
And the errors controller should be installed
|
52
|
+
|
53
|
+
# Spring
|
54
|
+
And the file "config/spring.rb" should contain:
|
216
55
|
"""
|
56
|
+
# Custom generator templates are put into lib/templates
|
57
|
+
FileUtils.mkdir_p 'lib/templates'
|
217
58
|
|
59
|
+
%w(
|
60
|
+
lib/templates
|
61
|
+
"""
|
62
|
+
And binstubs should be set up
|
218
63
|
|
219
64
|
|
220
|
-
|
65
|
+
# Config
|
221
66
|
And the file "config/application.rb" should contain "config.time_zone = 'Berlin'"
|
67
|
+
And the file "config/application.rb" should contain "config.system_email = 'system@katapult_test_app.com'"
|
222
68
|
And the file "config/environments/development.rb" should contain "config.assets.debug = false"
|
69
|
+
And the file "config/environments/development.rb" should contain "config.assets.digest = false # For Guard::Livereload"
|
223
70
|
And the file "config/environments/development.rb" should contain:
|
224
71
|
"""
|
225
72
|
config.middleware.use Rack::LiveReload
|
226
73
|
"""
|
227
|
-
|
74
|
+
And the file "config/environments/development.rb" should contain:
|
75
|
+
"""
|
76
|
+
config.active_record.migration_error = false
|
77
|
+
"""
|
78
|
+
And the file "config/environments/staging.rb" should contain "require_relative 'production'"
|
79
|
+
And the test environment should be configured
|
228
80
|
And the file "config/database.yml" should contain exactly:
|
229
81
|
"""
|
230
82
|
common: &common
|
@@ -249,7 +101,7 @@ Feature: Katapult in general
|
|
249
101
|
adapter: postgresql
|
250
102
|
encoding: unicode
|
251
103
|
host: localhost
|
252
|
-
username:
|
104
|
+
username:
|
253
105
|
password:
|
254
106
|
|
255
107
|
development:
|
@@ -268,81 +120,17 @@ Feature: Katapult in general
|
|
268
120
|
parallel: <%= std_opts %> features <%= log_failures %>
|
269
121
|
rerun: -r features --format pretty --strict <%= rerun_failures %> <%= log_failures %>
|
270
122
|
"""
|
271
|
-
And the file "config/deploy.rb" should contain:
|
272
|
-
"""
|
273
|
-
abort 'You must run this using "bundle exec ..."' unless ENV['BUNDLE_BIN_PATH'] || ENV['BUNDLE_GEMFILE']
|
274
|
-
|
275
|
-
# config valid only for current version of Capistrano
|
276
|
-
lock '3.4.0'
|
277
|
-
|
278
|
-
# Default value for :format is :pretty
|
279
|
-
# set :format, :pretty
|
280
|
-
|
281
|
-
set :log_level, :info # %i(debug info error), default: :debug
|
282
|
-
|
283
|
-
# Default value for :pty is false
|
284
|
-
# set :pty, true
|
285
|
-
|
286
|
-
# Default value for :linked_files is []
|
287
|
-
# set :linked_files, fetch(:linked_files, []).push('config/database.yml', 'config/secrets.yml')
|
288
|
-
set :linked_files, %w(config/database.yml)
|
289
|
-
|
290
|
-
# Default value for linked_dirs is []
|
291
|
-
# set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system')
|
292
|
-
set :linked_dirs, %w(log public/system)
|
293
123
|
|
294
|
-
|
295
|
-
|
124
|
+
And Capistrano should be configured
|
125
|
+
And Capistrano should be locked to the installed version
|
296
126
|
|
297
|
-
|
298
|
-
set :keep_releases, 10
|
299
|
-
set :ssh_options, {
|
300
|
-
forward_agent: true
|
301
|
-
}
|
302
|
-
set :scm, :git
|
303
|
-
set :repo_url, 'git@code.makandra.de:makandra/katapult_test_app.git'
|
304
|
-
|
305
|
-
# set :whenever_roles, :cron
|
306
|
-
# set :whenever_environment, defer { stage }
|
307
|
-
# set :whenever_command, 'bundle exec whenever'
|
308
|
-
|
309
|
-
set :maintenance_template_path, 'public/maintenance.html.erb'
|
310
|
-
"""
|
311
|
-
And the file "config/deploy/staging.rb" should contain:
|
312
|
-
"""
|
313
|
-
set :stage, :staging
|
314
|
-
|
315
|
-
set :deploy_to, '/var/www/katapult_test_app-staging'
|
316
|
-
set :rails_env, 'staging'
|
317
|
-
set :branch, ENV['DEPLOY_BRANCH'] || 'master'
|
318
|
-
|
319
|
-
# server 'example.com', user: 'deploy-user', roles: %w(app web cron db)
|
320
|
-
"""
|
321
|
-
And the file "config/deploy/production.rb" should contain exactly:
|
322
|
-
"""
|
323
|
-
set :stage, :production
|
324
|
-
|
325
|
-
set :deploy_to, '/var/www/katapult_test_app'
|
326
|
-
set :rails_env, 'production'
|
327
|
-
set :branch, 'production'
|
328
|
-
|
329
|
-
# server 'one.example.com', user: 'deploy-user', roles: %w(app web cron db)
|
330
|
-
# server 'two.example.com', user: 'deploy-user', roles: %w(app web)
|
331
|
-
"""
|
127
|
+
And initializers should be installed
|
332
128
|
And the file "config/initializers/ext.rb" should contain exactly:
|
333
129
|
"""
|
334
|
-
Dir.glob(Rails.root.join('lib/ext/**/*.rb')).each do |filename|
|
130
|
+
Dir.glob(Rails.root.join('lib/ext/**/*.rb')).sort.each do |filename|
|
335
131
|
require filename
|
336
132
|
end
|
337
133
|
"""
|
338
|
-
And the file "config/initializers/exception_notification.rb" should contain:
|
339
|
-
"""
|
340
|
-
ExceptionNotification.configure do |config|
|
341
|
-
|
342
|
-
config.add_notifier :email, {
|
343
|
-
email_prefix: '[katapult_test_app] ',
|
344
|
-
exception_recipients: %w[fail@makandra.de],
|
345
|
-
"""
|
346
134
|
And the file "config/secrets.yml" should contain:
|
347
135
|
"""
|
348
136
|
staging:
|
@@ -352,66 +140,6 @@ Feature: Katapult in general
|
|
352
140
|
|
353
141
|
|
354
142
|
# Lib
|
355
|
-
And the file "lib/capistrano/tasks/db.rake" should contain:
|
356
|
-
"""
|
357
|
-
namespace :db do
|
358
|
-
desc 'Warn about pending migrations'
|
359
|
-
task :warn_if_pending_migrations do
|
360
|
-
on primary :db do
|
361
|
-
within current_path do
|
362
|
-
with rails_env: fetch(:rails_env, 'production') do
|
363
|
-
rake 'db:warn_if_pending_migrations'
|
364
|
-
end
|
365
|
-
end
|
366
|
-
end
|
367
|
-
end
|
368
|
-
|
369
|
-
desc 'Do a dump of the DB on the remote machine using dumple'
|
370
|
-
task :dump do
|
371
|
-
on primary :db do
|
372
|
-
within current_path do
|
373
|
-
execute :dumple, '--fail-gently', fetch(:rails_env, 'production')
|
374
|
-
end
|
375
|
-
end
|
376
|
-
end
|
377
|
-
|
378
|
-
desc 'Show usage of ~/dumps/ on remote host'
|
379
|
-
task :show_dump_usage do
|
380
|
-
on primary :db do
|
381
|
-
info capture :dumple, '-i'
|
382
|
-
end
|
383
|
-
end
|
384
|
-
end
|
385
|
-
"""
|
386
|
-
And the file "lib/capistrano/tasks/deploy.rake" should contain:
|
387
|
-
"""
|
388
|
-
namespace :deploy do
|
389
|
-
desc 'Restart application'
|
390
|
-
task :restart do
|
391
|
-
invoke 'passenger:restart'
|
392
|
-
end
|
393
|
-
|
394
|
-
desc 'Show deployed revision'
|
395
|
-
task :revision do
|
396
|
-
on roles :app do
|
397
|
-
within current_path do
|
398
|
-
info "Revision: #{ capture :cat, 'REVISION' }"
|
399
|
-
end
|
400
|
-
end
|
401
|
-
end
|
402
|
-
end
|
403
|
-
"""
|
404
|
-
And the file "lib/capistrano/tasks/passenger.rake" should contain:
|
405
|
-
"""
|
406
|
-
namespace :passenger do
|
407
|
-
desc 'Restart Application'
|
408
|
-
task :restart do
|
409
|
-
on roles :app do
|
410
|
-
execute "sudo passenger-config restart-app --ignore-app-not-running #{ fetch(:deploy_to) }"
|
411
|
-
end
|
412
|
-
end
|
413
|
-
end
|
414
|
-
"""
|
415
143
|
And the file "lib/ext/active_record/find_by_anything.rb" should contain:
|
416
144
|
"""
|
417
145
|
ActiveRecord::Base.class_eval do
|
@@ -426,11 +154,10 @@ Feature: Katapult in general
|
|
426
154
|
"""
|
427
155
|
And the file "lib/ext/action_view/form_for_with_development_errors.rb" should contain:
|
428
156
|
"""
|
429
|
-
if Rails.env
|
157
|
+
if Rails.env.development?
|
430
158
|
|
431
|
-
ActionView::Helpers::FormHelper.
|
432
|
-
|
433
|
-
def form_for_with_development_errors(*args, &block)
|
159
|
+
ActionView::Helpers::FormHelper.module_eval do
|
160
|
+
def form_for_with_development_errors
|
434
161
|
"""
|
435
162
|
And the file "lib/ext/active_record/these.rb" should contain:
|
436
163
|
"""
|
@@ -439,8 +166,6 @@ Feature: Katapult in general
|
|
439
166
|
def self.these(arg)
|
440
167
|
where(id: arg.collect_ids)
|
441
168
|
end
|
442
|
-
|
443
|
-
end
|
444
169
|
"""
|
445
170
|
And the file "lib/ext/array/xss_aware_join.rb" should contain:
|
446
171
|
"""
|
@@ -507,84 +232,21 @@ Feature: Katapult in general
|
|
507
232
|
|
508
233
|
|
509
234
|
# Tests
|
510
|
-
And
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
"""
|
516
|
-
Cucumber::Factory.add_steps(self)
|
517
|
-
"""
|
518
|
-
And the file "features/support/capybara_screenshot.rb" should contain:
|
519
|
-
"""
|
520
|
-
require 'capybara-screenshot/cucumber'
|
521
|
-
|
522
|
-
# Keep up to the number of screenshots specified in the hash
|
523
|
-
Capybara::Screenshot.prune_strategy = { keep: 10 }
|
524
|
-
"""
|
525
|
-
And the file "features/support/database_cleaner.rb" should contain:
|
526
|
-
"""
|
527
|
-
DatabaseCleaner.clean_with(:deletion) # clean once, now
|
528
|
-
DatabaseCleaner.strategy = :transaction
|
529
|
-
Cucumber::Rails::Database.javascript_strategy = :deletion
|
530
|
-
"""
|
531
|
-
And the file "features/support/factory_girl.rb" should contain:
|
532
|
-
"""
|
533
|
-
World(FactoryGirl::Syntax::Methods)
|
534
|
-
"""
|
535
|
-
And a file named "features/support/paths.rb" should exist
|
536
|
-
And a file named "features/support/selectors.rb" should exist
|
537
|
-
And the file "spec/rails_helper.rb" should match /^Dir.Rails.root.join.+spec.support/
|
538
|
-
And the file "spec/support/shoulda_matchers.rb" should contain:
|
539
|
-
"""
|
540
|
-
require 'shoulda/matchers'
|
541
|
-
|
542
|
-
Shoulda::Matchers.configure do |config|
|
543
|
-
config.integrate do |with|
|
544
|
-
with.test_framework :rspec
|
545
|
-
with.library :rails
|
546
|
-
end
|
547
|
-
end
|
548
|
-
"""
|
549
|
-
And the file "spec/support/factory_girl.rb" should contain:
|
550
|
-
"""
|
551
|
-
RSpec.configure do |config|
|
552
|
-
config.include FactoryGirl::Syntax::Methods
|
553
|
-
end
|
554
|
-
"""
|
555
|
-
And the file "spec/factories/factories.rb" should contain:
|
556
|
-
"""
|
557
|
-
FactoryGirl.define do
|
235
|
+
And features/support should be prepared
|
236
|
+
And spec/support should be prepared
|
237
|
+
And a file named "spec/assets/sample.pdf" should exist
|
238
|
+
And the file "spec/spec_helper.rb" should contain " mocks.verify_partial_doubles = true"
|
239
|
+
But a file named "spec/rails_helper.rb" should not exist
|
558
240
|
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
sequence(:title) { |i| "Titel #{ i }"}
|
563
|
-
end
|
241
|
+
And the file "spec/factories/factories.rb" should contain:
|
242
|
+
"""
|
243
|
+
FactoryBot.define do
|
564
244
|
|
245
|
+
factory :EXAMPLE do
|
246
|
+
status 'pending'
|
247
|
+
uuid { SecureRandom.uuid }
|
248
|
+
sequence(:title) { |i| "Titel #{ i }"}
|
565
249
|
end
|
566
|
-
"""
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
# styles
|
571
|
-
And the file "app/assets/stylesheets/application.sass" should contain:
|
572
|
-
"""
|
573
|
-
@import compass
|
574
|
-
@import bootstrap
|
575
250
|
|
576
|
-
|
577
|
-
|
578
|
-
"""
|
579
|
-
And the file "app/assets/stylesheets/application/blocks/_all.sass" should contain exactly:
|
580
|
-
"""
|
581
|
-
@import items
|
582
|
-
@import layout
|
583
|
-
@import navigation
|
584
|
-
@import tools
|
585
|
-
|
586
|
-
"""
|
587
|
-
And a file named "app/assets/stylesheets/application/blocks/_items.sass" should exist
|
588
|
-
And a file named "app/assets/stylesheets/application/blocks/_layout.sass" should exist
|
589
|
-
And a file named "app/assets/stylesheets/application/blocks/_navigation.sass" should exist
|
590
|
-
And a file named "app/assets/stylesheets/application/blocks/_tools.sass" should exist
|
251
|
+
end
|
252
|
+
"""
|