tramway-core 1.17.2.5 → 1.17.3
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/controllers/tramway/core/application_controller.rb +4 -0
- data/app/forms/tramway/core/application_form.rb +10 -0
- data/app/forms/tramway/core/application_forms/constant_object_actions.rb +8 -1
- data/app/helpers/tramway/core/application_helper.rb +2 -0
- data/app/helpers/tramway/core/inputs_helper.rb +93 -0
- data/app/views/tramway/core/shared/_input.html.haml +26 -0
- data/lib/tramway/core/version.rb +1 -1
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bcffbf3198b80ae53e95b4368e1759f1fb7371c5b1b45d8f9e8d946878c29ad3
|
4
|
+
data.tar.gz: cfa47aa8309e0546e6771f940cea2039be641cb05e564b9cd6c3bb8120b8f6b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f29524aa40533858f4589e9627363ff84ab9869ac385e88e12ae3edaf3f125bb87ad19c3a9356f4f109c30ce6f63abf19219914c1ced479af3d73a52b23f557
|
7
|
+
data.tar.gz: e715d84c64fa02f09fe5ac54e5136a8f0ae199ac1094a6e27f846cd82e25edd1aa2a1843500924cb80ff3c69915836c2ca9a8926977fb2178d2d83dbe3e6323e
|
@@ -5,6 +5,8 @@ class Tramway::Core::ApplicationForm < ::Reform::Form
|
|
5
5
|
include Tramway::Core::ApplicationForms::ConstantObjectActions
|
6
6
|
include Tramway::Core::ApplicationForms::PropertiesObjectHelper
|
7
7
|
|
8
|
+
attr_accessor :submit_message
|
9
|
+
|
8
10
|
def initialize(object = nil)
|
9
11
|
object ||= self.class.model_class.new
|
10
12
|
super(object).tap do
|
@@ -36,6 +38,14 @@ class Tramway::Core::ApplicationForm < ::Reform::Form
|
|
36
38
|
@@associations
|
37
39
|
end
|
38
40
|
|
41
|
+
def to_model
|
42
|
+
self
|
43
|
+
end
|
44
|
+
|
45
|
+
def persisted?
|
46
|
+
model.id.nil?
|
47
|
+
end
|
48
|
+
|
39
49
|
class << self
|
40
50
|
include Tramway::Core::ApplicationForms::ConstantClassActions
|
41
51
|
|
@@ -8,6 +8,13 @@ module Tramway::Core::ApplicationForms::ConstantObjectActions
|
|
8
8
|
def build_errors; end
|
9
9
|
|
10
10
|
def attributes
|
11
|
-
properties.reduce({})
|
11
|
+
properties.reduce({}) do |hash, property|
|
12
|
+
value = if model.respond_to? :values
|
13
|
+
model.values[property.first.to_s]
|
14
|
+
else
|
15
|
+
model.send(property.first.to_s)
|
16
|
+
end
|
17
|
+
hash.merge! property.first => value
|
18
|
+
end
|
12
19
|
end
|
13
20
|
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Tramway::Core::InputsHelper
|
4
|
+
def association_params(form_object:, property:, value:, object:, options: {})
|
5
|
+
full_class_name_association = form_object.class.full_class_name_association(property)
|
6
|
+
unless full_class_name_association
|
7
|
+
raise "It seems you've defined association attributes with `property` method. Please, use `association` method. `association :#{property}`"
|
8
|
+
end
|
9
|
+
if full_class_name_association.is_a? Array
|
10
|
+
raise "It seems you've used `association` input type in the Form. Please, use `polymorphic_association` type. `#{property}: :polymorphic_association`"
|
11
|
+
end
|
12
|
+
|
13
|
+
{
|
14
|
+
label: false,
|
15
|
+
input_html: {
|
16
|
+
name: "#{object}[#{property}]",
|
17
|
+
id: "#{object}_#{property}",
|
18
|
+
value: (form_object.send(property) || form_object.model.send("#{property}_id") || value)
|
19
|
+
},
|
20
|
+
selected: (form_object.model.send("#{property}_id") || value),
|
21
|
+
collection: full_class_name_association.active.map do |obj|
|
22
|
+
decorator_class(full_class_name_association).decorate obj
|
23
|
+
end.sort_by(&:name)
|
24
|
+
}.merge options
|
25
|
+
end
|
26
|
+
|
27
|
+
def polymorphic_association_params(object:, form_object:, property:, value:, options: {})
|
28
|
+
full_class_names = form_object.model.class.send("#{property}_type").values.map &:constantize
|
29
|
+
collection = full_class_names.map do |class_name|
|
30
|
+
class_name.active.map do |obj|
|
31
|
+
decorator_class(class_name).decorate obj
|
32
|
+
end
|
33
|
+
end.flatten.sort_by { |obj| obj.name.to_s }
|
34
|
+
builded_value = if form_object.send(property).present?
|
35
|
+
"#{form_object.send(property).class.to_s.underscore}_#{form_object.send(property).id}"
|
36
|
+
else
|
37
|
+
"#{value[:type]&.underscore}_#{value[:id]}"
|
38
|
+
end
|
39
|
+
{
|
40
|
+
as: :select,
|
41
|
+
label: false,
|
42
|
+
input_html: {
|
43
|
+
name: "#{object}[#{property}]",
|
44
|
+
id: "#{object}_#{property}",
|
45
|
+
value: builded_value
|
46
|
+
},
|
47
|
+
selected: builded_value,
|
48
|
+
collection: collection,
|
49
|
+
label_method: lambda do |obj|
|
50
|
+
"#{obj.class.model_name.human} | #{obj.name}"
|
51
|
+
end,
|
52
|
+
value_method: lambda do |obj|
|
53
|
+
"#{obj.class.to_s.underscore.sub(/_decorator$/, '')}_#{obj.id}"
|
54
|
+
end
|
55
|
+
}.merge options
|
56
|
+
end
|
57
|
+
|
58
|
+
def value_from_params(model_class:, property:, type:)
|
59
|
+
case type
|
60
|
+
when :polymorphic_association, 'polymorphic_association'
|
61
|
+
{
|
62
|
+
id: params.dig(model_class.to_s.underscore, property.to_s),
|
63
|
+
type: params.dig(model_class.to_s.underscore, "#{property}_type")
|
64
|
+
}
|
65
|
+
else
|
66
|
+
params.dig(model_class.to_s.underscore, property.to_s)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def default_params(property:, object:, form_object:, value:, options: {})
|
71
|
+
{
|
72
|
+
label: false,
|
73
|
+
input_html: {
|
74
|
+
name: "#{object}[#{property}]",
|
75
|
+
id: "#{object}_#{property}",
|
76
|
+
value: (form_object.send(property) || form_object.model.send(property) || value)
|
77
|
+
},
|
78
|
+
selected: (form_object.model.send(property) || value)
|
79
|
+
}.merge options
|
80
|
+
end
|
81
|
+
|
82
|
+
def else_params(property:, object:, type:, form_object:, value:, options: {})
|
83
|
+
{
|
84
|
+
as: type,
|
85
|
+
label: false,
|
86
|
+
input_html: {
|
87
|
+
name: "#{object}[#{property}]",
|
88
|
+
id: "#{object}_#{property}",
|
89
|
+
value: (form_object.send(property) || form_object.model.send(property) || value)
|
90
|
+
}
|
91
|
+
}.merge options
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
- model_class = defined?(record) ? record.model : model_class
|
2
|
+
- value = defined?(value) ? value : value_from_params(model_class: model_class, property: property, type: type)
|
3
|
+
- form_object = defined?(record) ? record : instance_variable_get("@#{object}_form")
|
4
|
+
- input_params = { property: property, object: object, form_object: form_object, value: value }
|
5
|
+
- if !type.class.in?([ Symbol, String ]) && type[:input_options]
|
6
|
+
- input_params.merge!(options: type[:input_options])
|
7
|
+
- type = type[:type]
|
8
|
+
- if type.class.in?([ Symbol, String ]) || type&.dig(:input_options)
|
9
|
+
- type = type.to_sym
|
10
|
+
= form.label form_object.model.class.human_attribute_name property
|
11
|
+
- case type
|
12
|
+
- when :default
|
13
|
+
= form.input property, **default_params(**input_params)
|
14
|
+
- when :association
|
15
|
+
= form.association property, **association_params(**input_params)
|
16
|
+
- when :polymorphic_association
|
17
|
+
= form.input property, **polymorphic_association_params(**input_params.merge(value: value))
|
18
|
+
- else
|
19
|
+
= form.input property, **else_params(**input_params.merge(type: type))
|
20
|
+
- else
|
21
|
+
- property_value = form_object.model.values.present? && form_object.model.values[property.to_s]
|
22
|
+
= render 'tramway/core/shared/input_extended', field: type[:extended_form_property], class_name: :record, value: property_value, f: form
|
23
|
+
|
24
|
+
- if params[:errors].present? && params[:errors][property]&.first
|
25
|
+
.alert.alert-danger
|
26
|
+
= params[:errors][property]&.first
|
data/lib/tramway/core/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tramway-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.17.
|
4
|
+
version: 1.17.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Kalashnikov
|
@@ -376,7 +376,9 @@ files:
|
|
376
376
|
- app/forms/tramway/core/extendable_forms_helpers/validators.rb
|
377
377
|
- app/forms/tramway/core/extended_application_form.rb
|
378
378
|
- app/forms/tramway/core/form_creator.rb
|
379
|
+
- app/helpers/tramway/core/application_helper.rb
|
379
380
|
- app/helpers/tramway/core/copy_to_clipboard_helper.rb
|
381
|
+
- app/helpers/tramway/core/inputs_helper.rb
|
380
382
|
- app/helpers/tramway/core/title_helper.rb
|
381
383
|
- app/inputs/date_picker_input.rb
|
382
384
|
- app/models/tramway/core/application_record.rb
|
@@ -385,6 +387,7 @@ files:
|
|
385
387
|
- app/uploaders/image_defaults.rb
|
386
388
|
- app/uploaders/photo_uploader.rb
|
387
389
|
- app/views/tramway/core/404.haml
|
390
|
+
- app/views/tramway/core/shared/_input.html.haml
|
388
391
|
- app/views/tramway/core/shared/_input_extended.html.haml
|
389
392
|
- app/views/tramway/core/shared/_messages.html.haml
|
390
393
|
- app/views/tramway/core/shared/input_extended_types/_checkbox.html.haml
|