glib-web 0.4.72 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +5 -5
  2. data/app/controllers/concerns/glib/auth/policy.rb +0 -0
  3. data/app/controllers/concerns/glib/json/libs.rb +30 -7
  4. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +0 -0
  5. data/app/controllers/concerns/glib/json/traversal.rb +0 -0
  6. data/app/controllers/glib/home_controller.rb +0 -0
  7. data/app/helpers/glib/dynamic_images_helper.rb +0 -0
  8. data/app/helpers/glib/dynamic_texts_helper.rb +0 -0
  9. data/app/helpers/glib/forms_helper.rb +0 -0
  10. data/app/helpers/glib/json_ui/abstract_builder.rb +0 -0
  11. data/app/helpers/glib/json_ui/action_builder.rb +0 -18
  12. data/app/helpers/glib/json_ui/action_builder/dialogs.rb +0 -0
  13. data/app/helpers/glib/json_ui/action_builder/http.rb +19 -0
  14. data/app/helpers/glib/json_ui/action_builder/sheets.rb +0 -0
  15. data/app/helpers/glib/json_ui/action_builder/snackbars.rb +0 -0
  16. data/app/helpers/glib/json_ui/action_builder/windows.rb +0 -0
  17. data/app/helpers/glib/json_ui/generic_builders.rb +0 -0
  18. data/app/helpers/glib/json_ui/list_builders.rb +0 -0
  19. data/app/helpers/glib/json_ui/menu_builder.rb +1 -0
  20. data/app/helpers/glib/json_ui/page_helper.rb +0 -0
  21. data/app/helpers/glib/json_ui/response_helper.rb +0 -0
  22. data/app/helpers/glib/json_ui/split_builders.rb +0 -0
  23. data/app/helpers/glib/json_ui/styling_helper.rb +0 -0
  24. data/app/helpers/glib/json_ui/table_builders.rb +0 -0
  25. data/app/helpers/glib/json_ui/view_builder.rb +0 -0
  26. data/app/helpers/glib/json_ui/view_builder/banners.rb +0 -0
  27. data/app/helpers/glib/json_ui/view_builder/fields.rb +0 -0
  28. data/app/helpers/glib/json_ui/view_builder/panels.rb +4 -3
  29. data/app/models/glib/active_storage/attachment.rb +0 -0
  30. data/app/models/glib/active_storage/blob.rb +0 -0
  31. data/app/models/glib/dynamic_text_record.rb +0 -0
  32. data/app/models/glib/text.rb +0 -0
  33. data/app/policies/glib/application_policy.rb +0 -0
  34. data/app/validators/email_typo_validator.rb +23 -23
  35. data/app/validators/email_validator.rb +0 -0
  36. data/app/validators/url_validator.rb +0 -0
  37. data/app/views/app/views/json_ui/vue/renderer.html.erb +0 -0
  38. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +0 -0
  39. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +0 -0
  40. data/app/views/json_ui/garage/actions/_http.json.jbuilder +18 -0
  41. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -0
  42. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +0 -0
  43. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +0 -0
  44. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +0 -0
  45. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +0 -0
  46. data/app/views/json_ui/garage/actions/index.json.jbuilder +3 -18
  47. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +0 -0
  48. data/app/views/json_ui/garage/forms/basic.json.jbuilder +0 -0
  49. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +0 -0
  50. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +0 -0
  51. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +0 -0
  52. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +0 -0
  53. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +0 -0
  54. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +0 -0
  55. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +0 -0
  56. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +0 -0
  57. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +0 -0
  58. data/app/views/json_ui/garage/forms/index.json.jbuilder +0 -0
  59. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +0 -0
  60. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +0 -0
  61. data/app/views/json_ui/garage/forms/selects.json.jbuilder +0 -0
  62. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +0 -0
  63. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +0 -0
  64. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +0 -0
  65. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +0 -0
  66. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +0 -0
  67. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +0 -0
  68. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +0 -0
  69. data/app/views/json_ui/garage/home/blank.json.jbuilder +0 -0
  70. data/app/views/json_ui/garage/home/index.json.jbuilder +0 -0
  71. data/app/views/json_ui/garage/home/slow.json.jbuilder +0 -0
  72. data/app/views/json_ui/garage/lists/_infinite_scroll_section.json.jbuilder +0 -0
  73. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +0 -0
  74. data/app/views/json_ui/garage/lists/fab.json.jbuilder +0 -0
  75. data/app/views/json_ui/garage/lists/index.json.jbuilder +0 -0
  76. data/app/views/json_ui/garage/lists/infinite_scroll.json.jbuilder +0 -0
  77. data/app/views/json_ui/garage/lists/templating.json.jbuilder +1 -1
  78. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +0 -0
  79. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +0 -0
  80. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +0 -0
  81. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +0 -0
  82. data/app/views/json_ui/garage/pages/index.json.jbuilder +0 -0
  83. data/app/views/json_ui/garage/pages/layout.json.jbuilder +0 -0
  84. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +0 -0
  85. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +0 -0
  86. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +0 -0
  87. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +0 -0
  88. data/app/views/json_ui/garage/panels/card.json.jbuilder +0 -0
  89. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +0 -0
  90. data/app/views/json_ui/garage/panels/custom.json.jbuilder +0 -0
  91. data/app/views/json_ui/garage/panels/flow.json.jbuilder +0 -0
  92. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +0 -0
  93. data/app/views/json_ui/garage/panels/index.json.jbuilder +0 -0
  94. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +0 -0
  95. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +0 -0
  96. data/app/views/json_ui/garage/panels/split.json.jbuilder +0 -0
  97. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +0 -0
  98. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +0 -0
  99. data/app/views/json_ui/garage/services/image.json.jbuilder +0 -0
  100. data/app/views/json_ui/garage/services/index.json.jbuilder +0 -0
  101. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +0 -0
  102. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +0 -0
  103. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +0 -0
  104. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +0 -0
  105. data/app/views/json_ui/garage/tables/index.json.jbuilder +0 -0
  106. data/app/views/json_ui/garage/tables/layout.json.jbuilder +0 -0
  107. data/app/views/json_ui/garage/views/banners.json.jbuilder +0 -0
  108. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +0 -0
  109. data/app/views/json_ui/garage/views/carousels.json.jbuilder +0 -0
  110. data/app/views/json_ui/garage/views/charts.json.jbuilder +0 -0
  111. data/app/views/json_ui/garage/views/images.json.jbuilder +0 -0
  112. data/app/views/json_ui/garage/views/index.json.jbuilder +0 -0
  113. data/app/views/json_ui/garage/views/links.json.jbuilder +0 -0
  114. data/app/views/json_ui/garage/views/map_data.json.jbuilder +0 -0
  115. data/app/views/json_ui/garage/views/misc.json.jbuilder +0 -0
  116. data/app/views/json_ui/garage/views/texts.json.jbuilder +0 -0
  117. data/config/routes.rb +2 -0
  118. data/lib/generators/glib/install_generator.rb +0 -0
  119. data/lib/generators/templates/20191017062519_create_texts.rb +0 -0
  120. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +0 -0
  121. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +0 -0
  122. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +0 -0
  123. data/lib/generators/templates/database.yml +0 -0
  124. data/lib/generators/templates/dynamic_text.rb +0 -0
  125. data/lib/glib-web.rb +1 -0
  126. data/lib/glib/crypt.rb +1 -1
  127. data/lib/glib/crypt/utils.rb +0 -0
  128. data/lib/glib/dynamic_text.rb +1 -1
  129. data/lib/glib/dynamic_text/config.rb +0 -0
  130. data/lib/glib/engine.rb +0 -0
  131. data/lib/glib/json_crawler.rb +0 -0
  132. data/lib/glib/json_crawler/action_crawler.rb +0 -0
  133. data/lib/glib/json_crawler/action_crawlers/action_http.rb +0 -0
  134. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +0 -0
  135. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +2 -2
  136. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +8 -3
  137. data/lib/glib/json_crawler/coverage.rb +0 -0
  138. data/lib/glib/json_crawler/http.rb +8 -11
  139. data/lib/glib/json_crawler/router.rb +1 -5
  140. data/lib/glib/test_helpers.rb +40 -0
  141. data/lib/glib/value.rb +0 -0
  142. data/lib/glib/version.rb +0 -0
  143. data/lib/tasks/db.rake +0 -0
  144. metadata +6 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: '0537383a32a92f265a5f6c483f710047653915a8'
