glib-web 0.3.12 → 0.3.13
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/controllers/concerns/application/json/libs.rb +12 -11
- data/app/controllers/concerns/application/json/transformation.rb +1 -1
- data/app/controllers/concerns/application/json/ui.rb +3 -3
- data/app/controllers/concerns/application/json/validation.rb +1 -1
- data/app/controllers/concerns/glib/json/libs.rb +93 -0
- data/app/controllers/concerns/glib/json/transformation.rb +11 -0
- data/app/controllers/concerns/glib/json/ui.rb +66 -0
- data/app/controllers/concerns/glib/json/validation.rb +13 -0
- data/app/helpers/glib/dynamic_texts_helper.rb +18 -0
- data/app/helpers/glib/json_ui/action_builder.rb +33 -25
- data/app/helpers/glib/json_ui/view_builder.rb +8 -7
- data/app/models/glib/dynamic_text_record.rb +6 -0
- data/app/models/glib/text.rb +36 -0
- data/app/views/json_ui/garage/notifications/index.json.jbuilder +4 -2
- data/lib/generators/glib/install_generator.rb +19 -0
- data/lib/generators/templates/20191017062519_create_texts.rb +12 -0
- data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +7 -0
- data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +7 -0
- data/lib/generators/templates/database.yml +107 -0
- data/lib/generators/templates/dynamic_text.rb +2 -0
- data/lib/glib/json_crawler/http.rb +2 -4
- metadata +22 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 483dc48299df91d5551fd4ce401fa1dd654e41ef210b6a7d0e4b04ea5e9c48a4
|
4
|
+
data.tar.gz: 2d7c3e9b6a3242099c19e20b110926badee014a6865d1f082f9aadf6bea5f80f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 540ee1e2e471fd0dfae4e5137a09088e668149cb71e03488c0e747b1ca998bab76b75e49703c12d8506cff4149b44f75197a2dd99eaba66d195a967508a982e4
|
7
|
+
data.tar.gz: f641a8945036d40bd336a89b70d41a69a8d26433dda816335c8e1c1f4c2578f3157b2315a63d6d3e021202f1e0bb8d2c86dab76781ee641e130f525488d965b3
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
# TODO: Deprecate
|
2
|
+
module Application::Json::Libs
|
2
3
|
extend ActiveSupport::Concern
|
3
4
|
|
4
5
|
included do
|
@@ -27,7 +28,7 @@ module Concerns::Application::Json::Libs
|
|
27
28
|
def json_ui_app_is_android?
|
28
29
|
json_ui_app_device_os == 'android'
|
29
30
|
end
|
30
|
-
|
31
|
+
|
31
32
|
def json_ui_app_is_ios?
|
32
33
|
json_ui_app_device_os == 'ios'
|
33
34
|
end
|
@@ -41,9 +42,9 @@ module Concerns::Application::Json::Libs
|
|
41
42
|
module ClassMethods
|
42
43
|
|
43
44
|
def json_libs_init(options)
|
44
|
-
include
|
45
|
-
include
|
46
|
-
include
|
45
|
+
include Application::Json::Transformation
|
46
|
+
include Application::Json::Validation
|
47
|
+
include Application::Json::Ui
|
47
48
|
|
48
49
|
before_action :__json_ui_start
|
49
50
|
|
@@ -54,7 +55,7 @@ module Concerns::Application::Json::Libs
|
|
54
55
|
after_action :__json_transformation_commit
|
55
56
|
after_action :__json_validate_perform
|
56
57
|
end
|
57
|
-
|
58
|
+
|
58
59
|
def json_libs_set_locale
|
59
60
|
before_action do
|
60
61
|
# Need to explicitly fallback to EN
|
@@ -63,7 +64,7 @@ module Concerns::Application::Json::Libs
|
|
63
64
|
I18n.locale = :en
|
64
65
|
end
|
65
66
|
end
|
66
|
-
|
67
|
+
|
67
68
|
def json_libs_force_json_ui
|
68
69
|
before_action do
|
69
70
|
if params[:_render] != 'v1'
|
@@ -72,17 +73,17 @@ module Concerns::Application::Json::Libs
|
|
72
73
|
end
|
73
74
|
end
|
74
75
|
|
75
|
-
def json_libs_rescue_csrf
|
76
|
+
def json_libs_rescue_csrf
|
76
77
|
rescue_from ActionController::InvalidAuthenticityToken do |exception|
|
77
78
|
sign_out(:user)
|
78
79
|
|
79
80
|
respond_to do |format|
|
80
81
|
format.json do
|
81
|
-
render json: {
|
82
|
-
onResponse: {
|
82
|
+
render json: {
|
83
|
+
onResponse: {
|
83
84
|
action: 'windows/open-v1',
|
84
85
|
url: root_url
|
85
|
-
}
|
86
|
+
}
|
86
87
|
}
|
87
88
|
end
|
88
89
|
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
module
|
1
|
+
module Application::Json::Ui
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
4
|
included do
|
5
5
|
rescue_from ActionController::UnknownFormat do |exception|
|
6
6
|
if json_ui_activated?
|
7
|
-
# Tell `__json_ui_start()` to avoid rendering this page while still retaining the `_render` param
|
7
|
+
# Tell `__json_ui_start()` to avoid rendering this page while still retaining the `_render` param
|
8
8
|
# so that the page remains linking to other json_ui pages.
|
9
9
|
redirect_to url_for(format: nil, _skip_render: true)
|
10
10
|
else
|
@@ -61,6 +61,6 @@ module Concerns::Application::Json::Ui
|
|
61
61
|
def __json_ui_vue(hash, options)
|
62
62
|
renderer_path = options[:renderer_path]
|
63
63
|
@__json_ui_orig_page = response.body
|
64
|
-
response.body = render_to_string(
|
64
|
+
response.body = render_to_string(template: renderer_path, layout: false, content_type: 'text/html', locals: { page: hash, options: options })
|
65
65
|
end
|
66
66
|
end
|
@@ -0,0 +1,93 @@
|
|
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['JsonUiApp-Bundle-Id']
|
13
|
+
end
|
14
|
+
|
15
|
+
def json_ui_app_build_version
|
16
|
+
@json_ui_app_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['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
|
+
|
40
|
+
|
41
|
+
module ClassMethods
|
42
|
+
|
43
|
+
def json_libs_init(options)
|
44
|
+
include Glib::Json::Transformation
|
45
|
+
include Glib::Json::Validation
|
46
|
+
include Glib::Json::Ui
|
47
|
+
|
48
|
+
before_action :__json_ui_start
|
49
|
+
|
50
|
+
# Note that after_action gets executed in reverse
|
51
|
+
after_action do
|
52
|
+
__json_ui_commit(options)
|
53
|
+
end
|
54
|
+
after_action :__json_transformation_commit
|
55
|
+
after_action :__json_validate_perform
|
56
|
+
end
|
57
|
+
|
58
|
+
def json_libs_set_locale
|
59
|
+
before_action do
|
60
|
+
# Need to explicitly fallback to EN
|
61
|
+
I18n.locale = params[:_locale] || :en
|
62
|
+
rescue
|
63
|
+
I18n.locale = :en
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def json_libs_force_json_ui
|
68
|
+
before_action do
|
69
|
+
if params[:_render] != 'v1'
|
70
|
+
redirect_to url_for(params.to_unsafe_h.merge(_render: 'v1'))
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def json_libs_rescue_csrf
|
76
|
+
rescue_from ActionController::InvalidAuthenticityToken do |exception|
|
77
|
+
sign_out(:user)
|
78
|
+
|
79
|
+
respond_to do |format|
|
80
|
+
format.json do
|
81
|
+
render json: {
|
82
|
+
onResponse: {
|
83
|
+
action: 'windows/open-v1',
|
84
|
+
url: root_url
|
85
|
+
}
|
86
|
+
}
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +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
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Glib::Json::Ui
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
rescue_from ActionController::UnknownFormat do |exception|
|
6
|
+
if json_ui_activated?
|
7
|
+
# Tell `__json_ui_start()` to avoid rendering this page while still retaining the `_render` param
|
8
|
+
# so that the page remains linking to other json_ui pages.
|
9
|
+
redirect_to url_for(format: nil, _skip_render: true)
|
10
|
+
else
|
11
|
+
raise exception
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# Override
|
17
|
+
def form_authenticity_token
|
18
|
+
Rails.env.test? ? 'test_token' : super
|
19
|
+
end
|
20
|
+
|
21
|
+
# NOTE: Override default_url_options and call this method
|
22
|
+
def json_ui_url_options
|
23
|
+
options = {}
|
24
|
+
options[:_render] = params[:_render]
|
25
|
+
options[:_locale] = params[:_locale]
|
26
|
+
options[:format] = :json if request.format == :json
|
27
|
+
options
|
28
|
+
end
|
29
|
+
|
30
|
+
def json_ui_activated?
|
31
|
+
@__json_ui_activated
|
32
|
+
end
|
33
|
+
|
34
|
+
def __json_ui_start
|
35
|
+
@__json_ui_activated = false
|
36
|
+
@__json_ui_rendering = false
|
37
|
+
if params[:_render].present?
|
38
|
+
@__json_ui_activated = true
|
39
|
+
request.variant = :ui
|
40
|
+
|
41
|
+
if request.format.html? && params[:_skip_render] != 'true'
|
42
|
+
@__json_ui_rendering = true
|
43
|
+
request.format = 'json'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def __json_ui_commit(options)
|
49
|
+
if @__json_ui_rendering
|
50
|
+
if (hash = json_transformation_start).is_a?(Hash)
|
51
|
+
case params[:_render]
|
52
|
+
when 'v1'
|
53
|
+
__json_ui_vue(hash, options)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def __json_ui_vue(hash, options)
|
62
|
+
renderer_path = options[:renderer_path]
|
63
|
+
@__json_ui_orig_page = response.body
|
64
|
+
response.body = render_to_string(template: renderer_path, layout: false, content_type: 'text/html', locals: { page: hash, options: options })
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Glib::Json::Validation
|
2
|
+
def __json_validate_perform
|
3
|
+
if Rails.env.development? && params[:_validate] == 'true'
|
4
|
+
if (hash = json_transformation_start).is_a?(Hash)
|
5
|
+
json_validate = JSONValidate.new(hash)
|
6
|
+
response_message = json_validate.valid?
|
7
|
+
hash[:_json] = {
|
8
|
+
validationErrors: response_message
|
9
|
+
}
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Glib
|
2
|
+
module DynamicTextsHelper
|
3
|
+
def dt(key, default_value = '', **args)
|
4
|
+
new_key = key
|
5
|
+
options = {
|
6
|
+
scope: args.fetch(:scope, 'itinerarybuilder'),
|
7
|
+
lang: args.fetch(:lang, 'en')
|
8
|
+
}
|
9
|
+
|
10
|
+
if key.starts_with?('.')
|
11
|
+
new_key = "#{controller_name}.#{action_name}#{key}"
|
12
|
+
end
|
13
|
+
|
14
|
+
content = Glib::Text.get_content(new_key, default_value, options: options)
|
15
|
+
content.gsub(/\{\{(\w+)\}\}/) { args.fetch($1.to_sym, "{{#{$1}}}") }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -4,7 +4,7 @@ module Glib
|
|
4
4
|
def method_missing m, *args
|
5
5
|
add_singleton_element_v1 'action', m, *args
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
class Action < JsonUiElement
|
9
9
|
def analytics(value)
|
10
10
|
if value.is_a?(String)
|
@@ -43,31 +43,31 @@ module Glib
|
|
43
43
|
string :message
|
44
44
|
action :onClose
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
# class Confirm < Action
|
48
48
|
# string :message
|
49
49
|
# action :onConfirm
|
50
50
|
# action :onCancel
|
51
51
|
# end
|
52
|
-
|
52
|
+
|
53
53
|
class Options < Action
|
54
54
|
string :message
|
55
|
-
|
55
|
+
|
56
56
|
def buttons(block)
|
57
57
|
json.buttons do
|
58
58
|
block.call page.menu_builder
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
class Open < Action
|
64
64
|
string :url, cache: true
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
class Close < Action
|
68
68
|
action :onClose
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
# TODO: Deprecate
|
72
72
|
# Consider renaming to ShowSnackbar
|
73
73
|
class Snackbar < Action
|
@@ -76,9 +76,17 @@ module Glib
|
|
76
76
|
string :horizontalPosition
|
77
77
|
singleton_array :styleClass, :styleClasses
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
|
+
class Notification < Action
|
81
|
+
string :title
|
82
|
+
string :body
|
83
|
+
string :tag
|
84
|
+
int :timeout
|
85
|
+
action :onClick
|
86
|
+
end
|
87
|
+
|
80
88
|
end
|
81
|
-
|
89
|
+
|
82
90
|
module Snackbars
|
83
91
|
class Alert < Action
|
84
92
|
string :message
|
@@ -88,20 +96,20 @@ module Glib
|
|
88
96
|
string :horizontalPosition
|
89
97
|
singleton_array :styleClass, :styleClasses
|
90
98
|
end
|
91
|
-
|
99
|
+
|
92
100
|
# class Confirm < Action
|
93
101
|
# string :message
|
94
102
|
# action :onConfirm
|
95
103
|
# action :onCancel
|
96
|
-
|
104
|
+
|
97
105
|
# string :verticalPosition
|
98
106
|
# string :horizontalPosition
|
99
107
|
# singleton_array :styleClass, :styleClasses
|
100
108
|
# end
|
101
|
-
|
109
|
+
|
102
110
|
class Options < Action
|
103
111
|
string :message
|
104
|
-
|
112
|
+
|
105
113
|
string :verticalPosition
|
106
114
|
string :horizontalPosition
|
107
115
|
singleton_array :styleClass, :styleClasses
|
@@ -111,15 +119,15 @@ module Glib
|
|
111
119
|
block.call page.menu_builder
|
112
120
|
end
|
113
121
|
end
|
114
|
-
|
122
|
+
|
115
123
|
end
|
116
|
-
|
124
|
+
|
117
125
|
end
|
118
126
|
|
119
127
|
module Forms
|
120
128
|
class Submit < Action
|
121
129
|
end
|
122
|
-
|
130
|
+
|
123
131
|
end
|
124
132
|
|
125
133
|
module Windows
|
@@ -130,16 +138,16 @@ module Glib
|
|
130
138
|
class CloseAll < Action
|
131
139
|
action :onClose
|
132
140
|
end
|
133
|
-
|
141
|
+
|
134
142
|
class Open < Action
|
135
143
|
string :url, cache: true
|
136
144
|
action :onOpen
|
137
145
|
end
|
138
|
-
|
146
|
+
|
139
147
|
class OpenWeb < Action
|
140
148
|
string :url
|
141
149
|
end
|
142
|
-
|
150
|
+
|
143
151
|
class Reload < Action
|
144
152
|
string :url, cache: true
|
145
153
|
end
|
@@ -151,16 +159,16 @@ module Glib
|
|
151
159
|
string :token
|
152
160
|
action :onSave
|
153
161
|
end
|
154
|
-
|
162
|
+
|
155
163
|
end
|
156
|
-
|
164
|
+
|
157
165
|
# FUTURE
|
158
166
|
module Data
|
159
167
|
class SaveCsrfToken < Action
|
160
168
|
string :token
|
161
169
|
action :onSave
|
162
170
|
end
|
163
|
-
|
171
|
+
|
164
172
|
class Clear < Action
|
165
173
|
end
|
166
174
|
end
|
@@ -170,17 +178,17 @@ module Glib
|
|
170
178
|
string :url, cache: true
|
171
179
|
hash :formData
|
172
180
|
end
|
173
|
-
|
181
|
+
|
174
182
|
class Patch < Action
|
175
183
|
string :url, cache: true
|
176
184
|
hash :formData
|
177
185
|
end
|
178
|
-
|
186
|
+
|
179
187
|
class Delete < Action
|
180
188
|
string :url, cache: true
|
181
189
|
hash :formData
|
182
190
|
end
|
183
|
-
|
191
|
+
|
184
192
|
end
|
185
193
|
|
186
194
|
###
|
@@ -71,8 +71,9 @@ module Glib
|
|
71
71
|
|
72
72
|
class P < AbstractText
|
73
73
|
end
|
74
|
-
|
74
|
+
|
75
75
|
class Label < AbstractText
|
76
|
+
string :format
|
76
77
|
action :onClick
|
77
78
|
end
|
78
79
|
|
@@ -86,7 +87,7 @@ module Glib
|
|
86
87
|
string :url
|
87
88
|
action :onClick
|
88
89
|
end
|
89
|
-
|
90
|
+
|
90
91
|
class Icon < View
|
91
92
|
string :name
|
92
93
|
action :onClick
|
@@ -96,7 +97,7 @@ module Glib
|
|
96
97
|
# icon :icon
|
97
98
|
# string :text
|
98
99
|
# end
|
99
|
-
|
100
|
+
|
100
101
|
class Button < View
|
101
102
|
icon :icon, cache: true
|
102
103
|
string :text, cache: true
|
@@ -121,7 +122,7 @@ module Glib
|
|
121
122
|
int :zoom
|
122
123
|
string :dataUrl
|
123
124
|
end
|
124
|
-
|
125
|
+
|
125
126
|
class Chip < View
|
126
127
|
string :text
|
127
128
|
end
|
@@ -129,10 +130,10 @@ module Glib
|
|
129
130
|
class Calendar < View
|
130
131
|
string :dataUrl
|
131
132
|
end
|
132
|
-
|
133
|
+
|
133
134
|
class TabBar < View
|
134
135
|
color :color
|
135
|
-
|
136
|
+
|
136
137
|
def tabButtons(block)
|
137
138
|
json.tabButtons do
|
138
139
|
block.call page.menu_builder
|
@@ -150,7 +151,7 @@ module Glib
|
|
150
151
|
# end
|
151
152
|
# end
|
152
153
|
# end
|
153
|
-
|
154
|
+
|
154
155
|
end
|
155
156
|
|
156
157
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Glib
|
2
|
+
class Text < Glib::DynamicTextRecord
|
3
|
+
validates :scope, presence: true
|
4
|
+
validates :lang, presence: true
|
5
|
+
validates :key, presence: true, uniqueness: { scope: [:scope, :lang] }
|
6
|
+
validates :content, presence: true
|
7
|
+
|
8
|
+
after_save :update_to_redis
|
9
|
+
|
10
|
+
def self.get_content(key, default_value, options:)
|
11
|
+
scope_key = "#{options[:scope]}.#{options[:lang]}.#{key}"
|
12
|
+
|
13
|
+
unless content = $dt_redis.get(scope_key)
|
14
|
+
if text = find_by(scope: options[:scope], lang: options[:lang], key: key)
|
15
|
+
update_content(scope_key, text.content)
|
16
|
+
content = text.content
|
17
|
+
else
|
18
|
+
create(scope: options[:scope], lang: options[:lang], key: key, content: default_value)
|
19
|
+
update_content(scope_key, default_value)
|
20
|
+
content = default_value
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
content
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
def self.update_content(scope_key, content)
|
29
|
+
$dt_redis.set(scope_key, content)
|
30
|
+
end
|
31
|
+
|
32
|
+
def update_to_redis
|
33
|
+
Glib::Text.update_content("#{scope}.#{lang}.#{key}", content)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -2,11 +2,13 @@ json.title 'Notifications'
|
|
2
2
|
|
3
3
|
json_ui_page json do |page|
|
4
4
|
render "#{@path_prefix}/nav_menu", json: json, page: page, top_nav: true
|
5
|
-
|
5
|
+
|
6
6
|
page.list firstSection: ->(section) do
|
7
7
|
section.rows builder: ->(template) do
|
8
8
|
template.thumbnail title: 'Send Desktop Notification', onClick: ->(action) do
|
9
|
-
|
9
|
+
action.dialogs_notification title: 'Hello World', body: 'Body Message', onClick: ->(action) do
|
10
|
+
action.dialogs_alert message: 'TODO'
|
11
|
+
end
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Glib
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../../templates', __FILE__)
|
5
|
+
|
6
|
+
class_option :redis_env_key, type: :string, default: 'DT_REDIS_URL'
|
7
|
+
class_option :database_env_key, type: :string, default: 'DT_DATABASE_URL'
|
8
|
+
class_option :app_name, type: :string, default: Rails.application.class.parent_name
|
9
|
+
|
10
|
+
def copy_initializer
|
11
|
+
template '20191017062519_create_texts.rb', 'db/dynamic_text_migrate/20191017062519_create_texts.rb'
|
12
|
+
template '20191024063257_add_scope_to_texts.rb', 'db/dynamic_text_migrate/20191024063257_add_scope_to_texts.rb'
|
13
|
+
template '20191112095018_add_lang_to_texts.rb', 'db/dynamic_text_migrate/20191112095018_add_lang_to_texts.rb'
|
14
|
+
template 'dynamic_text.rb', 'config/initializers/dynamic_text.rb'
|
15
|
+
template 'database.yml', 'config/database.yml'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# PostgreSQL. Versions 9.1 and up are supported.
|
2
|
+
#
|
3
|
+
# Install the pg driver:
|
4
|
+
# gem install pg
|
5
|
+
# On OS X with Homebrew:
|
6
|
+
# gem install pg -- --with-pg-config=/usr/local/bin/pg_config
|
7
|
+
# On OS X with MacPorts:
|
8
|
+
# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
|
9
|
+
# On Windows:
|
10
|
+
# gem install pg
|
11
|
+
# Choose the win32 build.
|
12
|
+
# Install PostgreSQL and put its /bin directory on your path.
|
13
|
+
#
|
14
|
+
# Configure Using Gemfile
|
15
|
+
# gem 'pg'
|
16
|
+
#
|
17
|
+
default: &default
|
18
|
+
adapter: postgresql
|
19
|
+
encoding: unicode
|
20
|
+
# For details on connection pooling, see Rails configuration guide
|
21
|
+
# http://guides.rubyonrails.org/configuring.html#database-pooling
|
22
|
+
pool: <%= "\<\%\= ENV.fetch(\"RAILS_MAX_THREADS\") { 5 } \%\>" %>
|
23
|
+
host: <%= "\<\%\= ENV.fetch(\"DATABASE_HOST\") {} \%\>" %>
|
24
|
+
username: <%= "\<\%\= ENV.fetch(\"DATABASE_USER\") {} \%\>" %>
|
25
|
+
password: <%= "\<\%\= ENV.fetch(\"DATABASE_PASSWORD\") {} \%\>" %>
|
26
|
+
|
27
|
+
development:
|
28
|
+
primary:
|
29
|
+
<<: *default
|
30
|
+
database: <%= "\<\%\= ENV.fetch(\"DATABASE_NAME\") { \"#{options[:app_name]}\" } + \"_development\" \%\>" %>
|
31
|
+
dynamic_text:
|
32
|
+
<<: *default
|
33
|
+
migrations_paths: db/dynamic_text_migrate
|
34
|
+
database: <%= "\<\%\= ENV.fetch(\"DT_DATABASE_NAME\") { \"DynamicText\" } + \"_development\" \%\>" %>
|
35
|
+
|
36
|
+
# The specified database role being used to connect to postgres.
|
37
|
+
# To create additional roles in postgres see `$ createuser --help`.
|
38
|
+
# When left blank, postgres will use the default role. This is
|
39
|
+
# the same name as the operating system user that initialized the database.
|
40
|
+
#username: ItineraryBuilder
|
41
|
+
|
42
|
+
# The password associated with the postgres role (username).
|
43
|
+
#password:
|
44
|
+
|
45
|
+
# Connect on a TCP socket. Omitted by default since the client uses a
|
46
|
+
# domain socket that doesn't need configuration. Windows does not have
|
47
|
+
# domain sockets, so uncomment these lines.
|
48
|
+
#host: localhost
|
49
|
+
|
50
|
+
# The TCP port the server listens on. Defaults to 5432.
|
51
|
+
# If your server runs on a different port number, change accordingly.
|
52
|
+
#port: 5432
|
53
|
+
|
54
|
+
# Schema search path. The server defaults to $user,public
|
55
|
+
#schema_search_path: myapp,sharedapp,public
|
56
|
+
|
57
|
+
# Minimum log levels, in increasing order:
|
58
|
+
# debug5, debug4, debug3, debug2, debug1,
|
59
|
+
# log, notice, warning, error, fatal, and panic
|
60
|
+
# Defaults to warning.
|
61
|
+
#min_messages: notice
|
62
|
+
|
63
|
+
# Warning: The database defined as "test" will be erased and
|
64
|
+
# re-generated from your development database when you run "rake".
|
65
|
+
# Do not set this db to the same as development or production.
|
66
|
+
test:
|
67
|
+
primary:
|
68
|
+
<<: *default
|
69
|
+
database: <%= "\<\%\= ENV.fetch(\"DATABASE_NAME\") { \"#{options[:app_name]}\" } + \"_test\" \%\>" %>
|
70
|
+
dynamic_text:
|
71
|
+
<<: *default
|
72
|
+
migrations_paths: db/dynamic_text_migrate
|
73
|
+
database: <%= "\<\%\= ENV.fetch(\"DT_DATABASE_NAME\") { \"DynamicText\" } + \"_test\" \%\>" %>
|
74
|
+
|
75
|
+
# As with config/secrets.yml, you never want to store sensitive information,
|
76
|
+
# like your database password, in your source code. If your source code is
|
77
|
+
# ever seen by anyone, they now have access to your database.
|
78
|
+
#
|
79
|
+
# Instead, provide the password as a unix environment variable when you boot
|
80
|
+
# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database
|
81
|
+
# for a full rundown on how to provide these environment variables in a
|
82
|
+
# production deployment.
|
83
|
+
#
|
84
|
+
# On Heroku and other platform providers, you may have a full connection URL
|
85
|
+
# available as an environment variable. For example:
|
86
|
+
#
|
87
|
+
# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase"
|
88
|
+
#
|
89
|
+
# You can use this database configuration with:
|
90
|
+
#
|
91
|
+
# production:
|
92
|
+
# url: <%= "\<\%\= ENV[\'DATABASE_URL\'] \%\>" %>
|
93
|
+
#
|
94
|
+
|
95
|
+
production_default: &production_default
|
96
|
+
adapter: postgresql
|
97
|
+
encoding: unicode
|
98
|
+
pool: <%= "\<\%\= ENV.fetch(\"RAILS_MAX_THREADS\") { 5 } \%\>" %>
|
99
|
+
|
100
|
+
production:
|
101
|
+
primary:
|
102
|
+
<<: *production_default
|
103
|
+
url: <%= "\<\%\= ENV[\"DATABASE_URL\"] \%\>" %>
|
104
|
+
dynamic_text:
|
105
|
+
<<: *production_default
|
106
|
+
migrations_paths: db/dynamic_text_migrate
|
107
|
+
url: <%= "\<\%\= ENV[\"#{options[:database_env_key]}\"] \%\>" %>
|
@@ -30,7 +30,7 @@ module Glib
|
|
30
30
|
# # Allow repeating urls because excluding them makes the test results really hard to analyze.
|
31
31
|
# # if history.include?(url)
|
32
32
|
|
33
|
-
# if url.blank?
|
33
|
+
# if url.blank?
|
34
34
|
# nil
|
35
35
|
# else
|
36
36
|
# @context.assert_match URI_REGEXP, url
|
@@ -52,7 +52,6 @@ module Glib
|
|
52
52
|
# end
|
53
53
|
# end
|
54
54
|
# end
|
55
|
-
|
56
55
|
end
|
57
56
|
|
58
57
|
def post(url, controller, params)
|
@@ -104,14 +103,13 @@ module Glib
|
|
104
103
|
else
|
105
104
|
response_times << response.headers['X-Runtime'].to_f
|
106
105
|
@context.assert_includes VALID_RESPONSE_CODES, code, "Expected a valid response but was [#{response.code}] #{Rack::Utils::HTTP_STATUS_CODES[response.code.to_i]}:\n#{url}"
|
107
|
-
if response.
|
106
|
+
if response.media_type == 'application/json'
|
108
107
|
JSON.parse(response.body)
|
109
108
|
else
|
110
109
|
nil
|
111
110
|
end
|
112
111
|
end
|
113
112
|
end
|
114
|
-
|
115
113
|
end
|
116
114
|
end
|
117
115
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glib-web
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ''
|
@@ -14,16 +14,22 @@ dependencies:
|
|
14
14
|
name: activestorage
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 5.2.3
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 6.1.0
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 5.2.3
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 6.1.0
|
27
33
|
description:
|
28
34
|
email: ''
|
29
35
|
executables: []
|
@@ -34,7 +40,12 @@ files:
|
|
34
40
|
- app/controllers/concerns/application/json/transformation.rb
|
35
41
|
- app/controllers/concerns/application/json/ui.rb
|
36
42
|
- app/controllers/concerns/application/json/validation.rb
|
43
|
+
- app/controllers/concerns/glib/json/libs.rb
|
44
|
+
- app/controllers/concerns/glib/json/transformation.rb
|
45
|
+
- app/controllers/concerns/glib/json/ui.rb
|
46
|
+
- app/controllers/concerns/glib/json/validation.rb
|
37
47
|
- app/controllers/glib/home_controller.rb
|
48
|
+
- app/helpers/glib/dynamic_texts_helper.rb
|
38
49
|
- app/helpers/glib/json_ui/abstract_builder.rb
|
39
50
|
- app/helpers/glib/json_ui/action_builder.rb
|
40
51
|
- app/helpers/glib/json_ui/list_builders.rb
|
@@ -49,6 +60,8 @@ files:
|
|
49
60
|
- app/helpers/glib/json_ui/view_builder/charts.rb
|
50
61
|
- app/helpers/glib/json_ui/view_builder/fields.rb
|
51
62
|
- app/helpers/glib/json_ui/view_builder/panels.rb
|
63
|
+
- app/models/glib/dynamic_text_record.rb
|
64
|
+
- app/models/glib/text.rb
|
52
65
|
- app/views/app/views/json_ui/vue/renderer.html.erb
|
53
66
|
- app/views/json_ui/garage/_nav_menu.json.jbuilder
|
54
67
|
- app/views/json_ui/garage/actions/index.json.jbuilder
|
@@ -113,6 +126,12 @@ files:
|
|
113
126
|
- app/views/json_ui/garage/views/misc.json.jbuilder
|
114
127
|
- app/views/json_ui/garage/views/texts.json.jbuilder
|
115
128
|
- config/routes.rb
|
129
|
+
- lib/generators/glib/install_generator.rb
|
130
|
+
- lib/generators/templates/20191017062519_create_texts.rb
|
131
|
+
- lib/generators/templates/20191024063257_add_scope_to_texts.rb
|
132
|
+
- lib/generators/templates/20191112095018_add_lang_to_texts.rb
|
133
|
+
- lib/generators/templates/database.yml
|
134
|
+
- lib/generators/templates/dynamic_text.rb
|
116
135
|
- lib/glib-web.rb
|
117
136
|
- lib/glib/engine.rb
|
118
137
|
- lib/glib/json_crawler.rb
|