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 +4 -4
- data/README.md +28 -2
- data/app/forms/tramway/core/application_form.rb +1 -8
- data/app/forms/tramway/core/application_forms/association_object_helpers.rb +1 -0
- data/app/forms/tramway/core/application_forms/object_helpers.rb +11 -0
- data/app/forms/tramway/core/extendable_forms_helpers/class_builder.rb +1 -1
- data/app/helpers/tramway/core/inputs/associations_helper.rb +28 -0
- data/app/helpers/tramway/core/inputs/polymorphic_associations_helper.rb +24 -0
- data/app/helpers/tramway/core/inputs_helper.rb +47 -51
- data/app/uploaders/photo_uploader.rb +4 -0
- data/app/views/tramway/core/shared/_input.html.haml +3 -2
- data/app/views/tramway/core/shared/input_extended_types/_select.html.haml +1 -1
- data/lib/tramway/core/application.rb +1 -1
- data/lib/tramway/core/version.rb +1 -1
- data/lib/yaml/errors.yml +4 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9eefb734f64738208d5ebff801e31274167b6a7332001243b24e0612435e2b16
|
4
|
+
data.tar.gz: 2d26b33208ea81fb18c347d96e7dc7aecf95e4786121dbc9c834dc4e4f17309f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
##
|
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
|
@@ -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
|
-
|
5
|
-
|
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
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
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:
|
32
|
+
name: "#{options[:object]}[#{options[:property]}]",
|
33
|
+
id: "#{options[:object]}_#{options[:property]}",
|
34
|
+
value: options[:value]
|
46
35
|
},
|
47
|
-
selected:
|
48
|
-
collection: collection
|
49
|
-
|
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
|
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: (
|
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
|
-
}
|
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
|
@@ -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
|
-
|
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, **
|
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
|
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
|
data/lib/tramway/core/version.rb
CHANGED
data/lib/yaml/errors.yml
CHANGED
@@ -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
|
+
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-
|
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
|