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,251 @@
|
|
1
|
+
module Anubis
|
2
|
+
module Etc
|
3
|
+
##
|
4
|
+
# Definitions of filter options for data.
|
5
|
+
class Filter
|
6
|
+
# @!attribute [rw]
|
7
|
+
# Defines row filter data
|
8
|
+
# @return [Hash,nil] row filter data.
|
9
|
+
class_attribute :data, default: nil
|
10
|
+
|
11
|
+
# @!attribute [rw]
|
12
|
+
# Defines ActiveRecord hash representation of where.
|
13
|
+
# @return [FieldOrder] hash representation of where
|
14
|
+
class_attribute :hash, default: {}
|
15
|
+
|
16
|
+
# @!attribute [rw]
|
17
|
+
# Defines ActiveRecord array representation of where.
|
18
|
+
# @return [FieldOrder] array representation of where
|
19
|
+
class_attribute :array, default: []
|
20
|
+
|
21
|
+
# @!attribute [rw]
|
22
|
+
# Defines reference for fields
|
23
|
+
# @return [Hash<Anubis::Etc::Field>] hash of fields
|
24
|
+
class_attribute :fields, default: nil
|
25
|
+
|
26
|
+
##
|
27
|
+
# Sets default parameters for filter
|
28
|
+
def initialize(options = {})
|
29
|
+
self.fields = if options.key? :fields then options[:fields] else {} end
|
30
|
+
self.hash = {}
|
31
|
+
self.array = []
|
32
|
+
if options.key? :data then self.init_data(options[:data]) else self.data end
|
33
|
+
end
|
34
|
+
|
35
|
+
##
|
36
|
+
# Generates hash representation of all class parameters,
|
37
|
+
# @return [Hash] hash representation of all data
|
38
|
+
def to_h
|
39
|
+
result = {
|
40
|
+
data: self.data,
|
41
|
+
hash: self.hash,
|
42
|
+
array: self.array,
|
43
|
+
fields: {}
|
44
|
+
}
|
45
|
+
self.fields.each_key do |key|
|
46
|
+
result[:fields][key] = self.fields[key].to_h
|
47
|
+
end
|
48
|
+
result
|
49
|
+
end
|
50
|
+
|
51
|
+
##
|
52
|
+
# Initializes all where parameters according by data and fields.
|
53
|
+
# @param data [Hash] Collection of filter parameters in format <i>field: value</i>
|
54
|
+
def init_data(data = nil)
|
55
|
+
self.data = if data then data else {} end
|
56
|
+
|
57
|
+
if self.fields
|
58
|
+
self.fields.each do |key, field|
|
59
|
+
if self.data.key? key.to_s
|
60
|
+
proc = format('init_data_%s', field.type)
|
61
|
+
result = self.send proc, key, self.data[key.to_s]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
##
|
68
|
+
# Initializes where parameters for filed with type string.
|
69
|
+
# @param key [Symbol] Filed identifier
|
70
|
+
# @param value [String] Filter parameters
|
71
|
+
def init_data_string(key, value)
|
72
|
+
words = value.split(' ')
|
73
|
+
|
74
|
+
words.each do |word|
|
75
|
+
self.attach_to_array self.fields[key].table_field.to_s+' LIKE ?'
|
76
|
+
self.array.push("%#{word}%")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
##
|
81
|
+
# Initializes where parameters for filed with type text.
|
82
|
+
# @param key [Symbol] Filed identifier
|
83
|
+
# @param value [String] Filter parameters
|
84
|
+
def init_data_text(key, value)
|
85
|
+
words = value.split(' ')
|
86
|
+
|
87
|
+
words.each do |word|
|
88
|
+
self.attach_to_array self.fields[key].table_field.to_s+' LIKE ?'
|
89
|
+
self.array.push("%#{word}%")
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
##
|
94
|
+
# Initializes where parameters for filed with type number.
|
95
|
+
# @param key [Symbol] Filed identifier
|
96
|
+
# @param value [String] Filter parameters
|
97
|
+
def init_data_number(key, value)
|
98
|
+
if value.index ','
|
99
|
+
if self.fields[key].table_field.to_s.include? '.'
|
100
|
+
self.attach_to_array self.fields[key].table_field.to_s + ' IN (?)'
|
101
|
+
self.array.push(value.split ',')
|
102
|
+
else
|
103
|
+
self.hash[key] = value.split ','
|
104
|
+
end
|
105
|
+
return
|
106
|
+
end
|
107
|
+
|
108
|
+
if value.index '>'
|
109
|
+
if value.to_s.include? '.'
|
110
|
+
result_value = value.to_s[1..100].to_f
|
111
|
+
else
|
112
|
+
result_value = value.to_s[1..100].to_i
|
113
|
+
end
|
114
|
+
if self.fields[key].table_field.to_s.include? '.'
|
115
|
+
self.attach_to_array self.fields[key].table_field.to_s + ' > ?'
|
116
|
+
|
117
|
+
self.array.push(result_value)
|
118
|
+
else
|
119
|
+
self.hash[key] = [result_value..Float::INFINITY]
|
120
|
+
end
|
121
|
+
return
|
122
|
+
end
|
123
|
+
|
124
|
+
if value.index '<'
|
125
|
+
if value.to_s.include? '.'
|
126
|
+
result_value = value.to_s[1..100].to_f
|
127
|
+
else
|
128
|
+
result_value = value.to_s[1..100].to_i
|
129
|
+
end
|
130
|
+
if self.fields[key].table_field.to_s.include? '.'
|
131
|
+
self.attach_to_array self.fields[key].table_field.to_s + ' < ?'
|
132
|
+
self.array.push(result_value)
|
133
|
+
else
|
134
|
+
self.hash[key] = [-Float::INFINITY..result_value]
|
135
|
+
end
|
136
|
+
return
|
137
|
+
end
|
138
|
+
|
139
|
+
if value.index '-'
|
140
|
+
data = value.split '-'
|
141
|
+
if data[0].include? '.'
|
142
|
+
min_value = data[0].to_f
|
143
|
+
else
|
144
|
+
min_value = data[0].to_i
|
145
|
+
end
|
146
|
+
if data[1].include? '.'
|
147
|
+
max_value = data[1].to_f
|
148
|
+
else
|
149
|
+
max_value = data[1].to_i
|
150
|
+
end
|
151
|
+
min_value, max_value = max_value, min_value if min_value > max_value
|
152
|
+
if self.fields[key].table_field.to_s.include? '.'
|
153
|
+
self.attach_to_array self.fields[key].table_field.to_s + ' > ? AND ' + self.fields[key].table_field.to_s + ' < ?'
|
154
|
+
self.array.push(min_value)
|
155
|
+
self.array.push(max_value)
|
156
|
+
else
|
157
|
+
self.hash[key] = [min_value..max_value]
|
158
|
+
end
|
159
|
+
return
|
160
|
+
end
|
161
|
+
|
162
|
+
if self.fields[key].table_field.to_s.include? '.'
|
163
|
+
self.attach_to_array self.fields[key].table_field.to_s + ' = ?'
|
164
|
+
self.array.push(value)
|
165
|
+
else
|
166
|
+
self.hash[key] = value
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
##
|
171
|
+
# Initializes where parameters for filed with type listbox.
|
172
|
+
# @param key [Symbol] Filed identifier
|
173
|
+
# @param value [String] Filter parameters
|
174
|
+
def init_data_listbox(key, value)
|
175
|
+
values = []
|
176
|
+
if value.class == Array
|
177
|
+
value.each do |data|
|
178
|
+
if self.fields[key].options.enum
|
179
|
+
values.push self.fields[key].options.enum[data]
|
180
|
+
else
|
181
|
+
values.push data
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
if values.count > 0
|
186
|
+
if self.fields[key].table_field.to_s.include? '.'
|
187
|
+
self.attach_to_array self.fields[key].table_field.to_s + ' IN (?)'
|
188
|
+
self.array.push(values)
|
189
|
+
else
|
190
|
+
self.hash[self.fields[key].table_field] = values
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
##
|
196
|
+
# Initializes where parameters for filed with type key.
|
197
|
+
# @param key [Symbol] Filed identifier
|
198
|
+
# @param value [String] Filter parameters
|
199
|
+
def init_data_key(key, value)
|
200
|
+
words = value.split(' ')
|
201
|
+
|
202
|
+
words.each do |word|
|
203
|
+
self.attach_to_array self.fields[key].table_field.to_s + ' LIKE ?'
|
204
|
+
self.array.push("%#{word}%")
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
##
|
209
|
+
# Attach parameters to where
|
210
|
+
# @param str [String] attached parameters
|
211
|
+
def attach_to_array(str)
|
212
|
+
if self.array.count == 0
|
213
|
+
self.array.push(str)
|
214
|
+
else
|
215
|
+
self.array[0] += ' AND ' + str
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
##
|
220
|
+
# Initializes where parameters for filed with type 'datetime'.
|
221
|
+
# @param key [Symbol] Filed identifier
|
222
|
+
# @param value [String] Filter parameters
|
223
|
+
def init_data_datetime(key, value)
|
224
|
+
if value.class == Array
|
225
|
+
if value.count == 2
|
226
|
+
begin
|
227
|
+
from = Time.parse value[0]
|
228
|
+
to = Time.parse value[1]
|
229
|
+
rescue
|
230
|
+
from = nil
|
231
|
+
to = nil
|
232
|
+
end
|
233
|
+
if from && to
|
234
|
+
self.hash[key] = [ from..to ]
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
#words = value.split(' ')
|
239
|
+
|
240
|
+
# words.each do |word|
|
241
|
+
# if self.array.count == 0
|
242
|
+
# self.array.push(self.fields[key].table_field.to_s + ' LIKE ?')
|
243
|
+
# else
|
244
|
+
# self.array[0] += ' AND '+self.fields[key].table_field.to_s+' LIKE ?'
|
245
|
+
# end
|
246
|
+
# self.array.push("%#{word}%")
|
247
|
+
# end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
module Anubis
|
2
|
+
module Etc
|
3
|
+
##
|
4
|
+
# Class stores main menu parameters and variables
|
5
|
+
class Menu
|
6
|
+
# @!attribute [rw] title
|
7
|
+
# @return [String] returns title of current menu element
|
8
|
+
class_attribute :title, default: ''
|
9
|
+
|
10
|
+
# @!attribute [rw] page_title
|
11
|
+
# @return [String] returns page title of current menu element
|
12
|
+
class_attribute :page_title, default: ''
|
13
|
+
|
14
|
+
# @!attribute [rw] short_title
|
15
|
+
# @return [String] returns short title of current menu element
|
16
|
+
class_attribute :short_title, default: ''
|
17
|
+
|
18
|
+
# @!attribute [rw] mode
|
19
|
+
# @return [String] returns mode of current menu element
|
20
|
+
class_attribute :mode, default: ''
|
21
|
+
|
22
|
+
# @!attribute [rw] parent_mode
|
23
|
+
# @return [String] returns mode of parent menu for current menu element
|
24
|
+
class_attribute :parent_mode, default: ''
|
25
|
+
|
26
|
+
# @!attribute [rw] menu_id
|
27
|
+
# @return [Integer] returns id of current menu element
|
28
|
+
class_attribute :menu_id, default: nil
|
29
|
+
|
30
|
+
# @!attribute [rw] parent_menu_id
|
31
|
+
# @return [Integer] returns id of parent menu for current menu element
|
32
|
+
class_attribute :parent_menu_id, default: nil
|
33
|
+
|
34
|
+
# @!attribute [rw] action
|
35
|
+
# @return [String] returns action of current menu element
|
36
|
+
class_attribute :action, default: ''
|
37
|
+
|
38
|
+
# @!attribute [rw] tab
|
39
|
+
# @return [Integer] returns level of current menu element
|
40
|
+
class_attribute :tab, default: 0
|
41
|
+
|
42
|
+
# @!attribute [rw] position
|
43
|
+
# @return [Integer] returns position in level of current menu element
|
44
|
+
class_attribute :position, default: 0
|
45
|
+
|
46
|
+
# @!attribute [rw] state
|
47
|
+
# @return [String] returns state of current menu element ('visible', 'hidden')
|
48
|
+
class_attribute :state, default: 'visible'
|
49
|
+
|
50
|
+
# @!attribute [rw] access
|
51
|
+
# @return [String] returns access state of current menu element ('read', 'write')
|
52
|
+
class_attribute :access, default: 'read'
|
53
|
+
|
54
|
+
##
|
55
|
+
# Sets default parameters for menu element
|
56
|
+
# @param [Hash] options initial menu paramters
|
57
|
+
# @option options [String] :title menu title
|
58
|
+
# @option options [String] :page_title page title
|
59
|
+
# @option options [String] :short_title short page title
|
60
|
+
# @option options [String] :mode menu mode
|
61
|
+
# @option options [String] :parent_mode parent menu mode
|
62
|
+
# @option options [Integer] :menu_id id of menu (if <b>id</b> isn't defined)
|
63
|
+
# @option options [Integer] :id id of menu (if <b>menu_id</b> isn't defined)
|
64
|
+
# @option options [Integer] :parent_menu_id id of parent menu
|
65
|
+
# @option options [String] :action menu action
|
66
|
+
# @option options [Integer] :tab menu tab index
|
67
|
+
# @option options [Integer] :position position in current level
|
68
|
+
# @option options [String] :state state of the menu ('visible', 'hidden')
|
69
|
+
# @option options [String] :access access state of the menu ('read', 'write')
|
70
|
+
def initialize(options = {})
|
71
|
+
if options.class == Hash
|
72
|
+
self.title = options[:title] if options.has_key? :title
|
73
|
+
self.page_title = options[:page_title] if options.has_key? :page_title
|
74
|
+
self.short_title = options[:short_title] if options.has_key? :short_title
|
75
|
+
self.mode = options[:mode] if options.has_key? :mode
|
76
|
+
self.parent_mode = options[:parent_mode] if options.has_key? :parent_mode
|
77
|
+
self.menu_id = options[:menu_id] if options.has_key? :menu_id
|
78
|
+
self.menu_id = options[:id] if options.has_key? :id
|
79
|
+
self.parent_menu_id = options[:parent_menu_id] if options.has_key? :parent_menu_id
|
80
|
+
self.action = options[:action] if options.has_key? :action
|
81
|
+
self.tab = options[:tab] if options.has_key? :tab
|
82
|
+
self.position = options[:position] if options.has_key? :position
|
83
|
+
self.state = options[:state] if options.has_key? :state
|
84
|
+
self.access = options[:access] if options.has_key? :access
|
85
|
+
end
|
86
|
+
if options.class == Anubis::Sso::Client::Menu
|
87
|
+
self.title = options.title
|
88
|
+
self.page_title = options.page_title
|
89
|
+
self.short_title = options.short_title
|
90
|
+
self.mode = options.mode
|
91
|
+
self.menu_id = options.id
|
92
|
+
self.parent_menu_id = options.menu_id
|
93
|
+
self.action = options.action
|
94
|
+
self.tab = options.tab
|
95
|
+
self.position = options.position
|
96
|
+
self.state = options.state
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Anubis
|
2
|
+
module Etc
|
3
|
+
##
|
4
|
+
# Definitions of model options. Class is used for define attached model.
|
5
|
+
class Model
|
6
|
+
# @!attribute [rw]
|
7
|
+
# Defines model class. This field is required.
|
8
|
+
# @return [ActiveRecord] model's class.
|
9
|
+
class_attribute :model, default: nil
|
10
|
+
|
11
|
+
# @!attribute [rw]
|
12
|
+
# Field name is used for defines title when data selected from model.
|
13
|
+
# @return [Symbol] field's name
|
14
|
+
class_attribute :title, default: :title
|
15
|
+
|
16
|
+
# @!attribute [rw]
|
17
|
+
# Field name is used for defines order field when data selected from model. By default uses field daefined as
|
18
|
+
# (#title)
|
19
|
+
# @return [Boolean] field's name
|
20
|
+
class_attribute :order, default: :title
|
21
|
+
|
22
|
+
# @!attribute [rw]
|
23
|
+
# Where parameters are used when data selected from model.
|
24
|
+
# @return [Hash] hash of where's parameters
|
25
|
+
class_attribute :where, default: {}
|
26
|
+
|
27
|
+
# @!attribute [rw]
|
28
|
+
# Special select parameters.
|
29
|
+
# @return [String] string of special select or nil
|
30
|
+
class_attribute :select, default: nil
|
31
|
+
|
32
|
+
# @!attribute [rw]
|
33
|
+
# Timestamp of last changes in the model.
|
34
|
+
# @return [Number] timestamp of last changes in model.
|
35
|
+
class_attribute :updated_at, default: {}
|
36
|
+
|
37
|
+
##
|
38
|
+
# Sets default parameters for field
|
39
|
+
# @param [Hash] options initial model options
|
40
|
+
# @option options [ActiveRecord] :model model class
|
41
|
+
# @option options [Symbol] :title field name is used for receive options titles
|
42
|
+
# @option options [Symbol] :order field name is used for order options
|
43
|
+
# @option options [Hash] :where where parameters for select data from model
|
44
|
+
def initialize(options = {})
|
45
|
+
self.model = options[:model]
|
46
|
+
self.title = if options.key? :title then options[:title] else :title end
|
47
|
+
self.order = if options.key? :order then options[:order] else self.title end
|
48
|
+
self.where = if options.key? :where then options[:where] else {} end
|
49
|
+
self.select = if options.key? :select then options[:select] else nil end
|
50
|
+
self.updated_at = 0
|
51
|
+
end
|
52
|
+
|
53
|
+
##
|
54
|
+
# Generates hash representation of all class parameters,
|
55
|
+
# @return [Hash] hash representation of all data
|
56
|
+
def to_h
|
57
|
+
{
|
58
|
+
model: self.model,
|
59
|
+
title: self.title,
|
60
|
+
order: self.order,
|
61
|
+
where: self.where,
|
62
|
+
updated_at: self.updated_at
|
63
|
+
}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
module Anubis
|
2
|
+
module Etc
|
3
|
+
##
|
4
|
+
# Definitions of tab options.
|
5
|
+
class TabItem
|
6
|
+
# @!attribute [rw]
|
7
|
+
# Returns tab identifier
|
8
|
+
# @return [String] tab's identifier.
|
9
|
+
class_attribute :tab, default: nil
|
10
|
+
|
11
|
+
# @!attribute [rw]
|
12
|
+
# Returns tab title
|
13
|
+
# @return [String] tab's title.
|
14
|
+
class_attribute :title, default: ''
|
15
|
+
|
16
|
+
# @!attribute [rw]
|
17
|
+
# Returns tab hint
|
18
|
+
# @return [String] tab's hint.
|
19
|
+
class_attribute :hint, default: ''
|
20
|
+
|
21
|
+
# @!attribute [rw]
|
22
|
+
# Returns tab where for selection from model.
|
23
|
+
# @return [Hash|Array] tab's where
|
24
|
+
class_attribute :where, default: []
|
25
|
+
|
26
|
+
# @!attribute [rw]
|
27
|
+
# Returns possibility for export data for this tab <i>(default: true)</i>
|
28
|
+
# @return [Boolean] tab's export possibility
|
29
|
+
class_attribute :export, default: true
|
30
|
+
|
31
|
+
# @!attribute [rw]
|
32
|
+
# Returns possibility for filter data for this tab <i>(default: true)</i>
|
33
|
+
# @return [Boolean] tab's filter possibility
|
34
|
+
class_attribute :filter, default: true
|
35
|
+
|
36
|
+
# @!attribute [rw]
|
37
|
+
# Returns possibility for filter data for this tab <i>(default: true)</i>
|
38
|
+
# @return [Hash] tab's filter possibility
|
39
|
+
class_attribute :buttons, default: {}
|
40
|
+
|
41
|
+
# @!attribute [rw]
|
42
|
+
# Returns order field for this tab <i>(default: nil)</i>
|
43
|
+
# @return [String] tab's order field
|
44
|
+
class_attribute :sort, default: nil
|
45
|
+
|
46
|
+
# @!attribute [rw]
|
47
|
+
# Returns order type for this tab ('asc' or 'desc') <i>(default: nil)</i>
|
48
|
+
# @return [String] tab's order type
|
49
|
+
class_attribute :order, default: nil
|
50
|
+
|
51
|
+
##
|
52
|
+
# Sets default parameters for tab
|
53
|
+
# @param options [String] initial tab options
|
54
|
+
# @option options [String] :tab tab identifier
|
55
|
+
def initialize(options = {})
|
56
|
+
self.tab = if options.key?(:tab) then options[:tab] else nil end
|
57
|
+
self.sort = if options.key?(:sort) then options[:sort] else nil end
|
58
|
+
self.order = ''
|
59
|
+
if options.key? :order
|
60
|
+
self.order = options[:order] if %w[asc desc].include?(options[:order])
|
61
|
+
end
|
62
|
+
self.title = if options.key?(:title) then options[:title] else self.tab.humanize end
|
63
|
+
self.hint = if options.key?(:hint) then options[:hint] else '' end
|
64
|
+
self.where = if options.key?(:where) then options[:where] else [] end
|
65
|
+
self.export = if options.key?(:export) then options[:export] else true end
|
66
|
+
self.filter = if options.key?(:filter) then options[:filter] else true end
|
67
|
+
self.buttons = if options.key?(:buttons) then options[:buttons] else true end
|
68
|
+
end
|
69
|
+
|
70
|
+
##
|
71
|
+
# Generates hash representation of all class parameters,
|
72
|
+
# @return [Hash] hash representation of all parameters
|
73
|
+
def to_h
|
74
|
+
result = {
|
75
|
+
tab: self.tab,
|
76
|
+
title: self.title,
|
77
|
+
hint: self.hint,
|
78
|
+
where: self.where,
|
79
|
+
export: self.export,
|
80
|
+
filter: self.filter,
|
81
|
+
buttons: self.buttons
|
82
|
+
}
|
83
|
+
if self.sort
|
84
|
+
result[:sort] = self.sort
|
85
|
+
result[:order] = self.order if self.order != ''
|
86
|
+
end
|
87
|
+
result
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Anubis
|
2
|
+
class Export
|
3
|
+
class_attribute :data
|
4
|
+
class_attribute :title
|
5
|
+
class_attribute :format
|
6
|
+
class_attribute :fields
|
7
|
+
|
8
|
+
def initialize(options = {})
|
9
|
+
self.data = []
|
10
|
+
self.title = []
|
11
|
+
options[:format] = 'xls' if !options.key? :format
|
12
|
+
self.format = options[:format]
|
13
|
+
self.fields = if options.key?(:fields) then options[:fields] else nil end
|
14
|
+
if self.fields
|
15
|
+
self.fields.each do |field|
|
16
|
+
self.title.push field[:title]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def add (data)
|
22
|
+
data.each do |dat|
|
23
|
+
new_data = []
|
24
|
+
self.fields.each do |field|
|
25
|
+
if dat.key? field[:id].to_sym
|
26
|
+
new_data.push dat[field[:id].to_sym]
|
27
|
+
else
|
28
|
+
new_data.push ''
|
29
|
+
end
|
30
|
+
end
|
31
|
+
#new_data = dat.except :actions, :sys_title
|
32
|
+
self.data.push(new_data)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_h
|
37
|
+
{
|
38
|
+
data: self.data,
|
39
|
+
title: self.title,
|
40
|
+
fields: self.fields,
|
41
|
+
format: self.format
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
public :format
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Anubis
|
2
|
+
module Output
|
3
|
+
##
|
4
|
+
# Output subclass that represents data for edit(new) action
|
5
|
+
class Autocomplete < Basic
|
6
|
+
# @!attribute [rw]
|
7
|
+
# @return [Hash] the hash of defined fields.
|
8
|
+
class_attribute :values, default: {}
|
9
|
+
|
10
|
+
##
|
11
|
+
# Initializes menu output data. Generates default values.
|
12
|
+
def initialize
|
13
|
+
super
|
14
|
+
self.values = []
|
15
|
+
end
|
16
|
+
|
17
|
+
##
|
18
|
+
# Generates hash representation of output class
|
19
|
+
# @return [Hash] hash representation of all data
|
20
|
+
def to_h
|
21
|
+
result = super.to_h
|
22
|
+
return result if self.result != 0
|
23
|
+
result.merge!({
|
24
|
+
values: self.values,
|
25
|
+
})
|
26
|
+
result
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Anubis
|
2
|
+
##
|
3
|
+
# Module contains all procedures and function for output data. Module consists from {Basic}, {Frame}, {Login} and
|
4
|
+
# {Menu} classes.
|
5
|
+
module Output
|
6
|
+
##
|
7
|
+
# Output subclass that represents parametrs for basic requests
|
8
|
+
class Basic
|
9
|
+
# @!attribute [rw] title
|
10
|
+
# @return [string] the page title of current loaded frame.
|
11
|
+
class_attribute :title
|
12
|
+
|
13
|
+
# @!attribute [rw]
|
14
|
+
# @return [Hash<string>] hash of messages
|
15
|
+
class_attribute :messages
|
16
|
+
|
17
|
+
# @!attribute [rw]
|
18
|
+
# @return [Number] controller action output result code.
|
19
|
+
# @note Zero value means successful. Negative value means error.
|
20
|
+
class_attribute :result, default: 0
|
21
|
+
|
22
|
+
# @!attribute [rw]
|
23
|
+
# @return [String] current returned tab
|
24
|
+
class_attribute :tab, default: ''
|
25
|
+
|
26
|
+
##
|
27
|
+
# Output class initialization. Sets default class parameters.
|
28
|
+
def initialize
|
29
|
+
self.title = nil
|
30
|
+
self.result = 0
|
31
|
+
self.tab = ''
|
32
|
+
self.messages = {
|
33
|
+
'0': I18n.t('success'),
|
34
|
+
'-1': I18n.t('errors.access_not_allowed'),
|
35
|
+
'-2': I18n.t('errors.incorrect_parameters')
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
##
|
40
|
+
# Generates hash representation of output class
|
41
|
+
# @return [Hash] hash representation of all class data
|
42
|
+
def to_h
|
43
|
+
result = {
|
44
|
+
result: self.result,
|
45
|
+
timestamp: Time.now.to_i,
|
46
|
+
message: message
|
47
|
+
}
|
48
|
+
result[:title] = self.title if self.title
|
49
|
+
result[:tab] = self.tab if self.tab != ''
|
50
|
+
result
|
51
|
+
end
|
52
|
+
|
53
|
+
##
|
54
|
+
# Generates output message based on result variable.
|
55
|
+
# @return [String] output message
|
56
|
+
def message
|
57
|
+
return messages[result.to_s.to_sym] if messages.key? result.to_s.to_sym
|
58
|
+
I18n.t('errors.internal_error')
|
59
|
+
end
|
60
|
+
|
61
|
+
##
|
62
|
+
# Convert hash to array json output
|
63
|
+
# @param hash [Hash] hash representation
|
64
|
+
# @return [Array] array representation
|
65
|
+
def hash_to_json(hash)
|
66
|
+
result = []
|
67
|
+
hash.each_key do |key|
|
68
|
+
result.push({ key: key.to_s, value: hash[key] })
|
69
|
+
end
|
70
|
+
result
|
71
|
+
end
|
72
|
+
|
73
|
+
##
|
74
|
+
# Convert options hash to array json output
|
75
|
+
# @param options [Hash<Hash>] options with hash representation
|
76
|
+
# @return [Hash<Array>] options with array representation
|
77
|
+
def options_to_json(options)
|
78
|
+
result = {}
|
79
|
+
options.each_key do |key|
|
80
|
+
result[key] = self.hash_to_json(options[key])
|
81
|
+
end
|
82
|
+
result
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|