tramway-core 1.17.4.1 → 1.17.7

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: 57df1e172fb15f98f9ab50d1ae0bef18e19d0e163b8f0255e9aeaeaa58fc4b22
4
- data.tar.gz: 20c663842281a6e479c84d729c2ebd1f36cb9a1b67d99b8c914d2e3f144d255a
3
+ metadata.gz: 9eefb734f64738208d5ebff801e31274167b6a7332001243b24e0612435e2b16
4
+ data.tar.gz: 2d26b33208ea81fb18c347d96e7dc7aecf95e4786121dbc9c834dc4e4f17309f
5
5
  SHA512:
6
- metadata.gz: 32af3b950613212b2b5d0e7eaec1ca66e5630235303dc178d8d0837135e382bea64a4b5bad3763510847d0b82b0cb0d3363c14bb3efafe8c5bd38080fb78d375
7
- data.tar.gz: ae8206f0a248457834f8d6befbc089d94638f692e43682f212a637ca76e58261b42d564761cebf12051bc2acd7e01535402020c858e4614ebbe1f676ed5012f0
6
+ metadata.gz: bac5a81a3324c4ce8de46df25a375aceaf7b80acbc1a3cc6f56752db1c8d8fb6c464c268b3c7160e13a24eb116d9ca4a93f1a0ae38f71de344e95152ca69131a
7
+ data.tar.gz: 8c1b83417ffdcbcd7c3ed79d5d2312d00357d5d48fe26ef4a351168ac0577f9dd3989df440c15707dad688c67204fd6bc7f5f9bac029fe1d96d04ad5da4a6a19
data/README.md CHANGED
@@ -132,7 +132,7 @@ end
132
132
 
133
133
  ### CopyToClipboardHelper
134
134
 
