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.
Files changed (143) hide show
  1. checksums.yaml +5 -5
  2. data/.rspec +1 -0
  3. data/.ruby-version +1 -1
  4. data/Gemfile +9 -0
  5. data/README.md +122 -94
  6. data/Rakefile +13 -0
  7. data/bin/katapult +59 -25
  8. data/features/application_model.feature +55 -0
  9. data/features/authenticate.feature +88 -62
  10. data/features/basics.feature +64 -402
  11. data/features/binary.feature +56 -42
  12. data/features/configuration.feature +4 -4
  13. data/features/model.feature +21 -30
  14. data/features/navigation.feature +35 -48
  15. data/features/step_definitions/aruba_steps.rb +3 -0
  16. data/features/step_definitions/katapult_steps.rb +307 -8
  17. data/features/step_definitions/rails_steps.rb +74 -14
  18. data/features/step_definitions/test_steps.rb +5 -5
  19. data/features/step_definitions/version_steps.rb +22 -0
  20. data/features/support/env.rb +11 -3
  21. data/features/{wui.feature → web_ui.feature} +175 -148
  22. data/katapult.gemspec +8 -13
  23. data/lib/generators/katapult/app_model/app_model_generator.rb +12 -0
  24. data/lib/generators/katapult/app_model/templates/lib/katapult/application_model.rb +40 -0
  25. data/lib/generators/katapult/basics/basics_generator.rb +186 -51
  26. data/lib/generators/katapult/basics/templates/.browserslistrc +1 -0
  27. data/lib/generators/katapult/basics/templates/.gitignore +20 -21
  28. data/lib/generators/katapult/basics/templates/.rspec_parallel +3 -0
  29. data/lib/generators/katapult/basics/templates/Capfile +5 -1
  30. data/lib/generators/katapult/basics/templates/Gemfile +23 -34
  31. data/lib/generators/katapult/basics/templates/Guardfile +0 -12
  32. data/lib/generators/katapult/basics/templates/app/controllers/errors_controller.rb +9 -0
  33. data/lib/generators/katapult/basics/templates/app/helpers/unpoly_helper.rb +13 -0
  34. data/lib/generators/katapult/{haml → basics}/templates/app/views/layouts/_flashes.html.haml +1 -1
  35. data/lib/generators/katapult/basics/templates/app/views/layouts/_menu_bar.html.haml.tt +12 -0
  36. data/lib/generators/katapult/basics/templates/app/views/layouts/application.html.haml.tt +25 -0
  37. data/lib/generators/katapult/basics/templates/app/webpack/assets/images/.keep +0 -0
  38. data/lib/generators/katapult/basics/templates/app/webpack/assets/index.js +16 -0
  39. data/lib/generators/katapult/basics/templates/app/webpack/assets/javascripts/application.js +0 -0
  40. data/lib/generators/katapult/basics/templates/app/webpack/assets/javascripts/bootstrap.js +12 -0
  41. data/lib/generators/katapult/basics/templates/app/webpack/assets/javascripts/compilers/.keep +0 -0
  42. data/lib/generators/katapult/basics/templates/app/webpack/assets/javascripts/macros/content_link.js +17 -0
  43. data/lib/generators/katapult/basics/templates/app/webpack/assets/javascripts/macros/modal_link.js +17 -0
  44. data/lib/generators/katapult/basics/templates/app/webpack/assets/javascripts/unpoly.js +9 -0
  45. data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/_definitions.sass +25 -0
  46. data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/_environment.sass +2 -0
  47. data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/_mixins.sass +3 -0
  48. data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/blocks/.keep +0 -0
  49. data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/custom_bootstrap.sass +50 -0
  50. data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/ext/.keep +0 -0
  51. data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/ext/bootstrap/navbar.sass +83 -0
  52. data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/theme.sass +11 -0
  53. data/lib/generators/katapult/basics/templates/app/webpack/assets/stylesheets/unpoly.sass +2 -0
  54. data/lib/generators/katapult/basics/templates/app/webpack/packs/application.js +13 -0
  55. data/lib/generators/katapult/basics/templates/config/database.sample.yml +1 -1
  56. data/lib/generators/katapult/basics/templates/config/deploy.rb +3 -4
  57. data/lib/generators/katapult/basics/templates/config/environments/staging.rb +5 -0
  58. data/lib/generators/katapult/basics/templates/config/initializers/better_errors.rb +23 -0
  59. data/lib/generators/katapult/basics/templates/config/initializers/exception_notification.rb.tt +1 -1
  60. data/lib/generators/katapult/basics/templates/config/initializers/ext.rb +1 -1
  61. data/lib/generators/katapult/basics/templates/config/webpack/loaders/unpoly.js +4 -0
  62. data/lib/generators/katapult/basics/templates/features/support/capybara_screenshot.rb +7 -0
  63. data/lib/generators/katapult/basics/templates/features/support/factory_bot.rb +1 -0
  64. data/lib/generators/katapult/basics/templates/features/support/paths.rb +7 -2
  65. data/lib/generators/katapult/basics/templates/features/support/rspec_doubles.rb +1 -0
  66. data/lib/generators/katapult/basics/templates/features/support/selectors.rb +3 -3
  67. data/lib/generators/katapult/basics/templates/features/support/selenium.rb +13 -0
  68. data/lib/generators/katapult/basics/templates/features/support/{env-custom.rb → spreewald.rb} +0 -0
  69. data/lib/generators/katapult/basics/templates/features/support/webpacker.rb +35 -0
  70. data/lib/generators/katapult/basics/templates/lib/ext/action_view/form_for_with_development_errors.rb +31 -31
  71. data/lib/generators/katapult/basics/templates/lib/ext/active_record/find_by_anything.rb +4 -3
  72. data/lib/generators/katapult/basics/templates/public/robots.txt +5 -0
  73. data/lib/generators/katapult/basics/templates/spec/assets/sample.pdf +0 -0
  74. data/lib/generators/katapult/basics/templates/spec/factories/factories.rb +1 -1
  75. data/lib/generators/katapult/basics/templates/spec/support/database_cleaner.rb +20 -0
  76. data/lib/generators/katapult/basics/templates/spec/support/factory_bot.rb +3 -0
  77. data/lib/generators/katapult/basics/templates/spec/support/fixture_file.rb +6 -0
  78. data/lib/generators/katapult/basics/templates/spec/support/postgresql_sequences.rb +15 -0
  79. data/lib/generators/katapult/basics/templates/spec/support/timecop.rb +3 -0
  80. data/lib/generators/katapult/clearance/clearance_generator.rb +14 -2
  81. data/lib/generators/katapult/clearance/templates/app/views/layouts/_current_user.html.haml +11 -0
  82. data/lib/generators/katapult/clearance/templates/app/views/passwords/create.html.haml +10 -4
  83. data/lib/generators/katapult/clearance/templates/app/views/passwords/edit.html.haml +12 -12
  84. data/lib/generators/katapult/clearance/templates/app/views/passwords/new.html.haml +14 -11
  85. data/lib/generators/katapult/clearance/templates/app/views/sessions/new.html.haml +16 -15
  86. data/lib/generators/katapult/clearance/templates/features/authentication.feature +3 -3
  87. data/lib/generators/katapult/cucumber_features/templates/feature.feature +1 -1
  88. data/lib/generators/katapult/model_specs/templates/model_spec.rb +3 -5
  89. data/lib/generators/katapult/navigation/navigation_generator.rb +7 -1
  90. data/lib/generators/katapult/navigation/templates/app/views/layouts/_navigation.html.haml +15 -0
  91. data/lib/generators/katapult/transform/transform_generator.rb +12 -17
  92. data/lib/generators/katapult/views/templates/_form.html.haml +48 -0
  93. data/lib/generators/katapult/views/templates/app/helpers/table_helper.rb +14 -0
  94. data/lib/generators/katapult/views/templates/app/webpack/assets/stylesheets/blocks/action_bar.sass +22 -0
  95. data/lib/generators/katapult/views/templates/app/webpack/assets/stylesheets/blocks/title.sass +11 -0
  96. data/lib/generators/katapult/views/templates/custom_action.html.haml +5 -0
  97. data/lib/generators/katapult/views/templates/edit.html.haml +4 -0
  98. data/lib/generators/katapult/views/templates/index.html.haml +26 -0
  99. data/lib/generators/katapult/{haml → views}/templates/new.html.haml +1 -1
  100. data/lib/generators/katapult/views/templates/show.html.haml +39 -0
  101. data/lib/generators/katapult/{haml/haml_generator.rb → views/views_generator.rb} +19 -25
  102. data/lib/generators/katapult/{w_u_i → web_ui}/templates/_route.rb +3 -3
  103. data/lib/generators/katapult/{w_u_i → web_ui}/templates/controller.rb +21 -23
  104. data/lib/generators/katapult/{w_u_i/w_u_i_generator.rb → web_ui/web_ui_generator.rb} +7 -12
  105. data/lib/katapult/action.rb +1 -1
  106. data/lib/katapult/application_model.rb +8 -8
  107. data/lib/katapult/binary_util.rb +48 -10
  108. data/lib/katapult/generator.rb +2 -10
  109. data/lib/katapult/generator_goodies.rb +23 -0
  110. data/lib/katapult/navigation.rb +10 -5
  111. data/lib/katapult/parser.rb +15 -8
  112. data/lib/katapult/version.rb +5 -1
  113. data/lib/katapult/{wui.rb → web_ui.rb} +19 -4
  114. data/lib/katapult.rb +0 -5
  115. data/script/console +5 -2
  116. data/script/kta +8 -0
  117. data/script/update +80 -0
  118. data/spec/action_spec.rb +0 -1
  119. data/spec/attribute_spec.rb +0 -1
  120. data/spec/element_spec.rb +0 -1
  121. data/spec/model_spec.rb +0 -1
  122. data/spec/parser_spec.rb +26 -0
  123. data/spec/util_spec.rb +0 -1
  124. data/spec/{wui_spec.rb → web_ui_spec.rb} +24 -12
  125. metadata +86 -124
  126. data/lib/generators/katapult/basics/templates/app/assets/stylesheets/application/blocks/_all.sass +0 -4
  127. data/lib/generators/katapult/basics/templates/app/assets/stylesheets/application/blocks/_items.sass +0 -11
  128. data/lib/generators/katapult/basics/templates/app/assets/stylesheets/application/blocks/_layout.sass +0 -26
  129. data/lib/generators/katapult/basics/templates/app/assets/stylesheets/application/blocks/_navigation.sass +0 -11
  130. data/lib/generators/katapult/basics/templates/app/assets/stylesheets/application/blocks/_tools.sass +0 -12
  131. data/lib/generators/katapult/basics/templates/app/assets/stylesheets/application.sass +0 -6
  132. data/lib/generators/katapult/basics/templates/config/spring.rb +0 -3
  133. data/lib/generators/katapult/basics/templates/features/support/factory_girl.rb +0 -1
  134. data/lib/generators/katapult/basics/templates/spec/support/factory_girl.rb +0 -3
  135. data/lib/generators/katapult/haml/templates/_form.html.haml +0 -38
  136. data/lib/generators/katapult/haml/templates/app/views/layouts/application.html.haml +0 -33
  137. data/lib/generators/katapult/haml/templates/custom_action.html.haml +0 -5
  138. data/lib/generators/katapult/haml/templates/edit.html.haml +0 -4
  139. data/lib/generators/katapult/haml/templates/index.html.haml +0 -29
  140. data/lib/generators/katapult/haml/templates/show.html.haml +0 -39
  141. data/lib/generators/katapult/install/install_generator.rb +0 -14
  142. data/lib/generators/katapult/install/templates/lib/katapult/application_model.rb +0 -20
  143. data/lib/generators/katapult/navigation/templates/app/models/navigation.rb +0 -12
