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,144 +1,144 @@
1
- module Glib::Json::Libs
2
- extend ActiveSupport::Concern
3
-
4
- included do
5
- extend ClassMethods
6
-
7
- helper_method :json_ui_app_bundle_id, :json_ui_app_build_version, :json_ui_app_device_os
8
- helper_method :json_ui_app_is_android?, :json_ui_app_is_ios?, :json_ui_app_is_web?
9
- end
10
-
11
- def json_ui_app_bundle_id
12
- @json_ui_app_bundle_id ||= request.headers['GApp-Bundle-Id'] || request.headers['JsonUiApp-Bundle-Id']
13
- end
14
-
15
- def json_ui_app_build_version
16
- @json_ui_app_build_version ||= request.headers['GApp-Build-Version'] || request.headers['JsonUiApp-Build-Version']
17
- @json_ui_app_build_version = params[:build_version] if @json_ui_app_build_version.nil? && Rails.env.development? # For easy testing
18
- @json_ui_app_build_version
19
- end
20
-
21
- def json_ui_app_device_os
22
- @json_ui_app_device_os ||= request.headers['GApp-Device-Os'] || request.headers['JsonUiApp-Device-Os']
23
- @json_ui_app_device_os = params[:device_os] if @json_ui_app_device_os.nil? && Rails.env.development? # For easy testing
24
- @json_ui_app_device_os || 'web'
25
- end
26
-
27
- def json_ui_app_is_android?
28
- json_ui_app_device_os == 'android'
29
- end
30
-
31
- def json_ui_app_is_ios?
32
- json_ui_app_device_os == 'ios'
33
- end
34
-
35
- def json_ui_app_is_web?
36
- json_ui_app_device_os == 'web'
37
- end
38
-
39
- def json_ui_render(template, args = {})
40
- JSON.parse(render_to_string(template, locals: args))
41
- end
42
-
43
- def glib_force_json_ui
44
- if params[:_render] != 'v1'
45
- redirect_to url_for(params.to_unsafe_h.merge(_render: 'v1'))
46
- end
47
- end
48
-
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
67
- else
68
- raise exception
69
- end
70
- end
71
-
72
-
73
- module ClassMethods
74
-
75
- def json_libs_init(options)
76
- include Glib::Json::Transformation
77
- include Glib::Json::Validation
78
- include Glib::Json::Ui
79
-
80
- include Glib::Json::Traversal
81
- include Glib::Json::NewDynamicText
82
-
83
- before_action do
84
- __json_ui_start(options)
85
- end
86
-
87
- # Note that after_action gets executed in reverse
88
- after_action do
89
- __json_ui_commit(options)
90
- end
91
- after_action :__json_transformation_commit
92
- after_action :__json_validate_perform
93
-
94
- after_action :__json_traversal_perform
95
- after_action :__json_traversal_register_dynamic_text
96
- end
97
-
98
- def json_libs_set_locale
99
- before_action do
100
- # Need to explicitly fallback to EN
101
- I18n.locale = params[:_locale] || :en
102
- rescue
103
- I18n.locale = :en
104
- end
105
- end
106
-
107
- def json_libs_force_json_ui
108
- before_action :glib_force_json_ui
109
- end
110
-
111
- def json_libs_rescue_csrf
112
- rescue_from ActionController::InvalidAuthenticityToken do |exception|
113
- sign_out(:user)
114
-
115
- respond_to do |format|
116
- format.json do
117
- render json: {
118
- onResponse: {
119
- action: 'windows/open-v1',
120
- url: root_url
121
- }
122
- }
123
- end
124
- end
125
- end
126
- end
127
-
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)
133
- end
134
- end
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
-
143
- end
144
- end
1
+ module Glib::Json::Libs
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ extend ClassMethods
6
+
7
+ helper_method :json_ui_app_bundle_id, :json_ui_app_build_version, :json_ui_app_device_os
8
+ helper_method :json_ui_app_is_android?, :json_ui_app_is_ios?, :json_ui_app_is_web?
9
+ end
10
+
11
+ def json_ui_app_bundle_id
12
+ @json_ui_app_bundle_id ||= request.headers['GApp-Bundle-Id'] || request.headers['JsonUiApp-Bundle-Id']
13
+ end
14
+
15
+ def json_ui_app_build_version
16
+ @json_ui_app_build_version ||= request.headers['GApp-Build-Version'] || request.headers['JsonUiApp-Build-Version']
17
+ @json_ui_app_build_version = params[:build_version] if @json_ui_app_build_version.nil? && Rails.env.development? # For easy testing
18
+ @json_ui_app_build_version
19
+ end
20
+
21
+ def json_ui_app_device_os
22
+ @json_ui_app_device_os ||= request.headers['GApp-Device-Os'] || request.headers['JsonUiApp-Device-Os']
23
+ @json_ui_app_device_os = params[:device_os] if @json_ui_app_device_os.nil? && Rails.env.development? # For easy testing
24
+ @json_ui_app_device_os || 'web'
25
+ end
26
+
27
+ def json_ui_app_is_android?
28
+ json_ui_app_device_os == 'android'
29
+ end
30
+
31
+ def json_ui_app_is_ios?
32
+ json_ui_app_device_os == 'ios'
33
+ end
34
+
35
+ def json_ui_app_is_web?
36
+ json_ui_app_device_os == 'web'
37
+ end
38
+
39
+ def json_ui_render(template, args = {})
40
+ JSON.parse(render_to_string(template, locals: args))
41
+ end
42
+
43
+ def glib_force_json_ui
44
+ if params[:_render] != 'v1'
45
+ redirect_to url_for(params.to_unsafe_h.merge(_render: 'v1'))
46
+ end
47
+ end
48
+
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
67
+ else
68
+ raise exception
69
+ end
70
+ end
71
+
72
+
73
+ module ClassMethods
74
+
75
+ def json_libs_init(options)
76
+ include Glib::Json::Transformation
77
+ include Glib::Json::Validation
78
+ include Glib::Json::Ui
79
+
80
+ include Glib::Json::Traversal
81
+ include Glib::Json::NewDynamicText
82
+
83
+ before_action do
84
+ __json_ui_start(options)
85
+ end
86
+
87
+ # Note that after_action gets executed in reverse
88
+ after_action do
89
+ __json_ui_commit(options)
90
+ end
91
+ after_action :__json_transformation_commit
92
+ after_action :__json_validate_perform
93
+
94
+ after_action :__json_traversal_perform
95
+ after_action :__json_traversal_register_dynamic_text
96
+ end
97
+
98
+ def json_libs_set_locale
99
+ before_action do
100
+ # Need to explicitly fallback to EN
101
+ I18n.locale = params[:_locale] || :en
102
+ rescue
103
+ I18n.locale = :en
104
+ end
105
+ end
106
+
107
+ def json_libs_force_json_ui
108
+ before_action :glib_force_json_ui
109
+ end
110
+
111
+ def json_libs_rescue_csrf
112
+ rescue_from ActionController::InvalidAuthenticityToken do |exception|
113
+ sign_out(:user)
114
+
115
+ respond_to do |format|
116
+ format.json do
117
+ render json: {
118
+ onResponse: {
119
+ action: 'windows/open-v1',
120
+ url: root_url
121
+ }
122
+ }
123
+ end
124
+ end
125
+ end
126
+ end
127
+
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)
133
+ end
134
+ end
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
+
143
+ end
144
+ end
@@ -1,122 +1,122 @@
1
- module Glib::Json::NewDynamicText
2
- def __json_traversal_register_dynamic_text
3
- @__specs = {}
4
- @__specs_db = {}
5
-
6
- __json_traversal_on_traverse do |view|
7
- extract_spec(view, 'text')
8
- end
9
-
10
- __json_traversal_on_complete do |view|
11
- if @__specs.keys.size > 0
12
- # translated_texts = retrieve_remote_texts(@__specs.keys)
13
- translated_texts = retrieve_local_texts(@__specs.keys).merge(retrieve_remote_texts(@__specs.keys))
14
- translated_texts.each do |key, value|
15
- @__specs[key].each do |spec|
16
- spec.substitute_with(value)
17
- end
18
-
19
- if @__specs_db[key] && @__specs_db[key].images.attached?
20
- @__specs[key].each do |spec|
21
- spec.substitute_image_with(@__specs_db[key].images)
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
28
-
29
- def retrieve_example_texts(keys)
30
- examples_translations = {
31
- 'home.json_ui_garage.hello' => 'Hello {{name}}',
32
- 'home.json_ui_garage.greeting' => 'Good day!',
33
- 'home.json_ui_garage.greeting_with_image' => 'Good day! (with image)',
34
- }
35
-
36
- translated_texts = {}
37
- keys.each do |key|
38
- translated_texts[key] = examples_translations[key]
39
- end
40
- translated_texts
41
- end
42
-
43
- def retrieve_remote_texts(keys)
44
- retries = 0
45
-
46
- begin
47
- response = RestClient.get(ENV['DTR_URL'], { params: { keys: keys } })
48
- rescue Errno::ECONNREFUSED, RestClient::InternalServerError, RestClient::Exceptions::OpenTimeout, RestClient::Exceptions::ReadTimeout
49
- if (retries += 1) <= 3
50
- puts "Timeout, retrying..."
51
- retry
52
- else
53
- raise
54
- end
55
- end
56
-
57
- JSON.parse(response)
58
- end
59
-
60
- def retrieve_local_texts(keys)
61
- translated_texts = {}
62
- db_keys = []
63
-
64
- redis = Glib::DynamicText::Config.redis
65
- contents = redis.pipelined do
66
- keys.each do |key|
67
- args = @__specs[key].first.args
68
- options = {
69
- scope: args.fetch(:scope, 'itinerarybuilder'),
70
- lang: args.fetch(:lang, 'en')
71
- }
72
-
73
- scope_key = "#{options[:scope]}.#{options[:lang]}.#{key}"
74
- redis.get(scope_key)
75
- end
76
- end
77
-
78
- keys.each_with_index do |key, index|
79
- if content = contents[index]
80
- translated_texts[key] = content
81
- db_keys << key if content.match(/\{\{image(\d)\}\}/)
82
- else
83
- db_keys << key
84
- end
85
- end
86
-
87
- if db_keys.size > 0
88
- texts = Glib::Text.where(key: db_keys)
89
- texts.each do |text|
90
- translated_texts[text.key] = text.content
91
- @__specs_db[text.key] = text
92
- end
93
- end
94
-
95
- translated_texts
96
- end
97
-
98
- def extract_spec(view, prop)
99
- if (spec = view[prop])
100
- if spec.is_a?(Hash) && (key = spec['dt_key'])
101
- @__specs[key] ||= []
102
- @__specs[key] << TextSpec.new(view, prop, spec)
103
- end
104
- end
105
- end
106
-
107
- TextSpec = Struct.new(:view, :prop, :args) do
108
- def substitute_with(text)
109
- view[prop] = text.gsub(/\{\{(\w+)\}\}/) { args.fetch($1, "{{#{$1}}}") }
110
- end
111
-
112
- def substitute_image_with(images)
113
- view[prop] = view[prop].gsub(/\{\{image(\d)\}\}/) {
114
- if image = images[$1.to_i - 1]
115
- ApplicationController.helpers.glib_dynamic_image_url(image.blob.key)
116
- else
117
- "{{image#{$1}}}"
118
- end
119
- }
120
- end
121
- end
122
- end
1
+ module Glib::Json::NewDynamicText
2
+ def __json_traversal_register_dynamic_text
3
+ @__specs = {}
4
+ @__specs_db = {}
5
+
6
+ __json_traversal_on_traverse do |view|
7
+ extract_spec(view, 'text')
8
+ end
9
+
10
+ __json_traversal_on_complete do |view|
11
+ if @__specs.keys.size > 0
12
+ # translated_texts = retrieve_remote_texts(@__specs.keys)
13
+ translated_texts = retrieve_local_texts(@__specs.keys).merge(retrieve_remote_texts(@__specs.keys))
14
+ translated_texts.each do |key, value|
15
+ @__specs[key].each do |spec|
16
+ spec.substitute_with(value)
17
+ end
18
+
19
+ if @__specs_db[key] && @__specs_db[key].images.attached?
20
+ @__specs[key].each do |spec|
21
+ spec.substitute_image_with(@__specs_db[key].images)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ def retrieve_example_texts(keys)
30
+ examples_translations = {
31
+ 'home.json_ui_garage.hello' => 'Hello {{name}}',
32
+ 'home.json_ui_garage.greeting' => 'Good day!',
33
+ 'home.json_ui_garage.greeting_with_image' => 'Good day! (with image)',
34
+ }
35
+
36
+ translated_texts = {}
37
+ keys.each do |key|
38
+ translated_texts[key] = examples_translations[key]
39
+ end
40
+ translated_texts
41
+ end
42
+
43
+ def retrieve_remote_texts(keys)
44
+ retries = 0
45
+
46
+ begin
47
+ response = RestClient.get(ENV['DTR_URL'], { params: { keys: keys } })
48
+ rescue Errno::ECONNREFUSED, RestClient::InternalServerError, RestClient::Exceptions::OpenTimeout, RestClient::Exceptions::ReadTimeout
49
+ if (retries += 1) <= 3
50
+ puts "Timeout, retrying..."
51
+ retry
52
+ else
53
+ raise
54
+ end
55
+ end
56
+
57
+ JSON.parse(response)
58
+ end
59
+
60
+ def retrieve_local_texts(keys)
61
+ translated_texts = {}
62
+ db_keys = []
63
+
64
+ redis = Glib::DynamicText::Config.redis
65
+ contents = redis.pipelined do
66
+ keys.each do |key|
67
+ args = @__specs[key].first.args
68
+ options = {
69
+ scope: args.fetch(:scope, 'itinerarybuilder'),
70
+ lang: args.fetch(:lang, 'en')
71
+ }
72
+
73
+ scope_key = "#{options[:scope]}.#{options[:lang]}.#{key}"
74
+ redis.get(scope_key)
75
+ end
76
+ end
77
+
78
+ keys.each_with_index do |key, index|
79
+ if content = contents[index]
80
+ translated_texts[key] = content
81
+ db_keys << key if content.match(/\{\{image(\d)\}\}/)
82
+ else
83
+ db_keys << key
84
+ end
85
+ end
86
+
87
+ if db_keys.size > 0
88
+ texts = Glib::Text.where(key: db_keys)
89
+ texts.each do |text|
90
+ translated_texts[text.key] = text.content
91
+ @__specs_db[text.key] = text
92
+ end
93
+ end
94
+
95
+ translated_texts
96
+ end
97
+
98
+ def extract_spec(view, prop)
99
+ if (spec = view[prop])
100
+ if spec.is_a?(Hash) && (key = spec['dt_key'])
101
+ @__specs[key] ||= []
102
+ @__specs[key] << TextSpec.new(view, prop, spec)
103
+ end
104
+ end
105
+ end
106
+
107
+ TextSpec = Struct.new(:view, :prop, :args) do
108
+ def substitute_with(text)
109
+ view[prop] = text.gsub(/\{\{(\w+)\}\}/) { args.fetch($1, "{{#{$1}}}") }
110
+ end
111
+
112
+ def substitute_image_with(images)
113
+ view[prop] = view[prop].gsub(/\{\{image(\d)\}\}/) {
114
+ if image = images[$1.to_i - 1]
115
+ ApplicationController.helpers.glib_dynamic_image_url(image.blob.key)
116
+ else
117
+ "{{image#{$1}}}"
118
+ end
119
+ }
120
+ end
121
+ end
122
+ end