4
- data.tar.gz: f3a05908717cdc7eeb0bc3dfa3c10da75c1362a3
2
+ SHA256:
3
+ metadata.gz: 030e8fab91840b4a4337ebb8e867f56b9b658ec8932716afae41f1ebb84f93ee
4
+ data.tar.gz: 1dc8364b2e509891eeed48c55f4aa8f9d8c89c3b9dad8dc700720d14e2b55e15
5
5
  SHA512:
6
- metadata.gz: 9a81ef9ef2f78869dd599b78ada3510318da5e2329e1be7eb347db8fd8053f129e476bb71aeff58b7d48b2c12f66e97d8e2ba583100d175e4092b061a59b28f3
7
- data.tar.gz: 5221c65c79a617d92e82687cd8d671ea282abfff6d722cba7de3527a78817ead690fc5ac7bfcb5ce18d255b88342e8e0601528dcb906aab36faf7b1ab1d92d55
6
+ metadata.gz: c94b19ff196e16ed430d973f295b64a4aa92e4a89f685e74731e5ecadb0a23a3ea39ab7aafe049e7bff46ffadb4d67f59d9a6b1791613cffcf63f66df611e806
7
+ data.tar.gz: 9175751c633b836d10cfc4aa67d4af2e4e7ea8b837a99dfc34bf6fe91efc3ddf932a1aa227d13097cfbdb5aaab63ca9ecdd14fd3410a114e926c2896e36c6df0
@@ -46,14 +46,28 @@ module Glib::Json::Libs
46
46
  end
