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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 139229280999ef256b88e2ae66db5dfb8fe27eabfe81fc929fa2fccade0c04cc
4
- data.tar.gz: 66e2978155ad38869601b791d6c831a36a5adc6c08f382176028b1536ac06ed2
3
+ metadata.gz: 85962c2ec92a777e283621ee5dbb244184ede26066d068bcedd6c54be51725b3
4
+ data.tar.gz: 05457ce11d004c93e0df535d2eed83bdd528408afcc478671141608c920e95d6
5
5
  SHA512:
6
- metadata.gz: 86dc8f5b920df19e5ff63dffcb6d8d9b99458f48ed876d3ec320f54b93055b50c3919b597ce47e69ed4d5d7de3f212605897d4ef0a5a7e3c82375cca86d4a1c6
7
- data.tar.gz: f4eff5d1c290fb72cc6a79c6c4583d952591d4a104e4630cdaa4e113aafe3beb0b9973032afc77c01c4019481d3cea90cb5cab7b551bdf51e92553447c817b35
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
- model: association_object.model.class,
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: (form_object.send(property) || form_object.model.send("#{property}_id") || value)
47
+ value: builded_value
40
48
  },
41
- selected: (form_object.model.send("#{property}_id") || value),
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
- redirect: current_model_record_path(object),
85
- association.options[:class_name].underscore => {
86
- association.options[:as] => object.id,
87
- association.type => object.class.model_name
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
- redirect: current_model_record_path(object.model),
92
- association.options[:class_name].underscore => {
93
- as || object.model.class.name.underscore => object.id
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
- - if type.class.in? [ Symbol, String ]
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, 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)
12
+ = form.input property, **default_params(**input_params)
9
13
  - when :association
10
- = form.association property, **association_params(form_object: form_object, property: property, value: value, object: object)
14
+ = form.association property, **association_params(**input_params)
11
15
  - when :polymorphic_association
12
- = form.input property, **polymorphic_association_params(object: object, form_object: form_object, property: property, value: value[:id])
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, as: type, label: false, input_html: { name: "#{object}[#{property}]", id: "#{object}_#{property}", value: (form_object.send(property) || form_object.model.send(property) || value) }
18
+ = form.input property, **else_params(**input_params.merge(type: type))
16
19
  - else
17
- - if type[:input_options]
18
- - options = type[:input_options]
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
@@ -52,8 +52,8 @@ module Tramway
52
52
  end&.flatten || []
53
53
  end
54
54
 
55
- def action_is_available?(record, project:, role:, model:, action:)
56
- actions = select_actions(project: project, role: role, model: model)
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:, model:)
72
- @singleton_models&.dig(project, role, model) || @available_models&.dig(project, role, model)
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Tramway
4
4
  module Admin
5
- VERSION = '1.27.0.2'
5
+ VERSION = '1.28'
6
6
  end
7
7
  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.27.0.2
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-10 00:00:00.000000000 Z
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