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 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