trusty-cms 4.3.5 → 5.0.0

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: 93c5757a5dcb67c36520c6ddb0cd237065fb7030fc7f2cd2f2e07f63a78224c4
4
- data.tar.gz: c44066af31851544cba8ae7ed6d055b59d10a1d84cc3836f1168ebd817853dfb
3
+ metadata.gz: f0fc7adbc55517598d8eb365fe2518df17faab505fece52ec5dcb3374459b45c
4
+ data.tar.gz: 9de9c0c248cbe41a2c4b55592c9a3412f5cc50279e680de125c7ced575c0a0ac
5
5
  SHA512:
6
- metadata.gz: e37967a7f2db311cf7144e90da17c5c3f0ad4e5ab8bd3eefabbeb3cc86204bbe04975b1e9e6de09daf8f4e0eeb13640982f5205440d6874488f25f365ab97c77
7
- data.tar.gz: cf4e4e7fd6d0a475cd4f704ee607abef8d83b935bdf161b3d0e61c9e66112d40c14d58a92395021b7867ad206061a27497482bb9c0c3cebc4897b5e64d1559ef
6
+ metadata.gz: 737f21b157db73ad8763d0bcb2576e8f6ff9ddff69d3be98713aae5903c71432e48db36df8f16b4def7e226f18d2f8fe4d4905ef80623f5638a4b245f2ebbe26
7
+ data.tar.gz: f472cff774a907272ac9a4a60a9a73ac9ef081fe4cd29411abf55238e1ef62640384f00a5be9c7f7fe68e968b05c9fa680438614378501e0cc7e7eebb50e4581
data/Gemfile CHANGED
@@ -12,10 +12,11 @@ gem 'trustygems', '~> 0.2.0'
12
12
  gemspec
13
13
 
14
14
  group :development, :test do
15
+ gem 'activestorage-validator'
15
16
  gem 'acts_as_list'
16
17
  gem 'database_cleaner'
17
18
  gem 'factory_bot_rails', '6.2.0'
18
- gem 'kt-paperclip', '~> 7.0.0'
19
+ gem 'file_validators'
19
20
  gem 'launchy', '~> 2.5.0'
20
21
  gem 'mysql2'
21
22
  gem 'poltergeist', '~> 1.18.1'
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- trusty-cms (4.3.5)
4
+ trusty-cms (5.0.0)
5
5
  RedCloth (= 4.3.2)
6
+ activestorage-validator
6
7
  acts_as_list (>= 0.9.5, < 1.1.0)
7
8
  acts_as_tree (~> 2.9.1)
8
9
  ckeditor (>= 4.2.2, < 4.4.0)
@@ -12,6 +13,7 @@ PATH
12
13
  haml
13
14
  haml-rails (~> 2.0)
14
15
  highline (>= 1.7.8, < 2.1.0)
16
+ image_processing
15
17
  kraken-io
16
18
  mini_racer
17
19
  mysql2
@@ -86,6 +88,8 @@ GEM
86
88
  activesupport (= 6.1.4.1)
87
89
  marcel (~> 1.0.0)
88
90
  mini_mime (>= 1.1.0)
91
+ activestorage-validator (0.1.4)
92
+ rails (>= 5.2.0)
89
93
  activesupport (6.1.4.1)
90
94
  concurrent-ruby (~> 1.0, >= 1.0.2)
91
95
  i18n (>= 1.6, < 2)
@@ -144,6 +148,9 @@ GEM
144
148
  factory_bot (~> 6.2.0)
145
149
  railties (>= 5.0.0)
146
150
  ffi (1.15.4)
151
+ file_validators (3.0.0)
152
+ activemodel (>= 3.2)
153
+ mime-types (>= 1.0)
147
154
  globalid (0.5.2)
148
155
  activesupport (>= 5.0)
149
156
  haml (5.2.2)
@@ -166,18 +173,15 @@ GEM
166
173
  multi_xml (>= 0.5.2)
167
174
  i18n (1.8.10)
168
175
  concurrent-ruby (~> 1.0)
176
+ image_processing (1.12.1)
177
+ mini_magick (>= 4.9.5, < 5)
178
+ ruby-vips (>= 2.0.17, < 3)
169
179
  json (2.5.1)
170
180
  kraken-io (0.1.3)
