glib-web 0.5.52 → 0.5.53

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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/app/channels/glib/channel/is_typing_channel.rb +28 -28
  3. data/app/controllers/concerns/glib/analytics/funnel.rb +61 -61
  4. data/app/controllers/concerns/glib/auth/policy.rb +148 -148
  5. data/app/controllers/concerns/glib/json/dynamic_text.rb +126 -126
  6. data/app/controllers/concerns/glib/json/libs.rb +144 -144
  7. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +122 -122
  8. data/app/controllers/concerns/glib/json/transformation.rb +11 -11
  9. data/app/controllers/concerns/glib/json/traversal.rb +92 -92
  10. data/app/controllers/concerns/glib/json/ui.rb +88 -88
  11. data/app/controllers/concerns/glib/json/validation.rb +13 -13
  12. data/app/controllers/glib/home_controller.rb +16 -16
  13. data/app/helpers/glib/app_feature_support_helper.rb +16 -16
  14. data/app/helpers/glib/dynamic_images_helper.rb +55 -55
  15. data/app/helpers/glib/dynamic_texts_helper.rb +42 -42
  16. data/app/helpers/glib/enum_helper.rb +8 -8
  17. data/app/helpers/glib/forms_helper.rb +15 -15
  18. data/app/helpers/glib/json_ui/abstract_builder.rb +294 -294
  19. data/app/helpers/glib/json_ui/action_builder.rb +140 -140
  20. data/app/helpers/glib/json_ui/action_builder/dialogs.rb +58 -58
  21. data/app/helpers/glib/json_ui/action_builder/http.rb +39 -39
  22. data/app/helpers/glib/json_ui/action_builder/sheets.rb +15 -15
  23. data/app/helpers/glib/json_ui/action_builder/snackbars.rb +41 -41
  24. data/app/helpers/glib/json_ui/action_builder/windows.rb +26 -26
  25. data/app/helpers/glib/json_ui/analytics_helper.rb +17 -17
  26. data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -25
  27. data/app/helpers/glib/json_ui/generic_builders.rb +28 -28
  28. data/app/helpers/glib/json_ui/list_builders.rb +109 -109
  29. data/app/helpers/glib/json_ui/menu_builder.rb +94 -94
  30. data/app/helpers/glib/json_ui/page_helper.rb +221 -221
  31. data/app/helpers/glib/json_ui/response_helper.rb +25 -25
  32. data/app/helpers/glib/json_ui/split_builders.rb +32 -32
  33. data/app/helpers/glib/json_ui/styling_helper.rb +47 -47
  34. data/app/helpers/glib/json_ui/table_builders.rb +74 -74
  35. data/app/helpers/glib/json_ui/view_builder.rb +209 -209
  36. data/app/helpers/glib/json_ui/view_builder/banners.rb +25 -25
  37. data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -33
  38. data/app/helpers/glib/json_ui/view_builder/fields.rb +240 -240
  39. data/app/helpers/glib/json_ui/view_builder/panels.rb +250 -250
  40. data/app/helpers/glib/urls_helper.rb +12 -7
  41. data/app/models/glib/active_storage/attachment.rb +9 -9
  42. data/app/models/glib/active_storage/blob.rb +9 -9
  43. data/app/models/glib/application_record.rb +18 -18
  44. data/app/models/glib/dynamic_text_record.rb +9 -9
  45. data/app/models/glib/text.rb +95 -95
  46. data/app/policies/glib/application_policy.rb +161 -161
  47. data/app/validators/email_typo_validator.rb +38 -38
  48. data/app/validators/email_validator.rb +7 -7
  49. data/app/validators/url_validator.rb +20 -20
  50. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +70 -70
  51. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
  52. data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
  53. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
  54. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
  55. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
  56. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +18 -18
  57. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
  58. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
  59. data/app/views/json_ui/garage/actions/index.json.jbuilder +22 -22
  60. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +6 -6
  61. data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
  62. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
  63. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +43 -43
  64. data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +36 -36
  65. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +39 -39
  66. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +22 -22
  67. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
  68. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +32 -32
  69. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +19 -19
  70. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
  71. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +27 -27
  72. data/app/views/json_ui/garage/forms/index.json.jbuilder +108 -108
  73. data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +39 -39
  74. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +46 -46
  75. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
  76. data/app/views/json_ui/garage/forms/selects.json.jbuilder +70 -70
  77. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +105 -105
  78. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +36 -36
  79. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
  80. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +24 -24
  81. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
  82. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
  83. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +59 -59
  84. data/app/views/json_ui/garage/home/blank.json.jbuilder +11 -11
  85. data/app/views/json_ui/garage/home/index.json.jbuilder +32 -32
  86. data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
  87. data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +28 -28
  88. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
  89. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
  90. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +93 -93
  91. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +54 -54
  92. data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
  93. data/app/views/json_ui/garage/lists/index.json.jbuilder +32 -32
  94. data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
  95. data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
  96. data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +97 -97
  97. data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
  98. data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
  99. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
  100. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
  101. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
  102. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
  103. data/app/views/json_ui/garage/pages/index.json.jbuilder +58 -58
  104. data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
  105. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
  106. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
  107. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
  108. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +27 -27
  109. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
  110. data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
  111. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +37 -37
  112. data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
  113. data/app/views/json_ui/garage/panels/flow.json.jbuilder +49 -49
  114. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
  115. data/app/views/json_ui/garage/panels/index.json.jbuilder +132 -132
  116. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
  117. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
  118. data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
  119. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +50 -50
  120. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
  121. data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
  122. data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
  123. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
  124. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
  125. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
  126. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
  127. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
  128. data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
  129. data/app/views/json_ui/garage/tables/layout.json.jbuilder +36 -36
  130. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
  131. data/app/views/json_ui/garage/views/banners.json.jbuilder +63 -63
  132. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
  133. data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -115
  134. data/app/views/json_ui/garage/views/icons.json.jbuilder +1450 -1450
  135. data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
  136. data/app/views/json_ui/garage/views/index.json.jbuilder +54 -54
  137. data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
  138. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
  139. data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
  140. data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
  141. data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
  142. data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
  143. data/app/views/json_ui/garage/views/texts.json.jbuilder +44 -44
  144. data/app/views/layouts/json_ui/renderer.html.erb +35 -35
  145. data/config/routes.rb +7 -7
  146. data/lib/generators/glib/install_generator.rb +24 -24
  147. data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
  148. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
  149. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
  150. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
  151. data/lib/generators/templates/database.yml +107 -107
  152. data/lib/generators/templates/dynamic_text.rb +2 -2
  153. data/lib/glib-web.rb +9 -9
  154. data/lib/glib/crypt/utils.rb +26 -26
  155. data/lib/glib/dynamic_text/config.rb +21 -21
  156. data/lib/glib/engine.rb +7 -7
  157. data/lib/glib/json_crawler.rb +11 -11
  158. data/lib/glib/json_crawler/action_crawler.rb +23 -23
  159. data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
  160. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
  161. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
  162. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
  163. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
  164. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
  165. data/lib/glib/json_crawler/coverage.rb +20 -20
  166. data/lib/glib/json_crawler/http.rb +120 -120
  167. data/lib/glib/json_crawler/router.rb +98 -98
  168. data/lib/glib/mailer_tester.rb +36 -36
  169. data/lib/glib/test_helpers.rb +52 -52
  170. data/lib/glib/value.rb +7 -7
  171. data/lib/glib/version.rb +5 -5
  172. data/lib/tasks/db.rake +95 -95
  173. metadata +3 -8
