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
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
|
+
"""
|