171
181
  activesupport
172
182
  httparty
173
183
  json
174
184
  multipart-post
175
- kt-paperclip (7.0.0)
176
- activemodel (>= 4.2.0)
177
- activesupport (>= 4.2.0)
178
- marcel (~> 1.0.1)
179
- mime-types
180
- terrapin (~> 0.6.0)
181
185
  launchy (2.5.0)
182
186
  addressable (~> 2.7)
183
187
  libv8-node (15.14.0.1-x86_64-darwin-18)
@@ -188,11 +192,12 @@ GEM
188
192
  nokogiri (>= 1.5.9)
189
193
  mail (2.7.1)
190
194
  mini_mime (>= 0.1.1)
191
- marcel (1.0.1)
195
+ marcel (1.0.2)
192
196
  method_source (1.0.0)
193
197
  mime-types (3.3.1)
194
198
  mime-types-data (~> 3.2015)
195
199
  mime-types-data (3.2021.0225)
200
+ mini_magick (4.11.0)
196
201
  mini_mime (1.1.1)
197
202
  mini_racer (0.4.0)
198
203
  libv8-node (~> 15.14.0.0)
@@ -201,9 +206,9 @@ GEM
201
206
  multipart-post (2.1.1)
202
207
  mysql2 (0.5.3)
203
208
  nio4r (2.5.8)
204
- nokogiri (1.12.5-x86_64-darwin)
209
+ nokogiri (1.12.4-x86_64-darwin)
205
210
  racc (~> 1.4)
206
- nokogiri (1.12.5-x86_64-linux)
211
+ nokogiri (1.12.4-x86_64-linux)
207
212
  racc (~> 1.4)
208
213
  orm_adapter (0.5.0)
209
214
  poltergeist (1.18.1)
@@ -281,6 +286,8 @@ GEM
281
286
  rspec-mocks (~> 3.10)
282
287
  rspec-support (~> 3.10)
283
288
  rspec-support (3.10.2)
289
+ ruby-vips (2.1.3)
290
+ ffi (~> 1.12)
284
291
  ruby_parser (3.17.0)
285
292
  sexp_processor (~> 4.15, >= 4.15.1)
286
293
  sass-rails (6.0.0)
@@ -336,10 +343,11 @@ PLATFORMS
336
343
  x86_64-linux
337
344
 
338
345
  DEPENDENCIES
346
+ activestorage-validator
339
347
  acts_as_list
340
348
  database_cleaner
341
349
  factory_bot_rails (= 6.2.0)
342
- kt-paperclip (~> 7.0.0)
350
+ file_validators
343
351
  launchy (~> 2.5.0)
344
352
  mysql2
345
353
  poltergeist (~> 1.18.1)
@@ -6,6 +6,7 @@ main {
6
6
 
7
7
  .reversed main {
8
8
  .content {
9
+ line-height: 1.5;
9
10
  padding: 1em;
10
11
  }
11
12
  }
@@ -1,6 +1,9 @@
1
1
  class Admin::AssetsController < Admin::ResourceController
2
2
  paginate_models(per_page: 50)
3
3
  COMPRESS_FILE_TYPE = ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml'].freeze
4
+ before_action do
5
+ ActiveStorage::Current.host = request.base_url
6
+ end
4
7
 
5
8
  def index
6
9
  assets = Asset.order('created_at DESC')
@@ -67,6 +70,7 @@ class Admin::AssetsController < Admin::ResourceController
67
70
  private
68
71
 
69
72
  def compress(uploaded_asset)
73
+ require 'open-uri'
70
74
  data = $kraken.upload(uploaded_asset.tempfile.path, 'lossy' => true)
71
75
  File.write(uploaded_asset.tempfile, URI.open(data.kraked_url).read, mode: 'wb')
72
76
  uploaded_asset
@@ -81,4 +85,4 @@ class Admin::AssetsController < Admin::ResourceController
81
85
  def asset_params
82
86
  params.permit(:id, :for_attachment, asset: [:caption, :for_attachment, asset: []])
83
87
  end
84
- end
88
+ end
data/app/models/asset.rb CHANGED
@@ -1,6 +1,4 @@
1
1
  class Asset < ActiveRecord::Base
2
- include Paperclip::Glue
3
-
4
2
  has_many :page_attachments, dependent: :destroy
5
3
  has_many :pages, through: :page_attachments
6
4
  has_site if respond_to? :has_site
@@ -33,52 +31,43 @@ class Asset < ActiveRecord::Base
33
31
  end
34
32
  }
