glib-web 0.5.69 → 0.5.70

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 (183) hide show
  1. checksums.yaml +4 -4
  2. data/app/channels/glib/channel/is_typing_channel.rb +34 -34
  3. data/app/channels/glib/channel/online_channel.rb +36 -36
  4. data/app/controllers/concerns/glib/analytics/funnel.rb +61 -61
  5. data/app/controllers/concerns/glib/auth/policy.rb +148 -148
  6. data/app/controllers/concerns/glib/json/dynamic_text.rb +126 -126
  7. data/app/controllers/concerns/glib/json/libs.rb +149 -149
  8. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +122 -122
  9. data/app/controllers/concerns/glib/json/transformation.rb +11 -11
  10. data/app/controllers/concerns/glib/json/traversal.rb +92 -92
  11. data/app/controllers/concerns/glib/json/ui.rb +88 -88
  12. data/app/controllers/concerns/glib/json/validation.rb +13 -13
  13. data/app/controllers/glib/home_controller.rb +54 -54
  14. data/app/helpers/glib/app_feature_support_helper.rb +16 -16
  15. data/app/helpers/glib/dynamic_images_helper.rb +55 -55
  16. data/app/helpers/glib/dynamic_texts_helper.rb +42 -42
  17. data/app/helpers/glib/enum_helper.rb +8 -8
  18. data/app/helpers/glib/forms_helper.rb +15 -15
  19. data/app/helpers/glib/json_ui/abstract_builder.rb +309 -294
  20. data/app/helpers/glib/json_ui/action_builder.rb +140 -140
  21. data/app/helpers/glib/json_ui/action_builder/dialogs.rb +58 -58
  22. data/app/helpers/glib/json_ui/action_builder/http.rb +39 -39
  23. data/app/helpers/glib/json_ui/action_builder/panels.rb +14 -14
  24. data/app/helpers/glib/json_ui/action_builder/sheets.rb +15 -15
  25. data/app/helpers/glib/json_ui/action_builder/snackbars.rb +41 -41
  26. data/app/helpers/glib/json_ui/action_builder/windows.rb +33 -31
  27. data/app/helpers/glib/json_ui/analytics_helper.rb +17 -17
  28. data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -25
  29. data/app/helpers/glib/json_ui/generic_builders.rb +28 -28
  30. data/app/helpers/glib/json_ui/list_builders.rb +110 -110
  31. data/app/helpers/glib/json_ui/menu_builder.rb +94 -94
  32. data/app/helpers/glib/json_ui/page_helper.rb +221 -221
  33. data/app/helpers/glib/json_ui/response_helper.rb +25 -25
  34. data/app/helpers/glib/json_ui/split_builders.rb +32 -32
  35. data/app/helpers/glib/json_ui/styling_helper.rb +55 -47
  36. data/app/helpers/glib/json_ui/table_builders.rb +74 -74
  37. data/app/helpers/glib/json_ui/view_builder.rb +232 -232
  38. data/app/helpers/glib/json_ui/view_builder/banners.rb +26 -26
  39. data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -33
  40. data/app/helpers/glib/json_ui/view_builder/fields.rb +278 -267
  41. data/app/helpers/glib/json_ui/view_builder/panels.rb +252 -251
  42. data/app/helpers/glib/urls_helper.rb +12 -12
  43. data/app/models/glib/active_storage/attachment.rb +9 -9
  44. data/app/models/glib/active_storage/blob.rb +9 -9
  45. data/app/models/glib/application_record.rb +18 -18
  46. data/app/models/glib/dynamic_text_record.rb +9 -9
  47. data/app/models/glib/text.rb +95 -95
  48. data/app/policies/glib/application_policy.rb +161 -161
  49. data/app/validators/email_typo_validator.rb +38 -38
  50. data/app/validators/email_validator.rb +7 -7
  51. data/app/validators/url_validator.rb +20 -20
  52. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +70 -70
  53. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
  54. data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
  55. data/app/views/json_ui/garage/actions/_panels.json.jbuilder +18 -18
  56. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
  57. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
  58. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
  59. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +24 -24
  60. data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
  61. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
  62. data/app/views/json_ui/garage/actions/index.json.jbuilder +24 -24
  63. data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +6 -6
  64. data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
  65. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
  66. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +43 -43
  67. data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +36 -36
  68. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +39 -39
  69. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +22 -22
  70. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
  71. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +37 -32
  72. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +19 -19
  73. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
  74. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +27 -27
  75. data/app/views/json_ui/garage/forms/index.json.jbuilder +113 -116
  76. data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +39 -39
  77. data/app/views/json_ui/garage/forms/{misc_two.json.jbuilder → online_participant1.json.jbuilder} +25 -21
  78. data/app/views/json_ui/garage/forms/online_participant2.json.jbuilder +25 -0
  79. data/app/views/json_ui/garage/forms/pickers.json.jbuilder +79 -79
  80. data/app/views/json_ui/garage/forms/ratings.json.jbuilder +49 -49
  81. data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
  82. data/app/views/json_ui/garage/forms/selects.json.jbuilder +83 -83
  83. data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +130 -130
  84. data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +35 -35
  85. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
  86. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +26 -26
  87. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
  88. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
  89. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +81 -81
  90. data/app/views/json_ui/garage/forms/timers.json.jbuilder +120 -0
  91. data/app/views/json_ui/garage/home/blank.json.jbuilder +10 -10
  92. data/app/views/json_ui/garage/home/index.json.jbuilder +36 -36
  93. data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
  94. data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +28 -28
  95. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
  96. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
  97. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +94 -94
  98. data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +62 -62
  99. data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
  100. data/app/views/json_ui/garage/lists/index.json.jbuilder +32 -32
  101. data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
  102. data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
  103. data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +114 -114
  104. data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
  105. data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
  106. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
  107. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
  108. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
  109. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
  110. data/app/views/json_ui/garage/pages/index.json.jbuilder +62 -62
  111. data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
  112. data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +13 -13
  113. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
  114. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
  115. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
  116. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +31 -31
  117. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
  118. data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
  119. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +37 -37
  120. data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
  121. data/app/views/json_ui/garage/panels/flow.json.jbuilder +59 -49
  122. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
  123. data/app/views/json_ui/garage/panels/index.json.jbuilder +132 -132
  124. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
  125. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
  126. data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
  127. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +55 -55
  128. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
  129. data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
  130. data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
  131. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
  132. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
  133. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
  134. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
  135. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
  136. data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
  137. data/app/views/json_ui/garage/tables/layout.json.jbuilder +40 -40
  138. data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
  139. data/app/views/json_ui/garage/views/banners.json.jbuilder +63 -63
  140. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
  141. data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -115
  142. data/app/views/json_ui/garage/views/icon_names.json.jbuilder +1450 -1450
  143. data/app/views/json_ui/garage/views/icons.json.jbuilder +14 -14
  144. data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
  145. data/app/views/json_ui/garage/views/index.json.jbuilder +64 -64
  146. data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
  147. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
  148. data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
  149. data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
  150. data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
  151. data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
  152. data/app/views/json_ui/garage/views/texts.json.jbuilder +44 -44
  153. data/app/views/layouts/json_ui/renderer.html.erb +35 -35
  154. data/config/routes.rb +7 -7
  155. data/lib/generators/glib/install_generator.rb +24 -24
  156. data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
  157. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
  158. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
  159. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
  160. data/lib/generators/templates/database.yml +107 -107
  161. data/lib/generators/templates/dynamic_text.rb +2 -2
  162. data/lib/glib-web.rb +9 -9
  163. data/lib/glib/crypt/utils.rb +26 -26
  164. data/lib/glib/dynamic_text/config.rb +21 -21
  165. data/lib/glib/engine.rb +7 -7
  166. data/lib/glib/json_crawler.rb +11 -11
  167. data/lib/glib/json_crawler/action_crawler.rb +23 -23
  168. data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
  169. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
  170. data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
  171. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
  172. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
  173. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
  174. data/lib/glib/json_crawler/coverage.rb +20 -20
  175. data/lib/glib/json_crawler/http.rb +120 -120
  176. data/lib/glib/json_crawler/router.rb +98 -98
  177. data/lib/glib/mailer_tester.rb +36 -36
  178. data/lib/glib/test_helpers.rb +52 -52
  179. data/lib/glib/value.rb +7 -7
  180. data/lib/glib/version.rb +5 -5
  181. data/lib/tasks/db.rake +95 -95
  182. metadata +6 -4
  183. data/app/views/json_ui/garage/forms/misc.json.jbuilder +0 -71
