ucb_rails 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/README.md +34 -4
  2. data/app/controllers/ucb_rails/admin/base_controller.rb +4 -0
  3. data/app/controllers/ucb_rails/admin/users_controller.rb +70 -0
  4. data/app/controllers/ucb_rails/bootstrap_controller.rb +34 -0
  5. data/app/controllers/ucb_rails/controller_methods.rb +67 -6
  6. data/app/controllers/ucb_rails/home_controller.rb +5 -0
  7. data/app/controllers/ucb_rails/ldap_person_search_controller.rb +15 -0
  8. data/app/controllers/ucb_rails/sessions_controller.rb +33 -8
  9. data/app/helpers/ucb_rails/admin/users_helper.rb +14 -0
  10. data/app/helpers/ucb_rails/extractable_helper.rb +17 -0
  11. data/app/helpers/ucb_rails/icons_helper.rb +7 -0
  12. data/app/helpers/ucb_rails/ldap_person_search_helper.rb +21 -0
  13. data/app/helpers/ucb_rails/lps_typeahead_helper.rb +50 -0
  14. data/app/helpers/ucb_rails/renderer/base.rb +52 -0
  15. data/app/helpers/ucb_rails/renderer/ldap_person_search_result_link.rb +81 -0
  16. data/app/models/ucb_rails/ldap_person/entry.rb +54 -0
  17. data/app/models/ucb_rails/ldap_person/finder.rb +67 -0
  18. data/app/models/ucb_rails/ldap_person/test_finder.rb +50 -0
  19. data/app/models/ucb_rails/user.rb +28 -0
  20. data/app/models/ucb_rails/user_ldap_service.rb +50 -0
  21. data/app/models/ucb_rails/user_session_manager/active_in_user_table.rb +37 -0
  22. data/app/models/ucb_rails/user_session_manager/admin_in_user_table.rb +13 -0
  23. data/app/models/ucb_rails/user_session_manager/base.rb +44 -0
  24. data/app/models/ucb_rails/user_session_manager/in_people_ou.rb +27 -0
  25. data/app/models/ucb_rails/user_session_manager/in_people_ou_add_to_users_table.rb +19 -0
  26. data/app/models/ucb_rails/user_session_manager/ldap_person_user_wrapper.rb +29 -0
  27. data/app/models/ucb_rails/user_table_active.rb +3 -0
  28. data/app/views/ucb_rails/admin/users/_form.html.haml +16 -0
  29. data/app/views/ucb_rails/admin/users/_user.html.haml +12 -0
  30. data/app/views/ucb_rails/admin/users/edit.html.haml +3 -0
  31. data/app/views/ucb_rails/admin/users/index.html.haml +40 -0
  32. data/app/views/ucb_rails/lps/_form.html.haml +16 -0
  33. data/app/views/ucb_rails/lps/_modal.html.haml +6 -0
  34. data/app/views/ucb_rails/lps/_results.html.haml +21 -0
  35. data/app/views/ucb_rails/lps/search.js.haml +2 -0
  36. data/config/routes.rb +18 -1
  37. data/lib/generators/ucb_rails/install_generator.rb +27 -23
  38. data/lib/generators/ucb_rails/templates/README +13 -0
  39. data/lib/generators/ucb_rails/templates/app/assets/javascripts/application.js +19 -0
  40. data/lib/generators/ucb_rails/templates/app/assets/javascripts/lps.js +71 -0
  41. data/lib/generators/ucb_rails/templates/app/assets/javascripts/lps_typeahead.js +56 -0
  42. data/lib/generators/ucb_rails/templates/app/assets/javascripts/typeahead.js +8 -0
  43. data/lib/generators/ucb_rails/templates/app/assets/stylesheets/application.css +14 -0
  44. data/lib/generators/ucb_rails/templates/app/assets/stylesheets/bootstrap_and_overrides.css.scss +3 -0
  45. data/lib/generators/ucb_rails/templates/app/assets/stylesheets/ucb_rails.css.scss +51 -0
  46. data/lib/generators/ucb_rails/templates/app/helpers/ucb_rails/application_helper.rb +12 -0
  47. data/lib/generators/ucb_rails/templates/app/views/layouts/_developer.html.haml +13 -0
  48. data/lib/generators/ucb_rails/templates/app/views/layouts/_footer.html.haml +5 -0
  49. data/lib/generators/ucb_rails/templates/app/views/layouts/_navigation.html.haml +25 -0
  50. data/lib/generators/ucb_rails/templates/app/views/layouts/application.html.haml +22 -0
  51. data/lib/generators/ucb_rails/templates/config/initializers/local/active_record/dom_and_haml.rb +61 -0
  52. data/lib/generators/ucb_rails/templates/config/initializers/local/haml_buffer.rb +20 -0
  53. data/lib/generators/ucb_rails/templates/config/initializers/local/simple_form.rb +142 -0
  54. data/lib/generators/ucb_rails/templates/config/initializers/local/simple_form_bootstrap.rb +45 -0
  55. data/lib/generators/ucb_rails/templates/config/initializers/local/ucb_rails.rb +45 -0
  56. data/lib/generators/ucb_rails/templates/config/locales/simple_form.en.yml +26 -0
  57. data/lib/generators/ucb_rails/templates/db/migrate/create_users.rb +23 -0
  58. data/lib/generators/ucb_rails/templates/lib/templates/haml/scaffold/_form.html.haml +10 -0
  59. data/lib/ucb_rails/engine.rb +22 -1
  60. data/lib/ucb_rails/log_tagger.rb +20 -0
  61. data/lib/ucb_rails/version.rb +1 -1
  62. data/lib/ucb_rails.rb +16 -0
  63. metadata +312 -10
  64. data/lib/generators/ucb_rails/templates/initializer.rb +0 -4
