glib-web 0.5.77 → 0.5.78
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 -18
- 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/dialogs.rb +58 -58
- data/app/helpers/glib/json_ui/action_builder/http.rb +39 -39
- data/app/helpers/glib/json_ui/action_builder/iap.rb +15 -0
- 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 +38 -38
- data/app/helpers/glib/json_ui/action_builder.rb +140 -140
- 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/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 +291 -291
- data/app/helpers/glib/json_ui/view_builder/iap.rb +11 -0
- data/app/helpers/glib/json_ui/view_builder/panels.rb +256 -256
- data/app/helpers/glib/json_ui/view_builder.rb +240 -240
- data/app/helpers/glib/urls_helper.rb +12 -12
- data/app/models/concerns/glib/soft_deletable.rb +68 -68
- 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 +166 -166
- 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 +10 -7
- 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 -24
- 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 +37 -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 +116 -113
- data/app/views/json_ui/garage/forms/new_rich_text.json.jbuilder +40 -40
- 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/payments.json.jbuilder +34 -0
- 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 -91
- data/app/views/json_ui/garage/forms/show_hide.json.jbuilder +150 -150
- 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 +65 -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 +38 -38
- 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 -138
- 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 -33
- 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/iap.json.jbuilder +21 -0
- data/app/views/json_ui/garage/views/icon_names.json.jbuilder +1450 -1450
- data/app/views/json_ui/garage/views/icons.json.jbuilder +15 -15
- data/app/views/json_ui/garage/views/images.json.jbuilder +89 -89
- data/app/views/json_ui/garage/views/index.json.jbuilder +78 -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/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/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 +90 -90
- data/lib/glib/json_crawler.rb +11 -11
- 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/glib-web.rb +9 -9
- data/lib/tasks/db.rake +95 -95
- metadata +6 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9ffc87eb551ef9824df1583e8219d521d8fe77ab576602cb0c3866a0e7c01183
|
|
4
|
+
data.tar.gz: '048f64f8dac41e314df3d4269768b09a2235aa4bb574625ee04a70477e60b7fe'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5c767d88a47d3ce31888cd74d73612c5b2531ef7136f8fc7607769a994ffc55f65d92b57dec1e9b7dfc4bf27375e5dd1eaf812411a614398fa2c9c69fb658fdf
|
|
7
|
+
data.tar.gz: 1907ce0ab0e03837bcfdabb03f68be6e68397139da1deba9af4984b7c9dde72d337abb3537189a8839ec6ab2182e664a91782dff46eeef75820eb9f582c61cbc
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
module Glib
|
|
2
|
-
module Channel
|
|
3
|
-
class IsTypingChannel < ApplicationCable::Channel
|
|
4
|
-
class << self
|
|
5
|
-
attr_accessor :channel_name
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def channel_name
|
|
9
|
-
self.class.channel_name
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def subscribed
|
|
13
|
-
stream_from "#{self.class.channel_name}_#{params['conversation_id']}"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def typing(data)
|
|
17
|
-
if data['status']
|
|
18
|
-
text = "#{User.find(data['user_id']).full_name} is typing"
|
|
19
|
-
else
|
|
20
|
-
text = ''
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
ActionCable.server.broadcast \
|
|
24
|
-
"#{self.class.channel_name}_#{params['conversation_id']}",
|
|
25
|
-
action: {
|
|
26
|
-
action: 'component/set',
|
|
27
|
-
text: text,
|
|
28
|
-
status: data['status'],
|
|
29
|
-
user_id: data['user_id']
|
|
30
|
-
}
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
1
|
+
module Glib
|
|
2
|
+
module Channel
|
|
3
|
+
class IsTypingChannel < ApplicationCable::Channel
|
|
4
|
+
class << self
|
|
5
|
+
attr_accessor :channel_name
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def channel_name
|
|
9
|
+
self.class.channel_name
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def subscribed
|
|
13
|
+
stream_from "#{self.class.channel_name}_#{params['conversation_id']}"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def typing(data)
|
|
17
|
+
if data['status']
|
|
18
|
+
text = "#{User.find(data['user_id']).full_name} is typing"
|
|
19
|
+
else
|
|
20
|
+
text = ''
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
ActionCable.server.broadcast \
|
|
24
|
+
"#{self.class.channel_name}_#{params['conversation_id']}",
|
|
25
|
+
action: {
|
|
26
|
+
action: 'component/set',
|
|
27
|
+
text: text,
|
|
28
|
+
status: data['status'],
|
|
29
|
+
user_id: data['user_id']
|
|
30
|
+
}
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
module Glib
|
|
2
|
-
module Channel
|
|
3
|
-
class OnlineChannel < ApplicationCable::Channel
|
|
4
|
-
class << self
|
|
5
|
-
attr_accessor :channel_name
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def channel_name
|
|
9
|
-
self.class.channel_name
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def subscribed
|
|
13
|
-
stream_from "#{self.class.channel_name}_#{params['conversation_id']}"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def online_status(data)
|
|
17
|
-
if data['status'] == true
|
|
18
|
-
text = "#{User.find(data['user_id']).full_name} is online"
|
|
19
|
-
else
|
|
20
|
-
text = "#{User.find(data['user_id']).full_name} is offline"
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
ActionCable.server.broadcast \
|
|
24
|
-
"#{self.class.channel_name}_#{params['conversation_id']}",
|
|
25
|
-
action: {
|
|
26
|
-
action: 'component/set',
|
|
27
|
-
text: text,
|
|
28
|
-
status: data['status'],
|
|
29
|
-
value: data['reset_value'],
|
|
30
|
-
event: 'online_status'
|
|
31
|
-
},
|
|
32
|
-
filterKey: data['user_id']
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
1
|
+
module Glib
|
|
2
|
+
module Channel
|
|
3
|
+
class OnlineChannel < ApplicationCable::Channel
|
|
4
|
+
class << self
|
|
5
|
+
attr_accessor :channel_name
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def channel_name
|
|
9
|
+
self.class.channel_name
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def subscribed
|
|
13
|
+
stream_from "#{self.class.channel_name}_#{params['conversation_id']}"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def online_status(data)
|
|
17
|
+
if data['status'] == true
|
|
18
|
+
text = "#{User.find(data['user_id']).full_name} is online"
|
|
19
|
+
else
|
|
20
|
+
text = "#{User.find(data['user_id']).full_name} is offline"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
ActionCable.server.broadcast \
|
|
24
|
+
"#{self.class.channel_name}_#{params['conversation_id']}",
|
|
25
|
+
action: {
|
|
26
|
+
action: 'component/set',
|
|
27
|
+
text: text,
|
|
28
|
+
status: data['status'],
|
|
29
|
+
value: data['reset_value'],
|
|
30
|
+
event: 'online_status'
|
|
31
|
+
},
|
|
32
|
+
filterKey: data['user_id']
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
module Glib::Analytics
|
|
2
|
-
module Funnel
|
|
3
|
-
extend ActiveSupport::Concern
|
|
4
|
-
|
|
5
|
-
included do
|
|
6
|
-
# include Overrides
|
|
7
|
-
extend ClassMethods
|
|
8
|
-
|
|
9
|
-
helper_method :glib_analytics_feature_segment
|
|
10
|
-
helper_method :glib_analytics_feature_referer
|
|
11
|
-
helper_method :glib_analytics_included?
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# module Overrides
|
|
15
|
-
|
|
16
|
-
# # Expose protected method
|
|
17
|
-
# public # Override
|
|
18
|
-
# def policy_scope(*args)
|
|
19
|
-
# super
|
|
20
|
-
# end
|
|
21
|
-
# end
|
|
22
|
-
|
|
23
|
-
def glib_analytics_included?
|
|
24
|
-
true
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def glib_analytics_feature_segment
|
|
28
|
-
# To be overridden
|
|
29
|
-
nil
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def glib_analytics_feature_referer
|
|
33
|
-
group = request.headers['GApp-Analytics-Referer-Group']
|
|
34
|
-
action = request.headers['GApp-Analytics-Referer-Action']
|
|
35
|
-
segment = request.headers['GApp-Analytics-Referer-Segment']
|
|
36
|
-
placement = request.headers['GApp-Analytics-Referer-Placement']
|
|
37
|
-
|
|
38
|
-
if group && action
|
|
39
|
-
return { group: group, action: action, segment: segment, placement: placement }
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
nil
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
module ClassMethods
|
|
48
|
-
# def glib_auth_inited?
|
|
49
|
-
# @@__glib_auth_init ||= false
|
|
50
|
-
# end
|
|
51
|
-
|
|
52
|
-
# def glib_analytics_init
|
|
53
|
-
# @@__glib_analytics_init = true
|
|
54
|
-
# end
|
|
55
|
-
|
|
56
|
-
# def glib_analytics_inited?
|
|
57
|
-
# @@__glib_analytics_init ||= false
|
|
58
|
-
# end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
1
|
+
module Glib::Analytics
|
|
2
|
+
module Funnel
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
# include Overrides
|
|
7
|
+
extend ClassMethods
|
|
8
|
+
|
|
9
|
+
helper_method :glib_analytics_feature_segment
|
|
10
|
+
helper_method :glib_analytics_feature_referer
|
|
11
|
+
helper_method :glib_analytics_included?
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# module Overrides
|
|
15
|
+
|
|
16
|
+
# # Expose protected method
|
|
17
|
+
# public # Override
|
|
18
|
+
# def policy_scope(*args)
|
|
19
|
+
# super
|
|
20
|
+
# end
|
|
21
|
+
# end
|
|
22
|
+
|
|
23
|
+
def glib_analytics_included?
|
|
24
|
+
true
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def glib_analytics_feature_segment
|
|
28
|
+
# To be overridden
|
|
29
|
+
nil
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def glib_analytics_feature_referer
|
|
33
|
+
group = request.headers['GApp-Analytics-Referer-Group']
|
|
34
|
+
action = request.headers['GApp-Analytics-Referer-Action']
|
|
35
|
+
segment = request.headers['GApp-Analytics-Referer-Segment']
|
|
36
|
+
placement = request.headers['GApp-Analytics-Referer-Placement']
|
|
37
|
+
|
|
38
|
+
if group && action
|
|
39
|
+
return { group: group, action: action, segment: segment, placement: placement }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
nil
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
module ClassMethods
|
|
48
|
+
# def glib_auth_inited?
|
|
49
|
+
# @@__glib_auth_init ||= false
|
|
50
|
+
# end
|
|
51
|
+
|
|
52
|
+
# def glib_analytics_init
|
|
53
|
+
# @@__glib_analytics_init = true
|
|
54
|
+
# end
|
|
55
|
+
|
|
56
|
+
# def glib_analytics_inited?
|
|
57
|
+
# @@__glib_analytics_init ||= false
|
|
58
|
+
# end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -1,148 +1,148 @@
|
|
|
1
|
-
require 'pundit'
|
|
2
|
-
|
|
3
|
-
module Glib::Auth
|
|
4
|
-
module Policy
|
|
5
|
-
extend ActiveSupport::Concern
|
|
6
|
-
|
|
7
|
-
included do
|
|
8
|
-
include Pundit
|
|
9
|
-
include Overrides
|
|
10
|
-
extend ClassMethods
|
|
11
|
-
|
|
12
|
-
# TODO: Ultimately we want to uncomment this line, but:
|
|
13
|
-
# - Need to be able to set aside some time to run rspec tests to ensure nothing gets broken
|
|
14
|
-
# - Need to find a solution where we can reuse a single public policy
|
|
15
|
-
# after_action :verify_authorized
|
|
16
|
-
|
|
17
|
-
helper_method :policy, :can?, :cannot?
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
module Overrides
|
|
21
|
-
|
|
22
|
-
public # Override
|
|
23
|
-
def policy(record, policy_name = nil)
|
|
24
|
-
policy_name ||= record
|
|
25
|
-
|
|
26
|
-
@__pundit_policies ||= {}
|
|
27
|
-
return @__pundit_policies[policy_name] if @__pundit_policies[policy_name]
|
|
28
|
-
|
|
29
|
-
if policy_name.is_a?(Symbol) && policy_name.to_s.ends_with?('_admin')
|
|
30
|
-
policy_class = CommonAdminPolicy
|
|
31
|
-
else
|
|
32
|
-
policy_class = Pundit::PolicyFinder.new(policy_name).policy
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
raise "Policy not found for #{policy_name.is_a?(Symbol) || policy_name.is_a?(Class) ? policy_name : policy_name.class}" unless policy_class
|
|
36
|
-
|
|
37
|
-
@__pundit_policies[policy_name] = policy_class.new(current_user, record, policy_name, self, request, params, *policy_class.args_builder.call(self))
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Expose protected method
|
|
41
|
-
public # Override
|
|
42
|
-
def policy_scope(*args)
|
|
43
|
-
super
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
private
|
|
48
|
-
def raise_access_denied(record, policy)
|
|
49
|
-
raise UnauthorizedError.new(record: record, policy: policy, query: "#{action_name}?")
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
public
|
|
53
|
-
def can?(action, record)
|
|
54
|
-
policy(record).send("#{action}?")
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
public
|
|
58
|
-
def cannot?(action, record)
|
|
59
|
-
!policy(record).send("#{action}?")
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Inspired from https://github.com/ryanb/cancan/wiki/Non-RESTful-Controllers
|
|
63
|
-
public
|
|
64
|
-
def glib_authorize_resource(*args)
|
|
65
|
-
options = args.extract_options!
|
|
66
|
-
resource_name = args.first
|
|
67
|
-
|
|
68
|
-
resource_name ||= controller_name.split('/').last.singularize
|
|
69
|
-
|
|
70
|
-
if (resource_key = options[:class]).nil?
|
|
71
|
-
policy_name = resource_name.camelize.constantize
|
|
72
|
-
else
|
|
73
|
-
policy_name = case resource_key
|
|
74
|
-
when false
|
|
75
|
-
resource_name.to_sym
|
|
76
|
-
when Symbol, Class
|
|
77
|
-
resource_key
|
|
78
|
-
else
|
|
79
|
-
raise "Invalid resource class: #{resource_key}"
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
resource_instance = instance_variable_get("@#{resource_name}") || policy_name
|
|
84
|
-
|
|
85
|
-
query = "#{action_name}?"
|
|
86
|
-
policy_instance = policy(resource_instance, policy_name)
|
|
87
|
-
raise_access_denied(resource_instance, policy_instance) unless policy_instance.public_send(query)
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
class UnauthorizedError < Pundit::NotAuthorizedError
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
module ClassMethods
|
|
98
|
-
def glib_auth_init
|
|
99
|
-
@@__glib_auth_init = true
|
|
100
|
-
|
|
101
|
-
before_action :glib_load_resource
|
|
102
|
-
before_action :glib_authorize_resource
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def glib_auth_inited?
|
|
106
|
-
@@__glib_auth_init ||= false
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
# TODO: Consider deprecating
|
|
110
|
-
public
|
|
111
|
-
def authorize_resource(*args)
|
|
112
|
-
options = args.extract_options!
|
|
113
|
-
resource_name = args.first
|
|
114
|
-
|
|
115
|
-
self.before_action(options.slice(:only, :except, :if, :unless)) do |controller|
|
|
116
|
-
resource_name ||= resource_name_from_controller
|
|
117
|
-
|
|
118
|
-
begin
|
|
119
|
-
if !(resource_key = options[:class]).nil?
|
|
120
|
-
resource = case resource_key
|
|
121
|
-
when false
|
|
122
|
-
resource_name.to_sym
|
|
123
|
-
when Symbol, Class
|
|
124
|
-
resource_key
|
|
125
|
-
else
|
|
126
|
-
raise "Invalid resource class: #{resource_key}"
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
authorize resource
|
|
130
|
-
elsif (resource_instance = controller.instance_variable_get("@#{resource_name}"))
|
|
131
|
-
authorize resource_instance
|
|
132
|
-
else
|
|
133
|
-
authorize resource_name.camelize.constantize
|
|
134
|
-
end
|
|
135
|
-
rescue Pundit::NotAuthorizedError => e
|
|
136
|
-
raise_access_denied(e.record, e.policy)
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
verify_authorized
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
def resource_name_from_controller
|
|
145
|
-
params[:controller].split('/').last.singularize
|
|
146
|
-
end
|
|
147
|
-
end
|
|
148
|
-
end
|
|
1
|
+
require 'pundit'
|
|
2
|
+
|
|
3
|
+
module Glib::Auth
|
|
4
|
+
module Policy
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
included do
|
|
8
|
+
include Pundit
|
|
9
|
+
include Overrides
|
|
10
|
+
extend ClassMethods
|
|
11
|
+
|
|
12
|
+
# TODO: Ultimately we want to uncomment this line, but:
|
|
13
|
+
# - Need to be able to set aside some time to run rspec tests to ensure nothing gets broken
|
|
14
|
+
# - Need to find a solution where we can reuse a single public policy
|
|
15
|
+
# after_action :verify_authorized
|
|
16
|
+
|
|
17
|
+
helper_method :policy, :can?, :cannot?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module Overrides
|
|
21
|
+
|
|
22
|
+
public # Override
|
|
23
|
+
def policy(record, policy_name = nil)
|
|
24
|
+
policy_name ||= record
|
|
25
|
+
|
|
26
|
+
@__pundit_policies ||= {}
|
|
27
|
+
return @__pundit_policies[policy_name] if @__pundit_policies[policy_name]
|
|
28
|
+
|
|
29
|
+
if policy_name.is_a?(Symbol) && policy_name.to_s.ends_with?('_admin')
|
|
30
|
+
policy_class = CommonAdminPolicy
|
|
31
|
+
else
|
|
32
|
+
policy_class = Pundit::PolicyFinder.new(policy_name).policy
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
raise "Policy not found for #{policy_name.is_a?(Symbol) || policy_name.is_a?(Class) ? policy_name : policy_name.class}" unless policy_class
|
|
36
|
+
|
|
37
|
+
@__pundit_policies[policy_name] = policy_class.new(current_user, record, policy_name, self, request, params, *policy_class.args_builder.call(self))
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Expose protected method
|
|
41
|
+
public # Override
|
|
42
|
+
def policy_scope(*args)
|
|
43
|
+
super
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
def raise_access_denied(record, policy)
|
|
49
|
+
raise UnauthorizedError.new(record: record, policy: policy, query: "#{action_name}?")
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
public
|
|
53
|
+
def can?(action, record)
|
|
54
|
+
policy(record).send("#{action}?")
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
public
|
|
58
|
+
def cannot?(action, record)
|
|
59
|
+
!policy(record).send("#{action}?")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Inspired from https://github.com/ryanb/cancan/wiki/Non-RESTful-Controllers
|
|
63
|
+
public
|
|
64
|
+
def glib_authorize_resource(*args)
|
|
65
|
+
options = args.extract_options!
|
|
66
|
+
resource_name = args.first
|
|
67
|
+
|
|
68
|
+
resource_name ||= controller_name.split('/').last.singularize
|
|
69
|
+
|
|
70
|
+
if (resource_key = options[:class]).nil?
|
|
71
|
+
policy_name = resource_name.camelize.constantize
|
|
72
|
+
else
|
|
73
|
+
policy_name = case resource_key
|
|
74
|
+
when false
|
|
75
|
+
resource_name.to_sym
|
|
76
|
+
when Symbol, Class
|
|
77
|
+
resource_key
|
|
78
|
+
else
|
|
79
|
+
raise "Invalid resource class: #{resource_key}"
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
resource_instance = instance_variable_get("@#{resource_name}") || policy_name
|
|
84
|
+
|
|
85
|
+
query = "#{action_name}?"
|
|
86
|
+
policy_instance = policy(resource_instance, policy_name)
|
|
87
|
+
raise_access_denied(resource_instance, policy_instance) unless policy_instance.public_send(query)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class UnauthorizedError < Pundit::NotAuthorizedError
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
module ClassMethods
|
|
98
|
+
def glib_auth_init
|
|
99
|
+
@@__glib_auth_init = true
|
|
100
|
+
|
|
101
|
+
before_action :glib_load_resource
|
|
102
|
+
before_action :glib_authorize_resource
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def glib_auth_inited?
|
|
106
|
+
@@__glib_auth_init ||= false
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# TODO: Consider deprecating
|
|
110
|
+
public
|
|
111
|
+
def authorize_resource(*args)
|
|
112
|
+
options = args.extract_options!
|
|
113
|
+
resource_name = args.first
|
|
114
|
+
|
|
115
|
+
self.before_action(options.slice(:only, :except, :if, :unless)) do |controller|
|
|
116
|
+
resource_name ||= resource_name_from_controller
|
|
117
|
+
|
|
118
|
+
begin
|
|
119
|
+
if !(resource_key = options[:class]).nil?
|
|
120
|
+
resource = case resource_key
|
|
121
|
+
when false
|
|
122
|
+
resource_name.to_sym
|
|
123
|
+
when Symbol, Class
|
|
124
|
+
resource_key
|
|
125
|
+
else
|
|
126
|
+
raise "Invalid resource class: #{resource_key}"
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
authorize resource
|
|
130
|
+
elsif (resource_instance = controller.instance_variable_get("@#{resource_name}"))
|
|
131
|
+
authorize resource_instance
|
|
132
|
+
else
|
|
133
|
+
authorize resource_name.camelize.constantize
|
|
134
|
+
end
|
|
135
|
+
rescue Pundit::NotAuthorizedError => e
|
|
136
|
+
raise_access_denied(e.record, e.policy)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
verify_authorized
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def resource_name_from_controller
|
|
145
|
+
params[:controller].split('/').last.singularize
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|