35
33
 
36
- has_attached_file :asset,
37
- styles: lambda { |attachment|
38
- AssetType.for(attachment).paperclip_styles
39
- },
40
- processors: lambda { |asset|
41
- asset.paperclip_processors
42
- },
43
- whiny: false,
44
- storage: TrustyCms.config['paperclip.storage'],
45
- path: TrustyCms.config['paperclip.path'],
46
- url: TrustyCms.config['paperclip.url'],
47
- fog_credentials: TrustyCmsClippedExtension::Cloud.credentials,
48
- fog_directory: TrustyCms.config['paperclip.fog.directory'],
49
- fog_public: TrustyCms.config['paperclip.fog.public?'] || true,
50
- fog_host: TrustyCmsClippedExtension::Cloud.host,
51
- fog_file: {
52
- 'Cache-Control' => 'max-age=31536000',
53
- }
54
-
55
- validates_attachment_content_type :asset, content_type: ['application/zip', 'image/jpg', 'image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/javascript', 'text/javascript', 'text/css']
56
-
34
+ has_one_attached :asset
35
+ validates :asset,
36
+ presence: true,
37
+ blob:
38
+ {
39
+ content_type: %w[application/zip image/jpg image/jpeg image/png image/gif application/pdf text/css],
40
+ size_range: 1..5.megabytes,
41
+ }
57
42
  before_save :assign_title
58
43
  before_save :assign_uuid
59
44
 
60
- after_post_process :read_dimensions
61
-
62
- validates_attachment_presence :asset, message: 'You must choose a file to upload!'
63
- if TrustyCms.config['paperclip.skip_filetype_validation'] != 'true' && TrustyCms.config['paperclip.content_types']
64
- validates_attachment_content_type :asset, content_type: TrustyCms.config['paperclip.content_types'].gsub(' ', '').split(',')
65
- else
66
- validates_attachment_presence :asset, message: 'Your uploaded file must have an extension in its name!'
67
- end
68
- validates_attachment_size :asset, less_than: (TrustyCms.config['assets.max_asset_size'] || 5).to_i.megabytes
69
-
70
45
  def asset_type
71
46
  AssetType.for(asset)
72
47
  end
73
- delegate :paperclip_processors, :paperclip_styles, :style_dimensions, :style_format, to: :asset_type
48
+ delegate :paperclip_processors, :paperclip_styles, :active_storage_styles, :style_dimensions, :style_format,
49
+ to: :asset_type
74
50
 
75
51
  def thumbnail(style_name = 'original')
76
- return asset.url if style_name.to_sym == :original
77
- return asset.url(style_name.to_sym) if style?(style_name)
52
+ return asset.url if style_name == 'original'
53
+ return asset_variant(style_name).processed.url if asset.variable?
78
54
 
79
55
  asset_type.icon(style_name)
80
56
  end
81
57
 
58
+ def asset_variant(style_name)
59
+ case style_name
60
+ when 'thumbnail'
61
+ asset.variant(gravity: 'Center', resize: '100x100^', crop: '100x100+0+0')
62
+ when 'normal'
63
+ asset.variant(gravity: 'Center', resize: '640x640^')
64
+ when 'small'
65
+ asset.variant(gravity: 'Center', resize: '320x320^')
66
+ when 'icon'
67
+ asset.variant(gravity: 'Center', resize: '50x50^')
68
+ end
69
+ end
70
+
82
71
  def style?(style_name = 'original')
83
72
  style_name == 'original' || paperclip_styles.keys.include?(style_name.to_sym)
84
73
  end
@@ -110,7 +99,10 @@ class Asset < ActiveRecord::Base
110
99
  end
111
100
 
112
101
  def geometry(style_name = 'original')
113
- raise Paperclip::StyleError, "Requested style #{style_name} is not defined for this asset." unless style?(style_name)
102
+ unless style?(style_name)
103
+ raise Paperclip::StyleError,
104
+ "Requested style #{style_name} is not defined for this asset."
105
+ end
114
106
 
115
107
  @geometry ||= {}
116
108
  begin