47
47
  end
48
48
 
49
- def json_libs_handle_404
50
- if json_ui_activated?
51
- render file: "#{Rails.root}/public/404.html", status: :not_found
49
+ def glib_json_handle_403
50
+ render file: Rails.root.join('public', '404.html'), status: :forbidden
51
+ end
52
+
53
+ def glib_json_handle_404
54
+ raise ActionController::RoutingError.new('Not Found')
55
+
56
+ # if json_ui_activated?
57
+ # render file: Rails.root.join('public', '404.html'), status: :not_found
58
+ # else
59
+ # raise exception
60
+ # end
61
+ end
62
+
63
+ def glib_json_handle_500(exception)
64
+ if json_ui_activated? && Rails.env.production?
65
+ Rollbar.error(exception) if defined?(Rollbar)
66
+ render file: Rails.root.join('public', '500.html'), status: :internal_server_error
52
67
  else
53
68
  raise exception
54
69
  end
55
70
  end
56
-
57
71
 
58
72
 
59
73
  module ClassMethods
@@ -111,11 +125,20 @@ module Glib::Json::Libs
111
125
  end
112
126
  end
113
127
 
114
- def json_libs_rescue_404
115
- rescue_from ActiveRecord::RecordNotFound do |exception|
116
- json_libs_handle_404
128
+ # Call this before other rescues. Later rescue_from statements will take precedence, so more specific
129
+ # rescues have to be declared later.
130
+ def json_libs_rescue_500
131
+ rescue_from StandardError do |exception|
132
+ glib_json_handle_500(exception)
117
133
  end
118
134
  end
119
135
 
136
+ def json_libs_rescue_404
137
+ # Removed because it doesn't seem to offer anything extra
138
+ # rescue_from ActiveRecord::RecordNotFound do |exception|
139
+ # glib_json_handle_404
140
+ # end
141
+ end
142
+
120
143
  end
121
144
  end
File without changes
File without changes
File without changes
File without changes
@@ -75,24 +75,6 @@ module Glib
75
75
  end
76
76
  end
77
77
 
78
- module Http
79
- class Post < Action
80
- string :url, cache: true
81
- hash :formData
82
- end
83
-
84
- class Patch < Action
85
- string :url, cache: true
86
- hash :formData
87
- end
88
-
89
- class Delete < Action
90
- string :url, cache: true
91
- hash :formData
92
- end
93
-
94
- end
95
-
96
78
  ###
97
79
  end
98
80
  end
