tramway-core 1.17.2.3 → 1.17.4

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: e25693262017e7eb7b500db8ed733e26ed5c841f4e5eca94b036f422114c8f8e
4
- data.tar.gz: 9cc1274352800f545610e01d2c02485c3ef2837bd2d413041818462682496e04
3
+ metadata.gz: b6297a0252cf6856f995abf0de3e37b9376453d5df79a40e8ccb0dae8f75e06a
4
+ data.tar.gz: 7e9ec3266141fa021103ee9f4263c49aeedfad149c8188b635f97653aee258eb
5
5
  SHA512:
6
- metadata.gz: 796e723d4c64a741d72b2d25a769e1344d895805dda3ba55da9c6f4161252a416ade82f2439217599a60605c6d29e6292be4b165a56f0c26343eeeba6ca9ce85
7
- data.tar.gz: 9991a6ecf790a5ce4ed3b0064d3cc2392336359bcf095416b91a9ee6d152e19d1487826ab9a85d7c1df4913a426375128955c602b1501ff5b273319ca49db211
6
+ metadata.gz: 9cbf09a9abc0f90d6cbd59751960cbb40820309857035a5b5ec6412ff02bbfa4d91c15ac625a2bae005de13d8b043f48b10e2e7f48c6bf31bbdf5448b3412cae
7
+ data.tar.gz: fb4ac5cba33590b6bee01a9e16bc96af19c12157ba103510f3d6761ba1777baf911af1b061ed29614fc97de013345a10d8f78611923fa0fa32b3982d48e8ba36
@@ -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
@@ -32,6 +34,18 @@ class Tramway::Core::ApplicationForm < ::Reform::Form
32
34
  @@model_class.model_name
33
35
  end
34
36
 
37
+ def associations
38
+ @@associations
39
+ end
40
+
41
+ def to_model
42
+ self
43
+ end
44
+
45
+ def persisted?
46
+ model.id.nil?
47
+ end
48
+
35
49
  class << self
36
50
  include Tramway::Core::ApplicationForms::ConstantClassActions
37
51
 
@@ -1,10 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tramway::Core::ApplicationForms::AssociationObjectHelpers
4
- def associations
5
- @@associations
6
- end
7
-
8
4
  def define_association_method(association, class_name)
9
5
  if class_name.is_a? Array
10
6
  define_polymorphic_association association, class_name
@@ -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,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tramway::Core::ApplicationHelper
4
+ 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,25 @@
1
+ - model_class = defined?(record) ? record.model : model_class
2
+ - form_object = defined?(record) ? record : instance_variable_get("@#{object}_form")
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)
8
+ - type = type.to_sym
9
+ = form.label form_object.model.class.human_attribute_name property
10
+ - case type
11
+ - when :default
12
+ = form.input property, **default_params(**input_params)
13
+ - when :association
14
+ = form.association property, **association_params(**input_params)
15
+ - when :polymorphic_association
16
+ = form.input property, **polymorphic_association_params(**input_params.merge(value: value))
17
+ - else
18
+ = form.input property, **else_params(**input_params.merge(type: type))
19
+ - else
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
22
+
23
+ - if params[:errors].present? && params[:errors][property]&.first
24
+ .alert.alert-danger
25
+ = params[:errors][property]&.first
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Tramway::Core::Application
4
- attr_accessor :name, :url, :model_class, :title, :tagline, :found_date, :phone, :email
4
+ attr_accessor :name, :url, :model_class, :title, :tagline, :found_date, :phone, :email, :main_image
5
5
 
6
6
  def public_name
7
7
  name.to_s.gsub('_', ' ').camelize
@@ -1,4 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Tramway::Core::Generators
3
+ module Tramway::Core
4
+ module Generators
5
+ end
4
6
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Tramway
4
4
  module Core
5
- VERSION = '1.17.2.3'
5
+ VERSION = '1.17.4'
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.3
4
+ version: 1.17.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Kalashnikov
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-03-19 00:00:00.000000000 Z
12
+ date: 2020-03-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: audited
@@ -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