tramway-core 1.17.4 → 1.17.6.1

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: b6297a0252cf6856f995abf0de3e37b9376453d5df79a40e8ccb0dae8f75e06a
4
- data.tar.gz: 7e9ec3266141fa021103ee9f4263c49aeedfad149c8188b635f97653aee258eb
3
+ metadata.gz: d406acc40d7905296b2257e659b8f5135d8b3caeb3accb877e092a3e1d4b43d6
4
+ data.tar.gz: 3b08362b8b0e3ab614df712ff887c59202e002ae7d894c6712d5007b4b10bbb2
5
5
  SHA512:
6
- metadata.gz: 9cbf09a9abc0f90d6cbd59751960cbb40820309857035a5b5ec6412ff02bbfa4d91c15ac625a2bae005de13d8b043f48b10e2e7f48c6bf31bbdf5448b3412cae
7
- data.tar.gz: fb4ac5cba33590b6bee01a9e16bc96af19c12157ba103510f3d6761ba1777baf911af1b061ed29614fc97de013345a10d8f78611923fa0fa32b3982d48e8ba36
6
+ metadata.gz: c680f805536cb1b02f53d8919ef685b3d4d591d2bc68d2679021b72d96fba9c1ffdb9926dc9c108874d73ed5b1de0eb72161d6b7caf5f9972d83dc1a0bb5b5e6
7
+ data.tar.gz: 51b5f3715c11f83bed392d62f678ed60262cc848d0f4e34941c2693071ffe150821a293cf653195407565aeaf291b844d9086d27771b92a61c77d265e939b261
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
 
@@ -123,8 +116,10 @@ class Tramway::Core::ApplicationForm < ::Reform::Form
123
116
 
124
117
  def save
125
118
  super
119
+ rescue ArgumentError => e
120
+ Tramway::Error.raise_error :tramway, :core, :application_form, :save, :argument_error, message: e.message
126
121
  rescue StandardError => e
127
- Tramway::Error.raise_error :tramway, :core, :application_form, :submit, :looks_like_you_have_method,
122
+ Tramway::Error.raise_error :tramway, :core, :application_form, :save, :looks_like_you_have_method,
128
123
  method_name: e.name.to_s.gsub('=', ''), model_class: @@model_class, class_name: self.class
129
124
  end
130
125
  end
@@ -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,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
@@ -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
@@ -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'
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"
@@ -13,8 +17,10 @@ tramway:
13
17
  validates:
14
18
  you_need_to_set_model_class: 'You need to set `model_class` name while using validations. Just write `self.model_class = YOUR_MODEL_NAME` in the class area.'
15
19
  submit:
16
- looks_like_you_have_method: "Looks like you have method `%{method_name}` in %{model_class}. You should rename it or rename property in %{class_name}"
17
20
  params_should_not_be_nil: "ApplicationForm::Params should not be nil"
21
+ save:
22
+ looks_like_you_have_method: "Looks like you have method `%{method_name}` in %{model_class}. You should rename it or rename property in %{class_name}"
23
+ argument_error: "We have ArgumentError with message: %{message}"
18
24
  model_class:
19
25
  there_is_not_model_class: "There is not model class name for %{name}. Should be %{model_class_name} or you can use another class to initialize form object or just initialize form with object."
20
26
  concerns:
@@ -32,4 +38,3 @@ tramway:
32
38
  please_implement_title: "Please, implement `title` method in a %{class_name} or %{object_class}"
33
39
  link:
34
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."
35
-
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
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-03-28 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