glib-web 4.10.1 → 4.10.3

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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +0 -0
  3. data/app/helpers/glib/app_feature_support_helper.rb +0 -0
  4. data/app/helpers/glib/dynamic_texts_helper.rb +0 -0
  5. data/app/helpers/glib/json_ui/action_builder/sheets.rb +0 -0
  6. data/app/helpers/glib/json_ui/analytics_helper.rb +0 -0
  7. data/app/helpers/glib/json_ui/generic_builders.rb +0 -0
  8. data/app/helpers/glib/json_ui/view_builder/panels.rb +7 -0
  9. data/app/models/concerns/glib/enum_humanization.rb +1 -1
  10. data/app/models/glib/active_storage/attachment.rb +0 -0
  11. data/app/models/glib/active_storage/blob.rb +0 -0
  12. data/app/models/glib/dynamic_text_record.rb +0 -0
  13. data/app/models/glib/text.rb +0 -0
  14. data/app/validators/email_typo_validator.rb +0 -0
  15. data/app/validators/email_validator.rb +0 -0
  16. data/app/validators/url_validator.rb +0 -0
  17. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +0 -0
  18. data/app/views/json_ui/garage/forms/bulk_edit_post.json.jbuilder +0 -0
  19. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +45 -40
  20. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +0 -0
  21. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +0 -0
  22. data/app/views/json_ui/garage/forms/selects.json.jbuilder +7 -2
  23. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +0 -0
  24. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +0 -0
  25. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +0 -0
  26. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +0 -0
  27. data/app/views/json_ui/garage/home/blank.json.jbuilder +0 -0
  28. data/app/views/json_ui/garage/home/slow.json.jbuilder +0 -0
  29. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +0 -0
  30. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +0 -0
  31. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +0 -0
  32. data/app/views/json_ui/garage/lists/fab.json.jbuilder +0 -0
  33. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +0 -0
  34. data/app/views/json_ui/garage/pages/custom_style_class.json.jbuilder +0 -0
  35. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +0 -0
  36. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +0 -0
  37. data/app/views/json_ui/garage/pages/layout.json.jbuilder +0 -0
  38. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +0 -0
  39. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +0 -0
  40. data/app/views/json_ui/garage/pages/redirect_onload.json.jbuilder +0 -0
  41. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +0 -0
  42. data/app/views/json_ui/garage/panels/card.json.jbuilder +0 -0
  43. data/app/views/json_ui/garage/panels/custom.json.jbuilder +0 -0
  44. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +0 -0
  45. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +0 -0
  46. data/app/views/json_ui/garage/services/image.json.jbuilder +0 -0
  47. data/app/views/json_ui/garage/services/index.json.jbuilder +0 -0
  48. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +0 -0
  49. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +0 -0
  50. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +0 -0
  51. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +0 -0
  52. data/app/views/json_ui/garage/tables/index.json.jbuilder +0 -0
  53. data/app/views/json_ui/garage/tables/panel_content.json.jbuilder +65 -25
  54. data/app/views/json_ui/garage/test_page/form.json.jbuilder +5 -5
  55. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +0 -0
  56. data/app/views/json_ui/garage/views/controls.json.jbuilder +2 -2
  57. data/app/views/json_ui/garage/views/map_data.json.jbuilder +0 -0
  58. data/app/views/json_ui/garage/views/multimedia.json.jbuilder +0 -0
  59. data/app/views/layouts/json_ui/no_custom.html.erb +0 -0
  60. data/lib/generators/glib/install_generator.rb +0 -0
  61. data/lib/generators/templates/20191017062519_create_texts.rb +0 -0
  62. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +0 -0
  63. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +0 -0
  64. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +0 -0
  65. data/lib/generators/templates/database.yml +0 -0
  66. data/lib/generators/templates/dynamic_text.rb +0 -0
  67. data/lib/glib/dynamic_text/config.rb +0 -0
  68. data/lib/glib/dynamic_text.rb +0 -0
  69. data/lib/glib/json_crawler/action_crawler.rb +0 -0
  70. data/lib/glib/json_crawler/action_crawlers/action_http.rb +0 -0
  71. data/lib/glib/json_crawler/action_crawlers/dialogs_alert.rb +0 -0
  72. data/lib/glib/json_crawler/action_crawlers/dialogs_close.rb +14 -0
  73. data/lib/glib/json_crawler/action_crawlers/menu.rb +0 -0
  74. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +0 -0
  75. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +0 -0
  76. data/lib/glib/json_crawler/coverage.rb +0 -0
  77. data/lib/glib/json_crawler/http.rb +25 -2
  78. data/lib/glib/json_crawler/router.rb +4 -0
  79. data/lib/glib/json_crawler.rb +1 -0
  80. data/lib/glib/value.rb +0 -0
  81. data/lib/glib/version.rb +0 -0
  82. metadata +4 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ddb48299bbf1685aed5b8fd994ca3ffc8eba555e097cc77dbd38cb7b48707e6c
