card-mod-carrierwave 0.11.4 → 0.11.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/carrier_wave/file_card_uploader.rb +9 -7
- data/lib/carrier_wave/file_card_uploader/path.rb +1 -1
- data/lib/carrier_wave/image_card_uploader.rb +1 -1
- data/set/abstract/attachment.rb +6 -1
- data/set/abstract/attachment/cloud.rb +4 -0
- data/set/abstract/attachment/coded.rb +1 -0
- data/set/abstract/attachment/local.rb +4 -1
- data/set/abstract/attachment/paths.rb +1 -0
- data/set/abstract/attachment/storage_type.rb +11 -9
- data/set/abstract/attachment/upload_cache.rb +4 -0
- data/set/self/favicon.rb +1 -0
- data/set/type/file.rb +25 -8
- data/set/type/image.rb +7 -4
- data/set/type/image/html_views.rb +2 -0
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3189d4e4979c66b05d69e7b09a602098410d5df3faa5cdd19a96b7b026a69bb
|
4
|
+
data.tar.gz: 774a0049c1c77d4373d5769a965734b797e916606f8ebd959ed97c39315f5646
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2091526b0eb3da1d50ec833d7d990848a4bd6968b4595a235debccd6b5d802dcb5b32bf20a2abe6b2d0ba2679ad1d8564c755ea2d06f435563cdb08bf76e46e1
|
7
|
+
data.tar.gz: d10af461b8cc1ef9d0eaf8147274ab8e40f9a0106f87e8f153ccd2b4884ff73667fc53c6dfab8391f541dd3e80a552b06fc1d3eb03fd42d3174fdbd150653632
|
@@ -125,16 +125,17 @@ module CarrierWave
|
|
125
125
|
#
|
126
126
|
class FileCardUploader < Uploader::Base
|
127
127
|
attr_accessor :mod
|
128
|
+
|
128
129
|
include Card::Env::Location
|
129
130
|
include Path
|
130
131
|
|
131
|
-
STORAGE_TYPES = [
|
132
|
-
CONFIG_OPTIONS = [
|
133
|
-
|
134
|
-
CONFIG_CREDENTIAL_OPTIONS = [
|
135
|
-
|
136
|
-
|
137
|
-
|
132
|
+
STORAGE_TYPES = %i[cloud web coded local].freeze
|
133
|
+
CONFIG_OPTIONS = %i[provider attributes directory public credentials
|
134
|
+
authenticated_url_expiration use_ssl_for_aws].freeze
|
135
|
+
CONFIG_CREDENTIAL_OPTIONS = %i[
|
136
|
+
provider
|
137
|
+
aws_access_key_id aws_secret_access_key region host endpoint
|
138
|
+
google_access_key_id google_secret_access_key
|
138
139
|
].freeze
|
139
140
|
delegate :store_dir, :retrieve_dir, :file_dir, :mod, :bucket, to: :model
|
140
141
|
|
@@ -170,6 +171,7 @@ module CarrierWave
|
|
170
171
|
model.with_storage_options opts do
|
171
172
|
return model.content if model.web?
|
172
173
|
return "" unless file.present?
|
174
|
+
|
173
175
|
"%s/%s" % [file_dir, url_filename]
|
174
176
|
end
|
175
177
|
end
|
@@ -10,7 +10,7 @@ module CarrierWave
|
|
10
10
|
include CarrierWave::MiniMagick
|
11
11
|
|
12
12
|
def path version=nil
|
13
|
-
|
13
|
+
version && version != :original ? versions[version].path : super()
|
14
14
|
end
|
15
15
|
|
16
16
|
version :icon, if: :create_versions?, from_version: :small do
|
data/set/abstract/attachment.rb
CHANGED
@@ -17,11 +17,13 @@ end
|
|
17
17
|
|
18
18
|
event :save_original_filename, :prepare_to_store, on: :save, when: :file_ready_to_save? do
|
19
19
|
return unless @current_action
|
20
|
+
|
20
21
|
@current_action.update! comment: original_filename
|
21
22
|
end
|
22
23
|
|
23
24
|
event :validate_file_exist, :validate, on: :create do
|
24
25
|
return if empty_ok?
|
26
|
+
|
25
27
|
if will_be_stored_as == :web
|
26
28
|
errors.add "url is missing" if content.blank?
|
27
29
|
elsif !attachment.file.present?
|
@@ -40,12 +42,14 @@ def file_ready_to_save?
|
|
40
42
|
attachment_is_changing?
|
41
43
|
end
|
42
44
|
|
43
|
-
|
45
|
+
# needed for flexmail attachments. hacky.
|
46
|
+
def item_names _args={}
|
44
47
|
[name]
|
45
48
|
end
|
46
49
|
|
47
50
|
def original_filename
|
48
51
|
return content.split("/").last if web?
|
52
|
+
|
49
53
|
attachment.original_filename
|
50
54
|
end
|
51
55
|
|
@@ -90,6 +94,7 @@ end
|
|
90
94
|
|
91
95
|
def revision action, before_action=false
|
92
96
|
return unless (result = super)
|
97
|
+
|
93
98
|
result[:empty_ok] = true
|
94
99
|
result
|
95
100
|
end
|
@@ -20,6 +20,7 @@ end
|
|
20
20
|
|
21
21
|
def new_card_bucket
|
22
22
|
return unless new_card?
|
23
|
+
|
23
24
|
# If the file is assigned before the bucket option we have to
|
24
25
|
# check if there is a bucket options in set_specific.
|
25
26
|
# That happens for exmaple when the file appears before the bucket in the
|
@@ -34,6 +35,7 @@ end
|
|
34
35
|
|
35
36
|
def load_bucket_config
|
36
37
|
return {} unless bucket
|
38
|
+
|
37
39
|
bucket_config = Cardio.config.file_buckets&.dig(bucket.to_sym) || {}
|
38
40
|
bucket_config.symbolize_keys!
|
39
41
|
bucket_config[:credentials]&.symbolize_keys!
|
@@ -96,6 +98,7 @@ def each_credential_from_env
|
|
96
98
|
regexp = credential_from_env_regexp
|
97
99
|
ENV.each_key do |env_key|
|
98
100
|
next unless (m = regexp.match env_key)
|
101
|
+
|
99
102
|
yield m[:option].downcase.to_sym
|
100
103
|
end
|
101
104
|
end
|
@@ -112,6 +115,7 @@ end
|
|
112
115
|
|
113
116
|
def bucket_from_content
|
114
117
|
return unless content
|
118
|
+
|
115
119
|
content.match(/^\((?<bucket>[^)]+)\)/) { |m| m[:bucket] }
|
116
120
|
end
|
117
121
|
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
event :update_public_link_on_create, :integrate, on: :create, when: :local? do
|
3
2
|
update_public_link
|
4
3
|
end
|
@@ -9,6 +8,7 @@ end
|
|
9
8
|
|
10
9
|
event :update_public_link, after: :update_read_rule, when: :local? do
|
11
10
|
return if content.blank?
|
11
|
+
|
12
12
|
if who_can(:read).include? Card::AnyoneID
|
13
13
|
create_public_links
|
14
14
|
else
|
@@ -21,6 +21,7 @@ private
|
|
21
21
|
def create_public_links
|
22
22
|
path = attachment.public_path
|
23
23
|
return if File.exist? path
|
24
|
+
|
24
25
|
FileUtils.mkdir_p File.dirname(path)
|
25
26
|
File.symlink attachment.path, path unless File.symlink? path
|
26
27
|
create_versions_public_links
|
@@ -29,6 +30,7 @@ end
|
|
29
30
|
def create_versions_public_links
|
30
31
|
attachment.versions.each_value do |version|
|
31
32
|
next if File.symlink? version.public_path
|
33
|
+
|
32
34
|
File.symlink version.path, version.public_path
|
33
35
|
end
|
34
36
|
end
|
@@ -36,5 +38,6 @@ end
|
|
36
38
|
def remove_public_links
|
37
39
|
symlink_dir = File.dirname attachment.public_path
|
38
40
|
return unless Dir.exist? symlink_dir
|
41
|
+
|
39
42
|
FileUtils.rm_rf symlink_dir
|
40
43
|
end
|
@@ -61,8 +61,8 @@ def mod
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def mod_from_content
|
64
|
-
if content
|
65
|
-
|
64
|
+
if (m = content.match %r{^:[^/]+/([^.]+)})
|
65
|
+
m[1] # current mod_file format
|
66
66
|
else
|
67
67
|
mod_from_deprecated_content
|
68
68
|
end
|
@@ -70,8 +70,9 @@ end
|
|
70
70
|
|
71
71
|
# old format is still used in card_changes
|
72
72
|
def mod_from_deprecated_content
|
73
|
-
return if content
|
73
|
+
return if content.match?(/^~/)
|
74
74
|
return unless (lines = content.split("\n")) && lines.size == 4
|
75
|
+
|
75
76
|
lines.last
|
76
77
|
end
|
77
78
|
|
@@ -95,10 +96,10 @@ end
|
|
95
96
|
|
96
97
|
def storage_type_from_content
|
97
98
|
case content
|
98
|
-
when /^\(/
|
99
|
-
when %r{/^https
|
100
|
-
when /^~/
|
101
|
-
when
|
99
|
+
when /^\(/ then :cloud
|
100
|
+
when %r{/^https?:/} then :web
|
101
|
+
when /^~/ then :local
|
102
|
+
when /^:/ then :coded
|
102
103
|
else
|
103
104
|
if deprecated_mod_file?
|
104
105
|
:coded
|
@@ -120,7 +121,7 @@ end
|
|
120
121
|
|
121
122
|
def storage_type= value
|
122
123
|
known_storage_type? value
|
123
|
-
if @action == :update
|
124
|
+
if @action == :update # && storage_type != value
|
124
125
|
# we cant update the storage type directly here
|
125
126
|
# if we do then the uploader doesn't find the file we want to update
|
126
127
|
@new_storage_type = value
|
@@ -142,6 +143,7 @@ end
|
|
142
143
|
def stash_and_set_storage_options opts
|
143
144
|
%i[storage_type mod bucket].each_with_object({}) do |opt_name, old_values|
|
144
145
|
next unless opts[opt_name]
|
146
|
+
|
145
147
|
old_values[opt_name] = instance_variable_get "@#{opt_name}"
|
146
148
|
instance_variable_set "@#{opt_name}", opts[opt_name]
|
147
149
|
old_values
|
@@ -153,7 +155,7 @@ def temporary_storage_type_change?
|
|
153
155
|
end
|
154
156
|
|
155
157
|
def validate_temporary_storage_type_change type=nil
|
156
|
-
return unless
|
158
|
+
return unless type ||= @new_storage_type
|
157
159
|
raise Error, unknown_storage_type(type) unless known_storage_type? type
|
158
160
|
if type == :coded && codename.blank?
|
159
161
|
raise Error, "codename needed for storage type :coded"
|
@@ -27,6 +27,7 @@ end
|
|
27
27
|
event :assign_attachment_on_create, :initialize,
|
28
28
|
after: :assign_action, on: :create, when: :save_preliminary_upload? do
|
29
29
|
return unless (action = Card::Action.fetch(@action_id_of_cached_upload))
|
30
|
+
|
30
31
|
upload_cache_card.selected_action_id = action.id
|
31
32
|
upload_cache_card.select_file_revision
|
32
33
|
assign_attachment upload_cache_card.attachment.file, action.comment
|
@@ -35,6 +36,7 @@ end
|
|
35
36
|
event :assign_attachment_on_update, :initialize,
|
36
37
|
after: :assign_action, on: :update, when: :save_preliminary_upload? do
|
37
38
|
return unless (action = Card::Action.fetch(@action_id_of_cached_upload))
|
39
|
+
|
38
40
|
uploaded_file = with_selected_action_id(action.id) { attachment.file }
|
39
41
|
assign_attachment uploaded_file, action.comment
|
40
42
|
end
|
@@ -48,6 +50,7 @@ end
|
|
48
50
|
event :delete_cached_upload_file_on_create, :integrate,
|
49
51
|
on: :create, when: :save_preliminary_upload? do
|
50
52
|
return unless (action = Card::Action.fetch(@action_id_of_cached_upload))
|
53
|
+
|
51
54
|
upload_cache_card.delete_files_for_action action
|
52
55
|
action.delete
|
53
56
|
end
|
@@ -61,6 +64,7 @@ end
|
|
61
64
|
event :delete_cached_upload_file_on_update, :integrate,
|
62
65
|
on: :update, when: :save_preliminary_upload? do
|
63
66
|
return unless (action = Card::Action.fetch(@action_id_of_cached_upload))
|
67
|
+
|
64
68
|
delete_files_for_action action
|
65
69
|
action.delete
|
66
70
|
end
|
data/set/self/favicon.rb
CHANGED
data/set/type/file.rb
CHANGED
@@ -9,8 +9,9 @@ module SelectedAction
|
|
9
9
|
|
10
10
|
def last_content_action_id
|
11
11
|
return super if temporary_storage_type_change?
|
12
|
+
|
12
13
|
# find action id from content (saves lookups)
|
13
|
-
db_content.to_s.split(%r{[
|
14
|
+
db_content.to_s.split(%r{[/.]})[-2]
|
14
15
|
end
|
15
16
|
end
|
16
17
|
include SelectedAction
|
@@ -19,6 +20,7 @@ format do
|
|
19
20
|
view :source do
|
20
21
|
file = card.attachment
|
21
22
|
return "" unless file.valid?
|
23
|
+
|
22
24
|
contextualize_path file.url
|
23
25
|
end
|
24
26
|
|
@@ -33,17 +35,26 @@ format do
|
|
33
35
|
end
|
34
36
|
|
35
37
|
def handle_source
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
rescuing_file_source_error do
|
39
|
+
source = _render_source
|
40
|
+
return "" if source.blank?
|
41
|
+
|
42
|
+
block_given? ? yield(source) : source
|
43
|
+
end
|
42
44
|
end
|
43
45
|
|
44
46
|
def selected_version
|
45
47
|
card.attachment
|
46
48
|
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def rescuing_file_source_error
|
53
|
+
yield
|
54
|
+
rescue StandardError => e
|
55
|
+
Rails.logger.info "Error with file source: #{e.message}"
|
56
|
+
t :carrierwave_file_error
|
57
|
+
end
|
47
58
|
end
|
48
59
|
|
49
60
|
format :file do
|
@@ -53,6 +64,7 @@ format :file do
|
|
53
64
|
attachment_format = card.attachment_format(params[:format])
|
54
65
|
return _render_not_found unless attachment_format
|
55
66
|
return card.format(:html).render_core if card.remote_storage?
|
67
|
+
|
56
68
|
set_response_headers
|
57
69
|
args_for_send_file
|
58
70
|
end
|
@@ -60,13 +72,14 @@ format :file do
|
|
60
72
|
def args_for_send_file
|
61
73
|
file = selected_version
|
62
74
|
[file.path, { type: file.content_type,
|
63
|
-
filename:
|
75
|
+
filename: "#{card.name.safe_key}#{file.extension}",
|
64
76
|
x_sendfile: true,
|
65
77
|
disposition: (params[:format] == "file" ? "attachment" : "inline") }]
|
66
78
|
end
|
67
79
|
|
68
80
|
def set_response_headers
|
69
81
|
return unless params[:explicit_file] && (response = controller&.response)
|
82
|
+
|
70
83
|
response.headers["Expires"] = 1.year.from_now.httpdate
|
71
84
|
# currently using default "private", because proxy servers could block
|
72
85
|
# needed permission checks
|
@@ -74,6 +87,10 @@ format :file do
|
|
74
87
|
end
|
75
88
|
end
|
76
89
|
|
90
|
+
format :json do
|
91
|
+
view(:content) { render_core }
|
92
|
+
end
|
93
|
+
|
77
94
|
format :html do
|
78
95
|
view :core do
|
79
96
|
handle_source do |source|
|
data/set/type/image.rb
CHANGED
@@ -23,8 +23,10 @@ format do
|
|
23
23
|
|
24
24
|
view :source do
|
25
25
|
return card.content if card.web?
|
26
|
+
|
26
27
|
image = selected_version
|
27
28
|
return "" unless image.valid?
|
29
|
+
|
28
30
|
contextualize_path image.url
|
29
31
|
end
|
30
32
|
|
@@ -37,10 +39,6 @@ format do
|
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
40
|
-
def handle_source
|
41
|
-
super
|
42
|
-
end
|
43
|
-
|
44
42
|
def closed_size
|
45
43
|
:icon
|
46
44
|
end
|
@@ -70,11 +68,16 @@ format do
|
|
70
68
|
end
|
71
69
|
end
|
72
70
|
|
71
|
+
format :json do
|
72
|
+
include File::JsonFormat
|
73
|
+
end
|
74
|
+
|
73
75
|
format :email_html do
|
74
76
|
view :inline, cache: :never do
|
75
77
|
handle_source do |source|
|
76
78
|
return source unless (mail = inherit :active_mail) &&
|
77
79
|
::File.exist?(path = selected_version.path)
|
80
|
+
|
78
81
|
url = attach_image mail, path
|
79
82
|
image_tag url
|
80
83
|
end
|
@@ -4,6 +4,7 @@ format :html do
|
|
4
4
|
# core HTML image view.
|
5
5
|
view :core do
|
6
6
|
return card.attachment.read if card.svg?
|
7
|
+
|
7
8
|
with_valid_source do |source|
|
8
9
|
image_tag source, alt: card.name
|
9
10
|
end
|
@@ -34,6 +35,7 @@ format :html do
|
|
34
35
|
|
35
36
|
def preview
|
36
37
|
return if card.new_card? && !card.preliminary_upload?
|
38
|
+
|
37
39
|
wrap_with :div, class: "attachment-preview",
|
38
40
|
id: "#{card.attachment.filename}-preview" do
|
39
41
|
_render_core size: :medium
|
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.5
|
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-05-
|
13
|
+
date: 2021-05-10 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.5
|
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.5
|
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.5
|
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.5
|
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.5
|
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.5
|
85
85
|
description: ''
|
86
86
|
email:
|
87
87
|
- info@decko.org
|