@@ -0,0 +1,19 @@
1
+ class Glib::JsonUi::ActionBuilder
2
+ module Http
3
+ class Post < Action
4
+ string :url, cache: true
5
+ hash :formData
6
+ end
7
+
8
+ class Patch < Action
9
+ string :url, cache: true
10
+ hash :formData
11
+ end
12
+
13
+ class Delete < Action
14
+ string :url, cache: true
15
+ hash :formData
16
+ end
17
+
18
+ end
19
+ end
File without changes
@@ -35,6 +35,7 @@ module Glib
35
35
 
36
36
  class Label < MenuItem
37
37
  string :text
38
+ singleton_array :styleClass, :styleClasses
38
39
 
39
40
  # Override
40
41
  def created
File without changes
File without changes
@@ -157,10 +157,11 @@ class Glib::JsonUi::ViewBuilder
157
157
  end
158
158
 
159
159
  class Column < View
160
- # int :lg
161
- # int :md
162
- # int :sm
160
+ hash :xl
163
161
  hash :lg
162
+ hash :md
163
+ hash :sm
164
+ hash :xs
164
165
  views :childViews
165
166
  end
166
167
 
File without changes
File without changes
File without changes
File without changes
@@ -1,29 +1,29 @@
1
1
  class EmailTypoValidator < ActiveModel::EachValidator
2
2
  COMMON_FORMAT = {
3
3
  '\.\.' => '.',
4
- '.con\z' => '.com',
5
- '.coj\z' => '.com',
6
- '.vom\z' => '.com',
7
- '.xom\z' => '.com',
8
- '.com[a-z]\z' => '.com',
9
- '.con.' => '.com.',
10
- '.orf\z' => '.org',
11
- '.orf.' => '.org.',
12
- '@hitmail.' => '@hotmail.',
13
- '@htomail.' => '@hotmail.',
14
- '@hotnail.' => '@hotmail.',
15
- '@hotmil.' => '@hotmail.',
16
- '@hotmal.' => '@hotmail.',
17
- '@hoymail.' => '@hotmail.',
18
- '@hormail.' => '@hotmail.',
19
- '@hotmsil.' => '@hotmail.',
20
- '@gail.' => '@gmail.',
21
- '@gnail.' => '@gmail.',
22
- '@gmil.' => '@gmail.',
23
- '@gmal.' => '@gmail.',
24
- '@gmai.' => '@gmail.',
25
- '@yahho.' => '@yahoo.',
26
- '@yaho.' => '@yahoo.',
4
+ '\.con\z' => '.com',
5
+ '\.coj\z' => '.com',
6
+ '\.vom\z' => '.com',
7
+ '\.xom\z' => '.com',
8
+ '\.com[a-z]\z' => '.com',
9
+ '\.con\.' => '.com.',
10
+ '\.orf\z' => '.org',
11
+ '\.orf\.' => '.org.',
12
+ '@hitmail\.' => '@hotmail.',
13
+ '@htomail\.' => '@hotmail.',
14
+ '@hotnail\.' => '@hotmail.',
15
+ '@hotmil\.' => '@hotmail.',
16
+ '@hotmal\.' => '@hotmail.',
17
+ '@hoymail\.' => '@hotmail.',
18
+ '@hormail\.' => '@hotmail.',
19
+ '@hotmsil\.' => '@hotmail.',
20
+ '@gail\.' => '@gmail.',
21
+ '@gnail\.' => '@gmail.',
22
+ '@gmil\.' => '@gmail.',
23
+ '@gmal\.' => '@gmail.',
24
+ '@gmai\.' => '@gmail.',
25
+ '@yahho\.' => '@yahoo.',
26
+ '@yaho\.' => '@yahoo.',
27
27
  }
28
28
 
29
29
  def validate_each(record, attribute, value)
