tramway-core 1.18 → 1.18.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: 57bc94fcad00f60e39f4b5eb62b9c959a0739d3063d9ee3017349c9ef8e91c04
4
- data.tar.gz: 4b11029d70b3dd9f45bfc7ec4e73fc8fb4b3f9ae60eec90756431ab92d611aa7
3
+ metadata.gz: 88f57e54e293b5c5a85a88563762fd8c26df2ccbcb6eedebcb8ad1636d19ab08
4
+ data.tar.gz: 721461846180ea4eb78ebdbc314029be09ff3c391c995900ef0d2a498236af62
5
5
  SHA512:
6
- metadata.gz: 6955a32c4a63a19ea949694636d64b7725aa571fc601e213276e67555ac8300bea5bbff4ca3c9337eeba9e8001dcf40b4b9dda4ca6e7bb6f0ab1d2d1d13cb2f5
7
- data.tar.gz: cad297b01c90cff4e6a66048cec29e39faba8744ec4148ddf6d1e1fcf80775974bc361414ea8dc05c4788749e87d8cef5ec39832dc150d32e9f80704b8d4d100
6
+ metadata.gz: b641dc9b842fb20fef05c90a73ed0007ddb9804b45cef8e6b74b2c6eea99e6610580d79450a7ef121a53a373685369addb83078e0db5e658c2129306c542c62c
7
+ data.tar.gz: 7f19244857938c969c03e52d49c063d34b52e25e4aad17d9bdee41bc7d12b2e650f241ec51a2f6a90ce71ab2cc2fd5409ac5d26857c59b464d44a095632d69c8
data/README.md CHANGED
@@ -34,7 +34,31 @@ Rails.application.config.assets.precompile += %w( *.jpg *.png *.js )
34
34
  ```
35
35
  # Usage
36
36
 
37
- ## Decorators
37
+ ## Tramway::Core::ApplicationRecord
38
+
39
+ ### uploader
40
+
41
+ Tramway use [carrierwave](https://github.com/carrierwaveuploader/carrierwave) for file uploading by default. To mount uploader you should use `uploader` method
42
+
43
+ Interface: `uploader(attribute_name, uploader_name, **options)`
44
+
45
+ * attribute_name - ActiveRecord attribute to mount uploader
46
+ * uploader_name - **short** uploader name. You need to connect uploaders which are compatible with Tramway. Available uploaders:
47
+ * :photo - you can see it [here](https://github.com/Purple-Magic/tramway-core/blob/develop/app/uploaders/photo_uploader.rb)
48
+ * :file - you can see it [here](https://github.com/Purple-Magic/tramway-core/blob/develop/app/uploaders/file_uploader.rb)
49
+ * options - you are available to set options for uploaders exactly for this model. Available options:
50
+ * versions - **only for :photo**. Set needed versions for file to be cropped. If empty - 0 zero versions will be used. All versions you can see [here](https://github.com/Purple-Magic/tramway-core/blob/develop/app/uploaders/photo_uploader.rb)
51
+ * extensions - whitelist of file extensions. If empty will be used default whitelist from the uploaders (links above)
52
+
53
+ Example:
54
+
55
+ ```ruby
56
+ class User < Tramway::Core::ApplicationRecord
57
+ uploader :avatar, :photo, version: [ :small, :medium ], extensions: [ :jpg, :jpeg ]
58
+ end
59
+ ```
60
+
61
+ ## Tramway::Core::ApplicationDecorator
38
62
  ### Associations
39
63
 
40
64
  Your can decorate association models. Supporting all types of association
@@ -157,7 +181,7 @@ copy_to_clipboard "some_id" # some_id is HTML id of element. Content of this ele
157
181
  #### 1. Generate model that you to use. We create Organization, for example
158
182
 
159
183
  ```shell
160
- rails g model organization name:text public_name:text tagline:text address:text phone:text coordinates:point, state: text, favicon:text # remember! State field is required, if you use tramway-admin
184
+ rails g model organization name:text public_name:text tagline:text address:text phone:text coordinates:point state: text favicon:text # remember! State field is required, if you use tramway-admin
161
185
  rails db:migrate