4
- data.tar.gz: 8569bc0e88d99f4dae7e1d2be733168e2ee7f0acd499e565a5fef0cca2a50ca9
3
+ metadata.gz: 840b2cb71ab488fdfff13806866763bd9e73c22c7cab85cff48a093643f7d898
4
+ data.tar.gz: 1a513b44d185b802b61b54f1053246b5308e38f536fb4cef32a1123695b7ab3d
5
5
  SHA512:
6
- metadata.gz: 328b8d4f45b8cd8a0e99029f5edfe0e20469e860a27282cf26a7173a7538b8bfb2310ba8b877c53ac05ac963c395f32767c69e25f568a7c67db262ea58ccc144
7
- data.tar.gz: 5f1b8c282c4c82aa77474304f584e22426188b04135af2387da8ee0099cc2eef85e527333966d439fa511aa14ef5a32d6bf3301d040ed9eb38e9f79066fe4991
6
+ metadata.gz: 0c48d7a4a27523b0ada18199e771f028879ce44a8587513416b46885cbf6fb1a695c64a0e3e30facf049cea0039c313e4cd8a0d7f8551dc744b6ecccb54a533a
7
+ data.tar.gz: a7717b61cd9e9ba90aeec57991fca3e39c387eaabf175d9d6585973a034198af5231562d72abe85844bb0f668f0088dfd5d63611b158a9a911f05ffb95b32d3c
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -572,6 +572,13 @@ class Glib::JsonUi::ViewBuilder
572
572
  # end
573
573
  end
574
574
 
575
+ class Pagination < View
576
+ int :length
577
+ int :value
578
+ action :onChange
579
+ string :paramNameForFieldName
580
+ end
581
+
575
582
  module ModelPanel
576
583
  attr_reader :model_name # See Panels::Form.field_name
577
584
  attr_reader :assoc_order_index
@@ -21,7 +21,7 @@ module Glib
21
21
  if enum_value
22
22
  translation_key = "activerecord.attributes.#{model_name.i18n_key}.#{enum_name.to_s.pluralize}.#{enum_value}"
23
23
 
24
- if default_translation.nil? && Rails.env.development?
24
+ if default_translation.nil? && (Rails.env.development? || Rails.env.test?)
25
25
  text = I18n.t(translation_key, raise: I18n::MissingTranslationData)
26
26
  else
27
27
  text = I18n.t(translation_key, default: default_translation)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -28,7 +28,7 @@ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', p
28
28
  template.fields_text width: 'matchParent', name: 'question', label: 'Question', placeholder: 'Question'
29
29
 
30
30
  form.panels_responsive id: 'responsive_{{entry_index}}', childViews: ->(column) do
31
- options = [:rating, :yes_no]
31
+ options = [:rating, :yes_no, :choices]
32
32
  template.fields_select \
33
33
  width: 'matchParent',
34
34
  name: 'type',
@@ -36,56 +36,61 @@ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', p
36
36
  placeholder: 'Answer Type',
37
37
  options: options.map { |o| { text: o.to_s.humanize, value: o } },
38
38
  onChangeAndLoad: ->(action) do
