-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
configuration.rb
229 lines (207 loc) · 7.64 KB
/
configuration.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
require 'carrierwave/downloader/base'
module CarrierWave
module Uploader
module Configuration
extend ActiveSupport::Concern
included do
class_attribute :_storage, :_cache_storage, :instance_writer => false
add_config :root
add_config :base_path
add_config :asset_host
add_config :permissions
add_config :directory_permissions
add_config :storage_engines
add_config :store_dir
add_config :cache_dir
add_config :enable_processing
add_config :ensure_multipart_form
add_config :delete_tmp_file_after_storage
add_config :move_to_cache
add_config :move_to_store
add_config :remove_previously_stored_files_after_update
add_config :downloader
add_config :force_extension
# fog
add_deprecated_config :fog_provider
add_config :fog_attributes
add_config :fog_credentials
add_config :fog_directory
add_config :fog_public
add_config :fog_authenticated_url_expiration
add_config :fog_use_ssl_for_aws
add_config :fog_aws_accelerate
add_config :fog_aws_fips
# Mounting
add_config :ignore_integrity_errors
add_config :ignore_processing_errors
add_config :ignore_download_errors
add_config :validate_integrity
add_config :validate_processing
add_config :validate_download
add_config :mount_on
add_config :cache_only
add_config :download_retry_count
add_config :download_retry_wait_time
add_config :skip_ssrf_protection
# set default values
reset_config
end
module ClassMethods
##
# Sets the storage engine to be used when storing files with this uploader.
# Can be any class that implements a #store!(CarrierWave::SanitizedFile) and a #retrieve!
# method. See lib/carrierwave/storage/file.rb for an example. Storage engines should
# be added to CarrierWave::Uploader::Base.storage_engines so they can be referred
# to by a symbol, which should be more convenient
#
# If no argument is given, it will simply return the currently used storage engine.
#
# === Parameters
#
# [storage (Symbol, Class)] The storage engine to use for this uploader
#
# === Returns
#
# [Class] the storage engine to be used with this uploader
#
# === Examples
#
# storage :file
# storage CarrierWave::Storage::File
# storage MyCustomStorageEngine
#
def storage(storage = nil)
case storage
when Symbol
if (storage_engine = storage_engines[storage])
self._storage = eval storage_engine
else
raise CarrierWave::UnknownStorageError, "Unknown storage: #{storage}"
end
when nil
storage
else
self._storage = storage
end
_storage
end
alias_method :storage=, :storage
##
# Sets the cache storage engine to be used when storing cache files with this uploader.
# Same as .storage except for required methods being #cache!(CarrierWave::SanitizedFile),
# #retrieve_from_cache! and #delete_dir!.
#
# === Parameters
#
# [storage (Symbol, Class)] The cache storage engine to use for this uploader
#
# === Returns
#
# [Class] the cache storage engine to be used with this uploader
#
# === Examples
#
# cache_storage :file
# cache_storage CarrierWave::Storage::File
# cache_storage MyCustomStorageEngine
#
def cache_storage(storage = false)
unless storage == false
self._cache_storage = storage.is_a?(Symbol) ? eval(storage_engines[storage]) : storage
end
_cache_storage
end
alias_method :cache_storage=, :cache_storage
def add_config(name)
class_eval <<-RUBY, __FILE__, __LINE__ + 1
@#{name} = nil
def self.#{name}(value=nil)
@#{name} = value unless value.nil?
return @#{name} if self.object_id == #{self.object_id} || defined?(@#{name})
name = superclass.#{name}
return nil if name.nil? && !instance_variable_defined?(:@#{name})
@#{name} = name && !name.is_a?(Module) && !name.is_a?(Symbol) && !name.is_a?(Numeric) && !name.is_a?(TrueClass) && !name.is_a?(FalseClass) ? name.dup : name
end
def self.#{name}=(value)
@#{name} = value
end
def #{name}=(value)
@#{name} = value
end
def #{name}
value = @#{name} if instance_variable_defined?(:@#{name})
value = self.class.#{name} unless instance_variable_defined?(:@#{name})
if value.instance_of?(Proc)
value.arity >= 1 ? value.call(self) : value.call
else
value
end
end
RUBY
end
def add_deprecated_config(name)
class_eval <<-RUBY, __FILE__, __LINE__ + 1
def self.#{name}(value=nil)
CarrierWave.deprecator.warn "##{name} is deprecated and has no effect"
end
def self.#{name}=(value)
CarrierWave.deprecator.warn "##{name} is deprecated and has no effect"
end
def #{name}=(value)
CarrierWave.deprecator.warn "##{name} is deprecated and has no effect"
end
def #{name}
CarrierWave.deprecator.warn "##{name} is deprecated and has no effect"
end
RUBY
end
def configure
yield self
end
##
# sets configuration back to default
#
def reset_config
configure do |config|
config.permissions = 0o644
config.directory_permissions = 0o755
config.storage_engines = {
:file => "CarrierWave::Storage::File",
:fog => "CarrierWave::Storage::Fog"
}
config.storage = :file
config.cache_storage = nil
config.fog_attributes = {}
config.fog_credentials = {}
config.fog_public = true
config.fog_authenticated_url_expiration = 600
config.fog_use_ssl_for_aws = true
config.fog_aws_accelerate = false
config.fog_aws_fips = false
config.store_dir = 'uploads'
config.cache_dir = 'uploads/tmp'
config.delete_tmp_file_after_storage = true
config.move_to_cache = false
config.move_to_store = false
config.remove_previously_stored_files_after_update = true
config.downloader = CarrierWave::Downloader::Base
config.force_extension = false
config.ignore_integrity_errors = true
config.ignore_processing_errors = true
config.ignore_download_errors = true
config.validate_integrity = true
config.validate_processing = true
config.validate_download = true
config.root = lambda { CarrierWave.root }
config.base_path = CarrierWave.base_path
config.enable_processing = true
config.ensure_multipart_form = true
config.download_retry_count = 0
config.download_retry_wait_time = 5
config.skip_ssrf_protection = false
end
end
end
end
end
end