File without changes
File without changes
@@ -0,0 +1,18 @@
1
+
2
+ section.header padding: glib_json_padding_list, childViews: ->(header) do
3
+ header.h3 text: 'HTTP'
4
+ end
5
+
6
+ section.rows builder: ->(template) do
7
+ template.thumbnail title: 'http/post', onClick: ->(action) do
8
+ action.http_post url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'New Joe' }
9
+ end
10
+
11
+ template.thumbnail title: 'http/patch', onClick: ->(action) do
12
+ action.http_patch url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Edit Joe' }
13
+ end
14
+
15
+ template.thumbnail title: 'http/delete', onClick: ->(action) do
16
+ action.http_delete url: json_ui_garage_url(path: 'forms/basic_post'), formData: { 'user[name]' => 'Delete Joe' }
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ section.header padding: glib_json_padding_list, childViews: ->(header) do
2
+ header.h3 text: 'Reload'
3
+ header.spacer height: 6
4
+ header.label text: 'Reload does not open a new page/screen. Click reload a few times, then click back and notice that it goes back to the page before the reload.'
5
+ end
6
+
7
+ section.rows builder: ->(template) do
8
+ template.thumbnail title: "windows/reload (timestamp: #{DateTime.current.to_i})", onClick: ->(action) do
9
+ action.windows_reload
10
+ end
11
+
12
+ reload_counter = params[:reload_counter].to_i
13
+ reload_counter = 0 if reload_counter > 5
14
+ template.thumbnail title: "windows/reload with URL (counter: #{reload_counter})", onClick: ->(action) do
15
+ action.windows_reload url: json_ui_garage_url(path: 'actions/index', reload_counter: reload_counter + 1)
16
+ end
17
+ end
@@ -15,24 +15,9 @@ json_ui_page json do |page|
15
15
  end, ->(section) do
16
16
  render "#{@path_prefix}/actions/timeouts", section: section
17
17
  end, ->(section) do
18
- section.header padding: glib_json_padding_list, childViews: ->(header) do
19
- header.h3 text: 'Reload'
20
- header.spacer height: 6
21
- header.label text: 'Reload does not open a new page/screen. Click reload a few times, then click back and notice that it goes back to the page before the reload.'
22
- end
23
-
24
- section.rows builder: ->(template) do
25
- template.thumbnail title: "windows/reload (timestamp: #{DateTime.current.to_i})", onClick: ->(action) do
26
- action.windows_reload
27
- end
28
-
29
- reload_counter = params[:reload_counter].to_i
30
- reload_counter = 0 if reload_counter > 5
31
- template.thumbnail title: "windows/reload with URL (counter: #{reload_counter})", onClick: ->(action) do
32
- action.windows_reload url: json_ui_garage_url(path: 'actions/index', reload_counter: reload_counter + 1)
33
- end
34
-
35
- end
18
+ render "#{@path_prefix}/actions/http", section: section
19
+ end, ->(section) do
20
+ render "#{@path_prefix}/actions/reload", section: section
36
21
  end
37
22
  ]
38
23
  end
@@ -14,7 +14,7 @@ json_ui_page json do |page|
14
14
  end
15
15
  template.thumbnail title: 'Item with subtitle', subtitle: 'Item subtitle'
16
16
  template.thumbnail title: 'Item with chips', chips: ->(menu) do
17
- menu.button text: 'FInished', styleClass: 'info'
17
+ menu.button text: 'Finished', styleClass: 'info'
18
18
  menu.button props: { text: 'Succeeded', styleClass: 'success' }
19
19
  end
20
20
 
@@ -2,5 +2,7 @@ Glib::Web::Engine.routes.draw do
2
2
  scope module: :glib do
3
3
  get 'json_ui_garage', to: 'home#json_ui_garage'
4
4
  post 'json_ui_garage', to: 'home#json_ui_garage'
5
+ patch 'json_ui_garage', to: 'home#json_ui_garage'
6
+ delete 'json_ui_garage', to: 'home#json_ui_garage'
5
7
  end
6
8
  end
File without changes
File without changes
File without changes
@@ -5,3 +5,4 @@ require "glib/json_crawler"
5
5
 
6
6
  require 'glib/dynamic_text'
7
7
  require 'glib/crypt'
8
+ require 'glib/test_helpers'
@@ -1 +1 @@
1
- require_relative './crypt/utils'
1
+ require_relative './crypt/utils'
File without changes
@@ -1 +1 @@
1
- require_relative './dynamic_text/config'
1
+ require_relative './dynamic_text/config'
File without changes
File without changes
File without changes
File without changes
@@ -3,9 +3,9 @@ module Glib
3
3
  class NavInitiate < ActionCrawler