39
- action.logics_set targetId: 'responsive_{{entry_index}}', dataBuilder: ->(set) do
40
- set.panels_responsive accessory: ->(accessory) do
41
- accessory.footer childViews: ->(footer) do
42
- # TODO: Is there a way to only show this if the selected option is "rating".
43
- # I.e. `showIf: { "==": [{ "var": 'user[evaluation][{{index}}][type]' }, 'rating'] }`
44
- footer.fields_check \
45
- width: 'matchParent',
46
- id: 'check_{{entry_index}}',
47
- name: 'enabled',
48
- label: 'Enable',
49
- checkValue: true
39
+ action.runMultiple childActions: ->(multiple) do
40
+ multiple.logics_set \
41
+ cacheData: true, # This is so that the the new data is retained when the `dynamicGroup` gets re-rendered.
42
+ debug: true,
43
+ targetId: 'responsive_{{entry_index}}', dataBuilder: ->(set) do
44
+ set.panels_responsive width: 'matchParent', accessory: ->(accessory) do
45
+ accessory.footer childViews: ->(footer) do
46
+ footer.fields_check \
47
+ width: 'matchParent',
48
+ id: 'check_{{entry_index}}',
49
+ name: 'enabled',
50
+ label: 'Enable',
51
+ checkValue: true
52
+
53
+ footer.panels_split width: 'matchParent', content: ->(split) do
54
+ split.right childViews: ->(right) do
55
+ right.label text: 'This should be right-aligned'
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end, onSet: ->(subaction) do
61
+ subaction.logics_set \
62
+ targetId: 'check_{{entry_index}}',
63
+ conditionalData: {
64
+ value: {
65
+ "==": [{ "var": 'user[evaluation][{{entry_index}}][type]' }, 'rating']
66
+ }
67
+ }
50
68
  end
51
- end
52
- end, onSet: ->(subaction) do
53
- subaction.logics_set \
54
- targetId: 'check_{{entry_index}}',
69
+
70
+ multiple.logics_set \
71
+ targetId: 'choices_panel',
72
+ debug: true,
55
73
  conditionalData: {
56
- value: {
57
- "==": [{ "var": 'user[evaluation][{{entry_index}}][type]' }, 'rating']
74
+ displayed: {
75
+ "==": [{ "var": 'user[evaluation][{{entry_index}}][type]' }, 'choices']
58
76
  }
59
77
  }
60
78
  end
61
-
62
- # action.components_findClosest view: 'panels/responsive', onFind: ->(find) do
63
- # find.logics_set dataBuilder: ->(set) do
64
- # set.panels_responsive accessory: ->(accessory) do
65
- # accessory.footer childViews: ->(footer) do
66
- # # TODO: Is there a way to only show this if the selected option is "rating".
67
- # # I.e. `showIf: { "==": [{ "var": 'user[evaluation][{{index}}][type]' }, 'rating'] }`
68
- # footer.fields_check \
69
- # width: 'matchParent',
70
- # name: 'enabled',
71
- # label: 'Enable',
72
- # checkValue: '1'
73
- # end
74
- # end
75
- # end
76
- # end
77
79
  end
78
80
  end, accessory: ->(accessory) do
79
81
  accessory.footer childViews: ->(footer) do
82
+
80
83
  end
81
84
  end
82
85
 
83
- # template.fields_check \
84
- # width: 'matchParent',
85
- # name: 'enabled',
86
- # label: 'Enable',
87
- # checkValue: '1',
88
- # showIf: { "==": [{ "var": 'user[evaluation][{{index}}][type]' }, 'rating'] }
86
+ template.panels_vertical id: 'choices_panel', childViews: ->(vertical) do
87
+ (1..5).each do |i|
88
+ vertical.fields_text \
89
+ width: 'matchParent',
90
+ name: "choices[#{i}]",
91
+ label: "Choice #{i}"
92
+ end
93
+ end
89
94
 
90
95
  template.spacer height: 14
91
96
  end
@@ -17,13 +17,16 @@ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', p
17
17
  }
18
18
 
19
19
  form.panels_responsive childViews: ->(column) do
20
+ options = languages.map do |k, v|
21
+ { value: k, text: v }
22
+ end
20
23
  form.fields_select \
21
24
  name: 'user[city]',
22
25
  width: 'matchParent',
23
26
  clearable: true,
24
27
  label: 'City1',
25
28
  placeholder: 'This is a placeholder',
26
- options: languages.map { |k, v| { value: k, text: v } },
29
+ options: options,
27
30
  value: 'canberra',
28
31
  onChange: ->(action) do
29
32
  action.components_findClosest view: 'panels/responsive', onFind: ->(find) do
@@ -47,11 +50,13 @@ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', p
47
50
 
48
51
  form.spacer height: 6
49
52
 
53
+ options = languages.map { |k, v| { value: k, text: v, deselect: [-1] } }
54
+ options << { value: -1, text: 'None of the above', deselect: languages.keys }
50
55
  form.fields_select \