@@ -118,8 +110,9 @@ class Asset < ActiveRecord::Base
118
110
  original_geometry
119
111
  else
120
112
  style = asset.styles[style_name.to_sym]
121
- original_geometry.transformed_by(style.geometry) # this can return dimensions for fully specified style sizes but not for relative sizes when there are no original dimensions
122
- end
113
+ original_geometry.transformed_by(style.geometry)
114
+ # this can return dimensions for fully specified style sizes but not for relative sizes when there are no original dimensions
115
+ end
123
116
  rescue Paperclip::TransformationError => e
124
117
  Rails.logger.warn "geometry transformation error: #{e}"
125
118
  original_geometry # returns a blank geometry if the real geometry cannot be calculated
@@ -174,19 +167,17 @@ class Asset < ActiveRecord::Base
174
167
  # original file and calculate thumbnail dimensions later, on demand.
175
168
 
176
169
  def read_dimensions
177
- if image?
178
- if file = asset.queued_for_write[:original]
179
- geometry = Paperclip::Geometry.from_file(file)
180
- self.original_width = geometry.width
181
- self.original_height = geometry.height
182
- self.original_extension = File.extname(file.path)
183
- end
170
+ if image? && file = asset.queued_for_write[:original]
171
+ geometry = Paperclip::Geometry.from_file(file)
172
+ self.original_width = geometry.width
173
+ self.original_height = geometry.height
174
+ self.original_extension = File.extname(file.path)
184
175
  end
185
176
  true
186
177
  end
187
178
 
188
179
  def assign_title
189
- self.title = asset_file_name.downcase.sub(original_extension, '').sub('.', '')
180
+ self.title = asset.filename.base
190
181
  end
191
182
 
192
183
  def assign_uuid
@@ -235,7 +226,7 @@ class Asset < ActiveRecord::Base
235
226
 
236
227
  # this is a convenience for image-pickers
237
228
  def self.thumbnail_options
238
- asset_sizes = thumbnail_sizes.collect do |k, v|
229
+ asset_sizes = thumbnail_sizes.map do |k, v|
239
230
  size_id = k
240
231
  size_description = "#{k}: "
241
232
  size_description << (v.is_a?(Array) ? v.join(' as ') : v)
@@ -104,6 +104,10 @@ class AssetType
104
104
  @paperclip_styles
105
105
  end
106
106
 
107
+ def active_storage_styles
108
+ @active_storage_styles ||= normalize_style_rules(configured_styles.merge(styles))
109
+ end
110
+
107
111
  # Takes a motley collection of differently-defined styles and renders them into the standard hash-of-hashes format.
108
112
  # Solitary strings are assumed to be #
109
113
  def normalize_style_rules(styles = {})
@@ -173,8 +177,8 @@ class AssetType
173
177
  # class methods
174
178
 
175
179
  def self.for(attachment)
176
- extension = File.extname(attachment.original_filename).sub(/^\.+/, '')
177
- from_extension(extension) || from_mimetype(attachment.instance_read(:content_type)) || catchall
180
+ extension = attachment.record.original_extension
181
+ from_extension(extension) || from_mimetype(attachment.content_type) || catchall
178
182
  end
179
183
 
180
184
  def self.from_extension(extension)
@@ -16,10 +16,12 @@
16
16
  = "#{t("clipped_extension.filename")}: #{@asset.asset_file_name unless @asset.new_record?}"
17
17
  %br
18
18
  %label.url
19
- = "#{t("clipped_extension.asset_url")}: #{image_path @asset.thumbnail unless @asset.new_record?}"
19
+ = "#{t("clipped_extension.asset_url")}: #{image_path @asset.asset.url unless @asset.new_record?}"
20
+ %br
21
+ %label.id
22
+ = "#{t("clipped_extension.asset_id")}: #{@asset.asset.id unless @asset.new_record?}"
20
23
  %p.asset
21
- - display_size = TrustyCms::config['assets.display_size'] || 'normal'
22
- = image_tag @asset.thumbnail(display_size.to_sym), :class => 'preview'
24
+ = image_tag @asset.thumbnail("normal"), :class => 'preview'
23
25
 
24
26
  = updated_stamp @asset
25
27
 
