egov_utils 0.1.12 → 0.1.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/app/assets/javascripts/egov_utils/application.js +1 -0
- data/app/assets/javascripts/egov_utils/file_uid.coffee +65 -0
- data/app/models/egov_utils/person.rb +1 -1
- data/app/validators/birthday_validator.rb +7 -0
- data/app/validators/fileuid_validator.rb +8 -0
- data/app/views/common/_grid.html.coffee +4 -2
- data/app/views/egov_utils/people/_form.html.haml +1 -1
- data/app/views/layouts/egov_utils/_messages.html.haml +1 -1
- data/config/locales/cs.yml +4 -0
- data/lib/bootstrap_form/fileuid.rb +15 -0
- data/lib/egov_utils/engine.rb +15 -1
- data/lib/egov_utils/helpers/form_helper.rb +14 -0
- data/lib/egov_utils/helpers/tags/fileuid_field.rb +38 -0
- data/lib/egov_utils/test_utils/controller_helpers.rb +29 -0
- data/lib/egov_utils/version.rb +1 -1
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3bee9e427897dfb93fc4f42d0b146def3c4cdd0c
|
4
|
+
data.tar.gz: 625f0ca14a939d628e64b2cff3ba81d3fdadc74d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9a9f694b7d5e2ee741ae28fb7459fe0242921b76a53e0a113d629e8dba33510faee48f826c08577a9c06009106ddcedf0d48e78b24af168b91b11c7cab3e390
|
7
|
+
data.tar.gz: e352cfd5672c519d8363b5c69a576e2f6b9e7ccacb6a341b3f9236c0d9ea1620fd84c5278024879c44d2db6c42017041510368796981512b58cac7bacf9b1f46
|
data/README.md
CHANGED
@@ -14,6 +14,9 @@ To be done:
|
|
14
14
|
* ISDS SSO integration
|
15
15
|
|
16
16
|
## Usage
|
17
|
+
|
18
|
+
Detailed developers documentation can be found at [Documentation](https://git.servis.justice.cz/libraries/egov_utils-rails/wikis/Documentation).
|
19
|
+
|
17
20
|
Framework uses configuration in file config/config.yml
|
18
21
|
|
19
22
|
### LDAP
|
@@ -0,0 +1,65 @@
|
|
1
|
+
$ = jQuery
|
2
|
+
|
3
|
+
$.widget 'egov_utils.fileUid',
|
4
|
+
options:
|
5
|
+
available_agendas: ['T', 'TN']
|
6
|
+
|
7
|
+
_create: ()->
|
8
|
+
that = this
|
9
|
+
|
10
|
+
@container = $('<span></span>', class: 'egov-file-uid', style: 'position: relative; display: block;')
|
11
|
+
@file_uid_gui = @_create_file_uid_gui()
|
12
|
+
|
13
|
+
@container.insertAfter(@element)
|
14
|
+
@container.append(@element).append(@file_uid_gui)
|
15
|
+
|
16
|
+
@element.css(position: 'absolute', top: 0, left: 0, 'background-color': 'transparent')
|
17
|
+
|
18
|
+
@form = @element.closest('form')
|
19
|
+
@form.on 'submit', (evt)->
|
20
|
+
that.element.val(that.getValue())
|
21
|
+
|
22
|
+
if @element.val() != ''
|
23
|
+
this.setValue( @element.val() )
|
24
|
+
|
25
|
+
_destroy: ()->
|
26
|
+
@element.attr('style', '')
|
27
|
+
@element.insertAfter(@container)
|
28
|
+
@container.remove()
|
29
|
+
|
30
|
+
|
31
|
+
_create_file_uid_gui: (default_value)->
|
32
|
+
container = $('<div></div>', class: 'court_file_uid input-group')
|
33
|
+
@parts = [
|
34
|
+
$('<input type="text" name="senat" class="form-control senat"><input type="hidden" value="-">'),
|
35
|
+
$('<select type="text" name="agenda" class="form-control agenda"></select>'),
|
36
|
+
$('<input type="hidden" value="-"><input type="text" name="cislo_pripadu" class="form-control cislo_pripadu"><div class="input-group-addon">/</div><input type="hidden" value="/">'),
|
37
|
+
$('<input type="text" class="form-control">')
|
38
|
+
]
|
39
|
+
for agenda in @options.available_agendas
|
40
|
+
@parts[1].append('<option value="'+agenda+'">'+agenda+'</option>')
|
41
|
+
|
42
|
+
for part in @parts
|
43
|
+
container.append(part)
|
44
|
+
container
|
45
|
+
|
46
|
+
setValue: (value)->
|
47
|
+
if value.indexOf('/') < 0
|
48
|
+
console.warn('Value for file uid has to have a "/" in it')
|
49
|
+
return false
|
50
|
+
flvl_ary = value.split('/')
|
51
|
+
@parts[@parts.length - 1].val(flvl_ary[1])
|
52
|
+
slvl_ary = flvl_ary[0].split('-')
|
53
|
+
if slvl_ary.length != 3
|
54
|
+
console.warn('Value for file uid has to have 2times "-" in it')
|
55
|
+
return false
|
56
|
+
|
57
|
+
@file_uid_gui.find('.senat').val(slvl_ary[0])
|
58
|
+
@file_uid_gui.find('.agenda').val(slvl_ary[1])
|
59
|
+
@file_uid_gui.find('.cislo_pripadu').val(slvl_ary[2])
|
60
|
+
|
61
|
+
getValue: ()->
|
62
|
+
value = ''
|
63
|
+
@file_uid_gui.find(':input').each (i, part)->
|
64
|
+
value += $(part).val()
|
65
|
+
value
|
@@ -2,7 +2,7 @@ module EgovUtils
|
|
2
2
|
class Person < ApplicationRecord
|
3
3
|
|
4
4
|
validates :firstname, :lastname, :birth_date, presence: true
|
5
|
-
validates :birth_date, uniqueness: { scope: [:firstname, :lastname] }
|
5
|
+
validates :birth_date, uniqueness: { scope: [:firstname, :lastname] }, birthday: true
|
6
6
|
|
7
7
|
def fullname
|
8
8
|
firstname.to_s + ' ' + lastname.to_s
|
@@ -0,0 +1,7 @@
|
|
1
|
+
class BirthdayValidator < ActiveModel::EachValidator
|
2
|
+
def validate_each(record, attribute, value)
|
3
|
+
return if options[:allow_nil] && value.presence.nil?
|
4
|
+
record.errors.add(attribute, :in_past) if !value || value >= Time.now.to_date
|
5
|
+
record.errors.add(attribute, :after_1920) if !value || value <= Date.new(1930, 1, 1)
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
class FileuidValidator < ActiveModel::EachValidator
|
2
|
+
def validate_each(record, attribute, value)
|
3
|
+
return if options[:allow_nil] && value.presence.nil?
|
4
|
+
unless value =~ /\A\d+-\w{1,4}-\d+\/\d{4}\z/i
|
5
|
+
record.errors.add(attribute, (options[:message] || :fileuid_format))
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
@@ -5,11 +5,13 @@ $ ->
|
|
5
5
|
create_attributes ||= {}
|
6
6
|
%>
|
7
7
|
|
8
|
-
|
9
|
-
$('body').on 'egov:submitted', '#modal', (evt, data)->
|
8
|
+
after_modal_submit = (evt, data)->
|
10
9
|
grid = $("#<%= grid_id %>").swidget()
|
11
10
|
grid.dataSource.read()
|
12
11
|
|
12
|
+
$('body').off 'egov:submitted', after_modal_submit
|
13
|
+
$('body').on 'egov:submitted', '#modal', after_modal_submit
|
14
|
+
|
13
15
|
<%# would be a bit cleaner to give the filled form to the shield grid create method, then send the form by ajax %>
|
14
16
|
createRecord = (evt)->
|
15
17
|
$.ajax('<%= new_polymorphic_path(schema.model, create_attributes.merge(format: :js)) %>')
|
@@ -1,3 +1,3 @@
|
|
1
1
|
= form.text_field(:firstname)
|
2
2
|
= form.text_field(:lastname)
|
3
|
-
= form.date_field(:birth_date, data: {'date-view-mode' => 'decades'})
|
3
|
+
= form.date_field(:birth_date, data: {'date-view-mode' => 'decades', 'date-min-date' => Date.new(1920, 1, 1).to_s, 'date-max-date' => Date.today.to_s, 'date-use-current' => false, 'date-view-date' => Date.new(1950, 1, 1).to_s })
|
@@ -2,6 +2,6 @@
|
|
2
2
|
- flash.each do |name, msg|
|
3
3
|
- if msg.is_a?(String)
|
4
4
|
%div{:class => "alert alert-#{name.to_s == 'notice' ? "info" : "alert"} alert-dismissible fade show", "role" => "alert"}
|
5
|
-
%button.close{'type' => 'button', 'data-
|
5
|
+
%button.close{'type' => 'button', 'data-dismiss' => 'alert'}
|
6
6
|
%span{'aria-hidden' => 'true'}= raw '×'
|
7
7
|
= msg
|
data/config/locales/cs.yml
CHANGED
@@ -55,6 +55,7 @@ cs:
|
|
55
55
|
profile:
|
56
56
|
too_many_authors: Příliš mnoho autorů
|
57
57
|
|
58
|
+
|
58
59
|
labels: &my_labels
|
59
60
|
user:
|
60
61
|
password: Heslo
|
@@ -89,3 +90,6 @@ cs:
|
|
89
90
|
messages:
|
90
91
|
ico_format: Není správný formát IČO
|
91
92
|
email_format: není e-mail
|
93
|
+
in_past: Musí být v minulosti
|
94
|
+
after_1920: Musí být po roce 1920
|
95
|
+
fileuid_format: Nesprávný tvar spisové značky
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'egov_utils/helpers/tags/fileuid_field'
|
2
|
+
|
3
|
+
module BootstrapForm
|
4
|
+
module Fileuid
|
5
|
+
|
6
|
+
def fileuid_field(method, options={})
|
7
|
+
form_group_builder(method, options) do
|
8
|
+
prepend_and_append_input(options) do
|
9
|
+
@template.fileuid_field(@object_name, method, objectify_options(options))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
data/lib/egov_utils/engine.rb
CHANGED
@@ -55,18 +55,26 @@ module EgovUtils
|
|
55
55
|
# end
|
56
56
|
end
|
57
57
|
|
58
|
+
initializer 'egov_utils.view_helpers' do
|
59
|
+
ActiveSupport.on_load(:action_view) do
|
60
|
+
require 'egov_utils/helpers/form_helper'
|
61
|
+
include ::EgovUtils::Helpers::FormHelper
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
58
65
|
initializer 'egov_utils.bootstrap_form' do
|
59
66
|
require 'bootstrap_form'
|
60
67
|
|
61
68
|
require 'bootstrap_form/helpers/bootstrap4'
|
62
69
|
require 'bootstrap_form/datetimepicker'
|
70
|
+
require 'bootstrap_form/fileuid'
|
63
71
|
BootstrapForm::Helpers::Bootstrap.__send__(:prepend, BootstrapForm::Helpers::Bootstrap4)
|
64
72
|
|
65
73
|
BootstrapForm::DATE_FORMAT = 'DD/MM/YYYY'
|
66
74
|
ruby_format_string = BootstrapForm::DATE_FORMAT.gsub('YYYY', "%Y").gsub('MM', "%m").gsub('DD', "%d")
|
67
75
|
|
68
76
|
BootstrapForm::FormBuilder.__send__(:prepend, BootstrapForm::Datetimepicker)
|
69
|
-
|
77
|
+
BootstrapForm::FormBuilder.__send__(:prepend, BootstrapForm::Fileuid)
|
70
78
|
|
71
79
|
ActionView::Helpers::Tags::DateField.redefine_method(:format_date) do |value|
|
72
80
|
value.try(:strftime, ruby_format_string)
|
@@ -81,5 +89,11 @@ module EgovUtils
|
|
81
89
|
# Rails.application.reload_routes!
|
82
90
|
# OmniAuth.config.path_prefix = "#{Rails.application.routes.named_routes[:egov_utils].path.spec.to_s}/auth"
|
83
91
|
# end
|
92
|
+
|
93
|
+
initializer 'egov_utils.initialize_factory_paths', after: 'factory_bot.set_factory_paths' do
|
94
|
+
if bot_module = 'FactoryBot'.safe_constantize
|
95
|
+
FactoryBot.definition_file_paths << EgovUtils::Engine.root.join('spec', 'factories')
|
96
|
+
end
|
97
|
+
end
|
84
98
|
end
|
85
99
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module EgovUtils
|
2
|
+
module Helpers
|
3
|
+
module FormHelper
|
4
|
+
|
5
|
+
# Returns an input tag of the "fileuid" type tailored for accessing a specified attribute (identified by +method+) on an object
|
6
|
+
# assigned to the template (identified by +object+). Additional options on the input tag can be passed as a
|
7
|
+
# hash with +options+.
|
8
|
+
def fileuid_field(object_name, method, options = {})
|
9
|
+
Tags::FileuidField.new(object_name, method, self, options).render
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module EgovUtils
|
2
|
+
module Helpers
|
3
|
+
module Tags
|
4
|
+
class FileuidField < ActionView::Helpers::Tags::TextField
|
5
|
+
|
6
|
+
def render
|
7
|
+
res = super
|
8
|
+
res << @template_object.javascript_tag(javascript_str(@options))
|
9
|
+
res
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def all_agendas
|
14
|
+
['T', 'Tm', 'INS', 'E'] # a dalsi
|
15
|
+
end
|
16
|
+
|
17
|
+
def javascript_str(options)
|
18
|
+
agendas = all_agendas
|
19
|
+
agendas &= @options.delete('agendas') if @options['agendas']
|
20
|
+
index = name_and_id_index(options)
|
21
|
+
tag_id = @options.fetch("id") { tag_id(index) }
|
22
|
+
|
23
|
+
str = "$(function(){"
|
24
|
+
str << " $('##{tag_id}').fileUid({ available_agendas: #{ agendas.to_json } });"
|
25
|
+
str << " var destroy_evt_method = function(evt){"
|
26
|
+
str << " $('##{tag_id}').fileUid('destroy');"
|
27
|
+
str << " $(document).off('turbolinks:before-cache', destroy_evt_method);"
|
28
|
+
str << " };"
|
29
|
+
str << " $(document).on('turbolinks:before-cache', destroy_evt_method);"
|
30
|
+
str << "});"
|
31
|
+
pp str
|
32
|
+
str
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module EgovUtils
|
2
|
+
module TestUtils
|
3
|
+
module ControllerHelpers
|
4
|
+
|
5
|
+
def default_user(params={})
|
6
|
+
user = FactoryBot.create(:egov_utils_user, params)
|
7
|
+
user
|
8
|
+
end
|
9
|
+
|
10
|
+
def admin_user
|
11
|
+
default_user(roles: ['admin'])
|
12
|
+
end
|
13
|
+
|
14
|
+
def basic_user
|
15
|
+
default_user(roles: ['user'])
|
16
|
+
end
|
17
|
+
|
18
|
+
def anonymous_user
|
19
|
+
u = default_user
|
20
|
+
allow(user).to receive(:persisted?).and_return(false)
|
21
|
+
u
|
22
|
+
end
|
23
|
+
|
24
|
+
def sign_in(user = basic_user)
|
25
|
+
allow(controller).to receive(:find_current_user).and_return(user)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
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.1.
|
4
|
+
version: 0.1.13
|
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: 2017-10-
|
11
|
+
date: 2017-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -276,6 +276,7 @@ files:
|
|
276
276
|
- app/assets/config/egov_utils_manifest.js
|
277
277
|
- app/assets/javascripts/egov_utils/application.js
|
278
278
|
- app/assets/javascripts/egov_utils/eGovUtilities.coffee.erb
|
279
|
+
- app/assets/javascripts/egov_utils/file_uid.coffee
|
279
280
|
- app/assets/javascripts/egov_utils/groups.js
|
280
281
|
- app/assets/javascripts/egov_utils/roles.coffee.erb
|
281
282
|
- app/assets/javascripts/egov_utils/setup_locale.coffee.erb
|
@@ -314,7 +315,9 @@ files:
|
|
314
315
|
- app/schemas/egov_utils/address_schema.rb
|
315
316
|
- app/schemas/egov_utils/person_schema.rb
|
316
317
|
- app/schemas/egov_utils/user_schema.rb
|
318
|
+
- app/validators/birthday_validator.rb
|
317
319
|
- app/validators/email_validator.rb
|
320
|
+
- app/validators/fileuid_validator.rb
|
318
321
|
- app/validators/ico_validator.rb
|
319
322
|
- app/views/common/_grid.html.coffee
|
320
323
|
- app/views/common/_modal.html.haml
|
@@ -342,11 +345,15 @@ files:
|
|
342
345
|
- db/migrate/20170809150646_create_egov_utils_people.rb
|
343
346
|
- db/migrate/20170824111701_create_egov_utils_groups.rb
|
344
347
|
- lib/bootstrap_form/datetimepicker.rb
|
348
|
+
- lib/bootstrap_form/fileuid.rb
|
345
349
|
- lib/bootstrap_form/helpers/bootstrap4.rb
|
346
350
|
- lib/egov_utils.rb
|
347
351
|
- lib/egov_utils/auth_source.rb
|
348
352
|
- lib/egov_utils/engine.rb
|
349
353
|
- lib/egov_utils/has_audit_trail.rb
|
354
|
+
- lib/egov_utils/helpers/form_helper.rb
|
355
|
+
- lib/egov_utils/helpers/tags/fileuid_field.rb
|
356
|
+
- lib/egov_utils/test_utils/controller_helpers.rb
|
350
357
|
- lib/egov_utils/user_utils/application_controller_patch.rb
|
351
358
|
- lib/egov_utils/user_utils/role.rb
|
352
359
|
- lib/egov_utils/version.rb
|