4
4
  def initialize(http, args, action)
5
5
  super(http)
6
-
6
+
7
7
  @http = http
8
- if (json = @http.get args['url'], action) && (left_drawer = json['leftDrawer'])
8
+ if (json = (@http.get args['url'], action, args.except('url'))) && (left_drawer = json['leftDrawer'])
9
9
  crawl left_drawer['header']&.[]('childViews')
10
10
  crawl left_drawer['rows']
11
11
  end
@@ -4,7 +4,7 @@ module Glib
4
4
  def initialize(http, args, action)
5
5
  @http = http
6
6
  if (url = args['url'])
7
- json = @http.get url, action
7
+ json = @http.get(url, action, args.except('url'))
8
8
 
9
9
  unless json.nil?
10
10
  crawl json['header']&.[]('childViews')
@@ -12,11 +12,16 @@ module Glib
12
12
  crawl json['footer']&.[]('childViews')
13
13
 
14
14
  json['rightNavButtons']&.each do |button|
15
- click button
15
+ if button['buttons'].present?
16
+ button['buttons'].each do |inner_button|
17
+ click inner_button
18
+ end
19
+ else
20
+ click button
21
+ end
16
22
  end
17
23
  end
18
24
  end
19
-
20
25
  end
21
26
  end
22
27
  end
File without changes
@@ -20,8 +20,8 @@ module Glib
20
20
  @router = router
21
21
  end
22
22
 
23
- def get(url, action, inspect_result = true)
24
- fetch(:get, url, action, {}, inspect_result)
23
+ def get(url, action, params = {}, inspect_result = true)
24
+ fetch(:get, url, action, params, inspect_result)
25
25
  end
26
26
 
27
27
  def post(url, action, params)
@@ -40,14 +40,6 @@ module Glib
40
40
  fetch(:delete, url, action, {})
41
41
  end
42
42
 
43
- def controller
44
- @context.integration_session.controller
45
- end
46
-
47
- def action_name
48
- controller.action_name.to_sym
49
- end
50
-
51
43
  private
52
44
  Response = Struct.new :code, :headers, :media_type, :body do
53
45
  def initialize(*)
@@ -73,6 +65,7 @@ module Glib
73
65
  'Client-Version' => user[:version],
74
66
  'X-CSRF-Token' => user[:token]
75
67
  }
68
+ http_header.merge!(params[:headers]) if params[:headers].present?
76
69
 
77
70
  params.each do |name, value|
78
71
  params[name] = '' if value.is_a?(Array) && value.size == 0
@@ -83,6 +76,10 @@ module Glib
83
76
  @context.send(method, url, params: params, headers: http_header)
84
77
  raw_response = @context.response
85
78
  response = Response.new(raw_response.code.to_i, raw_response.headers, raw_response.media_type, raw_response.body)
79
+
80
+ if (controller = @context.controller)
81
+ Glib::JsonCrawler::Coverage.coverage_files.add(controller.class.instance_method(controller.action_name).source_location.first)
82
+ end
86
83
  rescue => ex
87
84
  if !inspect_result
88
85
  case ex
@@ -103,7 +100,7 @@ module Glib
103
100
  if (code = response.code) == 302
104
101
  redirect_uri = URI(response.headers['Location'])
105
102
  redirect_uri.query = [redirect_uri.query, 'format=json'].compact.join('&')
106
- get redirect_uri.to_s, action
103
+ get redirect_uri.to_s, action, params
107
104
  else
108
105
  response_times << response.headers['X-Runtime'].to_f
109
106
  @context.assert_includes VALID_RESPONSE_CODES, code, "Expected a valid response but was [#{response.code}] #{Rack::Utils::HTTP_STATUS_CODES[response.code.to_i]}:\n#{url}"
@@ -19,10 +19,6 @@ module Glib
19
19
  end
20
20
 
21
21
  def step(http, args)
22
- if (controller = http.controller)
23
- Glib::JsonCrawler::Coverage.coverage_files.add(controller.class.instance_method(http.action_name).source_location.first)
24
- end
25
-
26
22
  case args['view']
27
23
  when 'fields/submit-v1', 'fields/submit'