@@ -1,19 +1,19 @@
1
+ #@announce-output
2
+ #@announce-stderr
1
3
  Feature: Add authentication to an application
2
4
 
3
5
  Background:
4
- Given a pristine Rails application
5
- And I install katapult
6
- And I generate katapult basics
6
+ Given a new Rails application with Katapult basics installed
7
7
 
8
8
 
9
- Scenario: Authenticate with the User model
10
- When I overwrite "lib/katapult/application_model.rb" with:
9
+ Scenario: Authenticate with the user model
10
+ When I write to "lib/katapult/application_model.rb" with:
11
11
  """
12
12
  model 'user'
13
- wui('user') { |w| w.crud }
13
+ web_ui('user', &:crud)
14
14
  authenticate 'user', system_email: 'system@example.com'
15
15
  """
16
- And I successfully transform the application model
16
+ And I successfully transform the application model including migrations
17
17
  Then the file "Gemfile" should contain "gem 'clearance'"
18
18
  And the file "app/controllers/application_controller.rb" should contain:
19
19
  """
@@ -41,19 +41,35 @@ Feature: Add authentication to an application
41
41
  end
42
42
  """
43
43
  And the file "app/controllers/users_controller.rb" should match /permit.*email.*password/
44
+ And the file "app/views/layouts/_menu_bar.html.haml" should contain:
45
+ """
46
+ = render 'layouts/current_user' if signed_in?
47
+ """
48
+ And the file "app/views/layouts/_current_user.html.haml" should contain:
49
+ """
50
+ %ul.nav.navbar-nav.navbar-right
51
+ %li.dropdown
52
+ = link_to edit_user_path(current_user), data: { toggle: 'dropdown' } do
53
+ Hello,
54
+ = current_user
55
+ %span.caret
56
+
57
+ %ul.dropdown-menu
58
+ %li= link_to 'Edit profile', edit_user_path(current_user)
59
+ %li.divider
60
+ %li= link_to 'Sign out', sign_out_path, method: :delete, class: 'navbar-logout'
61
+ """
44
62
  And the file "app/views/users/_form.html.haml" should contain:
