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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1fd2dbf4e83157c214af26cda3f420c2262424d412e0be024370276a376c9f1
4
- data.tar.gz: 0d7183e4be0137e326e4c65e01af71c3d9d43a8085245dceb67d5903332a616e
3
+ metadata.gz: bcffbf3198b80ae53e95b4368e1759f1fb7371c5b1b45d8f9e8d946878c29ad3
4
+ data.tar.gz: cfa47aa8309e0546e6771f940cea2039be641cb05e564b9cd6c3bb8120b8f6b0
5
5
  SHA512:
6
- metadata.gz: a757831c656315d7fe43f5b76a0fff363170d55b2042a1f520bda007c57605f93f36a808e6f82d82b0f7aa94f523c12b552efae501fc076165f2bc88bf4ea94f
7
- data.tar.gz: ca9475b9bfaa9bd0c80fdfd14d502dbec4e30712d6c2260e9ac6b8607d16851d4eac117e795301d102c3a73d07fa802a3ff57e9c8f78e125e52dce13493a8269
6
+ metadata.gz: 2f29524aa40533858f4589e9627363ff84ab9869ac385e88e12ae3edaf3f125bb87ad19c3a9356f4f109c30ce6f63abf19219914c1ced479af3d73a52b23f557
7
+ data.tar.gz: e715d84c64fa02f09fe5ac54e5136a8f0ae199ac1094a6e27f846cd82e25edd1aa2a1843500924cb80ff3c69915836c2ca9a8926977fb2178d2d83dbe3e6323e
@@ -11,4 +11,8 @@ class Tramway::Core::ApplicationController < ActionController::Base
11
11
  def load_extensions
12
12
  ::Tramway::Extensions.load if defined? ::Tramway::Extensions
13
13
  end
14
+
15
+ def model_class
16
+ params[:model].constantize
17
+ end
14
18
  end
@@ -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({}) { |hash, property| hash.merge! property.first => model.values[property.first.to_s] }
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,2 @@
1
+ module Tramway::Core::ApplicationHelper
2
+ 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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Tramway
4
4
  module Core
5
- VERSION = '1.17.2.5'
5
+ VERSION = '1.17.3'
6
6
  end
7
7
  end
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.2.5
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