tramway-core 1.18.0.4 → 1.18.3

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: dc4e360083a946fd3e4d022ed65747d56f21a42adb46cda0224d6873cf8db42d
4
- data.tar.gz: c1a39ccd53513c8ab09d9d2e1ff576b9c309ba7f07e7f2238b03501dfb20057b
3
+ metadata.gz: fcd0a4e310b681ce9df9a69b0cdb7df805937bee30e54d2b37dc77e1a059f0b3
4
+ data.tar.gz: 5a9ef583926f1d2b99a6a338f1b368e360c941978ec3f1f0489e8b733f76eacd
5
5
  SHA512:
6
- metadata.gz: 77f182880e0b69605f74e99a660ce5d855efc2b37f3179fd38df111fd9eaae0bd7fb67adaa1b6a3ed16bf0b779508e99da07062b203f25f005d66d432741ae00
7
- data.tar.gz: aec229afedc05c8353a4a499f50c91dea8510a0e8ffb5dec7756f241a61ef4f62cd1fcd0586fa80ccffa287be0c8fa76909af35592abfeadcf85ea6f0f8a7303
6
+ metadata.gz: cdd784f851074f4ed1bb2d5291b80bf4e064f46403e1850352c5304f74a439d2032475c16254a59b1e3ffd645ed7ee9ee6337a9cfdb641d88c888696b45c119e
7
+ data.tar.gz: 9ce88aa8ae79eccd838a6e52e18792fabe16cf8b6de3b1a7f37235d6f3286e58f9275092cd59deaeea48a711ce273de85a33bd817c8b300556fc85625e979679
data/README.md CHANGED
@@ -34,7 +34,32 @@ 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
+ * :ico - you can see [here](https://github.com/Purple-Magic/tramway-core/blob/develop/app/uploaders/ico_uploader.rb)
50
+ * options - you are available to set options for uploaders exactly for this model. Available options:
51
+ * 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)
52
+ * extensions - whitelist of file extensions. If empty will be used default whitelist from the uploaders (links above)
53
+
54
+ Example:
55
+
56
+ ```ruby
57
+ class User < Tramway::Core::ApplicationRecord
58
+ uploader :avatar, :photo, version: [ :small, :medium ], extensions: [ :jpg, :jpeg ]
59
+ end
60
+ ```
61
+
62
+ ## Tramway::Core::ApplicationDecorator
38
63
  ### Associations
39
64
 
40
65
  Your can decorate association models. Supporting all types of association
@@ -157,7 +182,7 @@ copy_to_clipboard "some_id" # some_id is HTML id of element. Content of this ele
157
182
  #### 1. Generate model that you to use. We create Organization, for example
158
183
 
159
184
  ```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
185
+ rails g tramway:core:application
161
186
  rails db:migrate
162
187
  ```
163
188
 
@@ -15,4 +15,8 @@ class Tramway::Core::ApplicationController < ActionController::Base
15
15
  def model_class
16
16
  params[:model].constantize
17
17
  end
18
+
19
+ def authenticated_user
20
+ (defined?(current_user) && current_user.try(:model)) || (defined?(current_admin) && current_admin.model)
21
+ end
18
22
  end
@@ -68,6 +68,10 @@ class Tramway::Core::ApplicationDecorator
68
68
  def model_name
69
69
  model_class.try(:model_name)
70
70
  end
71
+
72
+ def filters
73
+ {}
74
+ end
71
75
  end
72
76
 
73
77
  def link
@@ -29,12 +29,17 @@ module Tramway::Core::Associations::ClassHelper
29
29
  def define_main_association_method(association_name, decorator)
30
30
  define_method association_name do
31
31
  association = object.class.reflect_on_association(association_name)
32
+ type = association_type(association)
33
+ return if association_has_one_without_object(object, association_name, type)
34
+
32
35
  check_association object, association_name, association
33
36
  decorator_class_name = decorator || decorator_class_name(class_name(association))
34
- if association_type(association).in? %i[has_many has_and_belongs_to_many]
35
- return associations_collection(object, association_name, decorator_class_name)
37
+ case type
38
+ when :has_many, :has_and_belongs_to_many
39
+ associations_collection(object, association_name, decorator_class_name)
40
+ when :belongs_to, :has_one
41
+ decorator_class_name.decorate(association_object(object, association_name))
36
42
  end
37
- return decorator_class_name.decorate object.send association_name if association_type(association) == :belongs_to
38
43
  end
39
44
  end
40
45
  end
@@ -36,6 +36,23 @@ module Tramway::Core::Associations::ObjectHelper
36
36
  end
