card 1.96.1 → 1.96.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/config/locales/de.yml +18 -23
  4. data/config/locales/en.yml +16 -21
  5. data/config/locales/es.yml +16 -21
  6. data/lib/card.rb +1 -3
  7. data/lib/card/codename.rb +2 -1
  8. data/lib/card/error.rb +73 -57
  9. data/lib/card/format.rb +2 -2
  10. data/lib/card/format/error.rb +17 -18
  11. data/lib/card/format/nesting/mode.rb +1 -1
  12. data/lib/card/format/permission.rb +8 -10
  13. data/lib/card/format/render.rb +1 -2
  14. data/lib/card/model/save_helper.rb +20 -12
  15. data/lib/card/query.rb +1 -1
  16. data/lib/card/query/card_query.rb +2 -2
  17. data/lib/card/query/card_query/found_by.rb +43 -0
  18. data/lib/card/query/card_query/match_attributes.rb +72 -0
  19. data/lib/card/query/card_query/relational_attributes.rb +19 -0
  20. data/lib/card/view.rb +0 -1
  21. data/lib/card/view/cache_action.rb +1 -10
  22. data/mod/account/set/right/token.rb +1 -3
  23. data/mod/account/set/self/account_links.rb +9 -12
  24. data/mod/basic_formats/set/all/json.rb +19 -54
  25. data/mod/basic_formats/spec/set/all/json_spec.rb +13 -3
  26. data/mod/basic_formats/spec/shared_context/json_shared_context.rb +3 -8
  27. data/mod/basic_types/set/type/json.rb +13 -1
  28. data/mod/bootstrap/set/abstract/bootswatch_theme/html_views.rb +0 -1
  29. data/mod/bootstrap/set/all/bootstrap/helper.rb +7 -0
  30. data/mod/bootstrap/set/self/script_bootstrap.rb +1 -2
  31. data/mod/core/set/all/content.rb +4 -6
  32. data/mod/core/set/all/export.rb +39 -15
  33. data/mod/core/set/all/fetch.rb +9 -0
  34. data/mod/core/set/all/permissions.rb +0 -4
  35. data/mod/core/set/all/phases.rb +1 -1
  36. data/mod/core/set/all/subcards.rb +1 -0
  37. data/mod/core/set/all/trash.rb +6 -2
  38. data/mod/core/set/all/type.rb +1 -1
  39. data/mod/core/set/all/utils.rb +13 -1
  40. data/mod/core/spec/set/all/fetch_spec.rb +17 -4
  41. data/mod/history/set/all/history.rb +34 -57
  42. data/mod/history/set/all/{act_view.rb → history/act_listing.rb} +0 -13
  43. data/mod/history/set/all/history/actions.rb +119 -0
  44. data/mod/history/set/all/history/acts.rb +12 -0
  45. data/mod/history/set/all/history/events.rb +94 -0
  46. data/mod/history/set/all/history/last.rb +97 -0
  47. data/mod/history/set/all/history/revision.rb +54 -0
  48. data/mod/history/set/all/history/selected.rb +64 -0
  49. data/mod/history/set/all/history/views.rb +34 -0
  50. data/mod/history/spec/set/all/history/views_spec.rb +29 -0
  51. data/mod/item/spec/set/all/bar_spec.rb +2 -2
  52. data/mod/machines/file/all_script_machine_output/file.js +66 -30621
  53. data/mod/machines/file/all_style_machine_output/file.css +2 -2
  54. data/mod/machines/file/script_html5shiv_printshiv_machine_output/file.js +1 -1
  55. data/mod/machines/lib/javascript/decko.js.coffee +1 -1
  56. data/mod/pointer/lib/javascript/script_pointer_config.js.coffee +1 -1
  57. data/mod/pointer/set/abstract/01_paging.rb +1 -0
  58. data/mod/pointer/set/abstract/02_pointer/html_views.rb +2 -2
  59. data/mod/pointer/set/abstract/02_pointer/html_views/checkbox_input.haml +2 -2
  60. data/mod/pointer/set/abstract/02_pointer/html_views/filter/filter_items.haml +1 -1
  61. data/mod/pointer/set/abstract/02_pointer/html_views/radio_input.haml +4 -4
  62. data/mod/pointer/set/abstract/02_pointer/options_api.rb +25 -1
  63. data/mod/pointer/set/abstract/02_pointer/other_views.rb +4 -0
  64. data/mod/pointer/spec/set/abstract/pointer/options_api_spec.rb +35 -0
  65. data/mod/search/set/abstract/search.rb +4 -114
  66. data/mod/search/set/abstract/search/views.rb +156 -0
  67. data/mod/search/set/abstract/wql_search.rb +10 -0
  68. data/mod/search/set/self/search.rb +3 -10
  69. data/mod/search/set/type/search_type.rb +5 -1
  70. data/mod/search/template/abstract/03_filter/filter_form.haml +1 -1
  71. data/mod/standard/set/all/error.rb +24 -192
  72. data/mod/standard/set/all/rich_html/content.rb +1 -1
  73. data/mod/standard/set/all/rich_html/error.rb +177 -0
  74. data/mod/standard/{template/all → set/all/rich_html}/error/not_found.haml +0 -0
  75. data/mod/standard/{template/all → set/all/rich_html}/error/server_error.haml +0 -0
  76. data/mod/standard/set/all/rich_html/form.rb +9 -9
  77. data/mod/standard/set/all/rich_html/menu.rb +14 -5
  78. data/mod/standard/spec/content/chunk/include_spec.rb +1 -2
  79. data/mod/standard/spec/set/type/search_type_spec.rb +1 -1
  80. data/mod/utility/set/abstract/bs_badge/bs_badge.haml +1 -1
  81. data/mod/utility/set/abstract/media.rb +3 -1
  82. metadata +20 -16
  83. data/lib/card/query/card_query/attribute_helper.rb +0 -74
  84. data/lib/card/query/card_query/special_attributes.rb +0 -49
  85. data/mod/history/set/all/action_view.rb +0 -52
  86. data/mod/history/set/all/actions.rb +0 -185
  87. data/mod/history/set/all/acts.rb +0 -16
  88. data/mod/history/set/all/content_history.rb +0 -180
  89. data/mod/history/spec/set/all/act_view_spec.rb +0 -16
  90. data/mod/history/spec/set/all/action_view_spec.rb +0 -10
  91. data/mod/history/spec/set/all/history_spec.rb +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 310b0b588949e32587e8eca8af7b585bd67dd676