@@ -1,126 +1,126 @@
1
- module Glib::Json::DynamicText
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_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_texts
30
- # TODO: Check local memory
31
- # TODO: Then check DTR
32
- end
33
-
34
- # def retrieve_remote_texts(keys)
35
- # retries = 0
36
-
37
- # begin
38
- # response = RestClient.get(ENV['DTR_URL'], { params: { keys: keys } })
39
- # rescue Errno::ECONNREFUSED, RestClient::InternalServerError, RestClient::Exceptions::OpenTimeout, RestClient::Exceptions::ReadTimeout
40
- # if (retries += 1) <= 3
41
- # puts "Timeout, retrying..."
42
- # retry
43
- # else
44
- # raise
45
- # end
46
- # end
47
-
48
- # JSON.parse(response)
49
- # end
50
-
51
- # def retrieve_local_texts(keys)
52
- # translated_texts = {}
53
- # db_keys = []
54
-
55
- # redis = Glib::DynamicText::Config.redis
56
- # contents = redis.pipelined do
57
- # keys.each do |key|
58
- # args = @__specs[key].first.args
59
- # options = {
60
- # scope: args.fetch(:scope, 'itinerarybuilder'),
61
- # lang: args.fetch(:lang, 'en')
62
- # }
63
-
64
- # scope_key = "#{options[:scope]}.#{options[:lang]}.#{key}"
65
- # redis.get(scope_key)
66
- # end
67
- # end
68
-
69
- # keys.each_with_index do |key, index|
70
- # if content = contents[index]
71
- # translated_texts[key] = content
72
- # db_keys << key if content.match(/\{\{image(\d)\}\}/)
73
- # else
74
- # db_keys << key
75
- # end
76
- # end
77
-
78
- # if db_keys.size > 0
79
- # texts = Glib::Text.where(key: db_keys)
80
- # texts.each do |text|
81
- # translated_texts[text.key] = text.content
82
- # @__specs_db[text.key] = text
83
- # end
84
- # end
85
-
86
- # translated_texts
87
- # end
88
-
89
- def extract_spec(view, prop)
90
- if (spec = view[prop])
91
- if spec.is_a?(Hash) && (key = spec['dt_key'])
92
- @__specs[key] ||= []
93
- @__specs[key] << TextSpec.new(view, prop, spec)
94
- end
95
- end
96
- end
97
-
98
- TextSpec = Struct.new(:view, :prop, :args) do
99
- def substitute_with(text)
100
- view[prop] = text.gsub(/\{\{(\w+)\}\}/) { args.fetch($1, "{{#{$1}}}") }
101
- end
102
-
103
- def substitute_image_with(images)
104
- view[prop] = view[prop].gsub(/\{\{image(\d)\}\}/) {
105
- if image = images[$1.to_i - 1]
106
- image_server_url(image.blob.key)
107
- else
108
- "{{image#{$1}}}"
109
- end
110
- }
111
- end
112
-
113
- # TODO: Reuse method from DynamicTextsHelper
114
- def image_server_url(blob_key)
115
- return unless blob_key.present?
116
-
117
- uri = URI::HTTPS.build(
118
- host: 'imageserver-demo.herokuapp.com',
119
- path: "/image/#{ENV['AWS_S3_BUCKET']}/#{blob_key}",
120
- query: { w: 100, h: 100 }.to_param
121
- )
122
-
123
- uri.to_s
124
- end
125
- end
126
- end
1
+ module Glib::Json::DynamicText
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_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_texts
30
+ # TODO: Check local memory
31
+ # TODO: Then check DTR
32
+ end
33
+
34
+ # def retrieve_remote_texts(keys)
35
+ # retries = 0
36
+
37
+ # begin
38
+ # response = RestClient.get(ENV['DTR_URL'], { params: { keys: keys } })
39
+ # rescue Errno::ECONNREFUSED, RestClient::InternalServerError, RestClient::Exceptions::OpenTimeout, RestClient::Exceptions::ReadTimeout
40
+ # if (retries += 1) <= 3
41
+ # puts "Timeout, retrying..."
42
+ # retry
43
+ # else
44
+ # raise
45
+ # end
46
+ # end
47
+
48
+ # JSON.parse(response)
49
+ # end
50
+
51
+ # def retrieve_local_texts(keys)
52
+ # translated_texts = {}
53
+ # db_keys = []
54
+
55
+ # redis = Glib::DynamicText::Config.redis
56
+ # contents = redis.pipelined do
57
+ # keys.each do |key|
58
+ # args = @__specs[key].first.args
59
+ # options = {
60
+ # scope: args.fetch(:scope, 'itinerarybuilder'),
61
+ # lang: args.fetch(:lang, 'en')
62
+ # }
63
+
64
+ # scope_key = "#{options[:scope]}.#{options[:lang]}.#{key}"
65
+ # redis.get(scope_key)
66
+ # end
67
+ # end
68
+
69
+ # keys.each_with_index do |key, index|
70
+ # if content = contents[index]
71
+ # translated_texts[key] = content
72
+ # db_keys << key if content.match(/\{\{image(\d)\}\}/)
73
+ # else
74
+ # db_keys << key
75
+ # end
76
+ # end
77
+
78
+ # if db_keys.size > 0
79
+ # texts = Glib::Text.where(key: db_keys)
80
+ # texts.each do |text|
81
+ # translated_texts[text.key] = text.content
82
+ # @__specs_db[text.key] = text
83
+ # end
84
+ # end
85
+
86
+ # translated_texts
87
+ # end
88
+
89
+ def extract_spec(view, prop)
90
+ if (spec = view[prop])
91
+ if spec.is_a?(Hash) && (key = spec['dt_key'])
92
+ @__specs[key] ||= []
93
+ @__specs[key] << TextSpec.new(view, prop, spec)
94
+ end
95
+ end
96
+ end
97
+
98
+ TextSpec = Struct.new(:view, :prop, :args) do
99
+ def substitute_with(text)
100
+ view[prop] = text.gsub(/\{\{(\w+)\}\}/) { args.fetch($1, "{{#{$1}}}") }
101
+ end
102
+
103
+ def substitute_image_with(images)
104
+ view[prop] = view[prop].gsub(/\{\{image(\d)\}\}/) {
105
+ if image = images[$1.to_i - 1]
106
+ image_server_url(image.blob.key)
107
+ else
108
+ "{{image#{$1}}}"
109
+ end
110
+ }
111
+ end
112
+
113
+ # TODO: Reuse method from DynamicTextsHelper
114
+ def image_server_url(blob_key)
115
+ return unless blob_key.present?
116
+
117
+ uri = URI::HTTPS.build(
118
+ host: 'imageserver-demo.herokuapp.com',
119
+ path: "/image/#{ENV['AWS_S3_BUCKET']}/#{blob_key}",
120
+ query: { w: 100, h: 100 }.to_param
121
+ )
122
+
123
+ uri.to_s
124
+ end
125
+ end
126
+ end
@@ -1,149 +1,149 @@
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, :use_exception_level_filters => true) 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
- def glib_json_redirect_to(url)
73
- render json: {
74
- onResponse: { action: 'dialogs/close', onClose: { action: 'windows/open', url: url } }
75
- }
76
- end
77
-
78
- module ClassMethods
79
-
80
- def json_libs_init(options)
81
- include Glib::Json::Transformation
82
- include Glib::Json::Validation
83
- include Glib::Json::Ui
84
-
85
- include Glib::Json::Traversal
86
- include Glib::Json::NewDynamicText
87
-
88
- before_action do
89
- __json_ui_start(options)
90
- end
91
-
92
- # Note that after_action gets executed in reverse
93
- after_action do
94
- __json_ui_commit(options)
95
- end
96
- after_action :__json_transformation_commit
97
- after_action :__json_validate_perform
98
-
99
- after_action :__json_traversal_perform
100
- after_action :__json_traversal_register_dynamic_text
101
- end
102
-
103
- def json_libs_set_locale
104
- before_action do
105
- # Need to explicitly fallback to EN
106
- I18n.locale = params[:_locale] || :en
107
- rescue
108
- I18n.locale = :en
109
- end
110
- end
111
-
112
- def json_libs_force_json_ui
113
- before_action :glib_force_json_ui
114
- end
115
-
116
- def json_libs_rescue_csrf
117
- rescue_from ActionController::InvalidAuthenticityToken do |exception|
118
- sign_out(:user)
119
-
120
- respond_to do |format|
121
- format.json do
122
- render json: {
123
- onResponse: {
124
- action: 'windows/open-v1',
125
- url: root_url
126
- }
127
- }
128
- end
129
- end
130
- end
131
- end
132
-
133
- # Call this before other rescues. Later rescue_from statements will take precedence, so more specific
134
- # rescues have to be declared later.
135
- def json_libs_rescue_500
136
- rescue_from StandardError do |exception|
137
- glib_json_handle_500(exception)
138
- end
139
- end
140
-
141
- def json_libs_rescue_404
142
- # Removed because it doesn't seem to offer anything extra
143
- # rescue_from ActiveRecord::RecordNotFound do |exception|
144
- # glib_json_handle_404
145
- # end
146
- end
147
-
148
- end
149
- 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, :use_exception_level_filters => true) 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
+ def glib_json_redirect_to(url)
73
+ render json: {
74
+ onResponse: { action: 'dialogs/close', onClose: { action: 'windows/open', url: url } }
75
+ }
76
+ end
77
+
78
+ module ClassMethods
79
+
80
+ def json_libs_init(options)
81
+ include Glib::Json::Transformation
82
+ include Glib::Json::Validation
83
+ include Glib::Json::Ui
84
+
85
+ include Glib::Json::Traversal
86
+ include Glib::Json::NewDynamicText
87
+
88
+ before_action do
89
+ __json_ui_start(options)
90
+ end
91
+
92
+ # Note that after_action gets executed in reverse
93
+ after_action do
94
+ __json_ui_commit(options)
95
+ end
96
+ after_action :__json_transformation_commit
97
+ after_action :__json_validate_perform
98
+
99
+ after_action :__json_traversal_perform
100
+ after_action :__json_traversal_register_dynamic_text
101
+ end
102
+
103
+ def json_libs_set_locale
104
+ before_action do
105
+ # Need to explicitly fallback to EN
106
+ I18n.locale = params[:_locale] || :en
107
+ rescue
108
+ I18n.locale = :en
109
+ end
110
+ end
111
+
112
+ def json_libs_force_json_ui
113
+ before_action :glib_force_json_ui
114
+ end
115
+
116
+ def json_libs_rescue_csrf
117
+ rescue_from ActionController::InvalidAuthenticityToken do |exception|
118
+ sign_out(:user)
119
+
120
+ respond_to do |format|
121
+ format.json do
122
+ render json: {
123
+ onResponse: {
124
+ action: 'windows/open-v1',
125
+ url: root_url
126
+ }
127
+ }
128
+ end
129
+ end
130
+ end
131
+ end
132
+
133
+ # Call this before other rescues. Later rescue_from statements will take precedence, so more specific
134
+ # rescues have to be declared later.
135
+ def json_libs_rescue_500
136
+ rescue_from StandardError do |exception|
137
+ glib_json_handle_500(exception)
138
+ end
139
+ end
140
+
141
+ def json_libs_rescue_404
142
+ # Removed because it doesn't seem to offer anything extra
143
+ # rescue_from ActiveRecord::RecordNotFound do |exception|
144
+ # glib_json_handle_404
145
+ # end
146
+ end
147
+
148
+ end
149
+ end