@@ -1,12 +1,33 @@
1
1
  module UcbRails
2
+ # @private
2
3
  class Engine < ::Rails::Engine
4
+ config.generators.integration_tool :rspec
5
+ config.generators.test_framework :rspec
3
6
 
4
7
  initializer 'ucb_rails.app_controller' do |app|
5
8
  ActiveSupport.on_load(:action_controller) do
6
- # extend MyModule::ClassMethods
7
9
  include UcbRails::ControllerMethods
8
10
  end
11
+ end
12
+ end
13
+
14
+ def self.config(&block)
15
+ yield Engine.config if block
16
+ Engine.config
17
+ end
18
+
19
+ def self.[](key)
20
+ setting = config.send(key)
21
+
22
+ if setting.is_a?(Proc)
23
+ setting.call
24
+ else
25
+ setting
9
26
  end
10
27
 
28
+ rescue NameError
29
+ Rails.logger.debug "[UcbRails] Tried to access unknown UcbRails.config key: #{key.inspect}"
30
+ nil
11
31
  end
32
+
12
33
  end
@@ -0,0 +1,20 @@
1
+ # Wraps another logger and tags output.
2
+ class LogTagger
3
+ LOGGER_METHODS = [:debug, :error, :fatal, :info, :unknown, :warn]
4
+
5
+ attr_accessor :tag, :logger
6
+
7
+ def initialize(tag, logger)
8
+ self.tag = tag
9
+ self.logger = logger
10
+ end
11
+
12
+ def method_missing(method, *args)
13
+ if LOGGER_METHODS.include?(method)
14
+ logger.send(method, "[#{tag}] #{args.first}")
15
+ else
16
+ super
17
+ end
18
+ end
19
+
20
+ end
@@ -1,3 +1,3 @@
1
1
  module UcbRails
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/ucb_rails.rb CHANGED
@@ -1,10 +1,26 @@
1
1
  require "ucb_rails/engine"
2
+ require 'ucb_rails/log_tagger'
2
3
 
3
4
  require 'haml'
5
+ require 'haml-rails'
4
6
  require 'omniauth'
5
7
  require 'omniauth-cas'
8
+ require 'sass-rails'
9
+ require 'bootstrap-sass'
10
+ require 'active_attr'
11
+ require 'simple_form'
12
+ require 'jquery-datatables-rails'
13
+
6
14
  require 'rails_environment'
7
15
  require 'ucb_ldap'
16
+ require 'bootstrap-view-helpers'
17
+ require 'rails_view_helpers'
18
+ require 'user_announcements'
8
19
 
9
20
  module UcbRails
21
+
22
+ def self.logger
23
+ @logger ||= LogTagger.new('UcbRails', Rails.logger)
24
+ end
25
+
10
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ucb_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-27 00:00:00.000000000 Z
12
+ date: 2013-06-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -92,7 +92,7 @@ dependencies:
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
94
  - !ruby/object:Gem::Dependency
