card-mod-carrierwave 0.11.3 → 0.11.4
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/lib/carrier_wave/file_card_uploader.rb +31 -80
- data/lib/carrier_wave/file_card_uploader/path.rb +54 -0
- data/set/abstract/attachment.rb +1 -1
- data/set/abstract/attachment/cloud.rb +1 -1
- data/set/abstract/attachment/coded.rb +6 -2
- data/set/abstract/attachment/storage_type.rb +23 -24
- data/set/type/file.rb +3 -3
- data/set/type/file/core.haml +2 -0
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4db88ba4c61088ed0c4b4f7f449391c40989dc9e65dab9351ba39adbca478ab3
|
4
|
+
data.tar.gz: 00eeb5ca66fcc328ab975537e1412c6321fe9698830ef0118b627f81e88a1a9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a9c4885adefd2d41ebbc579a427c06431b3b88539fba3723a27cccefe18603853ee21f8cce4423f7f4c52acbe83173b94bee094833d3db21b47ce46349b94ad9
|
7
|
+
data.tar.gz: c67f091d70fed1c80f7a842ac69f4f620547ef9b4679e9c48f036021f255be0c2a88b6ee81940c09c25b63b17056fca344b60d47b6c8d77bd437c655efd49f70
|
@@ -1,40 +1,4 @@
|
|
1
1
|
module CarrierWave
|
2
|
-
class << self
|
3
|
-
def tmp_path
|
4
|
-
@tmp_path ||= Card.paths["tmp"].existent.first
|
5
|
-
end
|
6
|
-
end
|
7
|
-
|
8
|
-
class SanitizedFile
|
9
|
-
def content_type
|
10
|
-
# the original content_type method doesn't seem to be very reliable
|
11
|
-
# It uses mime_magic_content_type - which returns invalid/invalid for css files
|
12
|
-
# that start with a comment - as the second option. (we switch the order and
|
13
|
-
# use it as the third option)
|
14
|
-
@content_type ||=
|
15
|
-
existing_content_type ||
|
16
|
-
mini_mime_content_type ||
|
17
|
-
mime_magic_content_type
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
module Uploader
|
22
|
-
# Implements a different name pattern for versions than CarrierWave's
|
23
|
-
# default: we expect the version name at the end of the filename separated
|
24
|
-
# by a dash
|
25
|
-
module Versions
|
26
|
-
private
|
27
|
-
|
28
|
-
# put version at the end of the filename
|
29
|
-
def full_filename for_file
|
30
|
-
name = super(for_file)
|
31
|
-
parts = name.split "."
|
32
|
-
basename = [parts.shift, version_name].compact.join("-")
|
33
|
-
"#{basename}.#{parts.join('.')}"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
2
|
# Takes care of the file upload for cards with attached files.
|
39
3
|
# Most of the upload behaviour depends on the card itself.
|
40
4
|
# (e.g. card type and storage option chosen for the card). So in contrary
|
@@ -162,6 +126,7 @@ module CarrierWave
|
|
162
126
|
class FileCardUploader < Uploader::Base
|
163
127
|
attr_accessor :mod
|
164
128
|
include Card::Env::Location
|
129
|
+
include Path
|
165
130
|
|
166
131
|
STORAGE_TYPES = [:cloud, :web, :coded, :local].freeze
|
167
132
|
CONFIG_OPTIONS = [:provider, :attributes, :directory, :public, :credentials,
|
@@ -230,54 +195,10 @@ module CarrierWave
|
|
230
195
|
end
|
231
196
|
end
|
232
197
|
|
233
|
-
def local_url opts={}
|
234
|
-
"%s/%s/%s" % [local_url_base(opts), file_dir, full_filename(url_filename(opts))]
|
235
|
-
end
|
236
|
-
|
237
|
-
def local_url_base opts={}
|
238
|
-
web_path = Card.config.files_web_path
|
239
|
-
opts.delete(:absolute) ? card_url(web_path) : card_path(web_path)
|
240
|
-
end
|
241
|
-
|
242
|
-
def public_path
|
243
|
-
File.join Cardio.paths["public"].existent.first, url
|
244
|
-
end
|
245
|
-
|
246
|
-
def cache_dir
|
247
|
-
@model.files_base_dir + "/cache"
|
248
|
-
end
|
249
|
-
|
250
|
-
# Carrierwave calls store_path without argument when it stores the file
|
251
|
-
# and with the identifier from the db when it retrieves the file.
|
252
|
-
# In our case the first part of our identifier is not part of the path
|
253
|
-
# but we can construct the filename from db data. So we don't need the
|
254
|
-
# identifier.
|
255
|
-
def store_path for_file=nil
|
256
|
-
if for_file
|
257
|
-
retrieve_path
|
258
|
-
else
|
259
|
-
File.join([store_dir, full_filename(filename)].compact)
|
260
|
-
end
|
261
|
-
end
|
262
|
-
|
263
|
-
def retrieve_path
|
264
|
-
File.join([retrieve_dir, full_filename(filename)].compact)
|
265
|
-
end
|
266
|
-
|
267
|
-
def tmp_path
|
268
|
-
Dir.mkdir model.tmp_upload_dir unless Dir.exist? model.tmp_upload_dir
|
269
|
-
File.join model.tmp_upload_dir, filename
|
270
|
-
end
|
271
|
-
|
272
198
|
def create_versions? new_file
|
273
199
|
model.create_versions? new_file
|
274
200
|
end
|
275
201
|
|
276
|
-
# paperclip compatibility used in type/file.rb#core (base format)
|
277
|
-
def path version=nil
|
278
|
-
version ? versions[version].path : super()
|
279
|
-
end
|
280
|
-
|
281
202
|
def original_filename
|
282
203
|
@original_filename ||= model.selected_action&.comment
|
283
204
|
end
|
@@ -316,4 +237,34 @@ module CarrierWave
|
|
316
237
|
end
|
317
238
|
end
|
318
239
|
end
|
240
|
+
|
241
|
+
class SanitizedFile
|
242
|
+
def content_type
|
243
|
+
# the original content_type method doesn't seem to be very reliable
|
244
|
+
# It uses mime_magic_content_type - which returns invalid/invalid for css files
|
245
|
+
# that start with a comment - as the second option. (we switch the order and
|
246
|
+
# use it as the third option)
|
247
|
+
@content_type ||=
|
248
|
+
existing_content_type ||
|
249
|
+
mini_mime_content_type ||
|
250
|
+
mime_magic_content_type
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
module Uploader
|
255
|
+
# Implements a different name pattern for versions than CarrierWave's
|
256
|
+
# default: we expect the version name at the end of the filename separated
|
257
|
+
# by a dash
|
258
|
+
module Versions
|
259
|
+
private
|
260
|
+
|
261
|
+
# put version at the end of the filename
|
262
|
+
def full_filename for_file
|
263
|
+
name = super(for_file)
|
264
|
+
parts = name.split "."
|
265
|
+
basename = [parts.shift, version_name].compact.join("-")
|
266
|
+
"#{basename}.#{parts.join('.')}"
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
319
270
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module CarrierWave
|
2
|
+
def self.tmp_path
|
3
|
+
@tmp_path ||= Card.paths["tmp"].existent.first
|
4
|
+
end
|
5
|
+
|
6
|
+
class FileCardUploader
|
7
|
+
# path-related methods for uploader
|
8
|
+
module Path
|
9
|
+
def local_url opts={}
|
10
|
+
"%s/%s/%s" % [local_url_base(opts), file_dir, full_filename(url_filename(opts))]
|
11
|
+
end
|
12
|
+
|
13
|
+
def local_url_base opts={}
|
14
|
+
web_path = Card.config.files_web_path
|
15
|
+
opts.delete(:absolute) ? card_url(web_path) : card_path(web_path)
|
16
|
+
end
|
17
|
+
|
18
|
+
def public_path
|
19
|
+
File.join Cardio.paths["public"].existent.first, url
|
20
|
+
end
|
21
|
+
|
22
|
+
def cache_dir
|
23
|
+
@model.files_base_dir + "/cache"
|
24
|
+
end
|
25
|
+
|
26
|
+
# Carrierwave calls store_path without argument when it stores the file
|
27
|
+
# and with the identifier from the db when it retrieves the file.
|
28
|
+
# In our case the first part of our identifier is not part of the path
|
29
|
+
# but we can construct the filename from db data. So we don't need the
|
30
|
+
# identifier.
|
31
|
+
def store_path for_file=nil
|
32
|
+
if for_file
|
33
|
+
retrieve_path
|
34
|
+
else
|
35
|
+
File.join([store_dir, full_filename(filename)].compact)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def retrieve_path
|
40
|
+
File.join([retrieve_dir, full_filename(filename)].compact)
|
41
|
+
end
|
42
|
+
|
43
|
+
def tmp_path
|
44
|
+
Dir.mkdir model.tmp_upload_dir unless Dir.exist? model.tmp_upload_dir
|
45
|
+
File.join model.tmp_upload_dir, filename
|
46
|
+
end
|
47
|
+
|
48
|
+
# paperclip compatibility used in type/file.rb#core (base format)
|
49
|
+
def path version=nil
|
50
|
+
version ? versions[version].path : super()
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/set/abstract/attachment.rb
CHANGED
@@ -110,7 +110,7 @@ rescue StandardError => e
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def detect_extension ext
|
113
|
-
return unless (mime_types =
|
113
|
+
return unless (mime_types = MIME::Types[attachment.content_type])
|
114
114
|
|
115
115
|
recognized_extension?(mime_types, ext) ? ext : mime_types[0].extensions[0]
|
116
116
|
end
|
@@ -11,7 +11,7 @@ event :validate_storage_type_update, :validate, on: :update, when: :cloud? do
|
|
11
11
|
# `update storage_type: :local, file: [file handle]` is ok
|
12
12
|
return unless storage_type_changed? && !attachment_is_changing?
|
13
13
|
|
14
|
-
errors.add :storage_type,
|
14
|
+
errors.add :storage_type, t(:carrierwave_moving_files_is_not_supported)
|
15
15
|
end
|
16
16
|
|
17
17
|
def bucket
|
@@ -5,8 +5,12 @@ event :lose_coded_status_on_update, :initialize, on: :update, when: :coded? do
|
|
5
5
|
end
|
6
6
|
|
7
7
|
event :validate_coded_storage_type, :validate, on: :save, when: :will_become_coded? do
|
8
|
-
|
9
|
-
|
8
|
+
storage_type_error :mod_argument_needed_to_save unless mod || @new_mod
|
9
|
+
storage_type_error :codename_needed_for_storage if codename.blank?
|
10
|
+
end
|
11
|
+
|
12
|
+
def storage_type_error error_name
|
13
|
+
errors.add :storage_type, t("carrierwave_#{error_name}")
|
10
14
|
end
|
11
15
|
|
12
16
|
def will_become_coded?
|
@@ -14,12 +14,9 @@ event :storage_type_change, :store, on: :update, when: :storage_type_changed? do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
event :validate_storage_type, :validate, on: :save do
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
new_storage_type: @new_storage_type
|
21
|
-
)
|
22
|
-
end
|
17
|
+
return if known_storage_type? will_be_stored_as
|
18
|
+
|
19
|
+
errors.add :storage_type, unknown_storage_type(@new_storage_type)
|
23
20
|
end
|
24
21
|
|
25
22
|
def will_be_stored_as
|
@@ -93,7 +90,7 @@ def valid_storage_type_list
|
|
93
90
|
end
|
94
91
|
|
95
92
|
def invalid_storage_type! type
|
96
|
-
raise Card::Error,
|
93
|
+
raise Card::Error, t(:carrierwave_error_invalid_storage_type, type: type)
|
97
94
|
end
|
98
95
|
|
99
96
|
def storage_type_from_content
|
@@ -133,19 +130,21 @@ def storage_type= value
|
|
133
130
|
end
|
134
131
|
|
135
132
|
def with_storage_options opts={}
|
136
|
-
old_values =
|
133
|
+
old_values = stash_and_set_storage_options opts
|
137
134
|
validate_temporary_storage_type_change opts[:storage_type]
|
138
|
-
|
139
|
-
next unless opts[opt_name]
|
140
|
-
old_values[opt_name] = instance_variable_get "@#{opt_name}"
|
141
|
-
instance_variable_set "@#{opt_name}", opts[opt_name]
|
142
|
-
@temp_storage_type = true
|
143
|
-
end
|
135
|
+
@temp_storage_type = true
|
144
136
|
yield
|
145
137
|
ensure
|
146
138
|
@temp_storage_type = false
|
147
|
-
old_values.each
|
148
|
-
|
139
|
+
old_values.each { |key, val| instance_variable_set "@#{key}", val }
|
140
|
+
end
|
141
|
+
|
142
|
+
def stash_and_set_storage_options opts
|
143
|
+
%i[storage_type mod bucket].each_with_object({}) do |opt_name, old_values|
|
144
|
+
next unless opts[opt_name]
|
145
|
+
old_values[opt_name] = instance_variable_get "@#{opt_name}"
|
146
|
+
instance_variable_set "@#{opt_name}", opts[opt_name]
|
147
|
+
old_values
|
149
148
|
end
|
150
149
|
end
|
151
150
|
|
@@ -153,14 +152,10 @@ def temporary_storage_type_change?
|
|
153
152
|
@temp_storage_type
|
154
153
|
end
|
155
154
|
|
156
|
-
def validate_temporary_storage_type_change
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
raise Error, tr(:unknown_storage_type, new_storage_type: new_storage_type)
|
161
|
-
end
|
162
|
-
|
163
|
-
if new_storage_type == :coded && codename.blank?
|
155
|
+
def validate_temporary_storage_type_change type=nil
|
156
|
+
return unless (type ||= @new_storage_type)
|
157
|
+
raise Error, unknown_storage_type(type) unless known_storage_type? type
|
158
|
+
if type == :coded && codename.blank?
|
164
159
|
raise Error, "codename needed for storage type :coded"
|
165
160
|
end
|
166
161
|
end
|
@@ -168,3 +163,7 @@ end
|
|
168
163
|
def known_storage_type? type=storage_type
|
169
164
|
type.in? CarrierWave::FileCardUploader::STORAGE_TYPES
|
170
165
|
end
|
166
|
+
|
167
|
+
def unknown_storage_type type
|
168
|
+
t :carrierwave_unknown_storage_type, new_storage_type: type
|
169
|
+
end
|
data/set/type/file.rb
CHANGED
@@ -38,7 +38,7 @@ format do
|
|
38
38
|
block_given? ? yield(source) : source
|
39
39
|
rescue => e
|
40
40
|
Rails.logger.info "Error with file source: #{e.message}"
|
41
|
-
|
41
|
+
t :carrierwave_file_error
|
42
42
|
end
|
43
43
|
|
44
44
|
def selected_version
|
@@ -77,7 +77,7 @@ end
|
|
77
77
|
format :html do
|
78
78
|
view :core do
|
79
79
|
handle_source do |source|
|
80
|
-
|
80
|
+
haml :core, source: source
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
@@ -111,6 +111,6 @@ format :html do
|
|
111
111
|
end
|
112
112
|
|
113
113
|
def preview_editor_delete_text
|
114
|
-
|
114
|
+
t :carrierwave_delete
|
115
115
|
end
|
116
116
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: card-mod-carrierwave
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ethan McCutchen
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2021-
|
13
|
+
date: 2021-05-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: card
|
@@ -18,14 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.101.
|
21
|
+
version: 1.101.4
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - '='
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: 1.101.
|
28
|
+
version: 1.101.4
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: carrierwave
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -60,28 +60,28 @@ dependencies:
|
|
60
60
|
requirements:
|
61
61
|
- - '='
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 0.11.
|
63
|
+
version: 0.11.4
|
64
64
|
type: :runtime
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
68
|
- - '='
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version: 0.11.
|
70
|
+
version: 0.11.4
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: card-mod-permissions
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
75
|
- - '='
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0.11.
|
77
|
+
version: 0.11.4
|
78
78
|
type: :runtime
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
82
|
- - '='
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version: 0.11.
|
84
|
+
version: 0.11.4
|
85
85
|
description: ''
|
86
86
|
email:
|
87
87
|
- info@decko.org
|
@@ -92,6 +92,7 @@ files:
|
|
92
92
|
- config/core_initializers/carrierwave.rb
|
93
93
|
- lib/carrier_wave/card_mount.rb
|
94
94
|
- lib/carrier_wave/file_card_uploader.rb
|
95
|
+
- lib/carrier_wave/file_card_uploader/path.rb
|
95
96
|
- lib/carrier_wave/image_card_uploader.rb
|
96
97
|
- set/abstract/attachment.rb
|
97
98
|
- set/abstract/attachment/cloud.rb
|
@@ -107,6 +108,7 @@ files:
|
|
107
108
|
- set/self/new_file.rb
|
108
109
|
- set/self/new_image.rb
|
109
110
|
- set/type/file.rb
|
111
|
+
- set/type/file/core.haml
|
110
112
|
- set/type/file/file_chooser.haml
|
111
113
|
- set/type/file/preview_editor.haml
|
112
114
|
- set/type/image.rb
|