37
37
 
38
38
  def add_association_form_class_name(object, association_name)
39
- "Admin::#{object.class.to_s.pluralize}::Add#{association_name.to_s.camelize.singularize}Form".constantize
39
+ form_class = "Admin::#{object.class.to_s.pluralize}::Add#{association_name.to_s.camelize.singularize}Form"
40
+
41
+ begin
42
+ form_class.constantize
43
+ rescue StandardError
44
+ Tramway::Error.raise_error(
45
+ :tramway, :core, :associations, :object_helper, :habtm_add_class_not_defined,
46
+ class: form_class, association_name: association_name
47
+ )
48
+ end
49
+ end
50
+
51
+ def association_has_one_without_object(object, association_name, association_type)
52
+ association_type == :has_one && object.send(association_name).nil?
53
+ end
54
+
55
+ def association_object(object, association_name)
56
+ object.send association_name
40
57
  end
41
58
  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
@@ -5,20 +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
12
 
16
13
  return unless model.errors.empty?
17
- params.each { |key, value| send("#{key}=", value) }
18
- result = save
19
- result.tap do
20
- collecting_associations_errors unless result
21
- end
14
+
15
+ save_in_submit params
22
16
  end
23
17
  end
24
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
@@ -2,9 +2,10 @@
2
2
 
3
3
  module Tramway::Core::Inputs::AssociationsHelper
4
4
  def build_collection_for_association(form_object, property)
5
+ user = defined?(current_user) ? current_user : current_admin
5
6
  full_class_name_association = form_object.class.full_class_name_association(property)
6
7
  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
+ full_class_name_association.active.send("#{user.role}_scope", user.id).map do |obj|
8
9
  decorator_class(full_class_name_association).decorate obj
9
10
  end.sort_by(&:name)
10
11
  end
@@ -2,8 +2,9 @@
2
2
 
3
3
  module Tramway::Core::Inputs::PolymorphicAssociationsHelper
4
4
  def build_collection_for_polymorphic_association(form_object, property)
5
+ user = defined?(current_user) ? current_user : current_admin
5
6
  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
+ class_name.active.send("#{user.role}_scope", user.id).map do |obj|
7
8
  decorator_class(class_name).decorate obj
8
9
  end
9
10
  end.flatten
@@ -12,7 +12,7 @@ class Tramway::Core::ApplicationRecord < ActiveRecord::Base
12
12
  state :removed
13
13
 
14
14
  event :remove do
15
- transition active: :remove
15
+ transition active: :removed
16
16
  end
17
17
  end
18
18
 
@@ -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
@@ -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
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class IcoUploader < ApplicationUploader
4
+ def extension_whitelist
5
+ model.class.file_extensions || %w[ico]
6
+ end
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Tramway
4
4
  module Core
5
- VERSION = '1.18.0.4'
5
+ VERSION = '1.18.3'
6
6
  end
7
7
  end
@@ -21,6 +21,8 @@ class Tramway::Error < RuntimeError
21
21
  def raise_error(*coordinates, **options)
22
22
  @errors ||= YAML.load_file("#{Tramway::Core.root}/yaml/errors.yml").with_indifferent_access
23
23
  error = @errors.dig(*coordinates)
24
+ raise 'Error is not defined in YAML' unless error
25
+
24
26
  options.each do |pair|
25
27
  error.gsub!("%{#{pair[0]}}", pair[1].to_s)
26
28
  end
@@ -29,6 +29,7 @@ tramway:
29
29
  associations:
30
30
  object_helper:
31
31
  please_specify_association_name: "Please, specify `%{association_name}` association class_name in %{object_class} model. For example: `has_many :%{association_name}, class_name: '%{association_class_name}'`"
32
+ habtm_add_class_not_defined: "You should define class `%{class}` to be able add and remove `%{association_name}`"
32
33
  class_helper:
33
34
  model_does_not_have_association: "Model %{object_class} does not have association named `%{association_name}`"
34
35
  application_decorator:
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.0.4
4
+ version: 1.18.3
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-26 00:00:00.000000000 Z
12
+ date: 2020-06-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: audited
@@ -361,6 +361,7 @@ files:
361
361
  - app/models/tramway/core/application_record.rb
362
362
  - app/uploaders/application_uploader.rb
363
363
  - app/uploaders/file_uploader.rb
364
+ - app/uploaders/ico_uploader.rb
364
365
  - app/uploaders/image_defaults.rb
365
366
  - app/uploaders/photo_uploader.rb
366
367
  - app/views/tramway/core/404.haml