45
63
  """
46
- %dt
47
- = form.label :email
48
- %dd
49
- = form.email_field :email
64
+ .form-group
65
+ = form.label :email
66
+ = form.email_field :email
50
67
  """
51
68
  And the file "app/views/users/_form.html.haml" should contain:
52
69
  """
53
- %dt
54
- = form.label :password
55
- %dd
56
- = form.password_field :password
70
+ .form-group
71
+ = form.label :password
72
+ = form.password_field :password
57
73
  """
58
74
  And the file "app/views/clearance_mailer/change_password.html.haml" should contain exactly:
59
75
  """
@@ -73,69 +89,80 @@ Feature: Add authentication to an application
73
89
  """
74
90
  And the file "app/views/passwords/create.html.haml" should contain exactly:
75
91
  """
76
- %h1
77
- Password Reset Instructions Sent
92
+ .row
93
+ .col-md-4.col-md-offset-4
78
94
 
79
- %p
80
- We've sent you an email with instructions on how to reset your password.
95
+ %h1
96
+ Password Reset Instructions Sent
97
+
98
+ %p
99
+ We've sent you an email with instructions on how to reset your password.
100
+
101
+ %p
102
+ = link_to 'Back to sign-in form', sign_in_path, class: 'btn btn-primary'
81
103
  """
