tramway-core 1.17.2.5 → 1.17.3

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