anoubis 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +38 -0
- data/app/controllers/anoubis/application_controller.rb +78 -0
- data/app/controllers/anoubis/core/application_controller.rb +343 -0
- data/app/controllers/anoubis/core/data/actions.rb +962 -0
- data/app/controllers/anoubis/core/data/callbacks.rb +68 -0
- data/app/controllers/anoubis/core/data/convert.rb +407 -0
- data/app/controllers/anoubis/core/data/defaults.rb +217 -0
- data/app/controllers/anoubis/core/data/get.rb +531 -0
- data/app/controllers/anoubis/core/data/load.rb +89 -0
- data/app/controllers/anoubis/core/data/set.rb +49 -0
- data/app/controllers/anoubis/core/data/setup.rb +104 -0
- data/app/controllers/anoubis/core/data_controller.rb +28 -0
- data/app/controllers/anoubis/core/index/actions.rb +53 -0
- data/app/controllers/anoubis/core/index/callbacks.rb +23 -0
- data/app/controllers/anoubis/core/index_controller.rb +36 -0
- data/app/controllers/anoubis/etc/base.rb +52 -0
- data/app/controllers/anoubis/etc/data.rb +89 -0
- data/app/controllers/anoubis/etc/field.rb +468 -0
- data/app/controllers/anoubis/etc/field_options.rb +83 -0
- data/app/controllers/anoubis/etc/field_order.rb +51 -0
- data/app/controllers/anoubis/etc/filter.rb +251 -0
- data/app/controllers/anoubis/etc/menu.rb +101 -0
- data/app/controllers/anoubis/etc/model.rb +67 -0
- data/app/controllers/anoubis/etc/tab_item.rb +91 -0
- data/app/controllers/anoubis/etc.rb +8 -0
- data/app/controllers/anoubis/export.rb +47 -0
- data/app/controllers/anoubis/output/autocomplete.rb +30 -0
- data/app/controllers/anoubis/output/basic.rb +86 -0
- data/app/controllers/anoubis/output/data.rb +101 -0
- data/app/controllers/anoubis/output/delete.rb +41 -0
- data/app/controllers/anoubis/output/edit.rb +55 -0
- data/app/controllers/anoubis/output/frame.rb +227 -0
- data/app/controllers/anoubis/output/login.rb +71 -0
- data/app/controllers/anoubis/output/menu.rb +220 -0
- data/app/controllers/anoubis/output/update.rb +43 -0
- data/app/controllers/anoubis/sso/client/application_controller.rb +139 -0
- data/app/controllers/anoubis/sso/client/data/actions.rb +5 -0
- data/app/controllers/anoubis/sso/client/data/callbacks.rb +5 -0
- data/app/controllers/anoubis/sso/client/data/convert.rb +5 -0
- data/app/controllers/anoubis/sso/client/data/defaults.rb +5 -0
- data/app/controllers/anoubis/sso/client/data/get.rb +5 -0
- data/app/controllers/anoubis/sso/client/data/load.rb +26 -0
- data/app/controllers/anoubis/sso/client/data/set.rb +5 -0
- data/app/controllers/anoubis/sso/client/data/setup.rb +5 -0
- data/app/controllers/anoubis/sso/client/data_controller.rb +21 -0
- data/app/controllers/anoubis/sso/client/index/actions.rb +79 -0
- data/app/controllers/anoubis/sso/client/index/callbacks.rb +13 -0
- data/app/controllers/anoubis/sso/client/index_controller.rb +18 -0
- data/app/controllers/anoubis/sso/server/application_controller.rb +49 -0
- data/app/controllers/anoubis/sso/server/login_controller.rb +342 -0
- data/app/controllers/anoubis/sso/server/user_controller.rb +142 -0
- data/app/controllers/anoubis/tenant/application_controller.rb +54 -0
- data/app/controllers/anoubis/tenant/data/actions.rb +11 -0
- data/app/controllers/anoubis/tenant/data/callbacks.rb +11 -0
- data/app/controllers/anoubis/tenant/data/convert.rb +11 -0
- data/app/controllers/anoubis/tenant/data/defaults.rb +11 -0
- data/app/controllers/anoubis/tenant/data/get.rb +11 -0
- data/app/controllers/anoubis/tenant/data/load.rb +52 -0
- data/app/controllers/anoubis/tenant/data/set.rb +11 -0
- data/app/controllers/anoubis/tenant/data/setup.rb +11 -0
- data/app/controllers/anoubis/tenant/data_controller.rb +28 -0
- data/app/controllers/anoubis/tenant/index/actions.rb +191 -0
- data/app/controllers/anoubis/tenant/index/callbacks.rb +11 -0
- data/app/controllers/anoubis/tenant/index_controller.rb +38 -0
- data/app/controllers/anoubis/tenants_controller.rb +7 -0
- data/app/controllers/anoubis/users_controller.rb +7 -0
- data/app/jobs/anoubis/application_job.rb +6 -0
- data/app/mailers/anoubis/application_mailer.rb +8 -0
- data/app/models/anoubis/application_record.rb +45 -0
- data/app/models/anoubis/core/application_record.rb +250 -0
- data/app/models/anoubis/core/locales.rb +27 -0
- data/app/models/anoubis/sso/client/application_record.rb +3 -0
- data/app/models/anoubis/sso/client/group.rb +19 -0
- data/app/models/anoubis/sso/client/group_menu.rb +109 -0
- data/app/models/anoubis/sso/client/menu.rb +145 -0
- data/app/models/anoubis/sso/client/user.rb +81 -0
- data/app/models/anoubis/sso/client/user_group.rb +32 -0
- data/app/models/anoubis/sso/server/system.rb +36 -0
- data/app/models/anoubis/sso/server/user.rb +79 -0
- data/app/models/anoubis/tenant/application_record.rb +41 -0
- data/app/models/anoubis/tenant/group.rb +95 -0
- data/app/models/anoubis/tenant/group_locale.rb +19 -0
- data/app/models/anoubis/tenant/group_menu.rb +84 -0
- data/app/models/anoubis/tenant/menu.rb +156 -0
- data/app/models/anoubis/tenant/menu_locale.rb +27 -0
- data/app/models/anoubis/tenant/system.rb +127 -0
- data/app/models/anoubis/tenant/system_locale.rb +19 -0
- data/app/models/anoubis/tenant/system_menu.rb +51 -0
- data/app/models/anoubis/tenant/tenant.rb +107 -0
- data/app/models/anoubis/tenant/tenant_system.rb +19 -0
- data/app/models/anoubis/tenant/user.rb +225 -0
- data/app/models/anoubis/tenant/user_group.rb +32 -0
- data/app/services/anoubis/core_service.rb +16 -0
- data/app/services/anoubis/session_service.rb +17 -0
- data/app/validators/presence_in_tenant_validator.rb +20 -0
- data/config/initializers/mime_type.rb +1 -0
- data/config/locales/en.yml +120 -0
- data/config/locales/ru.yml +245 -0
- data/config/routes.rb +74 -0
- data/db/migrate/20181018085843_create_tenants.rb +13 -0
- data/db/migrate/20181018111217_create_systems.rb +10 -0
- data/db/migrate/20181018111713_create_tenant_systems.rb +11 -0
- data/db/migrate/20181018111925_create_groups.rb +13 -0
- data/db/migrate/20181018112151_create_users.rb +25 -0
- data/db/migrate/20181018115737_add_title_to_users.rb +10 -0
- data/db/migrate/20181022060211_create_menus.rb +18 -0
- data/db/migrate/20181115055245_create_group_menus.rb +12 -0
- data/db/migrate/20181115060830_create_system_menus.rb +11 -0
- data/db/migrate/20181122062131_create_user_groups.rb +11 -0
- data/db/migrate/20181221060727_create_menu_locales.rb +14 -0
- data/db/migrate/20181225062303_create_system_locales.rb +11 -0
- data/db/migrate/20181225062339_create_group_locales.rb +11 -0
- data/db/seeds.rb +268 -0
- data/lib/anoubis/engine.rb +13 -0
- data/lib/anoubis/version.rb +5 -0
- data/lib/anoubis.rb +213 -0
- data/lib/tasks/anubis_tasks.rake +10 -0
- data/lib/tasks/sessions/clear_sessions.rake +10 -0
- data/spec/anubis_spec.rb +5 -0
- data/spec/controllers/anoubis/index_controller_spec.rb +77 -0
- data/spec/dummy/Rakefile +3 -0
- data/spec/dummy/app/assets/config/manifest.js +2 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
- data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
- data/spec/dummy/app/controllers/application_controller.rb +2 -0
- data/spec/dummy/app/jobs/application_job.rb +2 -0
- data/spec/dummy/app/mailers/application_mailer.rb +4 -0
- data/spec/dummy/app/models/application_record.rb +3 -0
- data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +33 -0
- data/spec/dummy/bin/update +28 -0
- data/spec/dummy/config/application.rb +14 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/cable.yml +10 -0
- data/spec/dummy/config/database.yml +54 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +54 -0
- data/spec/dummy/config/environments/production.rb +85 -0
- data/spec/dummy/config/environments/test.rb +46 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cors.rb +16 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +33 -0
- data/spec/dummy/config/puma.rb +34 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/config/spring.rb +6 -0
- data/spec/dummy/config/storage.yml +34 -0
- data/spec/dummy/config.ru +5 -0
- data/spec/dummy/db/schema.rb +167 -0
- data/spec/dummy/db/seeds.rb +1 -0
- data/spec/factories/anubis_group_locales.rb +7 -0
- data/spec/factories/anubis_group_menus.rb +7 -0
- data/spec/factories/anubis_groups.rb +6 -0
- data/spec/factories/anubis_menu_locales.rb +9 -0
- data/spec/factories/anubis_menus.rb +6 -0
- data/spec/factories/anubis_system_locales.rb +7 -0
- data/spec/factories/anubis_system_menus.rb +6 -0
- data/spec/factories/anubis_systems.rb +5 -0
- data/spec/factories/anubis_tenants.rb +7 -0
- data/spec/factories/anubis_users.rb +10 -0
- data/spec/integration/navigation_test.rb +7 -0
- data/spec/models/anoubis/group_locale_spec.rb +25 -0
- data/spec/models/anoubis/group_menu_spec.rb +50 -0
- data/spec/models/anoubis/group_spec.rb +52 -0
- data/spec/models/anoubis/menu_locale_spec.rb +31 -0
- data/spec/models/anoubis/menu_spec.rb +48 -0
- data/spec/models/anoubis/system_locale_spec.rb +20 -0
- data/spec/models/anoubis/system_menu_spec.rb +49 -0
- data/spec/models/anoubis/system_spec.rb +53 -0
- data/spec/models/anoubis/tenant_spec.rb +67 -0
- data/spec/models/anoubis/user_spec.rb +57 -0
- data/spec/rails_helper.rb +32 -0
- data/spec/requests/anoubis/users_request_spec.rb +5 -0
- data/spec/spec_helper.rb +13 -0
- metadata +408 -0
@@ -0,0 +1,101 @@
|
|
1
|
+
module Anubis
|
2
|
+
module Output
|
3
|
+
##
|
4
|
+
# Output subclass that represents data for default index action
|
5
|
+
class Data < Basic
|
6
|
+
##
|
7
|
+
# Output subclass that represents data for default index action
|
8
|
+
|
9
|
+
# @!attribute [rw] count
|
10
|
+
# @return [String] the model's row count
|
11
|
+
class_attribute :count
|
12
|
+
|
13
|
+
# @!attribute [rw] offset
|
14
|
+
# @return [Integer] output offset for rows were returned
|
15
|
+
class_attribute :offset
|
16
|
+
|
17
|
+
# @!attribute [rw] limit
|
18
|
+
# @return [Integer] output limit fro returns rows
|
19
|
+
class_attribute :limit
|
20
|
+
|
21
|
+
# @!attribute [rw] data
|
22
|
+
# @return [Array] array of output data
|
23
|
+
class_attribute :data
|
24
|
+
|
25
|
+
# @!attribute [rw] fields
|
26
|
+
# @return [Array] array of output fields
|
27
|
+
class_attribute :fields
|
28
|
+
|
29
|
+
# @!attribute [rw] filter
|
30
|
+
# @return [Array] array of filter fields
|
31
|
+
class_attribute :filter
|
32
|
+
|
33
|
+
# @!attribute [rw]
|
34
|
+
# @return [String] order filed name
|
35
|
+
# Returns order field for current output data.
|
36
|
+
class_attribute :sort
|
37
|
+
|
38
|
+
# @!attribute [rw]
|
39
|
+
# @return [String] order filed type
|
40
|
+
# Returns order type current output data ('asc' or 'desc').
|
41
|
+
class_attribute :order
|
42
|
+
|
43
|
+
# @!attribute [rw]
|
44
|
+
# @return [String] field name for manual order table or nil if table can't be sorted
|
45
|
+
# Returns name for manual table order
|
46
|
+
class_attribute :sortable
|
47
|
+
|
48
|
+
##
|
49
|
+
# Initializes output data. Generates default values.
|
50
|
+
def initialize
|
51
|
+
super
|
52
|
+
self.data = nil
|
53
|
+
self.fields = nil
|
54
|
+
self.filter = nil
|
55
|
+
self.count = 0
|
56
|
+
self.offset = 0
|
57
|
+
self.limit = 20
|
58
|
+
self.sort = nil
|
59
|
+
self.order = ''
|
60
|
+
self.sortable = nil
|
61
|
+
end
|
62
|
+
|
63
|
+
##
|
64
|
+
# Generates hash representation of output class
|
65
|
+
# @return [Hash] hash representation of all data
|
66
|
+
def to_h
|
67
|
+
result = super.to_h
|
68
|
+
return result if self.result != 0
|
69
|
+
result.merge!({
|
70
|
+
count: self.count,
|
71
|
+
offset: self.offset,
|
72
|
+
limit: self.limit
|
73
|
+
})
|
74
|
+
if self.sort
|
75
|
+
result[:sort] = self.sort
|
76
|
+
result[:order] = self.order
|
77
|
+
end
|
78
|
+
|
79
|
+
result.merge!({ fields: self.fields}) if self.fields
|
80
|
+
result.merge!({ filter: self.filter}) if self.filter
|
81
|
+
result.merge!({ data: self.data}) if self.data
|
82
|
+
result[:sortable] = self.sortable if self.sortable
|
83
|
+
result
|
84
|
+
end
|
85
|
+
|
86
|
+
##
|
87
|
+
# Generates output message based on {#result self.result} variable.
|
88
|
+
# @return [String] output message
|
89
|
+
def message1
|
90
|
+
case self.result
|
91
|
+
when -1
|
92
|
+
return I18n.t('errors.invalid_login_parameters')
|
93
|
+
when -2
|
94
|
+
return I18n.t('errors.invalid_login_or_password')
|
95
|
+
else
|
96
|
+
return super
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Anubis
|
2
|
+
module Output
|
3
|
+
##
|
4
|
+
# Output subclass that represents data for destroy action
|
5
|
+
class Delete < Basic
|
6
|
+
# @!attribute [rw]
|
7
|
+
# @return [Array<String>] hash of errors
|
8
|
+
class_attribute :errors, default: []
|
9
|
+
|
10
|
+
# @!attribute [rw]
|
11
|
+
# @return [Number] deleted id
|
12
|
+
class_attribute :id, default: nil
|
13
|
+
|
14
|
+
##
|
15
|
+
# Initializes menu output data. Generates default values.
|
16
|
+
def initialize
|
17
|
+
super
|
18
|
+
self.id = nil
|
19
|
+
self.errors = []
|
20
|
+
end
|
21
|
+
|
22
|
+
##
|
23
|
+
# Generates hash representation of output class
|
24
|
+
# @return [Hash] hash representation of all data
|
25
|
+
def to_h
|
26
|
+
result = super.to_h
|
27
|
+
result[:id] = self.id if self.id
|
28
|
+
result[:errors] = self.errors if self.errors.length > 0
|
29
|
+
result
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# Returns customized message if {#result} code equal -4. Another way returns standard message
|
34
|
+
# @return [String] customized message
|
35
|
+
def message
|
36
|
+
return I18n.t('errors.delete_error') if self.result == -4
|
37
|
+
return super
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Anubis
|
2
|
+
module Output
|
3
|
+
##
|
4
|
+
# Output subclass that represents data for edit(new) action
|
5
|
+
class Edit < Basic
|
6
|
+
# @!attribute [rw]
|
7
|
+
# @return [String] the title of edit data
|
8
|
+
class_attribute :title
|
9
|
+
|
10
|
+
# @!attribute [rw] fields
|
11
|
+
# @return [Array] array of output fields
|
12
|
+
class_attribute :fields
|
13
|
+
|
14
|
+
# @!attribute [rw]
|
15
|
+
# @return [Hash] the hash of defined fields.
|
16
|
+
class_attribute :values, default: {}
|
17
|
+
|
18
|
+
# @!attribute [rw]
|
19
|
+
# @return [Hash] the hash of additional field options.
|
20
|
+
class_attribute :options, default: {}
|
21
|
+
|
22
|
+
# @!attribute [rw]
|
23
|
+
# @return [String] additional action after update
|
24
|
+
class_attribute :action
|
25
|
+
|
26
|
+
|
27
|
+
##
|
28
|
+
# Initializes menu output data. Generates default values.
|
29
|
+
def initialize
|
30
|
+
super
|
31
|
+
self.title = ''
|
32
|
+
self.fields = nil
|
33
|
+
self.values = {}
|
34
|
+
self.options = {}
|
35
|
+
self.action = ''
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# Generates hash representation of output class
|
40
|
+
# @return [Hash] hash representation of all data
|
41
|
+
def to_h
|
42
|
+
result = super.to_h
|
43
|
+
return result if self.result != 0
|
44
|
+
result[:title] = self.title if self.title != ''
|
45
|
+
result[:fields] = self.fields if self.fields
|
46
|
+
result[:action] = self.action if self.action != ''
|
47
|
+
result.merge!({
|
48
|
+
values: self.values,
|
49
|
+
options: self.options_to_json(self.options)
|
50
|
+
})
|
51
|
+
result
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,227 @@
|
|
1
|
+
module Anubis
|
2
|
+
module Output
|
3
|
+
##
|
4
|
+
# Output subclass that represents data for frame action
|
5
|
+
class Frame < Basic
|
6
|
+
# @!attribute [rw] short
|
7
|
+
# @return [string] the short title of current loaded frame.
|
8
|
+
class_attribute :short
|
9
|
+
|
10
|
+
# @!attribute [rw] mode
|
11
|
+
# @return [string] the identificator for current frame.
|
12
|
+
class_attribute :mode
|
13
|
+
|
14
|
+
# @!attribute [rw] access
|
15
|
+
# @return [String] the access to the menu element for current user ('read', 'write').
|
16
|
+
class_attribute :access
|
17
|
+
|
18
|
+
# @!attribute [rw] tab_items
|
19
|
+
# @return [Array] the array of tab elements {Anubis::Output::TabItem}.
|
20
|
+
class_attribute :tab_items
|
21
|
+
|
22
|
+
# @!attribute [rw] tabs
|
23
|
+
# @return [Hash] the hash of menu elements {Anubis::Output::TabItem} with 'mode' as a key.
|
24
|
+
class_attribute :tabs
|
25
|
+
|
26
|
+
##
|
27
|
+
# Initializes menu output data. Generates default values.
|
28
|
+
def initialize
|
29
|
+
super
|
30
|
+
self.title = ''
|
31
|
+
self.short = ''
|
32
|
+
self.mode = ''
|
33
|
+
self.access = 'read'
|
34
|
+
self.tab_items = []
|
35
|
+
self.tabs = {}
|
36
|
+
end
|
37
|
+
|
38
|
+
##
|
39
|
+
# Adds new tab into tabs hash
|
40
|
+
# @param [Hash] options the tab element options
|
41
|
+
# @option options [String] :key The identifier of the tab element.
|
42
|
+
# @option options [String] :title The title of the tab element.
|
43
|
+
# @option options [String] :hint The hint for the tab element.
|
44
|
+
def addTab(options)
|
45
|
+
tab = TabItem.new options
|
46
|
+
self.tab_items.push tab
|
47
|
+
self.tabs[tab.tab.to_s.to_sym] = self.tab_items[self.tab_items.count-1]
|
48
|
+
end
|
49
|
+
|
50
|
+
##
|
51
|
+
# Generates hash representation of output class
|
52
|
+
# @return [Hash] hash representation of all data
|
53
|
+
def to_h
|
54
|
+
result = super.to_h
|
55
|
+
return result if self.result != 0
|
56
|
+
result[:short] = self.short
|
57
|
+
result[:mode] = self.mode
|
58
|
+
result[:access] = self.access
|
59
|
+
result[:tabs] = []
|
60
|
+
self.tab_items.each { |item|
|
61
|
+
result[:tabs].push(item.to_h) if item
|
62
|
+
}
|
63
|
+
result
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
##
|
68
|
+
# Subclass of tab element.
|
69
|
+
class TabItem
|
70
|
+
# @!attribute [rw] tab
|
71
|
+
# @return [string] the tab identificator.
|
72
|
+
class_attribute :tab
|
73
|
+
|
74
|
+
# @!attribute [rw] title
|
75
|
+
# @return [string] the tab title.
|
76
|
+
class_attribute :title
|
77
|
+
|
78
|
+
# @!attribute [rw] hint
|
79
|
+
# @return [string] the tab hint (value may not be present).
|
80
|
+
class_attribute :hint
|
81
|
+
|
82
|
+
# @!attribute [rw] button_items
|
83
|
+
# @return [Array] the array of tab elements {Anubis::Output::FrameButtonItem}.
|
84
|
+
class_attribute :button_items
|
85
|
+
|
86
|
+
# @!attribute [rw] buttons
|
87
|
+
# @return [Hash] the hash of menu elements {Anubis::Output::FrameButtonItem} with 'key' as a key.
|
88
|
+
class_attribute :buttons
|
89
|
+
|
90
|
+
# @!attribute [rw] filter
|
91
|
+
# @return [Boolean] sets into true when tab has filter button
|
92
|
+
class_attribute :filter
|
93
|
+
|
94
|
+
# @!attribute [rw] export
|
95
|
+
# @return [Boolean] sets into true when tab has export button
|
96
|
+
class_attribute :export
|
97
|
+
|
98
|
+
##
|
99
|
+
# Initializes tab element data. Generates default values.
|
100
|
+
def initialize(options = {})
|
101
|
+
if options.has_key? :tab
|
102
|
+
self.tab = options[:tab].to_s
|
103
|
+
else
|
104
|
+
self.tab = ''
|
105
|
+
end
|
106
|
+
|
107
|
+
if options.has_key? :title
|
108
|
+
self.title = options[:title]
|
109
|
+
else
|
110
|
+
self.title = ''
|
111
|
+
end
|
112
|
+
|
113
|
+
if options.has_key? :hint
|
114
|
+
self.hint = options[:hint]
|
115
|
+
else
|
116
|
+
self.hint = ''
|
117
|
+
end
|
118
|
+
|
119
|
+
if options.has_key? :filter
|
120
|
+
self.filter = options[:filter]
|
121
|
+
else
|
122
|
+
self.filter = true
|
123
|
+
end
|
124
|
+
|
125
|
+
if options.has_key? :export
|
126
|
+
self.export = options[:export]
|
127
|
+
else
|
128
|
+
self.export = true
|
129
|
+
end
|
130
|
+
|
131
|
+
self.button_items = []
|
132
|
+
self.buttons = {}
|
133
|
+
|
134
|
+
if options.has_key? :buttons
|
135
|
+
options[:buttons].each do |key, button|
|
136
|
+
button[:key] = key.to_s
|
137
|
+
self.addButton(button)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
##
|
143
|
+
# Adds new button into frame buttons hash hash
|
144
|
+
# @param [Hash] options the button element options
|
145
|
+
# @option options [String] :key The identifier of the button element.
|
146
|
+
# @option options [String] :type The type of the button ('primary', 'danger', 'default')
|
147
|
+
# @option options [String] :mode The button action object ('single', 'multiple')
|
148
|
+
def addButton(options)
|
149
|
+
button = FrameButtonItem.new options
|
150
|
+
self.button_items.push button
|
151
|
+
self.buttons[button.key.to_s.to_sym] = self.button_items[self.button_items.count-1]
|
152
|
+
end
|
153
|
+
|
154
|
+
##
|
155
|
+
# Generates hash representation of output class
|
156
|
+
# @return [Hash] hash representation of all data
|
157
|
+
def to_h
|
158
|
+
result = {
|
159
|
+
tab: self.tab,
|
160
|
+
title: self.title,
|
161
|
+
buttons: [],
|
162
|
+
filter: self.filter,
|
163
|
+
export: self.export
|
164
|
+
}
|
165
|
+
result[:hint] = self.hint if self.hint != ''
|
166
|
+
self.button_items.each { |item|
|
167
|
+
result[:buttons].push(item.to_h) if item
|
168
|
+
}
|
169
|
+
result
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
##
|
174
|
+
# Subclass of frame button element.
|
175
|
+
class FrameButtonItem
|
176
|
+
# @!attribute [rw] key
|
177
|
+
# @return [string] the button identificator.
|
178
|
+
class_attribute :key
|
179
|
+
|
180
|
+
# @!attribute [rw] title
|
181
|
+
# @return [string] the button title.
|
182
|
+
class_attribute :title
|
183
|
+
|
184
|
+
# @!attribute [rw] hint
|
185
|
+
# @return [string] the button hint.
|
186
|
+
class_attribute :hint
|
187
|
+
|
188
|
+
# @!attribute [rw] mode
|
189
|
+
# @return [string] the button action object ('single', 'multiple')
|
190
|
+
class_attribute :mode, default: 'single'
|
191
|
+
|
192
|
+
# @!attribute [rw] type
|
193
|
+
# @return [string] the type of the button ('primary', 'danger', 'default')
|
194
|
+
class_attribute :type, default: 'default'
|
195
|
+
|
196
|
+
# @!attribute [rw] decorate
|
197
|
+
# @return [string] button decoration ('none', 'space')
|
198
|
+
class_attribute :decoration, default: 'none'
|
199
|
+
|
200
|
+
##
|
201
|
+
# Initializes button element data. Generates default values.
|
202
|
+
def initialize(options = {})
|
203
|
+
self.key = options.key?(:key) ? options[:key].to_s : ''
|
204
|
+
self.type = options.key?(:type) ? options[:type].to_s : 'default'
|
205
|
+
self.mode = options.key?(:mode) ? options[:mode].to_s : 'single'
|
206
|
+
self.title = options.key?(:title) ? options[:title].to_s : ''
|
207
|
+
self.hint = options.key?(:hint) ? options[:hint].to_s : ''
|
208
|
+
self.decoration = options.key?(:decoration) ? options[:decoration] : 'none'
|
209
|
+
end
|
210
|
+
|
211
|
+
##
|
212
|
+
# Generates hash representation of output class
|
213
|
+
# @return [Hash] hash representation of all data
|
214
|
+
def to_h
|
215
|
+
result = {
|
216
|
+
key: self.key,
|
217
|
+
mode: self.mode,
|
218
|
+
type: self.type,
|
219
|
+
decoration: self.decoration
|
220
|
+
}
|
221
|
+
result[:title] = self.title if self.title != ''
|
222
|
+
result[:hint] = self.hint if self.hint != ''
|
223
|
+
result
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Anubis
|
2
|
+
module Output
|
3
|
+
##
|
4
|
+
# Output subclass that represents data for login action
|
5
|
+
class Login < Basic
|
6
|
+
##
|
7
|
+
# Output subclass that represents data for login action
|
8
|
+
|
9
|
+
# @!attribute [rw] token
|
10
|
+
# @return [String] the resulting login token.
|
11
|
+
class_attribute :token
|
12
|
+
|
13
|
+
# @!attribute [rw] name
|
14
|
+
# @return [String] the name of the user
|
15
|
+
class_attribute :name
|
16
|
+
|
17
|
+
# @!attribute [rw] surname
|
18
|
+
# @return [String] the surname of the user
|
19
|
+
class_attribute :surname
|
20
|
+
|
21
|
+
# @!attribute [rw] email
|
22
|
+
# @return [String] the email of the user
|
23
|
+
class_attribute :email
|
24
|
+
|
25
|
+
# @!attribute [rw] locale
|
26
|
+
# @return [String] the user's locale
|
27
|
+
class_attribute :locale
|
28
|
+
|
29
|
+
##
|
30
|
+
# Initializes login output data. Generates default values.
|
31
|
+
def initialize
|
32
|
+
super
|
33
|
+
self.token = ''
|
34
|
+
self.name = ''
|
35
|
+
self.surname = ''
|
36
|
+
self.email = ''
|
37
|
+
self.locale = ''
|
38
|
+
end
|
39
|
+
|
40
|
+
##
|
41
|
+
# Generates hash representation of output class
|
42
|
+
# @return [Hash] hash representation of all data
|
43
|
+
def to_h
|
44
|
+
result = super.to_h
|
45
|
+
return result if self.result != 0
|
46
|
+
result.merge!({
|
47
|
+
token: self.token,
|
48
|
+
name: self.name,
|
49
|
+
surname: self.surname,
|
50
|
+
email: self.email,
|
51
|
+
locale: self.locale
|
52
|
+
})
|
53
|
+
result
|
54
|
+
end
|
55
|
+
|
56
|
+
##
|
57
|
+
# Generates output message based on {#result self.result} variable.
|
58
|
+
# @return [String] output message
|
59
|
+
def message
|
60
|
+
case self.result
|
61
|
+
when -1
|
62
|
+
return I18n.t('errors.invalid_login_parameters')
|
63
|
+
when -2
|
64
|
+
return I18n.t('errors.invalid_login_or_password')
|
65
|
+
else
|
66
|
+
return super
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|