28
24
  @depth += 1
@@ -73,7 +69,7 @@ module Glib
73
69
  @depth += 1
74
70
  target_router.read_only_actions.each do |crawler_action|
75
71
  action, url = crawler_action
76
- http.get url, action, false
72
+ http.get(url, action, {}, false)
77
73
  end
78
74
  end
79
75
 
@@ -0,0 +1,40 @@
1
+ module Glib
2
+ module TestHelpers
3
+ def response_assert_equal
4
+ expected = __get_previous_result_from_git
5
+ result = __log(response.body)
6
+ assert_equal JSON.parse(expected), JSON.parse(result), "Result mismatch! #{__git_is_available? ? `git diff #{__log_dir}/#{__log_file}` : ''}"
7
+ end
8
+
9
+ private
10
+ def __git_is_available?
11
+ @__git_is_available ||= (`git status 2>&1` =~ /fatal/).nil?
12
+ end
13
+
14
+ def __log_dir
15
+ if @__log_dir.nil?
16
+ @__log_dir = File.expand_path("#{Rails.root}/test/controllers/#{self.class.to_s.underscore}_results", File.dirname(__FILE__))
17
+ unless File.directory?(@__log_dir)
18
+ FileUtils.mkdir_p(@__log_dir)
19
+ end
20
+ end
21
+ @__log_dir
22
+ end
23
+
24
+ def __log_file
25
+ @__log_file ||= "#{self.method_name}.json"
26
+ end
27
+
28
+ def __log json
29
+ File.open("#{File.join(__log_dir, __log_file)}", "w") do |f|
30
+ f << JSON.pretty_generate( JSON.parse(json) )
31
+ end
32
+ json
33
+ end
34
+
35
+ def __get_previous_result_from_git
36
+ `git checkout -- "#{File.join(__log_dir, __log_file)}" > /dev/null 2>&1` if __git_is_available?
37
+ File.exists?(File.join(__log_dir, __log_file)) ? File.open(File.join(__log_dir, __log_file)).read : "\{\}"
38
+ end
39
+ end
40
+ end
File without changes
File without changes
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: 0.4.72
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
@@ -79,6 +79,7 @@ files:
79
79
  - app/helpers/glib/json_ui/abstract_builder.rb
80
80
  - app/helpers/glib/json_ui/action_builder.rb
81
81
  - app/helpers/glib/json_ui/action_builder/dialogs.rb
82
+ - app/helpers/glib/json_ui/action_builder/http.rb
82
83
  - app/helpers/glib/json_ui/action_builder/sheets.rb
83
84
  - app/helpers/glib/json_ui/action_builder/snackbars.rb
84
85
  - app/helpers/glib/json_ui/action_builder/windows.rb
@@ -107,6 +108,8 @@ files:
107
108
  - app/views/app/views/json_ui/vue/renderer.html.erb
108
109
  - app/views/json_ui/garage/_nav_menu.json.jbuilder
109
110
  - app/views/json_ui/garage/actions/_dialogs.json.jbuilder
111
+ - app/views/json_ui/garage/actions/_http.json.jbuilder
112
+ - app/views/json_ui/garage/actions/_reload.json.jbuilder
110
113
  - app/views/json_ui/garage/actions/_sheets.json.jbuilder
111
114
  - app/views/json_ui/garage/actions/_snackbars.json.jbuilder
112
115
  - app/views/json_ui/garage/actions/_timeouts.json.jbuilder
@@ -209,6 +212,7 @@ files:
209
212
  - lib/glib/json_crawler/coverage.rb
210
213
  - lib/glib/json_crawler/http.rb
211
214
  - lib/glib/json_crawler/router.rb
215
+ - lib/glib/test_helpers.rb
212
216
  - lib/glib/value.rb
213
217
  - lib/glib/version.rb
214
218
  - lib/tasks/db.rake
@@ -230,8 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
230
234
  - !ruby/object:Gem::Version
231
235
  version: '0'
232
236
  requirements: []
233
- rubyforge_project:
234
- rubygems_version: 2.6.8
237
+ rubygems_version: 3.1.2
235
238
  signing_key:
236
239
  specification_version: 4
237
240
  summary: ''