glib-web 0.5.43 → 0.5.44

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 (171) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/glib/analytics/funnel.rb +61 -61
  3. data/app/controllers/concerns/glib/auth/policy.rb +148 -148
  4. data/app/controllers/concerns/glib/json/dynamic_text.rb +126 -126
  5. data/app/controllers/concerns/glib/json/libs.rb +144 -144
  6. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +122 -122
  7. data/app/controllers/concerns/glib/json/transformation.rb +11 -11
  8. data/app/controllers/concerns/glib/json/traversal.rb +87 -87
  9. data/app/controllers/concerns/glib/json/ui.rb +88 -88
  10. data/app/controllers/concerns/glib/json/validation.rb +13 -13
  11. data/app/controllers/glib/home_controller.rb +16 -16
  12. data/app/helpers/glib/app_feature_support_helper.rb +16 -16
  13. data/app/helpers/glib/dynamic_images_helper.rb +55 -55
  14. data/app/helpers/glib/dynamic_texts_helper.rb +42 -42
  15. data/app/helpers/glib/enum_helper.rb +8 -8
  16. data/app/helpers/glib/forms_helper.rb +15 -15
  17. data/app/helpers/glib/json_ui/abstract_builder.rb +294 -294
  18. data/app/helpers/glib/json_ui/action_builder.rb +131 -131
  19. data/app/helpers/glib/json_ui/action_builder/dialogs.rb +58 -58
  20. data/app/helpers/glib/json_ui/action_builder/http.rb +39 -39
  21. data/app/helpers/glib/json_ui/action_builder/sheets.rb +15 -15
  22. data/app/helpers/glib/json_ui/action_builder/snackbars.rb +41 -41
  23. data/app/helpers/glib/json_ui/action_builder/windows.rb +26 -26
  24. data/app/helpers/glib/json_ui/analytics_helper.rb +17 -17
  25. data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -25
  26. data/app/helpers/glib/json_ui/generic_builders.rb +28 -28
  27. data/app/helpers/glib/json_ui/list_builders.rb +104 -104
  28. data/app/helpers/glib/json_ui/menu_builder.rb +94 -94
  29. data/app/helpers/glib/json_ui/page_helper.rb +213 -213
  30. data/app/helpers/glib/json_ui/response_helper.rb +25 -25
  31. data/app/helpers/glib/json_ui/split_builders.rb +32 -32
  32. data/app/helpers/glib/json_ui/styling_helper.rb +47 -47
  33. data/app/helpers/glib/json_ui/table_builders.rb +74 -74
  34. data/app/helpers/glib/json_ui/view_builder.rb +208 -208
  35. data/app/helpers/glib/json_ui/view_builder/banners.rb +24 -24
  36. data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -33
  37. data/app/helpers/glib/json_ui/view_builder/fields.rb +235 -235
  38. data/app/helpers/glib/json_ui/view_builder/panels.rb +250 -250
  39. data/app/helpers/glib/urls_helper.rb +7 -7
  40. data/app/models/glib/active_storage/attachment.rb +9 -9
  41. data/app/models/glib/active_storage/blob.rb +9 -9
  42. data/app/models/glib/application_record.rb +18 -18
  43. data/app/models/glib/dynamic_text_record.rb +9 -9
  44. data/app/models/glib/text.rb +95 -95
  45. data/app/policies/glib/application_policy.rb +161 -161
  46. data/app/validators/email_typo_validator.rb +38 -38
  47. data/app/validators/email_validator.rb +7 -7
  48. data/app/validators/url_validator.rb +20 -20
  49. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +70 -70
  50. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
  51. data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
  52. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
  53. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
  54. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
  55. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +18 -18
  56. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
  57. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
  58. data/app/views/json_ui/garage/actions/index.json.jbuilder +22 -22
  59. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +6 -6
  60. data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
  61. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
  62. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +43 -43
  63. data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +36 -36
  64. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +56 -56
  65. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +25 -25
  66. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
  67. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +65 -65
  68. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +31 -31
  69. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
  70. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +28 -28
  71. data/app/views/json_ui/garage/forms/index.json.jbuilder +110 -110
  72. data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +40 -40
  73. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +48 -48
  74. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
  75. data/app/views/json_ui/garage/forms/selects.json.jbuilder +70 -70
  76. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +105 -105
  77. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +36 -36
  78. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
  79. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +24 -24
  80. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
  81. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
  82. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +22 -22
  83. data/app/views/json_ui/garage/home/blank.json.jbuilder +11 -11
  84. data/app/views/json_ui/garage/home/index.json.jbuilder +32 -32
  85. data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
  86. data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +28 -28
  87. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
  88. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
  89. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +93 -93
  90. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +54 -54
  91. data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
  92. data/app/views/json_ui/garage/lists/index.json.jbuilder +32 -32
  93. data/app/views/json_ui/garage/lists/reordering.json.jbuilder +24 -24
  94. data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
  95. data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
  96. data/app/views/json_ui/garage/notifications/index.json.jbuilder +32 -32
  97. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
  98. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
  99. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
  100. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
  101. data/app/views/json_ui/garage/pages/index.json.jbuilder +58 -58
  102. data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
  103. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
  104. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
  105. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
  106. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +27 -27
  107. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
  108. data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
  109. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +37 -37
  110. data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
  111. data/app/views/json_ui/garage/panels/flow.json.jbuilder +49 -49
  112. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
  113. data/app/views/json_ui/garage/panels/index.json.jbuilder +132 -132
  114. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
  115. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
  116. data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
  117. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +50 -50
  118. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
  119. data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
  120. data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
  121. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
  122. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
  123. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
  124. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
  125. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
  126. data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
  127. data/app/views/json_ui/garage/tables/layout.json.jbuilder +36 -36
  128. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
  129. data/app/views/json_ui/garage/views/banners.json.jbuilder +63 -63
  130. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
  131. data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -115
  132. data/app/views/json_ui/garage/views/icons.json.jbuilder +1450 -1450
  133. data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
  134. data/app/views/json_ui/garage/views/index.json.jbuilder +54 -54
  135. data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
  136. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
  137. data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
  138. data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
  139. data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
  140. data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
  141. data/app/views/json_ui/garage/views/texts.json.jbuilder +41 -41
  142. data/app/views/layouts/json_ui/renderer.html.erb +35 -35
  143. data/config/routes.rb +7 -7
  144. data/lib/generators/glib/install_generator.rb +24 -24
  145. data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
  146. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
  147. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
  148. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
  149. data/lib/generators/templates/database.yml +107 -107
  150. data/lib/generators/templates/dynamic_text.rb +2 -2
  151. data/lib/glib-web.rb +9 -9
  152. data/lib/glib/crypt/utils.rb +26 -26
  153. data/lib/glib/dynamic_text/config.rb +21 -21
  154. data/lib/glib/engine.rb +7 -7
  155. data/lib/glib/json_crawler.rb +11 -11
  156. data/lib/glib/json_crawler/action_crawler.rb +23 -23
  157. data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
  158. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
  159. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
  160. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
  161. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
  162. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
  163. data/lib/glib/json_crawler/coverage.rb +20 -20
  164. data/lib/glib/json_crawler/http.rb +120 -120
  165. data/lib/glib/json_crawler/router.rb +96 -96
  166. data/lib/glib/mailer_tester.rb +36 -36
  167. data/lib/glib/test_helpers.rb +40 -40
  168. data/lib/glib/value.rb +7 -7
  169. data/lib/glib/version.rb +5 -5
  170. data/lib/tasks/db.rake +95 -95
  171. metadata +2 -3