4
- data.tar.gz: 0c7ca66913925da38dd413b3d8ca7864a1583836
3
+ metadata.gz: 4c1961a2ce7d7e5934195e3002c3e7609318f6e4
4
+ data.tar.gz: 52b297b8c8b3a67261d147ac9dd70d1d787c5e55
5
5
  SHA512:
6
- metadata.gz: dcd7057def3e26672f74881d2a4c81b94749749c72d3165ed64ffcff86a98d54bde9dfec3409ef142f04a9dd5c4f96fabbdafd6ccb376e7213829f9304afec43
7
- data.tar.gz: 311ade9ea59d51ec78dc931c04c47ba55e93b9ae05cb0c99b149139c618e6a2d13fc30b9d922d4f1239336a618fe983f551f4cdaaf3b749a236fedfab6cec220
6
+ metadata.gz: f093ab3a76e7623d20fff9af9be1a935bb5f5aff4d047fe5fa2ae19702ff253ef69478348d5b71a71974289981f54283b212e7eba6e7a680ce4f43e37ecbbeee
7
+ data.tar.gz: 2f7188deb8519510247765f59306d7da32c3f03038406de03c9df421f631e135d4d48ba212e31df9b6c81d9805f707f8cb11f6a7e7909a0fdc6a8ec0e01d4d80
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.1
1
+ 0.6.2
@@ -168,6 +168,11 @@ de:
168
168
  save_as_current: Als aktuelle Fassung speichern
169
169
  show_changes: Zeige Änderungen
170
170
  hide_changes: Verstecke Änderungen
171
+ :basic_formats:
172
+ set:
173
+ all:
174
+ base:
175
+ too_deep: Man, you're too deep. (Zu viele Level von Nester auf einmal)
171
176
  :basic_types:
172
177
  set:
173
178
  abstract:
@@ -298,36 +303,15 @@ de:
298
303
  se_ticket: <a href="%{ticket_link}">Erstelle ein Support-Ticket</a> to tell us more and follow the fix.
299
304
  denial: Zugriff verweigert
300
305
  bad_address: "404: Bad Address"
301
- too_deep: Man, you're too deep. (Zu viele Level von Nester auf einmal)
302
306
  too_slow: Timed out! %{showname} hat zu lange zum Laden gebraucht.
303
307
  error_rendering: error rendering
304
308
  error_message: Fehlermeldung (nur für Administratoren sichtbar)
305
309
  add_thing: Füge %{title} hinzu