51
56
  name: 'user[cities][]',
52
57
  width: 'matchParent',
53
58
  label: 'Cities',
54
- options: languages.map { |k, v| { value: k, text: v } },
59
+ options: options,
55
60
  value: ['melbourne', 'sydney'],
56
61
  multiple: true,
57
62
  onChange: ->(action) do
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -3,34 +3,74 @@ json.title 'Tables'
3
3
  page = json_ui_page json
4
4
  render "#{@path_prefix}/nav_menu", json: json, page: page
5
5
 
6
- page.table styleClass: 'table--grid', sections: [
7
- ->(section) do
8
- section.header cellViews: ->(header) do
9
- header.label text: 'Vertical'
10
- header.label text: 'Horizontal'
11
- header.label text: 'Unordered List'
12
- end
13
-
14
- items = [1, 2, 3]
15
- section.rows objects: items, builder: ->(row, item, index) do
16
- row.default colStyles: [{ width: 200, backgroundColor: '#eeeeee' }], cellViews: ->(cell) do
17
- cell.panels_vertical childViews: ->(vertical) do
18
- vertical.h3 text: "Title #{item}"
19
- vertical.spacer height: 4
20
- vertical.label text: "Subtitle #{item}"
6
+ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
7
+ scroll.panels_form childViews: ->(form) do
8
+ form.panels_table styleClass: 'table--grid', sections: [
9
+ ->(section) do
10
+ section.header cellViews: ->(header) do
11
+ header.panels_horizontal childViews: ->(horizontal) do
12
+ horizontal.fields_check name: 'check_all', checkValue: true, onChange: ->(action) do
13
+ action.runMultiple childActions: ->(multiple) do
14
+ check_ids = (0..2).map { |i| "item_#{i}" }
15
+ # action.logics_set targetIds: check_ids, conditionalData: {
16
+ # value: { 'var': 'check_all' }
17
+ # }
18
+ check_ids.each_with_index do |check_id, index|
19
+ record_id = "id_#{index}"
20
+ multiple.logics_set targetId: check_id, conditionalData: {
21
+ value: { "if": [ { 'var': 'check_all' }, record_id, nil ]}
22
+ }
23
+ end
24
+ end
25
+ end
26
+ end
27
+ header.label text: 'Vertical'
28
+ header.label text: 'Horizontal'
29
+ header.label text: 'Unordered List'
21
30
  end
22
31
 
23
- cell.panels_horizontal childViews: ->(vertical) do
24
- vertical.label text: "Left #{item}"
25
- vertical.spacer width: 10
26
- vertical.label text: "Right #{item}"
27
- end
32
+ items = [1, 2, 3]
33
+ section.rows objects: items, builder: ->(row, item, index) do
34
+ row.default colStyles: [{ width: 200, backgroundColor: '#eeeeee' }], cellViews: ->(cell) do
35
+ cell.panels_horizontal childViews: ->(horizontal) do
36
+ horizontal.fields_check \
37
+ id: "item_#{index}",
38
+ name: 'user[items][]',
39
+ checkValue: "id_#{index}", # In the real-world, this is going to be the ID of a DB record.
40
+ onChangeAndLoad: ->(action) do
41
+ # TODO: Fix fields_check so it can support arrays
42
+ action.logics_set targetId: 'submit_button', conditionalData: {
43
+ text: {
44
+ 'printf': [
45
+ 'Submit {0} items',
46
+ { 'countNonNull': [{ 'var': 'user[items][]' }] }
47
+ ]
48
+ }
49
+ }
50
+ end
51
+ end
52
+
53
+ cell.panels_vertical childViews: ->(vertical) do
54
+ vertical.h3 text: "Title #{item}"
55
+ vertical.spacer height: 4
56
+ vertical.label text: "Subtitle #{item}"
57
+ end
28
58
 
29
- cell.panels_ul childViews: ->(ul) do
30
- ul.label text: "Item A#{item}"
31
- ul.label text: "Item B#{item}"
59
+ cell.panels_horizontal childViews: ->(vertical) do
60
+ vertical.label text: "Left #{item}"
61
+ vertical.spacer width: 10
62
+ vertical.label text: "Right #{item}"
63
+ end
64
+
65
+ cell.panels_ul childViews: ->(ul) do
66
+ ul.label text: "Item A#{item}"
67
+ ul.label text: "Item B#{item}"
68
+ end
69
+ end
32
70
  end
33
71
  end
34
- end
72
+ ]
73
+
74
+ form.fields_submit id: 'submit_button', text: 'Submit'
35
75
  end
36
- ]
76
+ end
@@ -23,9 +23,9 @@ page.body childViews: ->(body) do
23
23
  end