95
- name: haml
95
+ name: haml-rails
96
96
  requirement: !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements:
@@ -107,6 +107,86 @@ dependencies:
107
107
  - - ! '>='
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: bootstrap-sass
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: '2.3'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: '2.3'
126
+ - !ruby/object:Gem::Dependency
127
+ name: sass-rails
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: '3.2'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: '3.2'
142
+ - !ruby/object:Gem::Dependency
143
+ name: active_attr
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: simple_form
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
164
+ - !ruby/object:Gem::Version
165
+ version: 2.1.0
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 2.1.0
174
+ - !ruby/object:Gem::Dependency
175
+ name: jquery-datatables-rails
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ~>
180
+ - !ruby/object:Gem::Version
181
+ version: 1.11.2
182
+ type: :runtime
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ~>
188
+ - !ruby/object:Gem::Version
189
+ version: 1.11.2
110
190
  - !ruby/object:Gem::Dependency
111
191
  name: rails_environment
112
192
  requirement: !ruby/object:Gem::Requirement
@@ -123,6 +203,182 @@ dependencies:
123
203
  - - ! '>='
124
204
  - !ruby/object:Gem::Version
125
205
  version: '0'
206
+ - !ruby/object:Gem::Dependency
207
+ name: bootstrap-view-helpers
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ~>
212
+ - !ruby/object:Gem::Version
213
+ version: 0.0.13
214
+ type: :runtime
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ~>
220
+ - !ruby/object:Gem::Version
221
+ version: 0.0.13
222
+ - !ruby/object:Gem::Dependency
223
+ name: rails_view_helpers
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ~>
228
+ - !ruby/object:Gem::Version
229
+ version: 0.0.2
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ~>
236
+ - !ruby/object:Gem::Version
237
+ version: 0.0.2
238
+ - !ruby/object:Gem::Dependency
239
+ name: user_announcements
240
+ requirement: !ruby/object:Gem::Requirement
241
+ none: false
242
+ requirements:
243
+ - - ~>
244
+ - !ruby/object:Gem::Version
245
+ version: 0.0.8
246
+ type: :runtime
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ~>
252
+ - !ruby/object:Gem::Version
253
+ version: 0.0.8
254
+ - !ruby/object:Gem::Dependency
255
+ name: rspec-rails
256
+ requirement: !ruby/object:Gem::Requirement
257
+ none: false
258
+ requirements:
259
+ - - ! '>='
260
+ - !ruby/object:Gem::Version
261
+ version: '0'
262
+ type: :development
263
+ prerelease: false
264
+ version_requirements: !ruby/object:Gem::Requirement
265
+ none: false
266
+ requirements:
267
+ - - ! '>='
268
+ - !ruby/object:Gem::Version
269
+ version: '0'
270
+ - !ruby/object:Gem::Dependency
271
+ name: capybara
272
+ requirement: !ruby/object:Gem::Requirement
273
+ none: false
274
+ requirements:
275
+ - - ! '>='
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
278
+ type: :development
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ none: false
282
+ requirements:
283
+ - - ! '>='
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ - !ruby/object:Gem::Dependency
287
+ name: capybara-webkit
288
+ requirement: !ruby/object:Gem::Requirement
289
+ none: false
290
+ requirements:
291
+ - - ! '>='
292
+ - !ruby/object:Gem::Version
293
+ version: '0'
294
+ type: :development
295
+ prerelease: false
296
+ version_requirements: !ruby/object:Gem::Requirement
297
+ none: false
298
+ requirements:
299
+ - - ! '>='
300
+ - !ruby/object:Gem::Version
301
+ version: '0'
302
+ - !ruby/object:Gem::Dependency
303
+ name: guard-rspec
304
+ requirement: !ruby/object:Gem::Requirement
305
+ none: false
306
+ requirements:
307
+ - - ! '>='
308
+ - !ruby/object:Gem::Version
309
+ version: '0'
310
+ type: :development
311
+ prerelease: false
312
+ version_requirements: !ruby/object:Gem::Requirement
313
+ none: false
314
+ requirements:
315
+ - - ! '>='
316
+ - !ruby/object:Gem::Version
317
+ version: '0'
318
+ - !ruby/object:Gem::Dependency
319
+ name: guard-spork
320
+ requirement: !ruby/object:Gem::Requirement
321
+ none: false
322
+ requirements:
323
+ - - ! '>='
324
+ - !ruby/object:Gem::Version
325
+ version: '0'
326
+ type: :development
327
+ prerelease: false
328
+ version_requirements: !ruby/object:Gem::Requirement
329
+ none: false
330
+ requirements:
331
+ - - ! '>='
332
+ - !ruby/object:Gem::Version
333
+ version: '0'
334
+ - !ruby/object:Gem::Dependency
335
+ name: coveralls
336
+ requirement: !ruby/object:Gem::Requirement
337
+ none: false
338
+ requirements:
339
+ - - ! '>='
340
+ - !ruby/object:Gem::Version
341
+ version: '0'
342
+ type: :development
343
+ prerelease: false
344
+ version_requirements: !ruby/object:Gem::Requirement
345
+ none: false
346
+ requirements:
347
+ - - ! '>='
348
+ - !ruby/object:Gem::Version
349
+ version: '0'
350
+ - !ruby/object:Gem::Dependency
351
+ name: shoulda-matchers
352
+ requirement: !ruby/object:Gem::Requirement
353
+ none: false
354
+ requirements:
355
+ - - ! '>='
356
+ - !ruby/object:Gem::Version
357
+ version: '0'
358
+ type: :development
359
+ prerelease: false
360
+ version_requirements: !ruby/object:Gem::Requirement
361
+ none: false
362
+ requirements:
363
+ - - ! '>='
364
+ - !ruby/object:Gem::Version
365
+ version: '0'
366
+ - !ruby/object:Gem::Dependency
367
+ name: database_cleaner
368
+ requirement: !ruby/object:Gem::Requirement
369
+ none: false
370
+ requirements:
371
+ - - ! '>='
372
+ - !ruby/object:Gem::Version
373
+ version: '0'
374
+ type: :development
375
+ prerelease: false
376
+ version_requirements: !ruby/object:Gem::Requirement
377
+ none: false
378
+ requirements:
379
+ - - ! '>='
380
+ - !ruby/object:Gem::Version
381
+ version: '0'
126
382
  - !ruby/object:Gem::Dependency