306
310
  conflict: Konflikt!
311
+ not_found: Nicht gefunden
307
312
  also_changes: "%{actor_link} hat gleichzeitig Änderungen gemacht."
308
313
  conflict_instruction: Bitte überprüfe den Konflikt unten, behebe ihn oben, und sende erneut.
309
- problems_no_name: Probleme
310
- problems_name: Probleme mit %{cardname}
311
- sign_in_c: Anmelden
312
- sign_up_c: Registrieren
313
- sign_in: anmelden
314
- sign_up: registrieren
315
- not_found: Nicht gefunden
316
- sign_in_or_up: "%{signin_link} oder %{signup_link} um es zu erstellen."
317
- not_found_card: Konnte %{cardname} nicht finden
318
- not_found_that: Konnte das nicht finden.
319
- read_only: Wir sind im Moment im Nur-Lese-Modus. Versuche es später noch einmal.
320
- sorry: Sorry!
321
- need_permission_task: You need permission to %{task} this.
322
- need_permission_no_task: You need permission to do that.
323
- sign_in_up_task: Bitte %{signin_link} oder %{signup_link} um das zu %{task}.
324
- sign_in_task: Bitte %{signin_link} um das zu %{task}.
325
- sign_in_up_no_task: Bitte %{signin_link} oder %{signup_link} um das zu tun.
326
- sign_in_no_task: Bitte %{signin_link} um das zu tun.
327
- or: oder
328
- please: bitte
329
- denied_task: zu %{denied_task} dies
330
- to_do_that: das zu tun
314
+
331
315
  list_changes:
332
316
  search_list_fields: list fields
333
317
  search_listed_by_fields: listed by fields
@@ -354,6 +338,17 @@ de:
354
338
  rename_update: Umbenennen und aktualisieren
355
339
  renaming: Wird umbenannt
356
340
  rename: Umbenennen
341
+ error:
342
+ problems_name: Probleme mit %{cardname}
343
+ please: Bitte
344
+ sign_in: anmelden
345
+ or: oder
346
+ sign_up: registrieren
347
+ read_only: Wir sind im Moment im Nur-Lese-Modus. Versuche es später noch einmal.
348
+ sorry: Sorry!
349
+ need_permission_task: You need permission to %{task} this.
350
+ to_do_that: das zu tun
351
+ denied_task: zu %{denied_task} dies
357
352
  form:
358
353
  unsupported_action_class: "unsupported card_form action class: %{actionclass}"
359
354
  submit: Speichern
@@ -178,6 +178,11 @@ en:
178
178
  save_as_current: Save as current
179
179
  show_changes: Show changes
180
180
  hide_changes: Hide changes
181
+ :basic_formats:
182
+ set:
183
+ all:
184
+ base:
185
+ too_deep: Man, you're too deep. (Too many levels of nests at a time)
181
186
  :basic_types:
182
187
  set:
183
188
  abstract:
@@ -308,7 +313,6 @@ en:
308
313
  se_ticket: <a href="%{ticket_link}">Add a support ticket</a> to tell us more and follow the fix.
309
314
  denial: Permission Denied
310
315
  bad_address: "404: Bad Address"
311
- too_deep: Man, you're too deep. (Too many levels of nests at a time)
312
316
  too_slow: Timed out! %{showname} took too long to load.
313
317
  error_rendering: error rendering
314
318
  error_message: Error message (visible to admin only)
@@ -316,28 +320,8 @@ en:
316
320
  conflict: Conflict!
317
321
  also_changes: "%{actor_link} has also been making changes."
318
322
  conflict_instruction: Please examine below, resolve above, and re-submit.
319
- problems_no_name: Problems
320
- problems_name: Problems with %{cardname}
321
- sign_in_c: Sign in
322
- sign_up_c: Sign up
323
- sign_in: sign in
324
- sign_up: sign up
325
323
  not_found: Not Found
326
- sign_in_or_up: "%{signin_link} or %{signup_link} to create it."
327
324
  not_found_card: Could not find %{cardname}
328
- not_found_that: Could not find that.
329
- read_only: We are currently in read-only mode. Please try again later.
330
- sorry: Sorry!
331
- need_permission_task: You need permission to %{task} this.
332
- need_permission_no_task: You need permission to do that.
333
- sign_in_up_task: Please %{signin_link} or %{signup_link} to %{task} this.
334
- sign_in_task: Please %{signin_link} to %{task} this.
335
- sign_in_up_no_task: Please %{signin_link} or %{signup_link} to do that.
336
- sign_in_no_task: Please %{signin_link} to do that.
337
- or: or
338
- please: please
339
- denied_task: to %{denied_task} this
340
- to_do_that: to do that
341
325
  list_changes:
342
326
  search_list_fields: list fields
343
327
  search_listed_by_fields: listed by fields
@@ -364,6 +348,17 @@ en:
364
348
  rename_update: Rename and Update
365
349
  renaming: Renaming
366
350
  rename: Rename
351
+ error:
352
+ problems_name: Problems with %{cardname}
353
+ please: Please
354
+ sign_in: sign in
355
+ or: or
356
+ sign_up: sign up
357
+ read_only: We are currently in read-only mode. Please try again later.
358
+ sorry: Sorry!
359
+ need_permission_task: You need permission to %{task} this.
360
+ to_do_that: to do that
361
+ denied_task: to %{denied_task} this
367
362
  form:
368
363
  unsupported_action_class: "unsupported card_form action class: %{actionclass}"
369
364
  submit: Submit
@@ -178,6 +178,11 @@ es:
178
178
  save_as_current: Guardar como actual
179
179
  show_changes: Mostrar cambios
180
180
  hide_changes: Ocultar cambios
181
+ :basic_formats:
182
+ set:
183
+ all:
184
+ base:
185
+ too_deep: Hombre, eres muy profundo. (Demasiados niveles de nidos a la vez)
181
186
  :basic_types:
182
187
  set:
183
188
  abstract:
@@ -308,7 +313,6 @@ es:
308
313
  se_ticket: <a href="%{ticket_link}">Agregue un ticket de soporte</a> para decirnos más y seguir la solución.
309
314
  denial: Permiso denegado
310
315
  bad_address: "404: Mala direccion"
311
- too_deep: Hombre, eres muy profundo. (Demasiados niveles de nidos a la vez)
312
316
  too_slow: Caducado! %{showname} tomó demasiado tiempo para cargar..
313
317
  error_rendering: procesando errores
314
318
  error_message: Mensaje de error (visible solo para el administrador)
@@ -316,28 +320,8 @@ es:
316
320
  conflict: Conflicto!
317
321
  also_changes: "%{actor_link} también ha estado haciendo cambios."
318
322
  conflict_instruction: Por favor, examine a continuación, resuelva arriba y vuelva a enviar.
319
- problems_no_name: Problemas
320
- problems_name: Problemas con %{cardname}
321
- sign_in_c: Registrarse
322
- sign_up_c: Regístrate
323
- sign_in: Registrarse
324
- sign_up: Regístrate
325
323
  not_found: Extraviado
326
- sign_in_or_up: "%{signin_link} o %{signup_link} para crearlo."
327
324
  not_found_card: No pudo encontrar %{cardname}
328
- not_found_that: No pude encontrar eso.
329
- read_only: Actualmente estamos en modo de solo lectura. Por favor, inténtelo de nuevo más tarde.
330
- sorry: Lo siento!
331
- need_permission_task: Necesitas permiso para %{task} esto.
332
- need_permission_no_task: Necesitas permiso para hacer eso.
333
- sign_in_up_task: Por favor %{signin_link} o %{signup_link} a %{task} this.
334
- sign_in_task: Por favor %{signin_link} a %{task} esto.
335
- sign_in_up_no_task: Por favor %{signin_link} o %{signup_link} para hacer eso.
336
- sign_in_no_task: Por favor %{signin_link} para hacer eso.
337
- or: o
338
- please: por favor
339
- denied_task: a %{denied_task} esto
340
- to_do_that: para hacer eso
341
325
  list_changes:
342
326
  search_list_fields: campos de lista
343
327
  search_listed_by_fields: listado por campos
@@ -364,6 +348,17 @@ es:
364
348
  rename_update: Renombrar y actualizar
365
349
  renaming: Renombrar
366
350
  rename: Rebautizar
351
+ error:
352
+ problems_name: Problemas con %{cardname}
353
+ please: por favor
354
+ sign_in: Registrarse
355
+ or: o
356
+ sign_up: Regístrate
357
+ read_only: Actualmente estamos en modo de solo lectura. Por favor, inténtelo de nuevo más tarde.
358
+ sorry: Lo siento!
359
+ need_permission_task: Necesitas permiso para %{task} esto.
360
+ to_do_that: para hacer eso
361
+ denied_task: a %{denied_task} esto
367
362
  form:
368
363
  unsupported_action_class: "sin soporte card_form clase de acción: %{actionclass}"