135
- [app/helpers/tramway/core/copy_to_clipboard_helper.rb](https://github.com/ulmic/tramway-dev/blob/develop/tramway-core/app/helpers/tramway/core/copy_to_clipboard_helper.rb)
135
+ [app/helpers/tramway/core/copy_to_clipboard_helper.rb] (https://github.com/ulmic/tramway-dev/blob/develop/tramway-core/app/helpers/tramway/core/copy_to_clipboard_helper.rb)
136
136
 
137
137
  #### Install
138
138
 
@@ -203,10 +203,36 @@ Tramway::Admin.set_singleton_models Organization, project: :organization # now y
203
203
  * models - часто используемые в моделях слова
204
204
  * state_machines - локализация состояний
205
205
 
206
- ## Contributors
206
+ ## Contribution
207
+
208
+ ### Contributors
207
209
 
208
210
  * [Pavel Kalashnikov](https://github.com/kalashnikovisme)
209
211
  * [moshinaan](https://github.com/moshinaan)
210
212
 
213
+ ### Workflow
214
+
215
+ #### If you don't have access to push gem to rubygems then
216
+
217
+ Just create PR to develop branch
218
+
219
+ #### If you have access to push gem to rubygems then
220
+
221
+ * Create PR to develop branch
222
+ * After merging PR you should create new release via git-flow this way
223
+
224
+ ```shell
225
+ git release start (version which you upgraded in lib/tramway-core/version.rb file)
226
+ git release finish (version which you upgraded in lib/tramway-core/version.rb file)
227
+ git push origin develop
228
+ git push origin master
229
+ ```
230
+
231
+ * Then push new version of the gem
232
+
233
+ ```shell
234
+ rm -rf *.gem && gem build $(basename "$PWD").gemspec && gem push *.gem
235
+ ```
236
+
211
237
  ## License
212
238
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -4,6 +4,7 @@ class Tramway::Core::ApplicationForm < ::Reform::Form
4
4
  include Tramway::Core::ApplicationForms::AssociationObjectHelpers
5
5
  include Tramway::Core::ApplicationForms::ConstantObjectActions
6
6
  include Tramway::Core::ApplicationForms::PropertiesObjectHelper
7
+ include Tramway::Core::ApplicationForms::ObjectHelpers
7
8
 
8
9
  attr_accessor :submit_message
9
10
 
@@ -38,14 +39,6 @@ class Tramway::Core::ApplicationForm < ::Reform::Form
38
39
  @@associations
39
40
  end
40
41
 
41
- def to_model
42
- self
43
- end
44
-
45
- def persisted?
46
- model.id.nil?
47
- end
48
-
49
42
  class << self
50
43
  include Tramway::Core::ApplicationForms::ConstantClassActions
51
44
 
@@ -6,6 +6,7 @@ module Tramway::Core::ApplicationForms::AssociationObjectHelpers
6
6
  define_polymorphic_association association, class_name
7
7
  else
8
8
  self.class.send(:define_method, "#{association}=") do |value|
9
+ model.send "#{association}_id=", value
9
10
  super class_name.find value
10
11
  end
11
12
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tramway::Core::ApplicationForms::ObjectHelpers
4
+ def to_model
5
+ self
6
+ end
7
+
8
+ def persisted?
9
+ model.id.nil?
10
+ end
11
+ end
@@ -22,7 +22,7 @@ module Tramway::Core::ExtendableFormsHelpers::ClassBuilder
22
22
  case property[1][:object].field_type
23
23
  when 'file'
24
24
  field = property[1][:object]
25
- define_file_property_assignment_method property field
25
+ define_file_property_assignment_method property, field
26
26
  else
27
27
  next unless property[1][:validates].present?
28
28
 
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tramway::Core::Inputs::AssociationsHelper
4
+ def build_collection_for_association(form_object, property)
5
+ full_class_name_association = form_object.class.full_class_name_association(property)
6
+ check_valid_association full_class_name_association
7
+ full_class_name_association.active.send("#{current_user.role}_scope", current_user.id).map do |obj|
8
+ decorator_class(full_class_name_association).decorate obj
9
+ end.sort_by(&:name)
10
+ end
11
+
12
+ def build_value_for_association(form_object, property, value)
13
+ form_object.send(property) || form_object.model.send("#{property}_id") || value
14
+ end
15
+
16
+ def check_valid_association(full_class_name_association)
17
+ unless full_class_name_association
18
+ Tramway::Error.raise_error(
19
+ :tramway, :core, :inputs_helpers, :association_params, :defined_with_property_method, property: property
20
+ )
21
+ end
22
+ return unless full_class_name_association.is_a? Array
23
+
24
+ Tramway::Error.raise_error(
25
+ :tramway, :core, :inputs_helpers, :association_params, :used_polymorphic_association, property: property
26
+ )
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tramway::Core::Inputs::PolymorphicAssociationsHelper
4
+ def build_collection_for_polymorphic_association(form_object, property)
5
+ object_names = full_class_names(form_object, property).map do |class_name|
6
+ class_name.active.send("#{current_user.role}_scope", current_user.id).map do |obj|
7
+ decorator_class(class_name).decorate obj
8
+ end
9
+ end.flatten
10
+ object_names.sort_by { |obj| obj.name.to_s }
11
+ end
12
+
13
+ def build_value_for_polymorphic_association(form_object, property, value)
14
+ if form_object.send(property).present?
15
+ "#{form_object.send(property).class.to_s.underscore}_#{form_object.send(property).id}"
16
+ else
17
+ "#{value[:type]&.underscore}_#{value[:id]}"
18
+ end
19
+ end
20
+
21
+ def full_class_names(form_object, property)
22
+ form_object.model.class.send("#{property}_type").values.map(&:constantize)
23
+ end
24
+ end
@@ -1,58 +1,41 @@
1
1
  # frozen_string_literal: true
2
2
 
3
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
4
+ include Tramway::Core::Inputs::AssociationsHelper
5
+ include Tramway::Core::Inputs::PolymorphicAssociationsHelper
12
6
 
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
7
+ def association_params(form_object:, property:, value:, object:, options: {})
8
+ build_input_attributes(object: object, property: property, options: options,
9
+ value: build_value_for_association(form_object, property, value),
10
+ collection: build_collection_for_association(form_object, property),
11
+ selected: form_object.model.send("#{property}_id") || value)
25
12
  end
26
13
 
27
14
  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
15
+ build_input_attributes object: object, property: property,
16
+ selected: build_value_for_polymorphic_association(form_object, property, value),
17
+ value: build_value_for_polymorphic_association(form_object, property, value),
18
+ collection: build_collection_for_polymorphic_association(form_object, property),
19
+ options: options.merge(
20
+ as: :select,
21
+ label_method: ->(obj) { "#{obj.class.model_name.human} | #{obj.name}" },
22
+ value_method: lambda do |obj|
23
+ "#{obj.class.to_s.underscore.sub(/_decorator$/, '')}_#{obj.id}"
24
+ end
25
+ )
26
+ end
27
+
28
+ def build_input_attributes(**options)
39
29
  {
40
- as: :select,
41
30
  label: false,
42
31
  input_html: {
43
- name: "#{object}[#{property}]",
44
- id: "#{object}_#{property}",
45
- value: builded_value
32
+ name: "#{options[:object]}[#{options[:property]}]",
33
+ id: "#{options[:object]}_#{options[:property]}",
34
+ value: options[:value]
46
35
  },
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
36
+ selected: options[:selected],
37
+ collection: options[:collection]
38
+ }.merge options[:options]
56
39
  end
57
40
 
58
41
  def value_from_params(model_class:, property:, type:)
@@ -79,15 +62,28 @@ module Tramway::Core::InputsHelper
79
62
  }.merge options
80
63
  end
81
64
 
82
- def else_params(property:, object:, type:, form_object:, value:, options: {})
83
- {
84
- as: type,
65
+ def simple_params(**options)
66
+ builded_options = {
67
+ as: options[:type],
85
68
  label: false,
86
69
  input_html: {
87
- name: "#{object}[#{property}]",
88
- id: "#{object}_#{property}",
89
- value: (form_object.send(property) || form_object.model.send(property) || value)
70
+ name: "#{options[:object]}[#{options[:property]}]",
71
+ id: "#{options[:object]}_#{options[:property]}",
72
+ value: build_simple_value(
73
+ *options.values_at(:form_object, :property, :value),
74
+ options.dig(:options, :input_html, :value)
75
+ )
90
76
  }
91
- }.merge options
77
+ }
78
+ if options[:options].present?
79
+ options[:options].dig(:input_html)&.delete(:value)
80
+ builded_options.merge!(options) || {}
81
+ end
82
+ builded_options
83
+ end
84
+
85
+ def build_simple_value(form_object, property, value, input_html_value)
86
+ value_to_add = input_html_value ? input_html_value : value
87
+ value_to_add || form_object.send(property)
92
88
  end
93
89
  end
@@ -16,6 +16,10 @@ class PhotoUploader < ApplicationUploader
16
16
  end
17
17
  end
18
18
 
19
+ def present?
20
+ super && width.present? && height.present?
21
+ end
22
+
19
23
  version :medium do
20
24
  process resize_to_fill: [400, 400]
21
25
  end
@@ -6,7 +6,8 @@
6
6
  - type = type[:type]
7
7
  - if type.class.in?([ Symbol, String ]) || type&.dig(:input_options)
8
8
  - type = type.to_sym
9
- = form.label form_object.model.class.human_attribute_name property
9
+ - unless type == :hidden
10
+ = form.label form_object.model.class.human_attribute_name property
10
11
  - case type
11
12
  - when :default
12
13
  = form.input property, **default_params(**input_params)
@@ -15,7 +16,7 @@
15
16
  - when :polymorphic_association
16
17
  = form.input property, **polymorphic_association_params(**input_params.merge(value: value))
17
18
  - else
18
- = form.input property, **else_params(**input_params.merge(type: type))
19
+ = form.input property, **simple_params(**input_params.merge(type: type))
19
20
  - else
20
21
  - property_value = form_object.model.values.present? && form_object.model.values[property.to_s]
21
22
  = render 'tramway/core/shared/input_extended', field: type[:extended_form_property], class_name: :record, value: property_value, f: form
@@ -1,4 +1,4 @@
1
- - parsed_json = field.options.is_a?(Hash) ? field.options : (JSON.parse(field.options) unless field.options == '')
1
+ - parsed_json = field.options&.is_a?(Hash) ? field.options : (JSON.parse(field.options) if field.options.present?)
2
2
  - if parsed_json&.dig('collection', 'name')
3
3
  - if value.present?
4
4
  = f.input field.title.to_sym, as: :select, collection: collection_list_by(name: parsed_json['collection']['name']), input_html: { class: class_name, id: "#{class_name}_#{field.title}", name: "#{class_name}[#{field.title}]" }, selected: value, required: field.required
@@ -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, :main_image
4
+ attr_accessor :name, :url, :model_class, :title, :tagline, :found_date, :phone, :email, :main_image, :favicon
5
5
 
6
6
  def public_name
7
7
  name.to_s.gsub('_', ' ').camelize
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Tramway
4
4
  module Core
5
- VERSION = '1.17.4.1'
5
+ VERSION = '1.17.7'
6
6
  end
7
7
  end
@@ -4,6 +4,10 @@ tramway:
4
4
  collection_list_by:
5
5
  there_no_such_collection: "There no such collection named %{name_camelize}. Please create class with self method `list` and extended of `Tramway::Collection`. You should reload your server after creating this collection."
6
6
  core:
7
+ input_helper:
8
+ association_params:
9
+ defined_with_property_method: "It seems you've defined association attributes with `property` method. Please, use `association` method. `association :%{property}`"
10
+ use_polymorphic_association: "It seems you've used `association` input type in the Form. Please, use `polymorphic_association` type. `%{property}: :polymorphic_association`"
7
11
  title_helper:
8
12
  title:
9
13
  you_should_set_tramway_core_application: "You should set Tramway::Core::Application class using `::Tramway::Core.initialize_application model_class: #{model_class_name}` in config/initializers/tramway.rb OR maybe you don't have any records of application model"
@@ -34,4 +38,3 @@ tramway:
34
38
  please_implement_title: "Please, implement `title` method in a %{class_name} or %{object_class}"
35
39
  link:
36
40
  method_link_uses_file_attribute: "Method `link` uses `file` attribute of the decorated object. If decorated object doesn't contain `file`, you shouldn't use `link` method."
37
-
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.1
4
+ version: 1.17.7
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-29 00:00:00.000000000 Z
12
+ date: 2020-04-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: audited
@@ -365,6 +365,7 @@ files:
365
365
  - app/forms/tramway/core/application_forms/association_object_helpers.rb
366
366
  - app/forms/tramway/core/application_forms/constant_class_actions.rb
367
367
  - app/forms/tramway/core/application_forms/constant_object_actions.rb
368
+ - app/forms/tramway/core/application_forms/object_helpers.rb
368
369
  - app/forms/tramway/core/application_forms/properties_object_helper.rb
369
370
  - app/forms/tramway/core/extendable_form.rb
370
371
  - app/forms/tramway/core/extendable_forms_helpers/class_builder.rb
@@ -378,6 +379,8 @@ files:
378
379
  - app/forms/tramway/core/form_creator.rb
379
380
  - app/helpers/tramway/core/application_helper.rb
380
381
  - app/helpers/tramway/core/copy_to_clipboard_helper.rb
382
+ - app/helpers/tramway/core/inputs/associations_helper.rb
383
+ - app/helpers/tramway/core/inputs/polymorphic_associations_helper.rb
381
384
  - app/helpers/tramway/core/inputs_helper.rb
382
385
  - app/helpers/tramway/core/title_helper.rb
383
386
  - app/inputs/date_picker_input.rb