82
104
  And the file "app/views/passwords/edit.html.haml" should contain exactly:
83
105
  """
84
- %h1
85
- Reset Password
106
+ .row
107
+ .col-md-4.col-md-offset-4
86
108
 
87
- %p
88
- Choose your new password:
109
+ %h1
110
+ Reset Password
89
111
 
90
- = form_for :password_reset,
91
- url: user_password_path(@user, token: @user.confirmation_token),
92
- html: { method: :put } do |form|
112
+ = form_for :password_reset,
113
+ url: user_password_path(@user, token: @user.confirmation_token),
114
+ html: { method: :put } do |form|
93
115
 
94
- .form-group
95
- = form.label :password
96
- = form.password_field :password, class: 'form-control',
97
- placeholder: 'New Password'
116
+ .form-group
117
+ = form.label :password
118
+ = form.password_field :password, class: 'form-control',
119
+ placeholder: 'New password'
98
120
 
99
- = form.submit 'Update Password', class: 'btn btn-primary'
121
+ = form.submit 'Update password', class: 'btn btn-primary'
100
122
  """
101
123
  And the file "app/views/passwords/new.html.haml" should contain exactly:
102
124
  """
103
- %h1
104
- Password Reset
125
+ .row
126
+ .col-md-4.col-md-offset-4
105
127
 
106
- %p
107
- Please enter your email address. We will send you instructions on how
108
- to reset your password.
128
+ %h1
129
+ Password Reset
109
130
 
110
- = form_for :password, url: passwords_path do |form|
111
- .form-group
112
- = form.label :email
113
- = form.email_field :email, class: 'form-control',
114
- placeholder: 'Email Address'
131
+ %p
132
+ Please enter your email address. We will send you instructions on how
133
+ to reset your password.
134
+
135
+ = form_for :password, url: passwords_path do |form|
136
+ .form-group
137
+ = form.label :email
138
+ = form.email_field :email, class: 'form-control',
139
+ placeholder: 'Email address'
115
140
 
116
- = form.submit 'Request Instructions', class: 'btn btn-primary'
141
+ = form.submit 'Request instructions', class: 'btn btn-primary'
117
142
  """