24
24
  end
25
25
  hori.spacer width: 4
26
- hori.button text: 'logics/set', onClick: ->(action) do
27
- action.logics_set targetId: 'date', conditionalData: { value: { "+": [{ "var": ['user[date]'] }, 60 * 60 * 24 * 3] } }
28
- end
26
+ # hori.button text: 'logics/set', onClick: ->(action) do
27
+ # action.logics_set targetId: 'date', conditionalData: { value: { "+": [{ "var": ['user[date]'] }, 60 * 60 * 24 * 3] } }
28
+ # end
29
29
  hori.spacer width: 4
30
30
  hori.button text: 'components/replace', onClick: ->(action) do
31
31
  action.runMultiple childActions: ->(saction) do
@@ -73,8 +73,8 @@ page.body childViews: ->(body) do
73
73
  validation = { required: { message: 'Required' } }
74
74
  options = ['option1', 'option2', 'option3', 'option4'].map { |option| { 'text'=> option.humanize, 'value' => option } }
75
75
 
76
- form.fields_date width: 'matchParent', name: 'user[date]', id: 'date', value: Date.new(2024, 7, 24), validation: validation
77
- form.hr width: 'matchParent'
76
+ # form.fields_date width: 'matchParent', name: 'user[date]', id: 'date', value: Date.new(2024, 7, 24), validation: validation
77
+ # form.hr width: 'matchParent'
78
78
  form.fields_select clearable: true, multiple: true, width: 'matchParent', name: 'user[select][]', id: 'select', options: options, value: ['option1', 'option2'], validation: validation
79
79
  form.hr width: 'matchParent'
80
80
  form.panels_flow innerPadding: { bottom: 0 }, width: 'matchParent', id: 'select1', childViews: ->(flow) do
@@ -39,10 +39,10 @@ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
39
39
  dialog.body padding: glib_json_padding_body, childViews: ->(view) do
40
40
  view.panels_responsive styleClass: 'popover-menu', width: 200, childViews: ->(res) do
41
41
  res.label text: 'Item 1', styleClass: 'popover-menu-item', onClick: ->(saction) do
42
- saction.windows_open url: 'http://localhost:3000/glib/json_ui_garage?path=pages%2Findex'
42
+ saction.windows_open url: json_ui_garage_url(path: 'pages/index')
43
43
  end
44
44
  res.label text: 'Item 2', styleClass: 'popover-menu-item', onClick: ->(saction) do
45
- saction.popovers_close key: 'menu'
45
+ saction.windows_open url: json_ui_garage_url(path: 'home/blank')
46
46
  end
47
47
  res.label text: 'Item 3', styleClass: 'popover-menu-item', onClick: ->(saction) do
48
48
  saction.popovers_close key: 'menu'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,14 @@
1
+ module Glib
2
+ module JsonCrawler
3
+ class DialogsClose < ActionCrawler
4
+ def initialize(http, args, action)
5
+ super(http)
6
+
7
+ @http.router.log action, nil
8
+ if (on_close = args.fetch('onClose', nil))
9
+ perform(on_close)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
File without changes
File without changes
@@ -14,6 +14,7 @@ module Glib
14
14
  def initialize(context, user, router)
15
15
  @context = context
16
16
  @history = []
17
+ @content_history = []
17
18
  @response_times = []
18
19
  @user = user
19
20
  @router = router
@@ -51,6 +52,12 @@ module Glib
51
52
  def fetch(method, url, action, params = {}, inspect_result = true)
52
53
  return nil if url.blank?
53
54
 
55
+ if (last_record = @content_history.last)
56
+ previous_url = last_record[:url]
57
+ else
58
+ previous_url = nil
59
+ end
60
+
54
61
  if method == :get
55
62
  return nil if history.include?(url)
56
63
 
