rails_uploads 0.2.9 → 0.3.0
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 +7 -0
- metadata +19 -371
- data/MIT-LICENSE +0 -20
- data/README.rdoc +0 -108
- data/Rakefile +0 -40
- data/app/controllers/rails_uploads/presets_controller.rb +0 -17
- data/config/locales/en.yml +0 -8
- data/config/locales/es.yml +0 -8
- data/config/routes.rb +0 -5
- data/lib/generators/uploads/s3/config_generator.rb +0 -13
- data/lib/generators/uploads/s3/templates/s3.yml +0 -16
- data/lib/rails_uploads.rb +0 -16
- data/lib/rails_uploads/active_record/base.rb +0 -139
- data/lib/rails_uploads/engine.rb +0 -7
- data/lib/rails_uploads/magick/image.rb +0 -83
- data/lib/rails_uploads/railtie.rb +0 -20
- data/lib/rails_uploads/storages/local.rb +0 -57
- data/lib/rails_uploads/storages/s3.rb +0 -68
- data/lib/rails_uploads/types/file.rb +0 -115
- data/lib/rails_uploads/types/image.rb +0 -45
- data/lib/rails_uploads/validators/attachment_content_type_validator.rb +0 -11
- data/lib/rails_uploads/validators/attachment_presence_validator.rb +0 -9
- data/lib/rails_uploads/validators/attachment_size_validator.rb +0 -27
- data/lib/rails_uploads/validators/base.rb +0 -13
- data/lib/rails_uploads/version.rb +0 -5
- data/lib/tasks/rails_uploads_tasks.rake +0 -89
- data/test/dummy/README.rdoc +0 -261
- data/test/dummy/Rakefile +0 -7
- data/test/dummy/app/assets/images/image.jpg +0 -0
- data/test/dummy/app/assets/javascripts/application.js +0 -15
- data/test/dummy/app/assets/stylesheets/application.css +0 -13
- data/test/dummy/app/controllers/application_controller.rb +0 -3
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/models/file_upload.rb +0 -4
- data/test/dummy/app/models/image_upload.rb +0 -4
- data/test/dummy/app/models/validation_upload.rb +0 -17
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -65
- data/test/dummy/config/boot.rb +0 -10
- data/test/dummy/config/database.yml +0 -25
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -37
- data/test/dummy/config/environments/production.rb +0 -67
- data/test/dummy/config/environments/test.rb +0 -37
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/inflections.rb +0 -15
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/secret_token.rb +0 -7
- data/test/dummy/config/initializers/session_store.rb +0 -8
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -5
- data/test/dummy/config/routes.rb +0 -5
- data/test/dummy/config/s3.yml +0 -15
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20130108201834_create_file_uploads.rb +0 -10
- data/test/dummy/db/migrate/20130110194721_create_validation_uploads.rb +0 -19
- data/test/dummy/db/migrate/20130124013431_create_image_uploads.rb +0 -10
- data/test/dummy/db/schema.rb +0 -43
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +0 -23
- data/test/dummy/log/test.log +0 -25090
- data/test/dummy/public/404.html +0 -26
- data/test/dummy/public/422.html +0 -26
- data/test/dummy/public/500.html +0 -25
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/public/uploads/files/file.txt +0 -1
- data/test/dummy/public/uploads/images/big/image.jpg +0 -0
- data/test/dummy/public/uploads/images/original/image.jpg +0 -0
- data/test/dummy/public/uploads/images/small/image.jpg +0 -0
- data/test/dummy/script/rails +0 -6
- data/test/dummy/test/fixtures/file.txt +0 -1
- data/test/dummy/test/fixtures/file_big.txt +0 -1
- data/test/dummy/test/fixtures/file_empty.txt +0 -1
- data/test/dummy/test/fixtures/image.jpg +0 -0
- data/test/dummy/test/fixtures/image_big.jpg +0 -0
- data/test/dummy/test/fixtures/image_empty.jpg +0 -0
- data/test/dummy/tmp/uploads/files/13687482983108968.jpg +0 -0
- data/test/dummy/tmp/uploads/files/13687483348482658.jpg +0 -0
- data/test/dummy/tmp/uploads/files/13687483563901100.jpg +0 -0
- data/test/dummy/tmp/uploads/files/13687484108914220.jpg +0 -0
- data/test/dummy/tmp/uploads/files/13687489381697390.jpg +0 -0
- data/test/dummy/tmp/uploads/files/13687490968011022.jpg +0 -0
- data/test/dummy/tmp/uploads/files/13687491524768450.jpg +0 -0
- data/test/dummy/tmp/uploads/files/13687494425396302.jpg +0 -0
- data/test/dummy/tmp/uploads/files/13687513450654020.jpg +0 -0
- data/test/dummy/tmp/uploads/files/13687514839373922.txt +0 -1
- data/test/dummy/tmp/uploads/files/13688181722986792.jpg +0 -0
- data/test/dummy/tmp/uploads/files/13688181729459798.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13687484103672162.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13687484106303082.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13687489377129980.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13687489379459820.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13687490965463210.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13687491522552230.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13688181724596422.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13688181727051510.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13688259257147068.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13688280071286788.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13688281527981960.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13688360981527310.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13688360983686640.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13688977138132322.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13688977290079510.jpg +0 -0
- data/test/dummy/tmp/uploads/images/big/13688978966174670.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687482977916958.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687482979328390.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687482981277580.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687483343313990.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687483344710930.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687483346647770.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687483558679350.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687483560070410.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687483562001660.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687484103672162.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687484106303082.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687489377129980.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687489379459820.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687490965463210.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13687491522552230.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13688181723027610.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13688181724596422.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13688181727051510.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13688259257147068.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13688280071286788.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13688281527981960.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13688360981527310.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13688360983686640.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13688977138132322.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13688977290079510.jpg +0 -0
- data/test/dummy/tmp/uploads/images/original/13688978966174670.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13687484103672162.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13687484106303082.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13687489377129980.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13687489379459820.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13687490965463210.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13687491522552230.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13688181723027610.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13688181724596422.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13688181727051510.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13688259257147068.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13688280071286788.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13688281527981960.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13688360981527310.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13688360983686640.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13688977138132322.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13688977290079510.jpg +0 -0
- data/test/dummy/tmp/uploads/images/small/13688978966174670.jpg +0 -0
- data/test/fixtures/file.txt +0 -1
- data/test/fixtures/file_big.txt +0 -1
- data/test/fixtures/file_empty.txt +0 -1
- data/test/fixtures/image.jpg +0 -0
- data/test/fixtures/image_big.jpg +0 -0
- data/test/fixtures/image_empty.jpg +0 -0
- data/test/integration/local_generate_test.rb +0 -25
- data/test/test_helper.rb +0 -50
- data/test/unit/local_file_record_test.rb +0 -20
- data/test/unit/local_file_string_test.rb +0 -23
- data/test/unit/local_file_upload_test.rb +0 -30
- data/test/unit/local_image_record_test.rb +0 -25
- data/test/unit/local_image_string_test.rb +0 -34
- data/test/unit/local_image_upload_test.rb +0 -27
- data/test/unit/local_records_test.rb +0 -52
- data/test/unit/local_validators_test.rb +0 -71
- data/test/unit/s3_file_record_tes.rb +0 -21
- data/test/unit/s3_file_string_tes.rb +0 -24
- data/test/unit/s3_file_upload_tes.rb +0 -31
- data/test/unit/s3_image_record_tes.rb +0 -26
- data/test/unit/s3_image_string_tes.rb +0 -31
- data/test/unit/s3_image_upload_tes.rb +0 -28
- data/test/unit/s3_records_tes.rb +0 -56
- data/test/unit/s3_validators_tes.rb +0 -71
@@ -1,20 +0,0 @@
|
|
1
|
-
module RailsUploads
|
2
|
-
class Railtie < Rails::Railtie
|
3
|
-
|
4
|
-
config.uploads = ActiveSupport::OrderedOptions.new
|
5
|
-
config.uploads.presets = {}
|
6
|
-
config.uploads.default_presets = []
|
7
|
-
config.uploads.default_validations = {}
|
8
|
-
config.uploads.base_url = ''
|
9
|
-
config.uploads.storage = :local
|
10
|
-
|
11
|
-
initializer 'rails_uploads' do
|
12
|
-
::ActiveRecord::Base.send :include, RailsUploads::ActiveRecord::Base
|
13
|
-
if config.uploads.storage == :s3
|
14
|
-
require 'aws-sdk'
|
15
|
-
RailsUploads::Storages::S3.config = YAML.load_file(Rails.root.join('config', 's3.yml'))
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
module RailsUploads
|
2
|
-
module Storages
|
3
|
-
class Local
|
4
|
-
|
5
|
-
def initialize(default)
|
6
|
-
@tmp = (Rails.env == 'test' and not default)
|
7
|
-
end
|
8
|
-
|
9
|
-
def exists?(path)
|
10
|
-
::File.exists? realpath(path)
|
11
|
-
end
|
12
|
-
|
13
|
-
def size(path)
|
14
|
-
::File.size realpath(path)
|
15
|
-
end
|
16
|
-
|
17
|
-
def url(path)
|
18
|
-
::File.join Rails.application.config.uploads.base_url, path
|
19
|
-
end
|
20
|
-
|
21
|
-
def store(upload, path)
|
22
|
-
create_dir realpath(path)
|
23
|
-
upload.rewind # Hack to avoid empty files
|
24
|
-
::File.open(realpath(path), 'wb') do |file|
|
25
|
-
while chunk = upload.read(16 * 1024)
|
26
|
-
file.write(chunk)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def delete(path)
|
32
|
-
::File.delete realpath(path)
|
33
|
-
end
|
34
|
-
|
35
|
-
def magick(source, output, upload)
|
36
|
-
create_dir realpath(output)
|
37
|
-
yield RailsUploads::Magick::Image.new(realpath(source), realpath(output))
|
38
|
-
end
|
39
|
-
|
40
|
-
protected
|
41
|
-
|
42
|
-
def realpath(path)
|
43
|
-
base_path.join path
|
44
|
-
end
|
45
|
-
|
46
|
-
def base_path
|
47
|
-
Rails.root.join @tmp ? 'tmp' : 'public'
|
48
|
-
end
|
49
|
-
|
50
|
-
def create_dir(path)
|
51
|
-
dir = base_path.join('uploads', path).dirname
|
52
|
-
FileUtils.mkdir_p dir unless ::File.directory? dir
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
module RailsUploads
|
2
|
-
module Storages
|
3
|
-
class S3
|
4
|
-
|
5
|
-
cattr_accessor :config
|
6
|
-
|
7
|
-
def initialize(default)
|
8
|
-
if (Rails.env == 'test' and not default)
|
9
|
-
env = 'test'
|
10
|
-
elsif default
|
11
|
-
env = 'production'
|
12
|
-
else
|
13
|
-
env = Rails.env
|
14
|
-
end
|
15
|
-
config = self.class.config[env]
|
16
|
-
AWS.config access_key_id: config['access_key_id'], secret_access_key: config['secret_access_key']
|
17
|
-
@bucket = AWS::S3.new.buckets[config['bucket']]
|
18
|
-
@tmp = {}
|
19
|
-
end
|
20
|
-
|
21
|
-
def exists?(path)
|
22
|
-
object(path).exists?
|
23
|
-
end
|
24
|
-
|
25
|
-
def size(path)
|
26
|
-
object(path).content_length
|
27
|
-
end
|
28
|
-
|
29
|
-
def url(path)
|
30
|
-
base_url = Rails.application.config.uploads.base_url
|
31
|
-
base_url.present? ? ::File.join(base_url, path) : object(path).public_url(secure: false)
|
32
|
-
end
|
33
|
-
|
34
|
-
def store(upload, path)
|
35
|
-
@bucket.objects.create(path, Pathname.new(upload.path)).acl = :public_read
|
36
|
-
end
|
37
|
-
|
38
|
-
def delete(path)
|
39
|
-
object(path).delete
|
40
|
-
end
|
41
|
-
|
42
|
-
def magick(source, output, upload)
|
43
|
-
if @tmp[source].blank?
|
44
|
-
if upload.present?
|
45
|
-
@tmp[source] = upload.path
|
46
|
-
else
|
47
|
-
remote = Tempfile.new('s3')
|
48
|
-
remote.binmode
|
49
|
-
object(source).read { |chunk| remote.write(chunk) }
|
50
|
-
remote.close
|
51
|
-
remote.open
|
52
|
-
@tmp[source] = remote.path
|
53
|
-
end
|
54
|
-
end
|
55
|
-
tmp = Tempfile.new('s3')
|
56
|
-
yield RailsUploads::Magick::Image.new(@tmp[source], tmp.path)
|
57
|
-
store tmp, output
|
58
|
-
end
|
59
|
-
|
60
|
-
protected
|
61
|
-
|
62
|
-
def object(path)
|
63
|
-
@bucket.objects[path]
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,115 +0,0 @@
|
|
1
|
-
module RailsUploads
|
2
|
-
module Types
|
3
|
-
class File
|
4
|
-
|
5
|
-
def initialize(source, options={})
|
6
|
-
if source.is_a? ActionDispatch::Http::UploadedFile or source.is_a? Rack::Test::UploadedFile
|
7
|
-
@upload = source
|
8
|
-
@stored = false
|
9
|
-
@default = false
|
10
|
-
@storage = build_storage(:local)
|
11
|
-
elsif source.is_a? String
|
12
|
-
@upload = false
|
13
|
-
@filename = source
|
14
|
-
@stored = true
|
15
|
-
@default = false
|
16
|
-
@storage = build_storage
|
17
|
-
elsif options.has_key? :default
|
18
|
-
@upload = false
|
19
|
-
@filename = options[:default]
|
20
|
-
@stored = true
|
21
|
-
@default = true
|
22
|
-
@storage = build_storage
|
23
|
-
end
|
24
|
-
@deleted = false
|
25
|
-
@options = options
|
26
|
-
end
|
27
|
-
|
28
|
-
def is_default?
|
29
|
-
@default
|
30
|
-
end
|
31
|
-
|
32
|
-
def is_stored?
|
33
|
-
@stored
|
34
|
-
end
|
35
|
-
|
36
|
-
def is_deleted?
|
37
|
-
@deleted
|
38
|
-
end
|
39
|
-
|
40
|
-
def exists?(*args)
|
41
|
-
return false if is_deleted?
|
42
|
-
storage.exists? path(*args)
|
43
|
-
end
|
44
|
-
|
45
|
-
def size(*args)
|
46
|
-
return 0 if is_deleted?
|
47
|
-
storage.size path(*args)
|
48
|
-
end
|
49
|
-
|
50
|
-
def extname
|
51
|
-
return nil if is_deleted?
|
52
|
-
@extname ||= ::File.extname(filename)
|
53
|
-
end
|
54
|
-
|
55
|
-
def filename
|
56
|
-
return nil if is_deleted?
|
57
|
-
@filename ||= "#{(Time.now.to_f * 10000000).to_i}#{::File.extname @upload.original_filename}".downcase
|
58
|
-
end
|
59
|
-
|
60
|
-
def path(*args)
|
61
|
-
return nil if is_deleted?
|
62
|
-
is_stored? ? destination_path(*args) : @upload.path
|
63
|
-
end
|
64
|
-
|
65
|
-
def url(*args)
|
66
|
-
return nil if is_deleted? or not is_stored?
|
67
|
-
storage.url path(*args)
|
68
|
-
end
|
69
|
-
|
70
|
-
def store
|
71
|
-
if not is_stored? and is_upload?
|
72
|
-
@storage = build_storage
|
73
|
-
storage.store @upload, destination_path
|
74
|
-
yield if block_given?
|
75
|
-
@stored = true
|
76
|
-
@deleted = false
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def delete
|
81
|
-
if not is_default? and is_stored? and exists?
|
82
|
-
storage.delete path
|
83
|
-
yield if block_given?
|
84
|
-
@storage = build_storage(:local) if @upload.present?
|
85
|
-
@stored = false
|
86
|
-
@deleted = true
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
protected
|
91
|
-
|
92
|
-
def build_storage(type=nil)
|
93
|
-
type = (type or Rails.application.config.uploads.storage)
|
94
|
-
RailsUploads::Storages.const_get(type.to_s.classify).new(is_default?)
|
95
|
-
end
|
96
|
-
|
97
|
-
def storage
|
98
|
-
@storage
|
99
|
-
end
|
100
|
-
|
101
|
-
def is_upload?
|
102
|
-
@upload != false
|
103
|
-
end
|
104
|
-
|
105
|
-
def destination_path(*args)
|
106
|
-
::File.join 'uploads', store_path(*args), filename
|
107
|
-
end
|
108
|
-
|
109
|
-
def store_path(*args)
|
110
|
-
'files'
|
111
|
-
end
|
112
|
-
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module RailsUploads
|
2
|
-
module Types
|
3
|
-
class Image < File
|
4
|
-
|
5
|
-
def presets
|
6
|
-
Rails.application.config.uploads.default_presets | (@options[:presets] or [])
|
7
|
-
end
|
8
|
-
|
9
|
-
def store
|
10
|
-
super { presets.each { |name| generate_preset name } if presets.any? }
|
11
|
-
end
|
12
|
-
|
13
|
-
def delete
|
14
|
-
super { presets.each { |name| storage.delete path(name) if exists?(name) } if presets.any? }
|
15
|
-
end
|
16
|
-
|
17
|
-
def generate_preset(name)
|
18
|
-
storage.magick destination_path, destination_path(name), @upload do |image|
|
19
|
-
settings = Rails.application.config.uploads.presets[name]
|
20
|
-
if settings.is_a? Proc
|
21
|
-
settings.call image
|
22
|
-
else
|
23
|
-
case settings[:method]
|
24
|
-
when :fit
|
25
|
-
image.resize_to_fit settings[:width], settings[:height]
|
26
|
-
else
|
27
|
-
image.resize_to_fill settings[:width], settings[:height]
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def delete_preset(name)
|
34
|
-
storage.delete path(name)
|
35
|
-
end
|
36
|
-
|
37
|
-
protected
|
38
|
-
|
39
|
-
def store_path(*args)
|
40
|
-
::File.join('images', (args[0] ? args[0].to_s.gsub('_', '-') : 'original'))
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
class AttachmentContentTypeValidator < RailsUploads::Validators::Base
|
2
|
-
|
3
|
-
def validate_each(record, attribute, value)
|
4
|
-
if value.present? and not value.is_default?
|
5
|
-
unless options[:in].include? value.extname.from(1)
|
6
|
-
add_error record, attribute, 'errors.messages.attachment_content_type', types: options[:in].to_sentence
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
class AttachmentPresenceValidator < RailsUploads::Validators::Base
|
2
|
-
|
3
|
-
def validate_each(record, attribute, value)
|
4
|
-
unless value.present? and value.exists? and not value.is_default?
|
5
|
-
add_error record, attribute, 'errors.messages.attachment_presence'
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
class AttachmentSizeValidator < RailsUploads::Validators::Base
|
2
|
-
include ActionView::Helpers::NumberHelper
|
3
|
-
|
4
|
-
def validate_each(record, attribute, value)
|
5
|
-
if value.present? and not value.is_default?
|
6
|
-
if options.has_key? :in
|
7
|
-
unless options[:in].include? value.size
|
8
|
-
add_error record, attribute, 'attachment_size_in', min: number_to_human_size(options[:in].begin), max: number_to_human_size(options[:in].end)
|
9
|
-
end
|
10
|
-
else
|
11
|
-
if options.has_key? :less_than and value.size > options[:less_than]
|
12
|
-
add_error record, attribute, 'attachment_size_less_than', count: number_to_human_size(options[:less_than])
|
13
|
-
end
|
14
|
-
if options.has_key? :greater_than and value.size < options[:greater_than]
|
15
|
-
add_error record, attribute, 'attachment_size_greater_than', count: number_to_human_size(options[:greater_than])
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
protected
|
22
|
-
|
23
|
-
def add_error(record, attribute, type, options)
|
24
|
-
super(record, attribute, "errors.messages.#{type}", options)
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
module RailsUploads
|
2
|
-
module Validators
|
3
|
-
class Base < ActiveModel::EachValidator
|
4
|
-
|
5
|
-
protected
|
6
|
-
|
7
|
-
def add_error(record, attribute, type, options={})
|
8
|
-
record.errors[attribute] << (options[:message] || I18n.t(type, options))
|
9
|
-
end
|
10
|
-
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,89 +0,0 @@
|
|
1
|
-
|
2
|
-
module RailsUploads
|
3
|
-
module Task
|
4
|
-
|
5
|
-
def self.iterate_images
|
6
|
-
model = ENV['MODEL'].classify.constantize
|
7
|
-
presets = ENV['PRESETS'].split(',').map(&:to_sym)
|
8
|
-
model.find_each do |record|
|
9
|
-
model.attachments.each do |attr, options|
|
10
|
-
if options[:type] == :image
|
11
|
-
presets.each do |preset|
|
12
|
-
image = record.send(attr)
|
13
|
-
yield image, preset
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
namespace :uploads do
|
24
|
-
|
25
|
-
task :migrate do
|
26
|
-
files = Rails.root.join('public', 'uploads', 'files')
|
27
|
-
images = Rails.root.join('public', 'uploads', 'images', 'original')
|
28
|
-
::FileUtils.mkdir_p files
|
29
|
-
::FileUtils.mkdir_p images
|
30
|
-
Dir.glob(::File.join(Rails.root.join('public', 'uploads'), '', '*.*')) do |source|
|
31
|
-
filename = ::File.basename(source)
|
32
|
-
if filename =~ /-/
|
33
|
-
::FileUtils.rm source
|
34
|
-
elsif filename =~ /\.(jpg|png|gif)$/
|
35
|
-
::FileUtils.mv source, ::File.join(images, filename)
|
36
|
-
else filename =~ /\.!(htm|html|ico)$/
|
37
|
-
::FileUtils.mv source, ::File.join(files, filename)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
namespace :presets do
|
43
|
-
desc 'Refresh preset'
|
44
|
-
task :refresh => :clean do
|
45
|
-
RailsUploads::Task.iterate_images do |image, preset|
|
46
|
-
puts "Generating preset #{image.url(preset)}."
|
47
|
-
image.generate_preset preset
|
48
|
-
end
|
49
|
-
puts "Presets refreshed successfully."
|
50
|
-
end
|
51
|
-
desc 'Clean preset'
|
52
|
-
task :clean => :environment do
|
53
|
-
RailsUploads::Task.iterate_images do |image, preset|
|
54
|
-
puts "Deleting preset #{image.url(preset)}."
|
55
|
-
image.delete_preset preset
|
56
|
-
end
|
57
|
-
puts "Presets cleaned successfully."
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
namespace :s3 do
|
62
|
-
namespace :buckets do
|
63
|
-
desc 'Create buckets'
|
64
|
-
task :create do
|
65
|
-
config = YAML.load_file(Rails.root.join('config', 's3.yml'))
|
66
|
-
config.each do |env, options|
|
67
|
-
require 'aws-sdk'
|
68
|
-
AWS.config access_key_id: options['access_key_id'], secret_access_key: options['secret_access_key']
|
69
|
-
bucket = options['bucket']
|
70
|
-
begin
|
71
|
-
AWS::S3.new.buckets.create bucket
|
72
|
-
rescue AWS::S3::Errors::InvalidAccessKeyId
|
73
|
-
puts "Invalid credentials in #{env} environment."
|
74
|
-
next
|
75
|
-
rescue AWS::S3::Errors::BucketAlreadyExists
|
76
|
-
puts "Bucket #{bucket} already exists."
|
77
|
-
next
|
78
|
-
rescue AWS::S3::Errors::BucketAlreadyOwnedByYou
|
79
|
-
puts "You already own bucket #{bucket}."
|
80
|
-
next
|
81
|
-
end
|
82
|
-
puts "Bucket #{bucket} created successfully."
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
|