tramway-core 1.17.6 → 1.17.6.1

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: ff3312136cc5e939cc9948d495df56951db7f9263eb15350627c9b04e8cb6407
4
- data.tar.gz: 76b5da26c35481745798638acc2d9733098ae72336372ee6617a448122db71f9
3
+ metadata.gz: d406acc40d7905296b2257e659b8f5135d8b3caeb3accb877e092a3e1d4b43d6
4
+ data.tar.gz: 3b08362b8b0e3ab614df712ff887c59202e002ae7d894c6712d5007b4b10bbb2
5
5
  SHA512:
6
- metadata.gz: de88772c33ebe611368ba67a004bd86d9cf74601b91a1b7688ba8ce9d2669b5305169da3fcecdcc40b268b579cd406b877ce59d832bdc0635809cb6e7a65f045
7
- data.tar.gz: f70ca13587e303220071f3b57a89ce6c4642fedf31a2ddbf869a05392825daa60c48bb66d6bfd4f03253ec03901da00f4504bf5cbacdd71ecb54a77a9d56a362
6
+ metadata.gz: c680f805536cb1b02f53d8919ef685b3d4d591d2bc68d2679021b72d96fba9c1ffdb9926dc9c108874d73ed5b1de0eb72161d6b7caf5f9972d83dc1a0bb5b5e6
7
+ data.tar.gz: 51b5f3715c11f83bed392d62f678ed60262cc848d0f4e34941c2693071ffe150821a293cf653195407565aeaf291b844d9086d27771b92a61c77d265e939b261
data/README.md CHANGED
@@ -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
 
@@ -96,7 +89,7 @@ class Tramway::Core::ApplicationForm < ::Reform::Form
96
89
  @@model_class = model_class_name.constantize
97
90
  rescue StandardError
98
91
  Tramway::Error.raise_error :tramway, :core, :application_form, :model_class, :there_is_not_model_class,
99
- name: name, model_class_name: model_class_name
92
+ name: name, model_class_name: model_class_name
100
93
  end
101
94
  end
102
95
  end
@@ -127,6 +120,6 @@ class Tramway::Core::ApplicationForm < ::Reform::Form
127
120
  Tramway::Error.raise_error :tramway, :core, :application_form, :save, :argument_error, message: e.message
128
121
  rescue StandardError => e
129
122
  Tramway::Error.raise_error :tramway, :core, :application_form, :save, :looks_like_you_have_method,
130
- method_name: e.name.to_s.gsub('=', ''), model_class: @@model_class, class_name: self.class
123
+ method_name: e.name.to_s.gsub('=', ''), model_class: @@model_class, class_name: self.class
131
124
  end
132
125
  end
@@ -18,7 +18,7 @@ module Tramway::Core::ApplicationForms::AssociationObjectHelpers
18
18
  association_class = association_class.constantize if association_class.is_a? String
19
19
  if association_class.nil?
20
20
  Tramway::Error.raise_error :tramway, :core, :application_form, :initialize, :polymorphic_class_is_nil,
21
- association_name: association
21
+ association_name: association
22
22
  else
23
23
  super association_class.find value.split('_')[-1]
24
24
  send "#{association}_type=", association_class.to_s
@@ -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.send("#{current_user.role}_scope", current_user.id).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.send("#{current_user.role}_scope", current_user.id).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,19 @@ module Tramway::Core::InputsHelper
79
62
  }.merge options
80
63
  end
81
64
 
82
- def else_params(property:, object:, type:, form_object:, value:, options: {})
65
+ def else_params(**options)
83
66
  {
84
- as: type,
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_else_value(options[:form_object], options[:property], options[:value])
90
73
  }
91
- }.merge options
74
+ }.merge options[:options] || {}
75
+ end
76
+
77
+ def build_else_value(form_object, property, value)
78
+ form_object.send(property) ? form_object.model.send(property) : value
92
79
  end
93
80
  end
@@ -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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Tramway
4
4
  module Core
5
- VERSION = '1.17.6'
5
+ VERSION = '1.17.6.1'
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.6
4
+ version: 1.17.6.1
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-04-05 00:00:00.000000000 Z
12
+ date: 2020-04-06 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