@@ -64,7 +71,8 @@ module Glib
64
71
  http_header = {
65
72
  'Client-DeviceOS' => user[:device],
66
73
  'Client-Version' => user[:version],
67
- 'X-CSRF-Token' => user[:token]
74
+ 'X-CSRF-Token' => user[:token],
75
+ 'Referer' => previous_url
68
76
  }
69
77
  http_header.merge!(params[:headers]) if params[:headers].present?
70
78
 
@@ -76,7 +84,15 @@ module Glib
76
84
  begin
77
85
  @context.send(method, url, params: params, headers: http_header)
78
86
  raw_response = @context.response
79
- response = Response.new(raw_response.code.to_i, raw_response.headers, raw_response.media_type, raw_response.body)
87
+ body = raw_response.body
88
+ response = Response.new(raw_response.code.to_i, raw_response.headers, raw_response.media_type, body)
89
+
90
+ if method == :get
91
+ @content_history << {
92
+ url: url,
93
+ response: body
94
+ }
95
+ end
80
96
 
81
97
  if (controller = @context.controller)
82
98
  Glib::JsonCrawler::Coverage.coverage_files.add(controller.class.instance_method(controller.action_name).source_location.first)
@@ -90,7 +106,14 @@ module Glib
90
106
  end
91
107
 
92
108
  if !response
109
+ crash_log_file = Rails.root.join('tmp', "crash-#{DateTime.current.to_fs(:number)}.log")
110
+ puts
93
111
  puts "Crashed on #{url}"
112
+ puts "Referrer: #{previous_url}"
113
+ if last_record
114
+ File.write(crash_log_file, last_record[:response])
115
+ puts "Previous page's content logged to #{crash_log_file}"
116
+ end
94
117
  raise
95
118
  end
96
119
  end
@@ -21,6 +21,8 @@ module Glib
21
21
  end
22
22
 
23
23
  def assert_target_ids_exist(args)
24
+ # This saves targetId so that later we can check to make sure that it indeed exists
25
+ # within the page.
24
26
  if (target_ids = args['targetIds'])
25
27
  target_ids.each do |target_id|
26
28
  @visitor.defer_action(nil, target_id)
@@ -105,6 +107,8 @@ module Glib
105
107
  JsonCrawler::FormsSubmit.new(http, params)
106
108
  when 'dialogs/alert-v1', 'dialogs/alert'
107
109
  JsonCrawler::DialogsAlert.new(http, params, action)
110
+ when 'dialogs/close-v1', 'dialogs/close', 'popovers/close', 'popovers/close-v1'
111
+ JsonCrawler::DialogsClose.new(http, params, action)
108
112
  else
109
113
  unless [
110
114
  'http/delete-v1',
@@ -8,6 +8,7 @@ require_relative './json_crawler/action_crawlers/windows_open'
8
8
  require_relative './json_crawler/action_crawlers/action_http'
9
9
  require_relative './json_crawler/action_crawlers/forms_submit'
10
10
  require_relative './json_crawler/action_crawlers/dialogs_alert'
11
+ require_relative './json_crawler/action_crawlers/dialogs_close'
11
12
  require_relative './json_crawler/action_crawlers/dialogs_show'
12
13
  require_relative './json_crawler/action_crawlers/menu'
13
14
  require_relative './json_crawler/action_crawlers/run_multiple'
data/lib/glib/value.rb CHANGED
File without changes
data/lib/glib/version.rb CHANGED
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glib-web
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.10.1
4
+ version: 4.10.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
@@ -354,6 +354,7 @@ files:
354
354
  - lib/glib/json_crawler/action_crawler.rb
355
355
  - lib/glib/json_crawler/action_crawlers/action_http.rb
356
356
  - lib/glib/json_crawler/action_crawlers/dialogs_alert.rb
357
+ - lib/glib/json_crawler/action_crawlers/dialogs_close.rb
357
358
  - lib/glib/json_crawler/action_crawlers/dialogs_show.rb
358
359
  - lib/glib/json_crawler/action_crawlers/forms_submit.rb
359
360
  - lib/glib/json_crawler/action_crawlers/menu.rb
@@ -388,7 +389,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
388
389
  - !ruby/object:Gem::Version
389
390
  version: '0'
390
391
  requirements: []
391
- rubygems_version: 3.4.6
392
+ rubyforge_project:
393
+ rubygems_version: 2.7.6
392
394
  signing_key:
393
395
  specification_version: 4
394
396
  summary: ''