@@ -66,6 +66,7 @@ en:
66
66
  asset_page_attachment_note: 'Attached assets. These can be inserted with drag and drop or shown with the <code>&lt;r:assets:each /&gt;</code> tag.'
67
67
  asset_note: 'Attached assets. '
68
68
  asset_url: 'Asset URL'
69
+ asset_id: 'Asset ID'
69
70
  assets: 'Assets'
70
71
  assets_explanation: 'Assets and images can be uploaded and then attached or inserted into pages, snippets and layouts. Click on an asset name above to edit it or click <code>Remove</code> to delete it.'
71
72
  assets_title: 'Assets'
data/lib/trusty_cms.rb CHANGED
@@ -2,6 +2,6 @@ TRUSTY_CMS_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..')) unle
2
2
 
3
3
  unless defined? TrustyCms::VERSION
4
4
  module TrustyCms
5
- VERSION = '4.3.5'.freeze
5
+ VERSION = '5.0.0'.freeze
6
6
  end
7
7
  end
data/trusty_cms.gemspec CHANGED
@@ -23,7 +23,7 @@ a general purpose content managment system--not merely a blogging engine.'
23
23
  s.summary = 'A no-fluff content management system designed for small teams.'
24
24
  s.license = 'MIT'
25
25
  s.test_files = Dir['spec/**/*']
26
-
26
+ s.add_dependency 'activestorage-validator'
27
27
  s.add_dependency 'acts_as_list', '>= 0.9.5', '< 1.1.0'
28
28
  s.add_dependency 'acts_as_tree', '~> 2.9.1'
29
29
  s.add_dependency 'ckeditor', '>= 4.2.2', '< 4.4.0'
@@ -33,6 +33,7 @@ a general purpose content managment system--not merely a blogging engine.'
33
33
  s.add_dependency 'haml'
34
34
  s.add_dependency 'haml-rails', '~> 2.0'
35
35
  s.add_dependency 'highline', '>= 1.7.8', '< 2.1.0'
36
+ s.add_dependency 'image_processing'
36
37
  s.add_dependency 'kraken-io'
37
38
  s.add_dependency 'mini_racer'
38
39
  s.add_dependency 'mysql2'
@@ -1,7 +1,7 @@
1
1
  require 'acts_as_list'
2
2
  require 'uuidtools'
3
3
  require 'trusty_cms_clipped_extension/cloud'
4
- require 'paperclip'
4
+ require 'active_storage/engine'
5
5
  require 'will_paginate/array'
6
6
  module Clipped
7
7
  class Engine < Rails::Engine
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trusty-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.5
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - TrustyCms CMS dev team
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2021-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activestorage-validator
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: acts_as_list
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -160,6 +174,20 @@ dependencies:
160
174
  - - "<"
161
175
  - !ruby/object:Gem::Version
162
176
  version: 2.1.0
177
+ - !ruby/object:Gem::Dependency
178
+ name: image_processing
179
+ requirement: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ type: :runtime
185
+ prerelease: false
186
+ version_requirements: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
163
191
  - !ruby/object:Gem::Dependency
164
192
  name: kraken-io
165
193
  requirement: !ruby/object:Gem::Requirement
@@ -793,7 +821,6 @@ files:
793
821
  - config/initializers/active_record_extensions.rb
794
822
  - config/initializers/assets.rb
795
823
  - config/initializers/devise.rb
796
- - config/initializers/interpolation.rb
797
824
  - config/initializers/kraken.rb
798
825
  - config/initializers/response_cache_timeout.rb
799
826
  - config/initializers/secret_token.rb
@@ -8541,7 +8568,6 @@ files:
8541
8568
  - spec/rails_helper.rb
8542
8569
  - spec/spec_helper.rb
8543
8570
  - spec/support/custom_actions.rb
8544
- - trusty-cms-5.0.0.gem
8545
8571
  - trusty_cms.gemspec
8546
8572
  - vendor/extensions/clipped-extension/clipped_extension.rb
8547
8573
  - vendor/extensions/clipped-extension/lib/admin/assets_helper.rb
@@ -1,6 +0,0 @@
1
- require 'paperclip'
2
-
3
- Paperclip.interpolates :no_original_style do |attachment, style|
4
- style ||= :original
5
- style == attachment.default_style ? nil : "_#{style}"
6
- end
data/trusty-cms-5.0.0.gem DELETED
Binary file