@@ -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
@@ -1,55 +1,55 @@
1
- module Glib
2
- module DynamicImagesHelper
3
- # NOTE: The bucket should probably be set as a parameter for json_libs
4
- def glib_dynamic_image_url(blob_key, width: 100, height: 100, fit: 'clip', bucket: Rails.application.config.try(:aws_s3_bucket), signature_key: nil)
5
- return unless blob_key.present?
6
-
7
- full_params_hash = {
8
- bucket_name: bucket,
9
- blob_key: blob_key,
10
- w: width,
11
- h: height,
12
- fit: fit,
13
- # expires: 1.hours.from_now.to_i
14
- expires: 1.month.from_now.end_of_month.to_i
15
- }
16
-
17
- request_params_hash = full_params_hash.except(:bucket_name, :blob_key)
18
-
19
- if (private_key = signature_key)
20
- encryption_service = EncryptionService.new(bucket, private_key)
21
- # This produces different signature every time.
22
- # TODO: Use digest instead, because we really only need to verify. We don't need to be able to decrypt.
23
- signature = encryption_service.encrypt(full_params_hash)
24
- request_params_hash = request_params_hash.merge(signature: signature)
25
- end
26
-
27
- uri = URI::HTTPS.build(
28
- host: 'imageserver-demo.herokuapp.com',
29
- path: "/image/#{bucket}/#{blob_key}",
30
- query: request_params_hash.to_param
31
- )
32
-
33
- uri.to_s
34
- end
35
-
36
- EncryptionService = Struct.new(:salt, :private_key) do
37
- def encrypt(value)
38
- encryptor.encrypt_and_sign(value)
39
- end
40
-
41
- def decrypt(value)
42
- encryptor.decrypt_and_verify(value)
43
- end
44
-
45
- private
46
- def encryptor
47
- @encryptor ||= begin
48
- key_len = ActiveSupport::MessageEncryptor.key_len
49
- key = ActiveSupport::KeyGenerator.new(private_key).generate_key(salt, key_len)
50
- ActiveSupport::MessageEncryptor.new(key)
51
- end
52
- end
53
- end
54
- end
55
- end
1
+ module Glib
2
+ module DynamicImagesHelper
3
+ # NOTE: The bucket should probably be set as a parameter for json_libs
4
+ def glib_dynamic_image_url(blob_key, width: 100, height: 100, fit: 'clip', bucket: Rails.application.config.try(:aws_s3_bucket), signature_key: nil)
5
+ return unless blob_key.present?
6
+
7
+ full_params_hash = {
8
+ bucket_name: bucket,
9
+ blob_key: blob_key,
10
+ w: width,
11
+ h: height,
12
+ fit: fit,
13
+ # expires: 1.hours.from_now.to_i
14
+ expires: 1.month.from_now.end_of_month.to_i
15
+ }
16
+
17
+ request_params_hash = full_params_hash.except(:bucket_name, :blob_key)
18
+
19
+ if (private_key = signature_key)
20
+ encryption_service = EncryptionService.new(bucket, private_key)
21
+ # This produces different signature every time.
22
+ # TODO: Use digest instead, because we really only need to verify. We don't need to be able to decrypt.
23
+ signature = encryption_service.encrypt(full_params_hash)
24
+ request_params_hash = request_params_hash.merge(signature: signature)
25
+ end
26
+
27
+ uri = URI::HTTPS.build(
28
+ host: 'imageserver-demo.herokuapp.com',
29
+ path: "/image/#{bucket}/#{blob_key}",
30
+ query: request_params_hash.to_param
31
+ )
32
+
33
+ uri.to_s
34
+ end
35
+
36
+ EncryptionService = Struct.new(:salt, :private_key) do
37
+ def encrypt(value)
38
+ encryptor.encrypt_and_sign(value)
39
+ end
40
+
41
+ def decrypt(value)
42
+ encryptor.decrypt_and_verify(value)
43
+ end
44
+
45
+ private
46
+ def encryptor
47
+ @encryptor ||= begin
48
+ key_len = ActiveSupport::MessageEncryptor.key_len
49
+ key = ActiveSupport::KeyGenerator.new(private_key).generate_key(salt, key_len)
50
+ ActiveSupport::MessageEncryptor.new(key)
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,42 +1,42 @@
1
- module Glib
2
- module DynamicTextsHelper
3
- def dt(key, default_value = '', **args)
4
- new_key = key
5
- options = {
6
- scope: args.fetch(:scope, 'itinerarybuilder'),
7
- lang: args.fetch(:lang, 'en')
8
- }
9
-
10
- if key.starts_with?('.')
11
- new_key = "#{controller_name}.#{action_name}#{key}"
12
- end
13
-
14
- content, text_object = Glib::Text.get_content(new_key, default_value, options: options)
15
- content = content.gsub(/\{\{(\w+)\}\}/) { args.fetch($1.to_sym, "{{#{$1}}}") }
16
-
17
- if text_object.images.attached?
18
- content = content.gsub(/\{\{image(\d)\}\}/) {
19
- if image = text_object.images[$1.to_i - 1]
20
- glib_dynamic_image_url(image.blob.key)
21
- else
22
- "{{image#{$1}}}"
23
- end
24
- }
25
- end
26
-
27
- content
28
- end
29
-
30
- def dt_json(key, default_value = '', **args)
31
- new_key = key
32
-
33
- if key.starts_with?('.')
34
- new_key = "#{controller_name}.#{action_name}#{key}"
35
- end
36
-
37
- {
38
- dt_key: new_key
39
- }.merge(args)
40
- end
41
- end
42
- end
1
+ module Glib
2
+ module DynamicTextsHelper
3
+ def dt(key, default_value = '', **args)
4
+ new_key = key
5
+ options = {
6
+ scope: args.fetch(:scope, 'itinerarybuilder'),
7
+ lang: args.fetch(:lang, 'en')
8
+ }
9
+
10
+ if key.starts_with?('.')
11
+ new_key = "#{controller_name}.#{action_name}#{key}"
12
+ end
13
+
14
+ content, text_object = Glib::Text.get_content(new_key, default_value, options: options)
15
+ content = content.gsub(/\{\{(\w+)\}\}/) { args.fetch($1.to_sym, "{{#{$1}}}") }
16
+
17
+ if text_object.images.attached?
18
+ content = content.gsub(/\{\{image(\d)\}\}/) {
19
+ if image = text_object.images[$1.to_i - 1]
20
+ glib_dynamic_image_url(image.blob.key)
21
+ else
22
+ "{{image#{$1}}}"
23
+ end
24
+ }
25
+ end
26
+
27
+ content
28
+ end
29
+
30
+ def dt_json(key, default_value = '', **args)
31
+ new_key = key
32
+
33
+ if key.starts_with?('.')
34
+ new_key = "#{controller_name}.#{action_name}#{key}"
35
+ end
36
+
37
+ {
38
+ dt_key: new_key
39
+ }.merge(args)
40
+ end
41
+ end
42
+ end