369
364
  submit: Enviar
@@ -121,10 +121,8 @@ class Card < ApplicationRecord
121
121
  has_many :actions, -> { where(draft: [nil, false]).order :id }
122
122
  has_many :drafts, -> { where(draft: true).order :id }, class_name: :Action
123
123
 
124
- cattr_accessor :set_patterns, :serializable_attributes, :error_codes,
125
- :set_specific_attributes
124
+ cattr_accessor :set_patterns, :serializable_attributes, :set_specific_attributes
126
125
  self.set_patterns = []
127
- self.error_codes = {}
128
126
 
129
127
  # attributes that ActiveJob can handle
130
128
  def self.serializable_attr_accessor *args
@@ -102,7 +102,8 @@ class Card
102
102
  # @todo remove duplicate checks here; should be caught upon creation
103
103
  def check_duplicates codehash, codename, card_id
104
104
  return unless codehash.key?(codename) || codehash.key?(card_id)
105
- warn "dup codename: #{codename}, ID:#{card_id} (#{codehash[codename]})"
105
+ Rails.logger.debug "dup codename: #{codename}, "\
106
+ "ID:#{card_id} (#{codehash[codename]})"
106
107
  end
107
108
 
108
109
  # generate Hash for @codehash and put it in the cache
@@ -5,38 +5,75 @@ class Card
5
5
  # (arguably most of these should be Card::Exception)
6
6
  class Error < StandardError
7
7
  cattr_accessor :current
8
+ class_attribute :status_code, :view
8
9
 
9
- class BadContent < Error
10
+ self.view = :errors
11
+ self.status_code = 422
12
+
13
+ attr_accessor :card
14
+
15
+ def initialize message=nil
16
+ if message.is_a? Card
17
+ self.card = message
18
+ message = message_from_card
19
+ end
20
+ super message
21
+ end
22
+
23
+ def message_from_card
24
+ I18n.t :exception_for_card,
25
+ scope: %i[lib card error], cardname: card.name, message: card_message_text
26
+ end
27
+
28
+ def report
29
+ Rails.logger.info "exception = #{self.class}: #{message}"
30
+ end
31
+
32
+ def card_message_text
33
+ card.errors.first&.message
34
+ end
35
+
36
+ # error attributable to code (as opposed to card configuration)
37
+ class ServerError < Error
38
+ self.view = :server_error
39
+ self.status_code = 500
40
+
41
+ def report
42
+ super
43
+ card&.notable_exception_raised
44
+ end
10
45
  end
11
46
 
12
- class BadQuery < Error
47
+ # error whose message can be shown to any user
48
+ class UserError < Error
13
49
  end
14
50
 
15
- class BadAddress < Error
51
+ # error in WQL query
52
+ class BadQuery < UserError
16
53
  end
17
54
 
18
- class NotFound < StandardError
55
+ # card not found
56
+ class NotFound < UserError
57
+ self.status_code = 404
58
+ self.view = :not_found
19
59
  end
20
60
 
21
61
  class CodenameNotFound < NotFound
22
62
  end
23
63
 
24
- # permission errors
25
- class PermissionDenied < Error
26
- attr_reader :card
64
+ # two editors altering the same card at once
65
+ class EditConflict < UserError
66
+ self.status_code = 409
67
+ self.view = :conflict
68
+ end
27
69
 
28
- def initialize message
29
- if message.is_a? Card
30
- super message_from_card(message)
31
- else
32
- super
33
- end
34
- end
70
+ # permission errors
71
+ class PermissionDenied < UserError
72
+ self.status_code = 403
73
+ self.view = :denial
35
74
 
36
- def message_from_card card
37
- I18n.t :exception_for_card, scope: [:lib, :card, :error],
38
- cardname: card.name,
39
- message: card.errors[:permission_denied]
75
+ def card_message_text
76
+ card.errors[:permission_denied]
40
77
  end
41
78
  end
42
79
 
@@ -52,54 +89,33 @@ class Card
52
89
 
53
90
  # associating views with exceptions
54
91
  class << self
55
- ## NOTE: arguably the view and status should be handled in each error class
56
- ## status is currently defined in the view
92
+ KEY_MAP = { permission_denied: PermissionDenied,
93
+ conflict: EditConflict }.freeze
57
94
 
