glib-web 0.5.71 → 0.5.72
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.
- checksums.yaml +4 -4
- data/app/channels/glib/channel/is_typing_channel.rb +34 -34
- data/app/channels/glib/channel/online_channel.rb +36 -36
- data/app/controllers/concerns/glib/analytics/funnel.rb +61 -61
- data/app/controllers/concerns/glib/auth/policy.rb +148 -148
- data/app/controllers/concerns/glib/json/dynamic_text.rb +126 -126
- data/app/controllers/concerns/glib/json/libs.rb +149 -149
- data/app/controllers/concerns/glib/json/new_dynamic_text.rb +122 -122
- data/app/controllers/concerns/glib/json/transformation.rb +11 -11
- data/app/controllers/concerns/glib/json/traversal.rb +92 -92
- data/app/controllers/concerns/glib/json/ui.rb +88 -88
- data/app/controllers/concerns/glib/json/validation.rb +13 -13
- data/app/controllers/glib/home_controller.rb +54 -54
- data/app/helpers/glib/app_feature_support_helper.rb +16 -16
- data/app/helpers/glib/dynamic_images_helper.rb +55 -55
- data/app/helpers/glib/dynamic_texts_helper.rb +42 -42
- data/app/helpers/glib/enum_helper.rb +18 -8
- data/app/helpers/glib/forms_helper.rb +15 -15
- data/app/helpers/glib/json_ui/abstract_builder.rb +309 -309
- data/app/helpers/glib/json_ui/action_builder.rb +140 -140
- data/app/helpers/glib/json_ui/action_builder/dialogs.rb +58 -58
- data/app/helpers/glib/json_ui/action_builder/http.rb +39 -39
- data/app/helpers/glib/json_ui/action_builder/panels.rb +14 -14
- data/app/helpers/glib/json_ui/action_builder/sheets.rb +15 -15
- data/app/helpers/glib/json_ui/action_builder/snackbars.rb +41 -41
- data/app/helpers/glib/json_ui/action_builder/windows.rb +33 -33
- data/app/helpers/glib/json_ui/analytics_helper.rb +17 -17
- data/app/helpers/glib/json_ui/dynamic_field_builders.rb +25 -25
- data/app/helpers/glib/json_ui/generic_builders.rb +28 -28
- data/app/helpers/glib/json_ui/list_builders.rb +110 -110
- data/app/helpers/glib/json_ui/menu_builder.rb +94 -94
- data/app/helpers/glib/json_ui/page_helper.rb +221 -221
- data/app/helpers/glib/json_ui/response_helper.rb +25 -25
- data/app/helpers/glib/json_ui/split_builders.rb +32 -32
- data/app/helpers/glib/json_ui/styling_helper.rb +55 -55
- data/app/helpers/glib/json_ui/table_builders.rb +74 -74
- data/app/helpers/glib/json_ui/view_builder.rb +240 -240
- data/app/helpers/glib/json_ui/view_builder/banners.rb +26 -26
- data/app/helpers/glib/json_ui/view_builder/charts.rb +33 -33
- data/app/helpers/glib/json_ui/view_builder/fields.rb +278 -279
- data/app/helpers/glib/json_ui/view_builder/panels.rb +256 -256
- data/app/helpers/glib/urls_helper.rb +12 -12
- data/app/models/glib/active_storage/attachment.rb +9 -9
- data/app/models/glib/active_storage/blob.rb +9 -9
- data/app/models/glib/application_record.rb +18 -18
- data/app/models/glib/dynamic_text_record.rb +9 -9
- data/app/models/glib/text.rb +95 -95
- data/app/policies/glib/application_policy.rb +161 -161
- data/app/validators/email_typo_validator.rb +38 -38
- data/app/validators/email_validator.rb +7 -7
- data/app/validators/url_validator.rb +20 -20
- data/app/views/json_ui/garage/_nav_menu.json.jbuilder +70 -70
- data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +104 -104
- data/app/views/json_ui/garage/actions/_http.json.jbuilder +24 -24
- data/app/views/json_ui/garage/actions/_panels.json.jbuilder +18 -18
- data/app/views/json_ui/garage/actions/_reload.json.jbuilder +17 -17
- data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +18 -18
- data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +33 -33
- data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +24 -24
- data/app/views/json_ui/garage/actions/_windows.json.jbuilder +24 -24
- data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +6 -6
- data/app/views/json_ui/garage/actions/index.json.jbuilder +24 -24
- data/app/views/json_ui/garage/forms/_alert_post_data.json.jbuilder +6 -6
- data/app/views/json_ui/garage/forms/basic.json.jbuilder +21 -21
- data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +8 -8
- data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +43 -43
- data/app/views/json_ui/garage/forms/conditional_value.json.jbuilder +36 -36
- data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +39 -39
- data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +24 -22
- data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +38 -38
- data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +32 -37
- data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +19 -19
- data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +3 -3
- data/app/views/json_ui/garage/forms/get_request.json.jbuilder +27 -27
- data/app/views/json_ui/garage/forms/index.json.jbuilder +113 -113
- data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +39 -39
- data/app/views/json_ui/garage/forms/online_participant1.json.jbuilder +25 -25
- data/app/views/json_ui/garage/forms/online_participant2.json.jbuilder +25 -25
- data/app/views/json_ui/garage/forms/pickers.json.jbuilder +81 -81
- data/app/views/json_ui/garage/forms/ratings.json.jbuilder +49 -49
- data/app/views/json_ui/garage/forms/rich_text.json.jbuilder +40 -40
- data/app/views/json_ui/garage/forms/selects.json.jbuilder +91 -84
- data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +130 -130
- data/app/views/json_ui/garage/forms/styled_boxes.json.jbuilder +35 -35
- data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +17 -17
- data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +26 -26
- data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +63 -63
- data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +25 -25
- data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +81 -81
- data/app/views/json_ui/garage/forms/timers.json.jbuilder +120 -120
- data/app/views/json_ui/garage/home/blank.json.jbuilder +10 -10
- data/app/views/json_ui/garage/home/index.json.jbuilder +36 -36
- data/app/views/json_ui/garage/home/slow.json.jbuilder +11 -11
- data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +28 -28
- data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +32 -32
- data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +35 -35
- data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +94 -94
- data/app/views/json_ui/garage/lists/edit_actions.json.jbuilder +62 -62
- data/app/views/json_ui/garage/lists/fab.json.jbuilder +12 -12
- data/app/views/json_ui/garage/lists/index.json.jbuilder +38 -38
- data/app/views/json_ui/garage/lists/reordering.json.jbuilder +34 -34
- data/app/views/json_ui/garage/lists/templating.json.jbuilder +35 -35
- data/app/views/json_ui/garage/notifications/action_cable.json.jbuilder +114 -114
- data/app/views/json_ui/garage/notifications/android_post.json.jbuilder +48 -48
- data/app/views/json_ui/garage/notifications/index.json.jbuilder +36 -36
- data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +60 -60
- data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +29 -29
- data/app/views/json_ui/garage/pages/full_width.json.jbuilder +29 -29
- data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +16 -16
- data/app/views/json_ui/garage/pages/index.json.jbuilder +62 -62
- data/app/views/json_ui/garage/pages/layout.json.jbuilder +18 -18
- data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +13 -13
- data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +10 -10
- data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +21 -21
- data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +40 -40
- data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +31 -31
- data/app/views/json_ui/garage/panels/_styled.json.jbuilder +78 -78
- data/app/views/json_ui/garage/panels/card.json.jbuilder +4 -4
- data/app/views/json_ui/garage/panels/carousel.json.jbuilder +37 -37
- data/app/views/json_ui/garage/panels/custom.json.jbuilder +17 -17
- data/app/views/json_ui/garage/panels/flow.json.jbuilder +59 -59
- data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +91 -91
- data/app/views/json_ui/garage/panels/index.json.jbuilder +138 -134
- data/app/views/json_ui/garage/panels/outlined.json.jbuilder +4 -4
- data/app/views/json_ui/garage/panels/responsive.json.jbuilder +98 -98
- data/app/views/json_ui/garage/panels/split.json.jbuilder +182 -182
- data/app/views/json_ui/garage/panels/ul.json.jbuilder +33 -0
- data/app/views/json_ui/garage/panels/vertical.json.jbuilder +55 -55
- data/app/views/json_ui/garage/panels/web.json.jbuilder +15 -15
- data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +13 -13
- data/app/views/json_ui/garage/services/image.json.jbuilder +47 -47
- data/app/views/json_ui/garage/services/index.json.jbuilder +17 -17
- data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +16 -16
- data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +43 -43
- data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +50 -50
- data/app/views/json_ui/garage/tables/export_import.json.jbuilder +29 -29
- data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +26 -26
- data/app/views/json_ui/garage/tables/index.json.jbuilder +25 -25
- data/app/views/json_ui/garage/tables/layout.json.jbuilder +40 -40
- data/app/views/json_ui/garage/views/_chart_data.json.jbuilder +17 -17
- data/app/views/json_ui/garage/views/banners.json.jbuilder +63 -63
- data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +30 -30
- data/app/views/json_ui/garage/views/charts.json.jbuilder +115 -115
- data/app/views/json_ui/garage/views/controls.json.jbuilder +37 -37
- data/app/views/json_ui/garage/views/icon_names.json.jbuilder +1450 -1450
- data/app/views/json_ui/garage/views/icons.json.jbuilder +15 -14
- data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
- data/app/views/json_ui/garage/views/index.json.jbuilder +67 -67
- data/app/views/json_ui/garage/views/links.json.jbuilder +70 -70
- data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +41 -41
- data/app/views/json_ui/garage/views/map_data.json.jbuilder +51 -51
- data/app/views/json_ui/garage/views/maps.json.jbuilder +31 -31
- data/app/views/json_ui/garage/views/markdowns.json.jbuilder +41 -41
- data/app/views/json_ui/garage/views/misc.json.jbuilder +34 -34
- data/app/views/json_ui/garage/views/texts.json.jbuilder +35 -35
- data/app/views/layouts/json_ui/renderer.html.erb +35 -35
- data/config/routes.rb +7 -7
- data/lib/generators/glib/install_generator.rb +24 -24
- data/lib/generators/templates/20191017062519_create_texts.rb +12 -12
- data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -7
- data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -7
- data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +27 -27
- data/lib/generators/templates/database.yml +107 -107
- data/lib/generators/templates/dynamic_text.rb +2 -2
- data/lib/glib-web.rb +9 -9
- data/lib/glib/crypt/utils.rb +26 -26
- data/lib/glib/dynamic_text/config.rb +21 -21
- data/lib/glib/engine.rb +7 -7
- data/lib/glib/json_crawler.rb +11 -11
- data/lib/glib/json_crawler/action_crawler.rb +23 -23
- data/lib/glib/json_crawler/action_crawlers/action_http.rb +11 -11
- data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +48 -48
- data/lib/glib/json_crawler/action_crawlers/menu.rb +12 -12
- data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +19 -19
- data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +13 -13
- data/lib/glib/json_crawler/action_crawlers/windows_open.rb +33 -33
- data/lib/glib/json_crawler/coverage.rb +20 -20
- data/lib/glib/json_crawler/http.rb +120 -120
- data/lib/glib/json_crawler/router.rb +98 -98
- data/lib/glib/mailer_tester.rb +36 -36
- data/lib/glib/test_helpers.rb +52 -52
- data/lib/glib/value.rb +7 -7
- data/lib/glib/version.rb +5 -5
- data/lib/tasks/db.rake +95 -95
- metadata +3 -3
|
@@ -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
|