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,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
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
module Glib::Json::Transformation
|
|
2
|
-
def json_transformation_start
|
|
3
|
-
if request.format == 'json'
|
|
4
|
-
@__transformed_json ||= JSON.parse(response.body) rescue nil
|
|
5
|
-
end
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def __json_transformation_commit
|
|
9
|
-
response.body = @__transformed_json.to_json if @__transformed_json
|
|
10
|
-
end
|
|
11
|
-
end
|
|
1
|
+
module Glib::Json::Transformation
|
|
2
|
+
def json_transformation_start
|
|
3
|
+
if request.format == 'json'
|
|
4
|
+
@__transformed_json ||= JSON.parse(response.body) rescue nil
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def __json_transformation_commit
|
|
9
|
+
response.body = @__transformed_json.to_json if @__transformed_json
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -1,92 +1,92 @@
|
|
|
1
|
-
module Glib::Json::Traversal
|
|
2
|
-
def __json_traversal_on_traverse(&block)
|
|
3
|
-
@__json_traversal_on_traverses ||= []
|
|
4
|
-
@__json_traversal_on_traverses << block
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
def __json_traversal_on_complete(&block)
|
|
8
|
-
@__json_traversal_on_completes ||= []
|
|
9
|
-
@__json_traversal_on_completes << block
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def __json_traversal_perform
|
|
13
|
-
if (hash = json_transformation_start).is_a?(Hash)
|
|
14
|
-
traverse hash['header']&.[]('childViews')
|
|
15
|
-
traverse hash['body']&.[]('childViews')
|
|
16
|
-
traverse hash['footer']&.[]('childViews')
|
|
17
|
-
|
|
18
|
-
@__json_traversal_on_completes.each do |block|
|
|
19
|
-
block.call
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def traverse(views)
|
|
25
|
-
Visitor.new.traverse_multiple views, ->(view) do
|
|
26
|
-
@__json_traversal_on_traverses.each do |block|
|
|
27
|
-
block.call(view)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
class Visitor
|
|
35
|
-
# Used in test crawler
|
|
36
|
-
attr_reader :forms
|
|
37
|
-
|
|
38
|
-
def initialize
|
|
39
|
-
@forms = []
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def traverse_multiple(views, block)
|
|
43
|
-
if views.is_a? Array
|
|
44
|
-
views.each do |view|
|
|
45
|
-
case view['view']
|
|
46
|
-
when 'panels/form-v1'
|
|
47
|
-
@forms << view
|
|
48
|
-
traverse_single view, block
|
|
49
|
-
@forms.pop
|
|
50
|
-
else
|
|
51
|
-
traverse_single view, block
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def traverse_vertical_content(view, block)
|
|
58
|
-
traverse_multiple view['childViews'], block if view
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def traverse_single(view, block)
|
|
62
|
-
block.call view
|
|
63
|
-
|
|
64
|
-
# Generic view children
|
|
65
|
-
traverse_multiple view['childViews'], block
|
|
66
|
-
|
|
67
|
-
# Generic menu buttons
|
|
68
|
-
traverse_multiple view['buttons'], block
|
|
69
|
-
traverse_multiple view['childButtons'], block
|
|
70
|
-
|
|
71
|
-
# Split panel
|
|
72
|
-
traverse_vertical_content view['left'], block
|
|
73
|
-
traverse_vertical_content view['center'], block
|
|
74
|
-
traverse_vertical_content view['right'], block
|
|
75
|
-
|
|
76
|
-
# List template
|
|
77
|
-
traverse_multiple view['editButtons'], block
|
|
78
|
-
traverse_multiple view['leftButtons'], block
|
|
79
|
-
traverse_multiple view['rightButtons'], block
|
|
80
|
-
|
|
81
|
-
# TODO: crawl header and footer
|
|
82
|
-
# Table/List
|
|
83
|
-
if (sections = view['sections']).is_a? Array
|
|
84
|
-
sections.each do |section|
|
|
85
|
-
traverse_vertical_content section['header'], block
|
|
86
|
-
traverse_multiple section['rows'], block
|
|
87
|
-
traverse_vertical_content section['footer'], block
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
1
|
+
module Glib::Json::Traversal
|
|
2
|
+
def __json_traversal_on_traverse(&block)
|
|
3
|
+
@__json_traversal_on_traverses ||= []
|
|
4
|
+
@__json_traversal_on_traverses << block
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def __json_traversal_on_complete(&block)
|
|
8
|
+
@__json_traversal_on_completes ||= []
|
|
9
|
+
@__json_traversal_on_completes << block
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def __json_traversal_perform
|
|
13
|
+
if (hash = json_transformation_start).is_a?(Hash)
|
|
14
|
+
traverse hash['header']&.[]('childViews')
|
|
15
|
+
traverse hash['body']&.[]('childViews')
|
|
16
|
+
traverse hash['footer']&.[]('childViews')
|
|
17
|
+
|
|
18
|
+
@__json_traversal_on_completes.each do |block|
|
|
19
|
+
block.call
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def traverse(views)
|
|
25
|
+
Visitor.new.traverse_multiple views, ->(view) do
|
|
26
|
+
@__json_traversal_on_traverses.each do |block|
|
|
27
|
+
block.call(view)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class Visitor
|
|
35
|
+
# Used in test crawler
|
|
36
|
+
attr_reader :forms
|
|
37
|
+
|
|
38
|
+
def initialize
|
|
39
|
+
@forms = []
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def traverse_multiple(views, block)
|
|
43
|
+
if views.is_a? Array
|
|
44
|
+
views.each do |view|
|
|
45
|
+
case view['view']
|
|
46
|
+
when 'panels/form-v1'
|
|
47
|
+
@forms << view
|
|
48
|
+
traverse_single view, block
|
|
49
|
+
@forms.pop
|
|
50
|
+
else
|
|
51
|
+
traverse_single view, block
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def traverse_vertical_content(view, block)
|
|
58
|
+
traverse_multiple view['childViews'], block if view
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def traverse_single(view, block)
|
|
62
|
+
block.call view
|
|
63
|
+
|
|
64
|
+
# Generic view children
|
|
65
|
+
traverse_multiple view['childViews'], block
|
|
66
|
+
|
|
67
|
+
# Generic menu buttons
|
|
68
|
+
traverse_multiple view['buttons'], block
|
|
69
|
+
traverse_multiple view['childButtons'], block
|
|
70
|
+
|
|
71
|
+
# Split panel
|
|
72
|
+
traverse_vertical_content view['left'], block
|
|
73
|
+
traverse_vertical_content view['center'], block
|
|
74
|
+
traverse_vertical_content view['right'], block
|
|
75
|
+
|
|
76
|
+
# List template
|
|
77
|
+
traverse_multiple view['editButtons'], block
|
|
78
|
+
traverse_multiple view['leftButtons'], block
|
|
79
|
+
traverse_multiple view['rightButtons'], block
|
|
80
|
+
|
|
81
|
+
# TODO: crawl header and footer
|
|
82
|
+
# Table/List
|
|
83
|
+
if (sections = view['sections']).is_a? Array
|
|
84
|
+
sections.each do |section|
|
|
85
|
+
traverse_vertical_content section['header'], block
|
|
86
|
+
traverse_multiple section['rows'], block
|
|
87
|
+
traverse_vertical_content section['footer'], block
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|