118
143
  And the file "app/views/sessions/new.html.haml" should contain exactly:
119
144
  """
120
- %h1
121
- Please sign in
145
+ .row
146
+ .col-md-4.col-md-offset-4
122
147
 
123
- = form_for :session, url: session_path do |form|
124
- .form-group
125
- = form.label :email
126
- = form.email_field :email, class: 'form-control',
127
- placeholder: 'Email Address', required: true, autofocus: true
148
+ %h1
149
+ Please sign in
128
150
 
129
- .form-group
130
- = form.label :password
131
- = form.password_field :password, class: 'form-control', required: true,
132
- placeholder: 'Password'
151
+ = form_for :session, url: session_path do |form|
152
+ .form-group
153
+ = form.label :email
154
+ = form.email_field :email, class: 'form-control',
155
+ placeholder: 'Email Address', required: true, autofocus: true
156
+
157
+ .form-group
158
+ = form.label :password
159
+ = form.password_field :password, class: 'form-control', required: true,
160
+ placeholder: 'Password'
133
161
 
134
- %p
135
- = form.submit 'Sign in', class: 'btn btn-primary'
162
+ %p
163
+ = form.submit 'Sign in', class: 'btn btn-primary'
164
+ = link_to 'Forgot password', new_password_path, class: 'btn btn-link'
136
165
 
137
- %p
138
- = link_to 'Forgot password', new_password_path, class: 'text-muted'
139
166
  """
140
167
  And the file "config/environments/test.rb" should contain:
141
168
  """
@@ -177,7 +204,7 @@ Feature: Add authentication to an application
177
204
  """
178
205
  And there should be a migration with:
179
206
  """
180
- class AddClearanceToUsers < ActiveRecord::Migration
207
+ class AddClearanceToUsers < ActiveRecord::Migration[5.1]
181
208
  def self.up
182
209
  change_table :users do |t|
183
210
  t.string :encrypted_password, limit: 128
@@ -261,7 +288,7 @@ Feature: Add authentication to an application
261
288
  And I sign in as the user above
262
289
 
263
290
  When I go to the homepage
264
- And I follow "henry@example.com" within the current user
291
+ And I follow "henry@example.com" within the navbar
265
292
  Then I should be on the form for the user above
266
293
 
267
294
  When I fill in "Password" with "new-password"
@@ -284,7 +311,7 @@ Feature: Add authentication to an application
284
311
  And I should see "Password Reset"
285
312
 
286
313
  When I fill in "Email" with "henry@example.com"
287
- And I press "Request Instructions"
314
+ And I press "Request instructions"
288
315
  Then an email should have been sent with:
289
316
  \"\"\"
290
317
  From: system@example.com
@@ -299,7 +326,7 @@ Feature: Add authentication to an application
299
326
  And I should see "Reset Password"
300
327
 
301
328
  When I fill in "Choose password" with "new-password"
302
- And I press "Update Password"
329
+ And I press "Update password"
303
330
  Then I should see "Password successfully changed" within the flash
304
331
  And I should be on the homepage
305
332
  """
@@ -341,4 +368,3 @@ Feature: Add authentication to an application
341
368
 
342
369
  When I run cucumber
343
370
  Then the features should pass
344
-