58
- def exception_view card, exception
59
- self.current = exception
60
- simple_exception_view(card, exception) ||
61
- problematic_exception_view(card, exception)
62
- end
63
-
64
- def simple_exception_view card, exception
65
- # "simple" error messages are visible to end users and are generally not
66
- # treated as software bugs (though they may be "ruler" bugs)
67
- case exception
68
- when BadContent, BadQuery
69
- card.errors.add :exception, exception.message
70
- :errors
71
- when BadAddress
72
- :bad_address
73
- when PermissionDenied
74
- :denial
75
- when NotFound, ActiveRecord::RecordNotFound, ActionController::MissingFile
76
- :not_found
95
+ def cardify_exception exception, card
96
+ unless exception.is_a? Card::Error
97
+ exception = card_error_class(exception, card).new exception.message
77
98
  end
99
+ exception.card ||= card
100
+ exception
78
101
  end
79
102
 
80
- # indicates a code problem and therefore require full logging
81
- def problematic_exception_view card, exception
82
- card&.notable_exception_raised
83
-
84
- if exception.is_a? ActiveRecord::RecordInvalid
85
- :errors
86
- elsif Rails.logger.level.zero?
87
- # raise error loudly when not in production (could be a better test!)
88
- raise exception
103
+ def card_error_class exception, card
104
+ case exception
105
+ when ActiveRecord::RecordInvalid
106
+ invalid_card_error_class card
107
+ when ActiveRecord::RecordNotFound, ActionController::MissingFile
108
+ Card::Error::NotFound
89
109
  else
90
- :server_error
110
+ Card::Error::ServerError
91
111
  end
92
112
  end
93
113
 
94
- # card view and HTTP status code associate with errors on card
95
- # TODO: should prioritize certain error classes
96
- def view_and_status card
97
- card.errors.keys.each do |key|
98
- if (view_and_status = Card.error_codes[key])
99
- return view_and_status
100
- end
114
+ def invalid_card_error_class card
115
+ KEY_MAP.each do |key, klass|
116
+ return klass if card.errors.key? key
101
117
  end
102
- nil
118
+ Card::Error
103
119
  end
104
120
  end
105
121
  end
@@ -57,8 +57,8 @@ class Card
57
57
 
58
58
  cattr_accessor :registered
59
59
  self.registered = []
60
- VIEW_VARS = [ :perms, :denial, :closed, :error_code ]
61
- (VIEW_VARS + [ :view_tags, :aliases ]).each do |accessor_name|
60
+ VIEW_VARS = %i[perms denial closed].freeze
61
+ (VIEW_VARS + %i[view_tags aliases]).each do |accessor_name|
62
62
  cattr_accessor accessor_name
63
63
  send "#{accessor_name}=", {}
64
64
  end
@@ -2,35 +2,34 @@ class Card
2
2
  class Format
3
3
  module Error
4
4
  def rescue_view e, view
5
- raise e if Rails.env =~ /^cucumber|test$/
6
- if focal?
7
- focal_error e, view
8
- else
9
- # TODO: consider rendering dynamic error view here.
10
- nested_error e, view
11
- end
12
- end
13
-
14
- def debug_error e
15
- raise e if Card[:debugger]&.content == "on"
5
+ # make config option; don't refer directly to env
6
+ raise e if Rails.env =~ /^cucumber$/
7
+ # TODO: unify with Card::Error#report
8
+ Rails.logger.info "#{e.message}\n#{e.backtrace}"
9
+ method = focal? ? :focal_error : :rendering_error
10
+ send method, e, view
16
11
  end
17
12
 
18
- def error_cardname
13
+ def error_cardname _exception
19
14
  if card&.name.present?
20
15
  safe_name
21
16
  else
22
- I18n.t :no_cardname, scope: [:lib, :card, :format, :error]
17
+ I18n.t :no_cardname, scope: %i[lib card format error]
23
18
  end
24
19
  end
25
20
 
26
21
  def focal_error e, view
27
- card.errors.add view.to_s, e.message if card.errors.empty?
28
- render Card::Error.exception_view card, e
22
+ card.errors.add "#{view} view", rendering_error(e, view) if card.errors.empty?
23
+ raise e
29
24
  end
30
25
 
31
- def nested_error _exception, view
32
- I18n.t :error_rendering, scope: [:lib, :card, :format, :error],
33
- cardname: error_cardname, view: view
26
+ def rendering_error exception, view
27
+ if exception.is_a? Card::Error::UserError
28
+ exception.message
29
+ else
30
+ tr :error_rendering, scope: [:lib, :card, :format, :error],
31
+ cardname: error_cardname(exception), view: view
32
+ end
34
33
  end
35
34
  end
36
35
  end