marty 4.0.0.rc2 → 5.1.0
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 +5 -5
- data/.gitignore +7 -0
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +3 -16
- data/.ssh-docker/.keep +0 -0
- data/Dockerfile.dummy +3 -0
- data/Gemfile +19 -15
- data/app/components/marty/base_rule_view.rb +104 -10
- data/app/components/marty/base_rule_view/client/base_rule_view.js +24 -0
- data/app/components/marty/data_grid_user_view.rb +39 -0
- data/app/components/marty/data_grid_view.rb +68 -18
- data/app/components/marty/extras/layout.rb +1 -1
- data/app/components/marty/grid.rb +1 -1
- data/app/components/marty/grid/client/grid.js +29 -13
- data/app/components/marty/import_view.rb +3 -3
- data/app/components/marty/main_auth_app.rb +11 -1
- data/app/components/marty/report_form.rb +6 -6
- data/app/components/marty/script_form.rb +5 -5
- data/app/components/marty/script_tester.rb +2 -2
- data/app/components/marty/user_view.rb +3 -9
- data/app/models/marty/base_rule.rb +92 -32
- data/app/models/marty/data_grid.rb +92 -22
- data/app/models/marty/event.rb +2 -2
- data/app/models/marty/promise.rb +4 -4
- data/app/models/marty/role_type.rb +14 -1
- data/app/services/marty/data_grid_view/save_grid.rb +2 -2
- data/app/services/marty/promises/delorean/create.rb +2 -2
- data/app/services/marty/promises/ruby/create.rb +2 -2
- data/config/locales/en.yml +11 -2
- data/db/migrate/108_add_data_grid_perms.rb +16 -0
- data/db/migrate/508_add_not_to_data_grids_tables.rb +18 -0
- data/db/migrate/509_update_dg_plpgsql_v1_fns.rb +13 -0
- data/db/sql/query_grid_dir_v1.sql +16 -2
- data/docker-compose.dummy.yml +1 -0
- data/lib/marty/content_handler.rb +2 -2
- data/lib/marty/data_change.rb +1 -1
- data/lib/marty/data_conversion.rb +3 -4
- data/lib/marty/data_importer.rb +4 -4
- data/lib/marty/mcfly_model.rb +7 -10
- data/lib/marty/migrations.rb +1 -1
- data/lib/marty/monkey.rb +2 -2
- data/lib/marty/promise_job.rb +5 -5
- data/lib/marty/promise_proxy.rb +2 -2
- data/lib/marty/promise_ruby_job.rb +4 -4
- data/lib/marty/version.rb +1 -1
- data/make-app.mk +1 -1
- data/marty.gemspec +13 -18
- data/other/marty/diagnostic/aws/ec2_instance.rb +17 -2
- data/other/marty/diagnostic/aws/error.rb +8 -0
- data/other/marty/diagnostic/database.rb +2 -2
- data/other/marty/diagnostic/delayed_job_version.rb +0 -1
- data/spec/dummy/app/components/gemini/my_rule_view.rb +32 -6
- data/spec/dummy/app/models/gemini/fannie_bup.rb +13 -20
- data/spec/dummy/app/models/gemini/my_rule.rb +4 -0
- data/spec/dummy/app/models/gemini/xyz_rule.rb +3 -1
- data/spec/dummy/config/application.rb +1 -0
- data/spec/dummy/config/initializers/secret_token.rb +1 -1
- data/spec/dummy/db/migrate/20190702115241_add_simple_guards_options_to_rules.rb +37 -0
- data/spec/features/data_grid_spec.rb +109 -47
- data/spec/features/reporting_spec.rb +4 -4
- data/spec/features/rule_spec.rb +62 -31
- data/spec/features/scripting_spec.rb +3 -3
- data/spec/features/user_view_spec.rb +17 -8
- data/spec/fixtures/csv/rule/MyRule.csv +4 -1
- data/spec/lib/data_importer_spec.rb +8 -8
- data/spec/lib/mcfly_model_spec.rb +6 -6
- data/spec/models/data_grid_spec.rb +139 -7
- data/spec/models/rule_spec.rb +116 -9
- data/spec/spec_helper.rb +2 -2
- data/spec/support/netzke.rb +4 -3
- metadata +55 -54
- data/Gemfile.lock +0 -289
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c1dd27f462d7a2a7c78919c8388b35464b2a09db
|
4
|
+
data.tar.gz: a82eb24eb59673ae6a7c9f4c48a690b06dd7f984
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36f9986869878ae91ed80ebb0d4698609ed8cc19507103d4437c3469db2f3fa32aef09b21333ee62fe92cfa2e3eafa041088e2d248c75561d6f8d1aeea5c0493
|
7
|
+
data.tar.gz: a9d59ed17f912a53da36a6292c2c729ce6b4daad127e621170a845b2df93faaad4c509c0e0a4e1a587f6786446bde7356127b0f7fdf1130f7f3027f9836d1c38
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/.rubocop_todo.yml
CHANGED
@@ -48,7 +48,7 @@ Layout/ExtraSpacing:
|
|
48
48
|
# Cop supports --auto-correct.
|
49
49
|
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
50
50
|
# SupportedStyles: special_inside_parentheses, consistent, align_braces
|
51
|
-
Layout/
|
51
|
+
Layout/IndentFirstHashElement:
|
52
52
|
Exclude:
|
53
53
|
- 'app/components/marty/extras/layout.rb'
|
54
54
|
- 'lib/marty/data_change.rb'
|
@@ -316,7 +316,7 @@ Metrics/BlockLength:
|
|
316
316
|
# Offense count: 21
|
317
317
|
# Configuration parameters: CountComments.
|
318
318
|
Metrics/ClassLength:
|
319
|
-
Max:
|
319
|
+
Max: 600
|
320
320
|
|
321
321
|
# Offense count: 68
|
322
322
|
Metrics/CyclomaticComplexity:
|
@@ -508,7 +508,7 @@ Performance/TimesMap:
|
|
508
508
|
|
509
509
|
# Offense count: 1
|
510
510
|
# Cop supports --auto-correct.
|
511
|
-
|
511
|
+
Style/UnneededSort:
|
512
512
|
Exclude:
|
513
513
|
- 'app/models/marty/event.rb'
|
514
514
|
|
@@ -934,19 +934,6 @@ Style/Next:
|
|
934
934
|
Style/NumericLiterals:
|
935
935
|
MinDigits: 15
|
936
936
|
|
937
|
-
# Offense count: 10
|
938
|
-
# Cop supports --auto-correct.
|
939
|
-
# Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
|
940
|
-
# SupportedStyles: predicate, comparison
|
941
|
-
Style/NumericPredicate:
|
942
|
-
Exclude:
|
943
|
-
- 'spec/**/*'
|
944
|
-
- 'app/components/marty/main_auth_app.rb'
|
945
|
-
- 'lib/marty/content_handler.rb'
|
946
|
-
- 'lib/marty/data_change.rb'
|
947
|
-
- 'lib/marty/data_importer.rb'
|
948
|
-
- 'lib/marty/xl.rb'
|
949
|
-
|
950
937
|
# Offense count: 42
|
951
938
|
# Cop supports --auto-correct.
|
952
939
|
Style/ParallelAssignment:
|
data/.ssh-docker/.keep
ADDED
File without changes
|
data/Dockerfile.dummy
CHANGED
@@ -24,6 +24,9 @@ RUN curl -L -o google-chrome.deb https://dl.google.com/linux/direct/google-chrom
|
|
24
24
|
&& sed -i 's|HERE/chrome\"|HERE/chrome\" --disable-setuid-sandbox|g' /opt/google/chrome/google-chrome \
|
25
25
|
&& rm google-chrome.deb
|
26
26
|
|
27
|
+
# Install additional tools
|
28
|
+
RUN apt-get install -qq -y --no-install-recommends netcat-openbsd vim
|
29
|
+
|
27
30
|
RUN gem install bundler
|
28
31
|
|
29
32
|
ENV BUNDLE_PATH /bundle_box/bundle
|
data/Gemfile
CHANGED
@@ -5,33 +5,37 @@ source 'http://rubygems.org'
|
|
5
5
|
# development dependencies will be added by default to the :development group.
|
6
6
|
gemspec
|
7
7
|
|
8
|
-
|
9
|
-
gem '
|
10
|
-
gem '
|
11
|
-
gem '
|
12
|
-
gem '
|
8
|
+
group :default do
|
9
|
+
gem 'daemons'
|
10
|
+
gem 'delayed_job_active_record'
|
11
|
+
gem 'pg'
|
12
|
+
gem 'rails'
|
13
|
+
end
|
14
|
+
|
15
|
+
group :default, :cmit do
|
16
|
+
gem 'delorean_lang'
|
17
|
+
gem 'mcfly'
|
18
|
+
# gem 'delorean_lang', path: File.expand_path('../../delorean', __FILE__)
|
19
|
+
# gem 'mcfly', path: File.expand_path('../../mcfly', __FILE__)
|
20
|
+
end
|
13
21
|
|
14
22
|
group :development, :test do
|
15
|
-
gem 'capybara'
|
23
|
+
gem 'capybara'
|
16
24
|
gem 'connection_pool'
|
17
25
|
gem 'database_cleaner'
|
26
|
+
gem 'fuubar', require: false
|
27
|
+
gem 'netzke', '6.5.0.0'
|
18
28
|
gem 'pry-byebug'
|
19
29
|
gem 'pry-rails'
|
30
|
+
gem 'puma'
|
20
31
|
gem 'rails-controller-testing'
|
21
32
|
gem 'rspec-instafail', require: false
|
22
33
|
gem 'rspec-rails'
|
23
34
|
gem 'rspec-retry'
|
24
35
|
gem 'rubocop', require: false
|
36
|
+
gem 'rubocop-performance', require: false
|
37
|
+
gem 'rubocop-rails', require: false
|
25
38
|
gem 'selenium-webdriver'
|
26
39
|
gem 'timecop'
|
27
40
|
gem 'webdrivers'
|
28
|
-
|
29
|
-
# gem 'mcfly', path: File.expand_path('../../mcfly', __FILE__)
|
30
|
-
gem 'mcfly'
|
31
|
-
gem 'netzke', '6.5.0.0'
|
32
|
-
|
33
|
-
# gem 'delorean_lang', path: File.expand_path('../../delorean', __FILE__)
|
34
|
-
|
35
|
-
# gem 'marty_rspec', path: File.expand_path('../../marty_rspec', __FILE__)
|
36
|
-
gem 'marty_rspec'
|
37
41
|
end
|
@@ -22,16 +22,25 @@ class Marty::BaseRuleView < Marty::McflyGridPanel
|
|
22
22
|
c.model = self.class.klass
|
23
23
|
c.title = I18n.t('rule')
|
24
24
|
c.attributes = self.class.base_fields +
|
25
|
-
|
26
|
-
sort_by { |_, h| h[:order] || 0 }.
|
27
|
-
reject { |_, h| h[:hidden] }.
|
28
|
-
map { |name, _| name.to_sym } + self.class.computed_fields
|
25
|
+
guard_info_attributes + self.class.computed_fields
|
29
26
|
c.store_config.merge!(sorters: [{ property: :name, direction: 'ASC' }])
|
30
27
|
c.editing = :in_form
|
31
28
|
c.paging = :pagination
|
32
29
|
c.multi_select = false
|
33
30
|
end
|
34
31
|
|
32
|
+
def guard_info_attributes
|
33
|
+
res = klass.guard_info.
|
34
|
+
sort_by { |_, h| h[:order] || 0 }.
|
35
|
+
reject { |_, h| h[:hidden] }.
|
36
|
+
map do |name, opts|
|
37
|
+
next name.to_sym unless opts.fetch(:allow_not, true)
|
38
|
+
|
39
|
+
[name.to_sym, "#{name}_not".to_sym]
|
40
|
+
end
|
41
|
+
res.flatten
|
42
|
+
end
|
43
|
+
|
35
44
|
def default_bbar
|
36
45
|
super + [:dup_in_form]
|
37
46
|
end
|
@@ -222,7 +231,11 @@ class Marty::BaseRuleView < Marty::McflyGridPanel
|
|
222
231
|
end
|
223
232
|
|
224
233
|
def form_items_guards
|
225
|
-
klass.guard_info.reject { |_, h| h[:hidden] }.
|
234
|
+
klass.guard_info.reject { |_, h| h[:hidden] }.map do |field, opts|
|
235
|
+
next { field: field.to_sym } unless opts.fetch(:allow_not, true)
|
236
|
+
|
237
|
+
{ field: field.to_sym, not_field: "#{field.to_sym}_not".to_sym }
|
238
|
+
end
|
226
239
|
end
|
227
240
|
|
228
241
|
def form_items_grids
|
@@ -246,17 +259,56 @@ class Marty::BaseRuleView < Marty::McflyGridPanel
|
|
246
259
|
height: 225)]
|
247
260
|
end
|
248
261
|
|
262
|
+
def default_form_items_guards
|
263
|
+
with_not_fields = form_items_guards.any? { |h| h.key?(:not_field) }
|
264
|
+
|
265
|
+
guards = form_items_guards.map do |h|
|
266
|
+
if with_not_fields
|
267
|
+
hbox(
|
268
|
+
vbox(h.fetch(:field), width: '78%', border: false),
|
269
|
+
vbox(width: '2%', border: false),
|
270
|
+
vbox(h.fetch(:not_field, nil), width: '20%', border: false),
|
271
|
+
width: '100%',
|
272
|
+
border: false
|
273
|
+
)
|
274
|
+
else
|
275
|
+
hbox(
|
276
|
+
vbox(h.fetch(:field), width: '100%', border: false),
|
277
|
+
width: '100%',
|
278
|
+
border: false
|
279
|
+
)
|
280
|
+
end
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
249
284
|
def default_form_items
|
250
285
|
[
|
251
286
|
hbox(
|
252
|
-
vbox(
|
253
|
-
|
254
|
-
|
255
|
-
|
287
|
+
vbox(
|
288
|
+
hbox(
|
289
|
+
vbox(
|
290
|
+
*form_items_attrs,
|
291
|
+
width: '100%',
|
292
|
+
border: false
|
293
|
+
),
|
294
|
+
width: '100%',
|
295
|
+
border: false
|
296
|
+
),
|
297
|
+
hbox(
|
298
|
+
vbox(
|
299
|
+
*default_form_items_guards,
|
300
|
+
width: '100%',
|
301
|
+
border: false
|
256
302
|
),
|
303
|
+
width: '100%',
|
304
|
+
border: false
|
305
|
+
),
|
306
|
+
width: '40%',
|
307
|
+
border: false
|
308
|
+
),
|
257
309
|
vbox(width: '2%', border: false),
|
258
310
|
vbox(
|
259
|
-
width: '
|
311
|
+
width: '5%', border: false),
|
260
312
|
height: '40%',
|
261
313
|
border: false,
|
262
314
|
),
|
@@ -310,10 +362,42 @@ class Marty::BaseRuleView < Marty::McflyGridPanel
|
|
310
362
|
else
|
311
363
|
c.getter = range_getter(namestr, meth)
|
312
364
|
c.setter = range_setter(namestr, meth)
|
365
|
+
|
313
366
|
c.filterable = false
|
314
367
|
end
|
368
|
+
|
369
|
+
c.column_config = {
|
370
|
+
renderer: 'simpleGuardColumnRenderer'
|
371
|
+
}
|
315
372
|
c.sorting_scope = get_json_sorter(meth, namestr)
|
316
373
|
end
|
374
|
+
|
375
|
+
# Checkbox and hidden column for "NOT" option for simpleguards
|
376
|
+
attribute "#{name}_not" do |c|
|
377
|
+
c.width = 30
|
378
|
+
c.label = 'Not'
|
379
|
+
c.type = :boolean
|
380
|
+
c.filterable = false
|
381
|
+
c.column_config = { hidden: true }
|
382
|
+
|
383
|
+
c.field_config = {
|
384
|
+
label_align: 'right',
|
385
|
+
max_width: 100,
|
386
|
+
label_pad: 2,
|
387
|
+
label_width: 30
|
388
|
+
}
|
389
|
+
c.getter = lambda do |record|
|
390
|
+
record.simple_guards_options.dig(name.to_s, 'not')
|
391
|
+
end
|
392
|
+
|
393
|
+
c.setter = lambda do |record, value|
|
394
|
+
options = record.simple_guards_options.fetch(name.to_s, {})
|
395
|
+
new_options = options.merge('not' => value)
|
396
|
+
record.simple_guards_options = record.simple_guards_options.merge(
|
397
|
+
name.to_s => new_options
|
398
|
+
)
|
399
|
+
end
|
400
|
+
end
|
317
401
|
end
|
318
402
|
|
319
403
|
attribute :start_dt do |c|
|
@@ -347,4 +431,14 @@ class Marty::BaseRuleView < Marty::McflyGridPanel
|
|
347
431
|
end
|
348
432
|
end
|
349
433
|
end
|
434
|
+
|
435
|
+
client_class do |c|
|
436
|
+
c.myy_renderer = l(<<-JS)
|
437
|
+
function(value){
|
438
|
+
console.log(arguments)
|
439
|
+
|
440
|
+
return value ? "*" + value + "*" : "";
|
441
|
+
}
|
442
|
+
JS
|
443
|
+
end
|
350
444
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
{
|
2
|
+
simpleGuardColumnRenderer: function(value, cell, obj) {
|
3
|
+
if (value === undefined || value === null) {
|
4
|
+
return value
|
5
|
+
}
|
6
|
+
|
7
|
+
if (!(cell && cell.column && cell.column.config && cell.column.config.name)) {
|
8
|
+
return value;
|
9
|
+
}
|
10
|
+
|
11
|
+
if (!(obj && obj.data)) {
|
12
|
+
return value;
|
13
|
+
}
|
14
|
+
|
15
|
+
column_name = cell.column.config.name;
|
16
|
+
with_not = obj.data[`${column_name}_not`];
|
17
|
+
|
18
|
+
if (with_not) {
|
19
|
+
return `NOT (${value})`
|
20
|
+
}
|
21
|
+
|
22
|
+
return value;
|
23
|
+
}
|
24
|
+
}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Marty
|
2
|
+
class DataGridUserView < DataGridView
|
3
|
+
has_marty_permissions read: [:data_grid_editor, :admin, :dev]
|
4
|
+
|
5
|
+
def configure(c)
|
6
|
+
super
|
7
|
+
|
8
|
+
c.attributes =
|
9
|
+
[
|
10
|
+
:name,
|
11
|
+
:created_dt,
|
12
|
+
]
|
13
|
+
c.editing = :inline
|
14
|
+
end
|
15
|
+
|
16
|
+
def default_bbar
|
17
|
+
[:edit_grid]
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_records(params)
|
21
|
+
cur_perms = Mcfly.whodunnit.roles.map(&:to_sym)
|
22
|
+
model.where("permissions->'view' ?| ARRAY[:roles] OR "\
|
23
|
+
"permissions->'edit_data' ?| ARRAY[:roles] OR "\
|
24
|
+
"permissions->'edit_all' ?| ARRAY[:roles]",
|
25
|
+
roles: cur_perms).scoping do
|
26
|
+
super
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.get_edit_permission(permissions)
|
31
|
+
cur_perms = current_user_roles.map(&:to_s)
|
32
|
+
['edit_all', 'edit_data', 'view'].detect do |p|
|
33
|
+
permissions[p] - cur_perms != permissions[p]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
DataGridUserView = Marty::DataGridUserView
|
@@ -98,6 +98,9 @@ module Marty; class DataGridView < McflyGridPanel
|
|
98
98
|
:lenient,
|
99
99
|
:data_type,
|
100
100
|
:constraint,
|
101
|
+
:perm_view,
|
102
|
+
:perm_edit_data,
|
103
|
+
:perm_edit_all,
|
101
104
|
:created_dt,
|
102
105
|
]
|
103
106
|
|
@@ -107,6 +110,19 @@ module Marty; class DataGridView < McflyGridPanel
|
|
107
110
|
c.multi_select = false
|
108
111
|
end
|
109
112
|
|
113
|
+
def set_perms(dg, data)
|
114
|
+
permstrs = %w[perm_view perm_edit_data perm_edit_all]
|
115
|
+
view, edit_data, edit_all = data.values_at(*permstrs).map do |plist|
|
116
|
+
Marty::RoleType.from_nice_names(plist)
|
117
|
+
end
|
118
|
+
dg.permissions = {
|
119
|
+
view: view.present? ? view : [],
|
120
|
+
edit_data: edit_data.present? ? edit_data : [],
|
121
|
+
edit_all: edit_all.present? ? edit_all : [],
|
122
|
+
}
|
123
|
+
dg.save!
|
124
|
+
end
|
125
|
+
|
110
126
|
endpoint :add_window__add_form__submit do |params|
|
111
127
|
data = ActiveSupport::JSON.decode(params[:data])
|
112
128
|
|
@@ -114,11 +130,12 @@ module Marty; class DataGridView < McflyGridPanel
|
|
114
130
|
!config[:permissions][:create]
|
115
131
|
|
116
132
|
begin
|
117
|
-
DataGrid.create_from_import(data['name'], data['export'])
|
133
|
+
dg = DataGrid.create_from_import(data['name'], data['export'])
|
134
|
+
set_perms(dg, data)
|
118
135
|
client.success = true
|
119
136
|
client.netzke_on_submit_success
|
120
|
-
rescue StandardError =>
|
121
|
-
client.netzke_notify(
|
137
|
+
rescue StandardError => e
|
138
|
+
client.netzke_notify(e.to_s)
|
122
139
|
end
|
123
140
|
end
|
124
141
|
|
@@ -129,10 +146,11 @@ module Marty; class DataGridView < McflyGridPanel
|
|
129
146
|
|
130
147
|
begin
|
131
148
|
dg.update_from_import(data['name'], data['export'])
|
149
|
+
set_perms(dg, data)
|
132
150
|
client.success = true
|
133
151
|
client.netzke_on_submit_success
|
134
|
-
rescue StandardError =>
|
135
|
-
client.netzke_notify(
|
152
|
+
rescue StandardError => e
|
153
|
+
client.netzke_notify(e.to_s)
|
136
154
|
end
|
137
155
|
end
|
138
156
|
|
@@ -168,14 +186,8 @@ module Marty; class DataGridView < McflyGridPanel
|
|
168
186
|
client.netzke_client_show_grid maxcount, res, 'Data Grid'
|
169
187
|
end
|
170
188
|
|
171
|
-
|
172
|
-
|
173
|
-
def self.get_edit_edit_permission
|
174
|
-
Marty::Config['grid_edit_edit_perm'] || 'edit_all'
|
175
|
-
end
|
176
|
-
|
177
|
-
def self.get_edit_save_permission
|
178
|
-
Marty::Config['grid_edit_save_perm'] || 'edit_all'
|
189
|
+
def self.get_edit_permission(_permissions)
|
190
|
+
'edit_all'
|
179
191
|
end
|
180
192
|
|
181
193
|
endpoint :edit_grid do |params|
|
@@ -193,9 +205,21 @@ module Marty; class DataGridView < McflyGridPanel
|
|
193
205
|
vdim = md.map { |m| m['dir'] == 'v' && m['attr'] }.select { |v| v }
|
194
206
|
hdim_en = hdim.map { |d| I18n.t('attributes.' + d, default: d) }
|
195
207
|
vdim_en = vdim.map { |d| I18n.t('attributes.' + d, default: d) }
|
196
|
-
|
197
|
-
|
198
|
-
client.
|
208
|
+
perm = self.class.get_edit_permission(dg.permissions)
|
209
|
+
# should never happen
|
210
|
+
return client.netzke_notify('No permission to edit/view grid.') unless perm
|
211
|
+
|
212
|
+
doing = case perm
|
213
|
+
when 'view'
|
214
|
+
'Viewing'
|
215
|
+
when 'edit_all'
|
216
|
+
'Editing (all)'
|
217
|
+
when 'edit_data'
|
218
|
+
'Editing (data only)'
|
219
|
+
end
|
220
|
+
name = "#{doing} Data Grid '#{dg.name}'"
|
221
|
+
|
222
|
+
client.edit_grid(record_id, hdim_en, vdim_en, res, name, perm)
|
199
223
|
end
|
200
224
|
|
201
225
|
endpoint :save_grid do |params|
|
@@ -213,10 +237,36 @@ module Marty; class DataGridView < McflyGridPanel
|
|
213
237
|
def default_form_items
|
214
238
|
[
|
215
239
|
:name,
|
240
|
+
:perm_view, :perm_edit_data, :perm_edit_all,
|
216
241
|
textarea_field(:export, height: 300, hide_label: true),
|
217
242
|
]
|
218
243
|
end
|
219
244
|
|
245
|
+
['view', 'edit_data', 'edit_all'].each do |p|
|
246
|
+
s = ('perm_' + p).to_s
|
247
|
+
attribute s do |c|
|
248
|
+
c.width = 100
|
249
|
+
c.flex = 1
|
250
|
+
c.label = I18n.t("data_grid_view_perms.#{s}")
|
251
|
+
c.type = :string
|
252
|
+
c.getter = lambda do |r|
|
253
|
+
Marty::RoleType.to_nice_names(r.permissions[p].sort)
|
254
|
+
end
|
255
|
+
store = Marty::RoleType.to_nice_names(::Marty::RoleType.get_all.sort.map)
|
256
|
+
|
257
|
+
# edit does not work without this dummy setter
|
258
|
+
c.setter = ->(r, v) {}
|
259
|
+
|
260
|
+
c.editor_config = {
|
261
|
+
multi_select: true,
|
262
|
+
empty_text: I18n.t('user_grid.select_roles'),
|
263
|
+
store: store,
|
264
|
+
type: :string,
|
265
|
+
xtype: :combo,
|
266
|
+
}
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
220
270
|
component :edit_window do |c|
|
221
271
|
super(c)
|
222
272
|
c.width = 700
|
@@ -228,11 +278,11 @@ module Marty; class DataGridView < McflyGridPanel
|
|
228
278
|
end
|
229
279
|
|
230
280
|
attribute :name do |c|
|
231
|
-
c.width =
|
281
|
+
c.width = 400
|
232
282
|
end
|
233
283
|
|
234
284
|
attribute :constraint do |c|
|
235
|
-
c.width =
|
285
|
+
c.width = 150
|
236
286
|
end
|
237
287
|
|
238
288
|
attribute :hcols do |c|
|