egov_utils 0.3.1 → 0.3.2
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/assets/javascripts/egov_utils/eGovUtilities.coffee.erb +36 -3
- data/app/models/egov_utils/group.rb +9 -5
- data/app/schemas/egov_utils/user_schema.rb +1 -1
- data/app/views/egov_utils/addresses/_form.html.haml +3 -1
- data/app/views/egov_utils/people/_form.html.haml +1 -1
- data/lib/egov_utils/model_permissions.rb +45 -10
- data/lib/egov_utils/user_utils/application_controller_patch.rb +2 -2
- data/lib/egov_utils/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f91e4fd34931a6237076b8c8e859cb184c5d61f1ae1c2310800d795d03eee04a
|
4
|
+
data.tar.gz: da90da14b07d985a456c5742fc17ef50cafb40718ad91e6bc69b23bc55a65f26
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: defc11887b3528370c76e42de8a7c6b93cb48ca7067675f68378a9e8ee4ef0832d83328e606d925a70b222fa2b2e4801ad1e81757015b32082e8cfb40f6c1df2
|
7
|
+
data.tar.gz: 923f682a552728d002baef7a27101d976c209318fd920104994db7acc624ff4595d1666971af5dc3132d7d4f05cc57f2bfa2a3fa7ad01079b0d87c55132f5d89
|
@@ -1,4 +1,12 @@
|
|
1
1
|
|
2
|
+
window.set_disabled_observer = (element, trigger) ->
|
3
|
+
observer = new MutationObserver (mutations) ->
|
4
|
+
mutations.forEach (mutation)->
|
5
|
+
if mutation.attributeName == "disabled"
|
6
|
+
trigger();
|
7
|
+
observer.observe(element, {attributes: true})
|
8
|
+
observer
|
9
|
+
|
2
10
|
window.eGovUtilities =
|
3
11
|
setup: ()->
|
4
12
|
# select2 defaults
|
@@ -56,16 +64,20 @@ window.eGovUtilities =
|
|
56
64
|
|
57
65
|
initPeople: ($container)->
|
58
66
|
$container ||= $(document)
|
59
|
-
$('.person-form .person-type-toggle', $container)
|
67
|
+
$type_toggles = $('.person-form .person-type-toggle', $container)
|
68
|
+
$type_toggles.on('change', (evt)->
|
60
69
|
val = $(this).val();
|
61
70
|
$form = $(this).closest('.person-form');
|
62
71
|
$form.find('.natural_person').toggle( val == 'natural').find(':input').prop('disabled', val != 'natural');
|
63
72
|
$form.find('.legal_person').toggle( val == 'legal').find(':input').prop('disabled', val != 'legal');
|
64
|
-
)
|
73
|
+
)
|
74
|
+
$type_toggles.each (index)->
|
75
|
+
$el = $(this)
|
76
|
+
$el.change() if $el.is(':visible')
|
65
77
|
|
66
78
|
initSelect2: ($container)->
|
67
79
|
$container ||= $(document)
|
68
|
-
$('[data-provide="select2"]', $container).select2()
|
80
|
+
$('[data-provide="select2"]', $container).select2(width: null)
|
69
81
|
|
70
82
|
destroySelect2: ($container)->
|
71
83
|
$container ||= $(document)
|
@@ -85,6 +97,27 @@ window.eGovUtilities =
|
|
85
97
|
# )
|
86
98
|
$cpyBtn
|
87
99
|
|
100
|
+
toggleContainerForm: ($container, toggle_state) ->
|
101
|
+
$container.toggle(toggle_state)
|
102
|
+
$container.find(':input').prop('disabled', !toggle_state)
|
103
|
+
|
104
|
+
toggableForm: ($toggler, attr_names, get_state) ->
|
105
|
+
get_state ||= ($toggler)->
|
106
|
+
input_type = $toggler.attr('type')
|
107
|
+
state = !$toggler.prop('disabled')
|
108
|
+
if input_type == 'checkbox'
|
109
|
+
state = state && $toggler.is(':checked')
|
110
|
+
else
|
111
|
+
state = state && !$toggler.val() && $toggler.val() != ''
|
112
|
+
return state
|
113
|
+
|
114
|
+
$attributes = $toggler.closest('.'+attr_names).find('.'+attr_names+'-attributes')
|
115
|
+
|
116
|
+
eGovUtilities.toggleContainerForm($attributes, get_state($toggler))
|
117
|
+
$toggler.on 'change', (evt) ->
|
118
|
+
eGovUtilities.toggleContainerForm($attributes, get_state($toggler))
|
119
|
+
|
120
|
+
|
88
121
|
initModal: (modalId, options)->
|
89
122
|
options = options || {}
|
90
123
|
modalId = modalId || 'modal'
|
@@ -16,16 +16,20 @@ module EgovUtils
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def members
|
19
|
-
|
19
|
+
if ldap?
|
20
|
+
EgovUtils::User.where(login: ldap_members.collect{|m| m[:login] })
|
21
|
+
else
|
22
|
+
users
|
23
|
+
end
|
20
24
|
end
|
21
25
|
|
22
26
|
def ldap_members
|
23
|
-
|
24
|
-
|
27
|
+
if provider.present?
|
28
|
+
Rails.cache.fetch("#{cache_key}/ldap_members", expires_in: 2.hours) do
|
25
29
|
auth_source.group_members(ldap_uid)
|
26
|
-
else
|
27
|
-
[]
|
28
30
|
end
|
31
|
+
else
|
32
|
+
[]
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
@@ -7,7 +7,7 @@ module EgovUtils
|
|
7
7
|
|
8
8
|
def initialize_available_attributes
|
9
9
|
@available_attributes ||= []
|
10
|
-
@available_attributes << AzaharaSchema::DerivedAttribute.new(model, 'fullname', :concat, '
|
10
|
+
@available_attributes << AzaharaSchema::DerivedAttribute.new(model, 'fullname', :concat, 'lastname', 'firstname', schema: self)
|
11
11
|
super
|
12
12
|
@available_attributes << AllRoleNames.new(model, 'all_role_names', 'string')
|
13
13
|
end
|
@@ -41,7 +41,9 @@
|
|
41
41
|
}
|
42
42
|
})
|
43
43
|
window.setTimeout(function(){
|
44
|
-
$('.country-select', $fields)
|
44
|
+
var $country_select = $('.country-select', $fields);
|
45
|
+
if( $country_select.is(':visible') )
|
46
|
+
$country_select.change();
|
45
47
|
}, 1500);
|
46
48
|
|
47
49
|
$('.address-validator-btn', $fields).on('click', function(evt) {
|
@@ -5,7 +5,7 @@
|
|
5
5
|
= form.fields_for(:natural_person, person.natural_person || EgovUtils::NaturalPerson.new) do |fields|
|
6
6
|
.col-12.col-sm-6= fields.text_field(:firstname)
|
7
7
|
.col-12.col-sm-6= fields.text_field(:lastname)
|
8
|
-
.col-12.col-sm-6= fields.date_field(:birth_date,
|
8
|
+
.col-12.col-sm-6= fields.date_field(:birth_date, min: Date.new(1920, 1, 1), max: Date.today, data: {'date-view-mode' => 'decades', 'date-use-current' => false, 'date-view-date' => Date.new(1950, 1, 1).to_s })
|
9
9
|
.col-12.col-sm-6= fields.text_field(:birth_place)
|
10
10
|
.legal_person.row
|
11
11
|
= form.fields_for(:legal_person, person.legal_person || EgovUtils::LegalPerson.new) do |fields|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module EgovUtils
|
2
2
|
class ModelPermissions
|
3
3
|
|
4
|
-
def self.build(model,
|
4
|
+
def self.build(model, ability)
|
5
5
|
klass = model
|
6
6
|
klasses = [klass]
|
7
7
|
while klass != klass.base_class
|
@@ -10,15 +10,15 @@ module EgovUtils
|
|
10
10
|
end
|
11
11
|
klasses.each do |kls|
|
12
12
|
perm_class = "#{kls.name}Permissions".safe_constantize
|
13
|
-
return perm_class.new(
|
13
|
+
return perm_class.new(ability) if perm_class
|
14
14
|
end
|
15
|
-
EgovUtils::ModelPermissions.new(model,
|
15
|
+
EgovUtils::ModelPermissions.new(model, ability)
|
16
16
|
end
|
17
17
|
|
18
|
-
attr_reader :model, :
|
18
|
+
attr_reader :model, :ability
|
19
19
|
|
20
|
-
def initialize(model,
|
21
|
-
@model, @
|
20
|
+
def initialize(model, ability)
|
21
|
+
@model, @ability = model, ability
|
22
22
|
end
|
23
23
|
|
24
24
|
def readable_attributes(action=:show)
|
@@ -33,20 +33,55 @@ module EgovUtils
|
|
33
33
|
basic_editable_attributes(action)
|
34
34
|
end
|
35
35
|
|
36
|
+
def assignable_associations
|
37
|
+
model.reflect_on_all_associations.select{|assoc| model.method_defined?("#{assoc.name}_attributes=".to_sym) }
|
38
|
+
end
|
39
|
+
|
36
40
|
def editable_attributes(action=:update)
|
41
|
+
return [] unless ability.can?(action, model)
|
37
42
|
attributes = basic_editable_attributes(action)
|
38
|
-
|
39
|
-
attributes << assocs.each_with_object({}) {|assoc, obj| obj["#{assoc.name}_attributes"] = self.class.build(assoc.klass, user).editable_attributes(action) }
|
43
|
+
assignable_associations.each{|assoc| add_editable_association_attributes(attributes, assoc, action) }
|
40
44
|
attributes
|
41
45
|
end
|
42
46
|
|
43
47
|
#TODO nested attributes should take entity as well - what to do with has_many?
|
44
48
|
def editable_attributes_for(entity, action=:update)
|
49
|
+
return [] unless ability.can?(action, entity)
|
45
50
|
attributes = basic_editable_attributes(action)
|
46
|
-
|
47
|
-
attributes << assocs.each_with_object({}) {|assoc, obj| obj["#{assoc.name}_attributes"] = self.class.build(assoc.klass, user).editable_attributes_for(action) }
|
51
|
+
assignable_associations.each{|assoc| add_editable_association_attributes_for(attributes, assoc, entity, action) }
|
48
52
|
attributes
|
49
53
|
end
|
50
54
|
|
55
|
+
def add_editable_association_attributes(attributes, assoc, action)
|
56
|
+
assoc_permissions = self.class.build(assoc.klass, ability)
|
57
|
+
|
58
|
+
assoc_attributes = assoc_permissions.editable_attributes(action)
|
59
|
+
assoc_attributes.unshift('id') if ability.can?(:update, assoc.klass)
|
60
|
+
assoc_attributes_hash = { "#{assoc.name}_attributes" => assoc_attributes }
|
61
|
+
|
62
|
+
case assoc.macro
|
63
|
+
when :has_many
|
64
|
+
attributes << assoc_attributes_hash
|
65
|
+
when :has_one, :belongs_to
|
66
|
+
if ability.can?(:update, assoc.klass)
|
67
|
+
attributes << assoc.foreign_key if assoc.macro == :belongs_to
|
68
|
+
attributes << assoc_attributes_hash
|
69
|
+
else
|
70
|
+
attributes << assoc_attributes_hash
|
71
|
+
end
|
72
|
+
else
|
73
|
+
attributes << assoc_attributes_hash
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def add_editable_association_attributes_for(attributes, assoc, entity, action)
|
78
|
+
case assoc.macro
|
79
|
+
when :has_many
|
80
|
+
|
81
|
+
else
|
82
|
+
add_editable_association_attributes(attributes, assoc, action)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
51
86
|
end
|
52
87
|
end
|
@@ -60,11 +60,11 @@ module EgovUtils
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def editable_attributes(model, action=:update)
|
63
|
-
EgovUtils::ModelPermissions.build(model,
|
63
|
+
EgovUtils::ModelPermissions.build(model, current_ability).editable_attributes(action)
|
64
64
|
end
|
65
65
|
|
66
66
|
def editable_attributes_for(entity, action=:update)
|
67
|
-
EgovUtils::ModelPermissions.build(entity.type,
|
67
|
+
EgovUtils::ModelPermissions.build(entity.type, current_ability).editable_attributes_for(entity, action)
|
68
68
|
end
|
69
69
|
|
70
70
|
protected
|
data/lib/egov_utils/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: egov_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ondřej Ezr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|