162
186
  ```
163
187
 
@@ -39,11 +39,15 @@ class Tramway::Core::ApplicationForm
39
39
  delegate :defined_enums, to: :model_class
40
40
 
41
41
  def properties(*props)
42
+ props.each { |prop| property prop }
43
+ end
44
+
45
+ def property(prop)
42
46
  @@properties ||= []
43
- @@properties += props
44
- props.each do |prop|
45
- delegate prop, to: :model
46
- define_method("#{prop}=") { |value| model.send "#{prop}=", value }
47
+ @@properties << prop
48
+ delegate prop, to: :model
49
+ define_method("#{prop}=") do |value|
50
+ model.send "#{prop}=", value
47
51
  end
48
52
  end
49
53
 
@@ -7,7 +7,7 @@ module Tramway::Core::ApplicationForms::AssociationObjectHelpers
7
7
  else
8
8
  self.class.send(:define_method, "#{association}=") do |value|
9
9
  model.send "#{association}_id=", value
10
- super class_name.find value
10
+ model.send "#{association}=", class_name.find(value)
11
11
  end
12
12
  end
13
13
  end
@@ -20,7 +20,7 @@ module Tramway::Core::ApplicationForms::AssociationObjectHelpers
20
20
  Tramway::Error.raise_error :tramway, :core, :application_form, :initialize, :polymorphic_class_is_nil,
21
21
  association_name: association
22
22
  else
23
- super association_class.find value.split('_')[-1]
23
+ model.send "#{association}=", association_class.find(value.split('_')[-1])
24
24
  send "#{association}_type=", association_class.to_s
25
25
  end
26
26
  end
@@ -5,19 +5,12 @@ module Tramway::Core::ApplicationForms::PropertiesObjectHelper
5
5
  @form_properties = args
6
6
  end
7
7
 
8
- def form_properties_additional(**args)
9
- @form_properties_additional = args
10
- end
11
-
12
8
  def properties
13
- return @form_properties if @form_properties
14
-
9
+ @form_properties ||= {}
15
10
  yaml_config_file_path = Rails.root.join('app', 'forms', "#{self.class.name.underscore}.yml")
16
11
 
17
- return [] unless File.exist? yaml_config_file_path
12
+ return @form_properties unless File.exist? yaml_config_file_path
18
13
 
19
- @form_properties = YAML.load_file(yaml_config_file_path).deep_symbolize_keys
20
- @form_properties.deep_merge! @form_properties_additional if @form_properties_additional
21
- @form_properties
14
+ @form_properties.deep_merge YAML.load_file(yaml_config_file_path).deep_symbolize_keys
22
15
  end
23
16
  end
@@ -4,7 +4,10 @@ module Tramway::Core::ApplicationForms::SubmitHelper
4
4
  def submit(params)
5
5
  if params
6
6
  params.each { |key, value| send("#{key}=", value) }
7
- save || collecting_associations_errors
7
+ result = save
8
+ result.tap do
9
+ collecting_associations_errors unless result
10
+ end
8
11
  else
9
12
  Tramway::Error.raise_error(:tramway, :core, :application_form, :submit, :params_should_not_be_nil)
10
13
  end
@@ -24,7 +24,7 @@ module Tramway::Core::ExtendableFormsHelpers::ClassBuilder
24
24
  field = property[1][:object]
25
25
  define_file_property_assignment_method property, field
26
26
  else
27
- next unless property[1][:validates].present?
27
+ # next unless property[1][:validates].present?
28
28
 
29
29
  define_assignment_method property
30
30
  end
@@ -9,8 +9,12 @@ module Tramway::Core::ExtendableFormsHelpers::MorePropertiesHelper
9
9
 
10
10
  def define_assignment_method(property)
11
11
  define_method "#{property[0]}=" do |value|
12
- property[1][:validates].each do |pair|
13
- make_validates property[0], pair, value
12
+ if property[1][:validates].present?
13
+ property[1][:validates].each do |pair|
14
+ make_validates property[0], pair, value
15
+ end
16
+ else
17
+ model.values.merge property[0] => value
14
18
  end
15
19
  end
16
20
  end
@@ -5,14 +5,14 @@ module Tramway::Core::ExtendableFormsHelpers::Submit::ClassHelpers
5
5
  define_method 'submit' do |params|
6
6
  model.values ||= {}
7
7
  extended_params = extended(simple_properties, more_properties, params)
8
- params.each do |key, value|
9
- method_name = "#{key}="
10
- send method_name, value if respond_to?(method_name)
11
- end
8
+ every_attribute_set params
12
9
  model.values = extended_params.reduce(model.values) do |hash, pair|
13
10
  hash.merge! pair[0] => pair[1]
14
11
  end
15
- super(params) && model.errors.empty?
12
+
13
+ return unless model.errors.empty?
14
+
15
+ save_in_submit params
16
16
  end
17
17
  end
18
18
  end
@@ -4,4 +4,18 @@ module Tramway::Core::ExtendableFormsHelpers::Submit::ObjectHelpers
4
4
  def extended(simple_properties, more_properties, params)
5
5
  params.except(*simple_properties.keys).except(*jsonb_ignored_properties(more_properties)).permit!.to_h
6
6
  end
7
+
8
+ def every_attribute_set(params)
9
+ params.each do |key, value|
10
+ method_name = "#{key}="
11
+ send(method_name, value) if respond_to?(method_name)
12
+ end
13
+ end
14
+
15
+ def save_in_submit(_params)
16
+ result = save
17
+ result.tap do
18
+ collecting_associations_errors unless result
19
+ end
20
+ end
7
21
  end
@@ -46,11 +46,16 @@ class Tramway::Core::ApplicationRecord < ActiveRecord::Base
46
46
  def uploader(attribute_name, uploader_name, **options)
47
47
  mount_uploader attribute_name, "#{uploader_name.to_s.camelize}Uploader".constantize
48
48
  @versions = options[:versions] if uploader_name == :photo
49
+ @extensions = options[:extensions]
49
50
  end
50
51
 
51
52
  def photo_versions
52
53
  @versions
53
54
  end
55
+
56
+ def file_extensions
57
+ @extensions
58
+ end
54
59
  end
55
60
 
56
61
  # FIXME: detect inhertited locales
@@ -14,6 +14,7 @@ class ApplicationUploader < CarrierWave::Uploader::Base
14
14
  def id_directory
15
15
  if model.respond_to?(:uuid)
16
16
  model.reload unless model.uuid.present?
17
+ model.uuid
17
18
  else
18
19
  model.id
19
20
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class FileUploader < ApplicationUploader
4
- def extension_white_list
5
- %w[pdf doc docx xls csv xlsx jpg svg png jpeg gif]
4
+ def extension_whitelist
5
+ model.class.file_extensions || %w[pdf doc docx xls csv xlsx jpg svg png jpeg gif]
6
6
  end
7
7
  end
@@ -8,7 +8,7 @@ module ImageDefaults
8
8
  [mounted_as, version_name].compact.join('_') << '.gif'
9
9
  end
10
10
 
11
- def extension_white_list
12
- %w[jpg jpeg gif png]
11
+ def extension_whitelist
12
+ model.class.file_extensions || %w[jpg jpeg gif png]
13
13
  end
14
14
  end
@@ -4,7 +4,7 @@ class PhotoUploader < ApplicationUploader
4
4
  include ImageDefaults
5
5
 
6
6
  def default_url
7
- ActionController::Base.helpers.asset_path('images/default_photo.png')
7
+ ActionController::Base.helpers.asset_path('mona_lisa_from_prado_square.png')
8
8
  end
9
9
 
10
10
  def url
@@ -16,10 +16,6 @@ class PhotoUploader < ApplicationUploader
16
16
  end
17
17
  end
18
18
 
19
- def present?
20
- super && width.present? && height.present?
21
- end
22
-
23
19
  version :medium, if: :medium_version_is_needed? do
24
20
  process resize_to_fill: [400, 400]
25
21
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Tramway
4
4
  module Core
5
- VERSION = '1.18'
5
+ VERSION = '1.18.1'
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.18'
4
+ version: 1.18.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-23 00:00:00.000000000 Z
12
+ date: 2020-04-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: audited