127
383
  name: sqlite3
128
384
  requirement: !ruby/object:Gem::Requirement
@@ -258,16 +514,68 @@ executables: []
258
514
  extensions: []
259
515
  extra_rdoc_files: []
260
516
  files:
517
+ - app/controllers/ucb_rails/admin/base_controller.rb
518
+ - app/controllers/ucb_rails/admin/users_controller.rb
519
+ - app/controllers/ucb_rails/bootstrap_controller.rb
261
520
  - app/controllers/ucb_rails/controller_methods.rb
262
521
  - app/controllers/ucb_rails/home_controller.rb
522
+ - app/controllers/ucb_rails/ldap_person_search_controller.rb
263
523
  - app/controllers/ucb_rails/sessions_controller.rb
524
+ - app/helpers/ucb_rails/admin/users_helper.rb
525
+ - app/helpers/ucb_rails/extractable_helper.rb
526
+ - app/helpers/ucb_rails/icons_helper.rb
527
+ - app/helpers/ucb_rails/ldap_person_search_helper.rb
528
+ - app/helpers/ucb_rails/lps_typeahead_helper.rb
529
+ - app/helpers/ucb_rails/renderer/base.rb
530
+ - app/helpers/ucb_rails/renderer/ldap_person_search_result_link.rb
531
+ - app/models/ucb_rails/ldap_person/entry.rb
532
+ - app/models/ucb_rails/ldap_person/finder.rb
533
+ - app/models/ucb_rails/ldap_person/test_finder.rb
534
+ - app/models/ucb_rails/user.rb
535
+ - app/models/ucb_rails/user_ldap_service.rb
536
+ - app/models/ucb_rails/user_session_manager/active_in_user_table.rb
537
+ - app/models/ucb_rails/user_session_manager/admin_in_user_table.rb
538
+ - app/models/ucb_rails/user_session_manager/base.rb
539
+ - app/models/ucb_rails/user_session_manager/in_people_ou.rb
540
+ - app/models/ucb_rails/user_session_manager/in_people_ou_add_to_users_table.rb
541
+ - app/models/ucb_rails/user_session_manager/ldap_person_user_wrapper.rb
542
+ - app/models/ucb_rails/user_table_active.rb
543
+ - app/views/ucb_rails/admin/users/_form.html.haml
544
+ - app/views/ucb_rails/admin/users/_user.html.haml
545
+ - app/views/ucb_rails/admin/users/edit.html.haml
546
+ - app/views/ucb_rails/admin/users/index.html.haml
264
547
  - app/views/ucb_rails/home/logged_in.html.haml
