tramway-admin 1.27.0.2 → 1.28
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/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
|