@@ -1,11 +1,11 @@
1
- module Glib::Json::Transformation
2
- def json_transformation_start
3
- if request.format == 'json'
4
- @__transformed_json ||= JSON.parse(response.body) rescue nil
5
- end
6
- end
7
-
8
- def __json_transformation_commit
9
- response.body = @__transformed_json.to_json if @__transformed_json
10
- end
11
- end
1
+ module Glib::Json::Transformation
2
+ def json_transformation_start
3
+ if request.format == 'json'
4
+ @__transformed_json ||= JSON.parse(response.body) rescue nil
5
+ end
6
+ end
7
+
8
+ def __json_transformation_commit
9
+ response.body = @__transformed_json.to_json if @__transformed_json
10
+ end
11
+ end
@@ -1,87 +1,87 @@
1
- module Glib::Json::Traversal
2
- def __json_traversal_on_traverse(&block)
3
- @__json_traversal_on_traverses ||= []
4
- @__json_traversal_on_traverses << block
5
- end
6
-
7
- def __json_traversal_on_complete(&block)
8
- @__json_traversal_on_completes ||= []
9
- @__json_traversal_on_completes << block
10
- end
11
-
12
- def __json_traversal_perform
13
- if (hash = json_transformation_start).is_a?(Hash)
14
- traverse hash['header']&.[]('childViews')
15
- traverse hash['body']&.[]('childViews')
16
- traverse hash['footer']&.[]('childViews')
17
-
18
- @__json_traversal_on_completes.each do |block|
19
- block.call
20
- end
21
- end
22
- end
23
-
24
- def traverse(views)
25
- Visitor.new.traverse_multiple views, ->(view) do
26
- @__json_traversal_on_traverses.each do |block|
27
- block.call(view)
28
- end
29
- end
30
- end
31
-
32
-
33
-
34
- class Visitor
35
- # Used in test crawler
36
- attr_reader :forms
37
-
38
- def initialize
39
- @forms = []
40
- end
41
-
42
- def traverse_multiple(views, block)
43
- if views.is_a? Array
44
- views.each do |view|
45
- case view['view']
46
- when 'panels/form-v1'
47
- @forms << view
48
- traverse_single view, block
49
- @forms.pop
50
- else
51
- traverse_single view, block
52
- end
53
- end
54
- end
55
- end
56
-
57
- def traverse_vertical_content(view, block)
58
- traverse_multiple view['childViews'], block if view
59
- end
60
-
61
- def traverse_single(view, block)
62
- block.call view
63
-
64
- # Generic view children
65
- traverse_multiple view['childViews'], block
66
-
67
- # Generic menu buttons
68
- traverse_multiple view['buttons'], block
69
- traverse_multiple view['childButtons'], block
70
-
71
- # Split panel
72
- traverse_vertical_content view['left'], block
73
- traverse_vertical_content view['center'], block
74
- traverse_vertical_content view['right'], block
75
-
76
- # TODO: crawl header and footer
77
- # Table/List
78
- if (sections = view['sections']).is_a? Array
79
- sections.each do |section|
80
- traverse_vertical_content section['header'], block
81
- traverse_multiple section['rows'], block
82
- traverse_vertical_content section['footer'], block
83
- end
84
- end
85
- end
86
- end
87
- end
1
+ module Glib::Json::Traversal
2
+ def __json_traversal_on_traverse(&block)
3
+ @__json_traversal_on_traverses ||= []
4
+ @__json_traversal_on_traverses << block
5
+ end
6
+
7
+ def __json_traversal_on_complete(&block)
8
+ @__json_traversal_on_completes ||= []
9
+ @__json_traversal_on_completes << block
10
+ end
11
+
12
+ def __json_traversal_perform
13
+ if (hash = json_transformation_start).is_a?(Hash)
14
+ traverse hash['header']&.[]('childViews')
15
+ traverse hash['body']&.[]('childViews')
16
+ traverse hash['footer']&.[]('childViews')
17
+
18
+ @__json_traversal_on_completes.each do |block|
19
+ block.call
20
+ end
21
+ end
22
+ end
23
+
24
+ def traverse(views)
25
+ Visitor.new.traverse_multiple views, ->(view) do
26
+ @__json_traversal_on_traverses.each do |block|
27
+ block.call(view)
28
+ end
29
+ end
30
+ end
31
+
32
+
33
+
34
+ class Visitor
35
+ # Used in test crawler
36
+ attr_reader :forms
37
+
38
+ def initialize
39
+ @forms = []
40
+ end
41
+
42
+ def traverse_multiple(views, block)
43
+ if views.is_a? Array
44
+ views.each do |view|
45
+ case view['view']
46
+ when 'panels/form-v1'
47
+ @forms << view
48
+ traverse_single view, block
49
+ @forms.pop
50
+ else
51
+ traverse_single view, block
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ def traverse_vertical_content(view, block)
58
+ traverse_multiple view['childViews'], block if view
59
+ end
60
+
61
+ def traverse_single(view, block)
62
+ block.call view
63
+
64
+ # Generic view children
65
+ traverse_multiple view['childViews'], block
66
+
67
+ # Generic menu buttons
68
+ traverse_multiple view['buttons'], block
69
+ traverse_multiple view['childButtons'], block
70
+
71
+ # Split panel
72
+ traverse_vertical_content view['left'], block
73
+ traverse_vertical_content view['center'], block
74
+ traverse_vertical_content view['right'], block
75
+
76
+ # TODO: crawl header and footer
77
+ # Table/List
78
+ if (sections = view['sections']).is_a? Array
79
+ sections.each do |section|
80
+ traverse_vertical_content section['header'], block
81
+ traverse_multiple section['rows'], block
82
+ traverse_vertical_content section['footer'], block
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -1,88 +1,88 @@
1
- module Glib::Json::Ui
2
- extend ActiveSupport::Concern
3
-
4
- included do
5
- rescue_from ActionController::UnknownFormat do |exception|
6
- if json_ui_activated?
7
- # Tell `__json_ui_start()` to avoid rendering this page while still retaining the `_render` param
8
- # so that the page remains linking to other json_ui pages.
9
- redirect_to url_for(format: nil, _skip_render: true)
10
- else
11
- raise exception
12
- end
13
- end
14
- end
15
-
16
- # Override
17
- def form_authenticity_token(*args)
18
- Rails.env.test? ? 'test_token' : super
19
- end
20
-
21
- # NOTE: Override default_url_options and call this method
22
- def json_ui_url_options
23
- options = {}
24
- options[:_render] = params[:_render]
25
- options[:_locale] = params[:_locale]
26
- options[:_preview] = params[:_preview]
27
- options[:format] = :json if request.format == :json
28
- options
29
- end
30
-
31
- def json_ui_activated?
32
- @__json_ui_activated
33
- end
34
-
35
- def json_ui_page_lifecycle_prop(name)
36
- if (hash = json_transformation_start).is_a?(Hash) && hash['body'] # A valid page
37
- hash[name] ||= { 'action' => 'runMultiple', 'childActions' => [] }
38
- hash[name]['childActions']
39
- end
40
- end
41
-
42
- def json_ui_response_lifecycle_prop
43
- prop_name = 'onResponse'
44
- if (hash = json_transformation_start).is_a?(Hash) && hash[prop_name] # A valid response
45
- if hash[prop_name]['action'] != 'runMultiple'
46
- childActions = [hash[prop_name]]
47
- hash[prop_name] = { 'action' => 'runMultiple', 'childActions' => childActions }
48
- childActions
49
- end
50
- end
51
- end
52
-
53
- def __json_ui_start(options)
54
- @__json_ui_activated = false
55
- @__json_ui_rendering = nil
56
- if options[:when] == :always || params[:_render] == 'v1'
57
- @__json_ui_activated = true
58
- request.variant = :ui
59
-
60
- # Some bots (e.g. Line and DuckDuckGo) passes `*/*` in the `Accept` header
61
- is_html = request.format.html? || request.format == '*/*'
62
- if is_html && params[:_skip_render] != 'true'
63
- @__json_ui_rendering = :vue
64
- request.format = 'json'
65
- end
66
- end
67
- end
68
-
69
- def __json_ui_commit(options)
70
- return if response.status >= 300
71
-
72
- case @__json_ui_rendering
73
- when :vue
74
- if (hash = json_transformation_start).is_a?(Hash)
75
- __json_ui_vue(hash, options)
76
- else
77
- raise "Invalid JSON UI payload: #{hash}"
78
- end
79
- end
80
- end
81
-
82
- private
83
- def __json_ui_vue(hash, options)
84
- renderer_path = options[:renderer_path]
85
- @__json_ui_orig_page = response.body
86
- response.body = render_to_string(template: renderer_path, layout: 'json_ui/renderer', content_type: 'text/html', locals: { page: hash, options: options })
87
- end
88
- end
1
+ module Glib::Json::Ui
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ rescue_from ActionController::UnknownFormat do |exception|
6
+ if json_ui_activated?
7
+ # Tell `__json_ui_start()` to avoid rendering this page while still retaining the `_render` param
8
+ # so that the page remains linking to other json_ui pages.
9
+ redirect_to url_for(format: nil, _skip_render: true)
10
+ else
11
+ raise exception
12
+ end
13
+ end
14
+ end
15
+
16
+ # Override
17
+ def form_authenticity_token(*args)
18
+ Rails.env.test? ? 'test_token' : super
19
+ end
20
+
21
+ # NOTE: Override default_url_options and call this method
22
+ def json_ui_url_options
23
+ options = {}
24
+ options[:_render] = params[:_render]
25
+ options[:_locale] = params[:_locale]
26
+ options[:_preview] = params[:_preview]
27
+ options[:format] = :json if request.format == :json
28
+ options
29
+ end
30
+
31
+ def json_ui_activated?
32
+ @__json_ui_activated
33
+ end
34
+
35
+ def json_ui_page_lifecycle_prop(name)
36
+ if (hash = json_transformation_start).is_a?(Hash) && hash['body'] # A valid page
37
+ hash[name] ||= { 'action' => 'runMultiple', 'childActions' => [] }
38
+ hash[name]['childActions']
39
+ end
40
+ end
41
+
42
+ def json_ui_response_lifecycle_prop
43
+ prop_name = 'onResponse'
44
+ if (hash = json_transformation_start).is_a?(Hash) && hash[prop_name] # A valid response
45
+ if hash[prop_name]['action'] != 'runMultiple'
46
+ childActions = [hash[prop_name]]
47
+ hash[prop_name] = { 'action' => 'runMultiple', 'childActions' => childActions }
48
+ childActions
49
+ end
50
+ end
51
+ end
52
+
53
+ def __json_ui_start(options)
54
+ @__json_ui_activated = false
55
+ @__json_ui_rendering = nil
56
+ if options[:when] == :always || params[:_render] == 'v1'
57
+ @__json_ui_activated = true
58
+ request.variant = :ui
59
+
60
+ # Some bots (e.g. Line and DuckDuckGo) passes `*/*` in the `Accept` header
61
+ is_html = request.format.html? || request.format == '*/*'
62
+ if is_html && params[:_skip_render] != 'true'
63
+ @__json_ui_rendering = :vue
64
+ request.format = 'json'
65
+ end
66
+ end
67
+ end
68
+
69
+ def __json_ui_commit(options)
70
+ return if response.status >= 300
71
+
72
+ case @__json_ui_rendering
73
+ when :vue
74
+ if (hash = json_transformation_start).is_a?(Hash)
75
+ __json_ui_vue(hash, options)
76
+ else
77
+ raise "Invalid JSON UI payload: #{hash}"
78
+ end
79
+ end
80
+ end
81
+
82
+ private
83
+ def __json_ui_vue(hash, options)
84
+ renderer_path = options[:renderer_path]
85
+ @__json_ui_orig_page = response.body
86
+ response.body = render_to_string(template: renderer_path, layout: 'json_ui/renderer', content_type: 'text/html', locals: { page: hash, options: options })
87
+ end
88
+ end
@@ -1,13 +1,13 @@
1
- module Glib::Json::Validation
2
- def __json_validate_perform
3
- if Rails.env.development? && params[:_validate] == 'true'
4
- if (hash = json_transformation_start).is_a?(Hash)
5
- json_validate = JSONValidate.new(hash)
6
- response_message = json_validate.valid?
7
- hash[:_json] = {
8
- validationErrors: response_message
9
- }
10
- end
11
- end
12
- end
13
- end
1
+ module Glib::Json::Validation
2
+ def __json_validate_perform
3
+ if Rails.env.development? && params[:_validate] == 'true'
4
+ if (hash = json_transformation_start).is_a?(Hash)
5
+ json_validate = JSONValidate.new(hash)
6
+ response_message = json_validate.valid?
7
+ hash[:_json] = {
8
+ validationErrors: response_message
9
+ }
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,16 +1,16 @@
1
- module Glib
2
- class HomeController < ApplicationController
3
- if try(:glib_auth_inited?)
4
- skip_before_action :glib_load_resource
5
- skip_before_action :glib_authorize_resource
6
- end
7
-
8
- def json_ui_garage
9
- @path_prefix = 'json_ui/garage'
10
-
11
- # We can't use prepend_view_path because it affects the app, not the gem
12
- path = "#{@path_prefix}/#{params[:path] || 'home/index'}"
13
- render path
14
- end
15
- end
16
- end
1
+ module Glib
2
+ class HomeController < ApplicationController
3
+ if try(:glib_auth_inited?)
4
+ skip_before_action :glib_load_resource
5
+ skip_before_action :glib_authorize_resource
6
+ end
7
+
8
+ def json_ui_garage
9
+ @path_prefix = 'json_ui/garage'
10
+
11
+ # We can't use prepend_view_path because it affects the app, not the gem
12
+ path = "#{@path_prefix}/#{params[:path] || 'home/index'}"
13
+ render path
14
+ end
15
+ end
16
+ end
@@ -1,16 +1,16 @@
1
- module Glib
2
- module AppFeatureSupportHelper
3
- def glib_app_feature_supported?(name, app_version, dictionary)
4
- device = (app_device_os || :default).to_sym
5
-
6
- version = dictionary[name.to_sym].try(:[], device)
7
- except = dictionary[name.to_sym].try(:[], :except).try(:[], device)
8
-
9
- !version.nil? && (version == :all || glib_app_version_gte(version, app_version)) && (except.nil? || except.to_s != app_version)
10
- end
11
-
12
- def glib_app_version_gte(feature_version, app_version)
13
- app_version.blank? || Gem::Version.new(app_version) >= Gem::Version.new(feature_version)
14
- end
15
- end
16
- end
1
+ module Glib
2
+ module AppFeatureSupportHelper
3
+ def glib_app_feature_supported?(name, app_version, dictionary)
4
+ device = (app_device_os || :default).to_sym
5
+
6
+ version = dictionary[name.to_sym].try(:[], device)
7
+ except = dictionary[name.to_sym].try(:[], :except).try(:[], device)
8
+
9
+ !version.nil? && (version == :all || glib_app_version_gte(version, app_version)) && (except.nil? || except.to_s != app_version)
10
+ end
11
+
12
+ def glib_app_version_gte(feature_version, app_version)
13
+ app_version.blank? || Gem::Version.new(app_version) >= Gem::Version.new(feature_version)
14
+ end
15
+ end
16
+ end