tramway-admin 1.27.0.2 → 1.28
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/helpers/tramway/admin/actions_helper.rb +1 -1
- data/app/helpers/tramway/admin/inputs_helper.rb +41 -6
- data/app/helpers/tramway/admin/records_helper.rb +9 -9
- data/app/views/tramway/admin/shared/_input.html.haml +11 -22
- data/lib/tramway/admin.rb +10 -4
- data/lib/tramway/admin/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: 85962c2ec92a777e283621ee5dbb244184ede26066d068bcedd6c54be51725b3
|
4
|
+
data.tar.gz: 05457ce11d004c93e0df535d2eed83bdd528408afcc478671141608c920e95d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9f7650c4ba3413663abcf989c26a514c5b0453f1e5be5a12615f4fd8dd697638a73fb354534f682c9c409228231093bc51206ffbbe1d359d8f942f0df720feb
|
7
|
+
data.tar.gz: d26680183f6f456f14091e40e018c5f1ed456189b8c8989fb15b6956ac56da19a1141de90c34270bdbe9bd42839b232a4c945ab23cd89f6c761078277ca06582
|
@@ -3,7 +3,7 @@ module Tramway::Admin::ActionsHelper
|
|
3
3
|
::Tramway::Admin.action_is_available?(
|
4
4
|
association_object,
|
5
5
|
project: (@application_engine || @application.name),
|
6
|
-
|
6
|
+
model_name: association_object.model.class.name,
|
7
7
|
role: current_user.role,
|
8
8
|
action: :destroy
|
9
9
|
)
|
@@ -3,11 +3,14 @@
|
|
3
3
|
module Tramway
|
4
4
|
module Admin
|
5
5
|
module InputsHelper
|
6
|
-
def association_params(form_object:, property:, value:, object:)
|
6
|
+
def association_params(form_object:, property:, value:, object:, options: {})
|
7
7
|
full_class_name_association = form_object.class.full_class_name_association(property)
|
8
8
|
unless full_class_name_association
|
9
9
|
raise "It seems you\'ve defined association attributes with `property` method. Please, use `association` method. `association :#{property}`"
|
10
10
|
end
|
11
|
+
if full_class_name_association.is_a? Array
|
12
|
+
raise "It seems you've used `association` input type in the Form. Please, use `polymorphic_association` type. `#{property}: :polymorphic_association`"
|
13
|
+
end
|
11
14
|
|
12
15
|
{
|
13
16
|
label: false,
|
@@ -20,30 +23,38 @@ module Tramway
|
|
20
23
|
collection: full_class_name_association.active.map do |obj|
|
21
24
|
decorator_class(full_class_name_association).decorate obj
|
22
25
|
end.sort_by(&:name)
|
23
|
-
}
|
26
|
+
}.merge options
|
24
27
|
end
|
25
28
|
|
26
|
-
def polymorphic_association_params(object:, form_object:, property:, value:)
|
29
|
+
def polymorphic_association_params(object:, form_object:, property:, value:, options: {})
|
27
30
|
full_class_names = form_object.model.class.send("#{property}_type").values.map &:constantize
|
28
31
|
collection = full_class_names.map do |class_name|
|
29
32
|
class_name.active.map do |obj|
|
30
33
|
decorator_class(class_name).decorate obj
|
31
34
|
end
|
32
35
|
end.flatten.sort_by { |obj| obj.name.to_s }
|
36
|
+
builded_value = if form_object.send(property).present?
|
37
|
+
"#{form_object.send(property).class.to_s.underscore}_#{form_object.send(property).id}"
|
38
|
+
else
|
39
|
+
"#{value[:type]&.underscore}_#{value[:id]}"
|
40
|
+
end
|
33
41
|
{
|
34
42
|
as: :select,
|
35
43
|
label: false,
|
36
44
|
input_html: {
|
37
45
|
name: "#{object}[#{property}]",
|
38
46
|
id: "#{object}_#{property}",
|
39
|
-
value:
|
47
|
+
value: builded_value
|
40
48
|
},
|
41
|
-
selected:
|
49
|
+
selected: builded_value,
|
42
50
|
collection: collection,
|
43
51
|
label_method: lambda do |obj|
|
44
52
|
"#{obj.class.model_name.human} | #{obj.name}"
|
53
|
+
end,
|
54
|
+
value_method: lambda do |obj|
|
55
|
+
"#{obj.class.to_s.underscore.sub(/_decorator$/, '')}_#{obj.id}"
|
45
56
|
end
|
46
|
-
}
|
57
|
+
}.merge options
|
47
58
|
end
|
48
59
|
|
49
60
|
def value_from_params(model_class:, property:, type:)
|
@@ -57,6 +68,30 @@ module Tramway
|
|
57
68
|
params.dig(model_class.to_s.underscore, property.to_s)
|
58
69
|
end
|
59
70
|
end
|
71
|
+
|
72
|
+
def default_params(property:, object:, form_object:, value:, options: {})
|
73
|
+
{
|
74
|
+
label: false,
|
75
|
+
input_html: {
|
76
|
+
name: "#{object}[#{property}]",
|
77
|
+
id: "#{object}_#{property}",
|
78
|
+
value: (form_object.send(property) || form_object.model.send(property) || value)
|
79
|
+
},
|
80
|
+
selected: (form_object.model.send(property) || value)
|
81
|
+
}.merge options
|
82
|
+
end
|
83
|
+
|
84
|
+
def else_params(property:, object:, type:, form_object:, value:, options: {})
|
85
|
+
{
|
86
|
+
as: type,
|
87
|
+
label: false,
|
88
|
+
input_html: {
|
89
|
+
name: "#{object}[#{property}]",
|
90
|
+
id: "#{object}_#{property}",
|
91
|
+
value: (form_object.send(property) || form_object.model.send(property) || value)
|
92
|
+
}
|
93
|
+
}.merge options
|
94
|
+
end
|
60
95
|
end
|
61
96
|
end
|
62
97
|
end
|
@@ -81,17 +81,17 @@ module Tramway::Admin
|
|
81
81
|
|
82
82
|
if association.options[:as].present? # polymorphic? conditiion
|
83
83
|
new_record_path model: association.class_name,
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
84
|
+
redirect: current_model_record_path(object.model),
|
85
|
+
association.options[:class_name].underscore => {
|
86
|
+
association.options[:as] => object.id,
|
87
|
+
association.type => object.class.model_name
|
88
|
+
}
|
89
89
|
else
|
90
90
|
new_record_path model: association.class_name,
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
91
|
+
redirect: current_model_record_path(object.model),
|
92
|
+
association.options[:class_name].underscore => {
|
93
|
+
as || object.model.class.name.underscore => object.id
|
94
|
+
}
|
95
95
|
end
|
96
96
|
end
|
97
97
|
end
|
@@ -1,32 +1,21 @@
|
|
1
1
|
- value = value_from_params(model_class: model_class, property: property, type: type)
|
2
2
|
- form_object = instance_variable_get "@#{object}_form"
|
3
|
-
-
|
3
|
+
- input_params = { property: property, object: object, form_object: form_object, value: value }
|
4
|
+
- if !type.class.in?([ Symbol, String ]) && type[:input_options]
|
5
|
+
- input_params.merge!(options: type[:input_options])
|
6
|
+
- type = type[:type]
|
7
|
+
- if type.class.in?([ Symbol, String ]) || type&.dig(:input_options)
|
4
8
|
- type = type.to_sym
|
5
9
|
= form.label form_object.model.class.human_attribute_name property
|
6
10
|
- case type
|
7
11
|
- when :default
|
8
|
-
= form.input property,
|
12
|
+
= form.input property, **default_params(**input_params)
|
9
13
|
- when :association
|
10
|
-
= form.association property, **association_params(
|
14
|
+
= form.association property, **association_params(**input_params)
|
11
15
|
- when :polymorphic_association
|
12
|
-
= form.input property, **polymorphic_association_params(
|
13
|
-
= form.input "#{property}_type", input_html: { name: "#{object}[#{property}_type]", id: "#{object}_#{property}_type", value: (form_object.send(property) || form_object.model.send("#{property}_type") || value[:type]) }, selected: (form_object.model.send("#{property}_type") || value[:type])
|
16
|
+
= form.input property, **polymorphic_association_params(**input_params.merge(value: value))
|
14
17
|
- else
|
15
|
-
= form.input property,
|
18
|
+
= form.input property, **else_params(**input_params.merge(type: type))
|
16
19
|
- else
|
17
|
-
-
|
18
|
-
|
19
|
-
= form.label form_object.model.class.human_attribute_name property
|
20
|
-
- case type[:type]
|
21
|
-
- when :default
|
22
|
-
= form.input property, label: false, input_html: { name: "#{object}[#{property}]", id: "#{object}_#{property}", value: (form_object.send(property) || form_object.model.send(property) || value) }, selected: (form_object.model.send(property) || value), **options
|
23
|
-
- when :association
|
24
|
-
= form.association property, **association_params(form_object: form_object, property: property, value: value, object: object), **options
|
25
|
-
- when :polymorphic_association
|
26
|
-
= form.input property, **polymorphic_association_params(object: object, form_object: form_object, property: property, value: value[:id])
|
27
|
-
= form.input "#{property}_type", input_html: { name: "#{object}[#{property}_type]", id: "#{object}_#{property}_type", value: (form_object.send(property) || form_object.model.send("#{property}_type") || value[:type]) }, selected: (form_object.model.send("#{property}_type") || value[:type]), **options
|
28
|
-
- else
|
29
|
-
= form.input property, as: type[:type].to_sym, label: false, input_html: { name: "#{object}[#{property}]", id: "#{object}_#{property}", value: (form_object.send(property) || form_object.model.send(property) || value) }, **options
|
30
|
-
- else
|
31
|
-
- property_value = form_object.model.values.present? && form_object.model.values[property.to_s]
|
32
|
-
= render 'tramway/core/shared/input_extended', field: type[:extended_form_property], class_name: :record, value: property_value, f: form
|
20
|
+
- property_value = form_object.model.values.present? && form_object.model.values[property.to_s]
|
21
|
+
= render 'tramway/core/shared/input_extended', field: type[:extended_form_property], class_name: :record, value: property_value, f: form
|
data/lib/tramway/admin.rb
CHANGED
@@ -52,8 +52,8 @@ module Tramway
|
|
52
52
|
end&.flatten || []
|
53
53
|
end
|
54
54
|
|
55
|
-
def action_is_available?(record, project:, role:,
|
56
|
-
actions = select_actions(project: project, role: role,
|
55
|
+
def action_is_available?(record, project:, role:, model_name:, action:)
|
56
|
+
actions = select_actions(project: project, role: role, model_name: model_name)
|
57
57
|
availability = actions&.select do |a|
|
58
58
|
if a.is_a? Symbol
|
59
59
|
a == action.to_sym
|
@@ -68,8 +68,14 @@ module Tramway
|
|
68
68
|
availability.values.first.call record
|
69
69
|
end
|
70
70
|
|
71
|
-
def select_actions(project:, role:,
|
72
|
-
@singleton_models&.dig(project, role
|
71
|
+
def select_actions(project:, role:, model_name:)
|
72
|
+
stringify_keys(@singleton_models&.dig(project, role))&.dig(model_name) || stringify_keys(@available_models&.dig(project, role))&.dig(model_name)
|
73
|
+
end
|
74
|
+
|
75
|
+
def stringify_keys(hash)
|
76
|
+
hash&.reduce({}) do |new_hash, pair|
|
77
|
+
new_hash.merge! pair[0].to_s => pair[1]
|
78
|
+
end
|
73
79
|
end
|
74
80
|
end
|
75
81
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tramway-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: '1.28'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Kalashnikov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bootstrap-kaminari-views
|