265
548
  - app/views/ucb_rails/home/not_logged_in.html.haml
549
+ - app/views/ucb_rails/lps/_form.html.haml
550
+ - app/views/ucb_rails/lps/_modal.html.haml
551
+ - app/views/ucb_rails/lps/_results.html.haml
552
+ - app/views/ucb_rails/lps/search.js.haml
266
553
  - config/routes.rb
267
554
  - lib/generators/ucb_rails/install_generator.rb
268
- - lib/generators/ucb_rails/templates/initializer.rb
555
+ - lib/generators/ucb_rails/templates/app/assets/javascripts/application.js
556
+ - lib/generators/ucb_rails/templates/app/assets/javascripts/lps.js
557
+ - lib/generators/ucb_rails/templates/app/assets/javascripts/lps_typeahead.js
558
+ - lib/generators/ucb_rails/templates/app/assets/javascripts/typeahead.js
559
+ - lib/generators/ucb_rails/templates/app/assets/stylesheets/application.css
560
+ - lib/generators/ucb_rails/templates/app/assets/stylesheets/bootstrap_and_overrides.css.scss
561
+ - lib/generators/ucb_rails/templates/app/assets/stylesheets/ucb_rails.css.scss
562
+ - lib/generators/ucb_rails/templates/app/helpers/ucb_rails/application_helper.rb
563
+ - lib/generators/ucb_rails/templates/app/views/layouts/_developer.html.haml
564
+ - lib/generators/ucb_rails/templates/app/views/layouts/_footer.html.haml
565
+ - lib/generators/ucb_rails/templates/app/views/layouts/_navigation.html.haml
566
+ - lib/generators/ucb_rails/templates/app/views/layouts/application.html.haml
567
+ - lib/generators/ucb_rails/templates/config/initializers/local/active_record/dom_and_haml.rb
568
+ - lib/generators/ucb_rails/templates/config/initializers/local/haml_buffer.rb
569
+ - lib/generators/ucb_rails/templates/config/initializers/local/simple_form.rb
570
+ - lib/generators/ucb_rails/templates/config/initializers/local/simple_form_bootstrap.rb
571
+ - lib/generators/ucb_rails/templates/config/initializers/local/ucb_rails.rb
572
+ - lib/generators/ucb_rails/templates/config/locales/simple_form.en.yml
573
+ - lib/generators/ucb_rails/templates/db/migrate/create_users.rb
574
+ - lib/generators/ucb_rails/templates/lib/templates/haml/scaffold/_form.html.haml
575
+ - lib/generators/ucb_rails/templates/README
269
576
  - lib/tasks/ucb_rails_tasks.rake
270
577
  - lib/ucb_rails/engine.rb
578
+ - lib/ucb_rails/log_tagger.rb
271
579
  - lib/ucb_rails/version.rb
272
580
  - lib/ucb_rails.rb
273
581
  - MIT-LICENSE
@@ -285,18 +593,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
285
593
  - - ! '>='
286
594
  - !ruby/object:Gem::Version
287
595
  version: '0'
288
- segments:
289
- - 0
290
- hash: 4252199294406913392
291
596
  required_rubygems_version: !ruby/object:Gem::Requirement
292
597
  none: false
293
598
  requirements:
294
599
  - - ! '>='
295
600
  - !ruby/object:Gem::Version
296
601
  version: '0'
297
- segments:
298
- - 0
299
- hash: 4252199294406913392
300
602
  requirements: []
301
603
  rubyforge_project:
302
604
  rubygems_version: 1.8.25
@@ -1,4 +0,0 @@
1
- Rails.application.config.middleware.use OmniAuth::Builder do
2
- provider(:developer, fields: [:uid], uid_field: :uid) unless Rails.env.production?
3
- provider :cas, host: 'auth.berkeley.edu/cas'
4
- end