balloon 1.0.3 → 1.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 484f47f52881d0416b591ade66e361ad5c04d745b13c49e8e4715b417a912e92
4
- data.tar.gz: 6fdc98cc0a8ab9f8788654b95127470617d0188f22c74e9257b77c2567d5feff
3
+ metadata.gz: 909d8652d1b69823ed4a0a65e8802e5adf41fe37183111ad6d0f9e4035e7e882
4
+ data.tar.gz: 23e566f565e83f05d92740761ad7b9d1c6b851e73e038d23d9cac833ae09f483
5
5
  SHA512:
6
- metadata.gz: 5ffd6489b6c336d601219c3d11948440bc8f3c4b829c996af90a6f34590444a7b85b7bc120d1ea06318b8d487f4d5d99ff44e32d9c1210c33d1607c618ee9ca7
7
- data.tar.gz: ab7933c8a10252c0348dec8610d8fa707fe8d09468f844535fbcccdfaeb56c14860e3a1fe7d038db1497039aff9213632527625e933189fec330342f0f43fa8d
6
+ metadata.gz: 99174822071a213f398c7fcec40c40f232852dce889f095241df9a7225099040cef5834104b878a1a41398231fad1624b29e286ca5b8063f5629cec017249459
7
+ data.tar.gz: 4c12e055ccc06b235e951b3edeb0f5adad4d04f58a2ff9a282827302199c1422bcb8f481884313143e9c32046e9599117e24fa6a9c4f6e6d8c92ceaf19d64b18
data/.gitignore CHANGED
@@ -8,3 +8,4 @@ spec/fixtures/tmp
8
8
  spec/fixtures/public
9
9
  spec/fixtures/cache
10
10
  spec/config/balloon.yml
11
+ examples/output
data/.rubocop.yml ADDED
@@ -0,0 +1,4 @@
1
+ AllCops:
2
+ NewCops: enable
3
+ SuggestExtensions: false
4
+
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # Balloon
2
2
 
3
3
 
4
- Balloon是基于Ruby的图片上传插件, 并且可以完美配合Rails使用。
4
+ Balloon是基于mini_magick的Rails项目图片上传插件。
5
+
5
6
 
6
7
 
7
8
  ## 安装
@@ -25,30 +26,47 @@ Balloon是基于Ruby的图片上传插件, 并且可以完美配合Rails使用
25
26
 
26
27
  $ gem install balloon
27
28
 
29
+
30
+
28
31
  ## 单独使用
29
32
 
30
- ```
33
+ Class 例子
34
+
35
+ ```ruby
31
36
  require 'balloon'
32
37
 
33
38
  Balloon.configure do |config|
34
39
  config.store_storage = :file
40
+ config.root = "output"
35
41
  end
36
42
 
37
43
  class Upload < Balloon::Base
38
- uploader :avatar
39
- uploader_size t: "100x100"
40
- uploader_name_format
44
+ uploader :image
45
+ uploader_dir 'uploads'
46
+ uploader_mimetype_white %w[image/jpeg image/png image/gif image/webp]
47
+ uploader_name_format name: "output", format: "upcase" # 输出文件名
48
+ uploader_type_format 'webp' # ImageMagick支持的类型
49
+ uploader_size thumb: "100x100", small: "200x", medium: '500x>' # https://legacy.imagemagick.org/Usage/resize/
41
50
  end
51
+ ```
52
+
53
+ 文件上传
42
54
 
43
- file = File.new("file.jpg")
55
+ ````ruby
56
+ file = File.new("input.jpg")
57
+ upload = Upload.new(file)
44
58
 
45
- upload = Upload.new("file")
59
+ or
60
+
61
+ upload = Upload.new("input.jpg")
46
62
 
47
63
  upload.upload_store #上传图片
64
+ upload.image #获取图片上传信息
48
65
 
49
66
  upload.from_store(:t) #获得图片Path
67
+ ````
68
+
50
69
 
51
- ```
52
70
 
53
71
  ## 在Rails中使用
54
72
 
@@ -56,7 +74,7 @@ upload.from_store(:t) #获得图片Path
56
74
  在Rails应用程序中运行下述命令来完成Balloon插件的初始化
57
75
 
58
76
  $ rails g balloon:config
59
-
77
+
60
78
  在运行命令后, 会在config目录中生成一个balloon.yml配置文件
61
79
 
62
80
  ###### 默认生成balloon.yml文件
@@ -91,22 +109,7 @@ store_dir: 设置存储目录, 默认为主目录下的"public"目录
91
109
  cache_dir: "tmp" # 设置临时文件储存目录, 默认为主目录下的“tmp”目录
92
110
  ```
93
111
 
94
- ###### 在为model文件添加下列格式
95
-
96
- Mongomapper, Mongoid
97
112
 
98
- ```
99
- class Image
100
- include MongoMapper::Document
101
- include Balloon::Up
102
-
103
- uploader :image, :db
104
- uploader_size t: "45", s: "450", m: "770"
105
- uploader_dir "uploads/product"
106
- uploader_mimetype_white %w{image/jpeg image/png image/gif}
107
- uploader_name_format name: Proc.new{|p| p.id.to_s }
108
- end
109
- ```
110
113
 
111
114
  model 配置介绍
112
115
 
@@ -123,7 +126,8 @@ uploader_name_format #对上传文件进行重命名,
123
126
  ```
124
127
 
125
128
 
126
- ActiveRecord
129
+
130
+ #### ActiveRecord
127
131
 
128
132
  先生成 model文件
129
133
 
@@ -131,16 +135,24 @@ ActiveRecord
131
135
 
132
136
  并修改migration文件, 为下列格式
133
137
 
134
- ```
138
+ ```ruby
135
139
 
136
140
  class CreateImages < ActiveRecord::Migration
137
141
  def change
138
142
  create_table :pictures do |t|
143
+ t.string :file_id, null: false, index: true
139
144
  t.string :file_name
145
+ t.integer :width
146
+ t.integer :height
140
147
  t.string :content_type
141
- t.integer :file_size
148
+ t.bigint :file_size
142
149
  t.string :storage
143
- t.datetime :created_at
150
+
151
+ # Postgresql 可以JSONB 作为metadata格式
152
+ t.jsonb :metadata
153
+ # Mysql和其它需要使用text
154
+ t.text :metadata
155
+
144
156
  t.timestamps
145
157
  end
146
158
  end
@@ -148,29 +160,73 @@ end
148
160
 
149
161
  ```
150
162
 
151
- model 文件
163
+ model 文件
152
164
 
153
- ```
154
- class Image < ActiveRecord::Base
165
+ ```ruby
166
+ class Picture < ActiveRecord::Base
155
167
  include Balloon::Up
156
168
 
157
- uploader :image
169
+ uploader :image, :db
170
+ uploader_dir 'uploads/images'
171
+ uploader_mimetype_white %w[image/jpeg image/png image/gif image/webp]
172
+ uploader_name_format name: proc { |img| img.file_id }
173
+ uploader_type_format 'webp'
174
+ uploader_size thumb: '150x', small: '450x>'
175
+
176
+ before_validation :create_file_id, on: :create
177
+
178
+ def create_file_id
179
+ self.file_id = generate_file_id
180
+ end
181
+
182
+ def generate_file_id
183
+ loop do
184
+ token = SecureRandom.hex
185
+ break token unless Picture.exists?(file_id: token)
186
+ end
187
+ end
158
188
  end
159
189
 
160
190
  ```
161
191
 
162
- ###### rails实现图片上传
192
+
193
+
194
+ #### Mongoid
195
+
196
+ ```
197
+ class Image
198
+ include MongoMapper::Document
199
+ include Balloon::Up
200
+
201
+ uploader :image, :db
202
+ uploader_size t: "45", s: "450", m: "770"
203
+ uploader_dir "uploads/product"
204
+ uploader_mimetype_white %w{image/jpeg image/png image/gif}
205
+ uploader_name_format name: Proc.new{|p| p.id.to_s }
206
+ end
207
+ ```
208
+
209
+
210
+
211
+ #### rails 实现图片上传
163
212
 
164
213
  直接试用model原生操作, 用uploader设置的参数作为上传参数
165
-
166
- @image = Images.new(image: file)
167
- @image.save
168
214
 
169
- ###### 又拍云支持
215
+ ```ruby
216
+ @picture = Picture.new(image: params[:image])
217
+ @picture.save
218
+
219
+ @picture.url #获取原图
220
+ @picture.url(size) #获得图片地址
221
+ ```
222
+
223
+
224
+
225
+ ##### 又拍云支持
170
226
 
171
227
  将store_storage 修改为 ‘upyun’, 在config/balloon.yml内添加下列内容
172
228
 
173
- ```
229
+ ```yaml
174
230
  upyun_domain: ""
175
231
  upyun_bucket: ""
176
232
  upyun_username: ""
@@ -181,5 +237,3 @@ end
181
237
 
182
238
 
183
239
 
184
-
185
-
data/balloon.gemspec CHANGED
@@ -1,42 +1,39 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "balloon/version"
1
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
2
+ require 'balloon/version'
4
3
 
5
4
  Gem::Specification.new do |spec|
6
- spec.name = "balloon"
5
+ spec.name = 'balloon'
7
6
  spec.version = Balloon::VERSION
8
- spec.authors = ["yeeli"]
9
- spec.email = ["yeeli@outlook.com"]
7
+ spec.authors = ['yeeli']
8
+ spec.email = ['yeeli@outlook.com']
10
9
 
11
- spec.homepage = "https://github.com/yeeli/balloon"
12
- spec.summary = %q{Ruby image upload libary}
13
- spec.description = %q{Ruby image upload libary}
10
+ spec.homepage = 'https://github.com/yeeli/balloon'
11
+ spec.summary = 'Ruby image upload libary'
12
+ spec.description = 'Ruby image upload libary'
14
13
 
15
- spec.metadata["homepage_uri"] = spec.homepage
16
- spec.metadata["source_code_uri"] = spec.homepage
17
- spec.metadata["changelog_uri"] = spec.homepage
14
+ spec.metadata['homepage_uri'] = spec.homepage
15
+ spec.metadata['source_code_uri'] = spec.homepage
16
+ spec.metadata['changelog_uri'] = spec.homepage
18
17
 
19
-
20
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
18
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
21
19
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
20
  end
23
- spec.bindir = "exe"
21
+ spec.bindir = 'exe'
24
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
- spec.require_paths = ["lib"]
26
-
23
+ spec.require_paths = ['lib']
27
24
 
28
- spec.add_dependency "activesupport"
29
- spec.add_dependency "mini_magick"
30
- spec.add_dependency "faraday"
31
- spec.add_dependency "mime-types"
25
+ spec.add_dependency 'activesupport'
26
+ spec.add_dependency 'faraday'
27
+ spec.add_dependency 'mime-types'
28
+ spec.add_dependency 'mini_magick'
32
29
 
33
30
  # Development dependency
34
31
 
35
- spec.add_development_dependency "rails"
36
- spec.add_development_dependency "rspec"
37
- spec.add_development_dependency "mysql2"
38
- spec.add_development_dependency "mongo_mapper"
39
- spec.add_development_dependency "mongoid"
40
- spec.add_development_dependency "bson_ext"
41
- spec.add_development_dependency "activerecord"
32
+ spec.add_development_dependency 'activerecord'
33
+ spec.add_development_dependency 'bson_ext'
34
+ spec.add_development_dependency 'mongoid'
35
+ spec.add_development_dependency 'mongo_mapper'
36
+ spec.add_development_dependency 'mysql2'
37
+ spec.add_development_dependency 'rails'
38
+ spec.add_development_dependency 'rspec'
42
39
  end
File without changes
Binary file
Binary file
@@ -0,0 +1,19 @@
1
+ $LOAD_PATH.unshift(File.expand_path('../lib'))
2
+ require 'balloon'
3
+
4
+ Balloon.configure do |config|
5
+ config.store_storage = :file
6
+ config.root = "output"
7
+ end
8
+
9
+ class Upload < Balloon::Base
10
+ uploader :image
11
+ uploader_dir 'uploads'
12
+ uploader_mimetype_white %w[image/jpeg image/png image/gif image/webp]
13
+ uploader_name_format name: 'output', format: 'upcase'
14
+ uploader_type_format 'webp'
15
+ uploader_size thumb: '200x', small: '600x>', large: '800x>'
16
+ end
17
+
18
+ upload = Upload.new("input.jpg")
19
+ upload.upload_store
@@ -0,0 +1,24 @@
1
+ $LOAD_PATH.unshift(File.expand_path('../lib'))
2
+ require 'balloon'
3
+ require "mini_magick"
4
+
5
+ Balloon.configure do |config|
6
+ config.store_storage = :file
7
+ config.root = "output"
8
+ end
9
+
10
+ class Upload < Balloon::Base
11
+ uploader :image
12
+ uploader_dir 'uploads/images'
13
+ uploader_mimetype_white %w[image/jpeg image/png image/gif image/webp]
14
+ uploader_name_format name: proc { |img| img.file_name }
15
+ uploader_type_format 'webp'
16
+ uploader_size thumb: '100x100', small: '200x>'
17
+
18
+ def file_name
19
+ "output_gif"
20
+ end
21
+ end
22
+
23
+ upload = Upload.new("input.gif")
24
+ upload.upload_store
data/lib/balloon/base.rb CHANGED
@@ -9,6 +9,10 @@ module Balloon
9
9
  @file = upload_file.is_a?(Hash) ? upload_file[:#{name}] : upload_file
10
10
  end
11
11
 
12
+ def #{name}
13
+ @meta
14
+ end
15
+
12
16
  def uploader_name
13
17
  "#{name}".pluralize
14
18
  end
@@ -28,8 +32,8 @@ module Balloon
28
32
  uploader_file = upload_file.nil? ? @file : upload_file
29
33
  save_to_cache(uploader_file)
30
34
  store_info = storage_engine.store!
31
- @info[:filename] = store_info[:filename]
32
- @info[:basename] = store_info[:basename]
35
+ @meta[:filename] = store_info[:filename]
36
+ @meta[:basename] = store_info[:basename]
33
37
  end
34
38
 
35
39
  def from_store(size_name = nil)
@@ -1,7 +1,10 @@
1
1
  module Balloon
2
2
  module Configuration
3
3
 
4
- STORAGE_EGINE = { file: "Balloon::Storage::File", upyun: "Balloon::Storage::Upyun" }
4
+ STORAGE_EGINE = {
5
+ file: "Balloon::Storage::File",
6
+ upyun: "Balloon::Storage::Upyun"
7
+ }
5
8
 
6
9
  class << self
7
10
  def included(base)
@@ -32,7 +32,8 @@ module Balloon
32
32
  IMAGE_EXT_LIST = {
33
33
  "image/gif" => "gif",
34
34
  "image/jpeg" => "jpg",
35
- "image/png" => "png"
35
+ "image/png" => "png",
36
+ "image/webp" => "webp"
36
37
  }
37
38
 
38
39
  def initialize(file, mime_type = nil)
@@ -133,6 +134,9 @@ module Balloon
133
134
  end
134
135
  end
135
136
 
137
+ def self.get_extension(mime_type)
138
+ IMAGE_EXT_LIST[mime_type]
139
+ end
136
140
 
137
141
  # @todo What Change basename add extension
138
142
  def save_to(new_path, permissions = nil, directory_permission = nil)
data/lib/balloon/load.rb CHANGED
@@ -8,7 +8,8 @@ if defined?(Rails)
8
8
  initializer "Baloon.configure_rails_initializeation" do
9
9
  config_file = Rails.root.join('config/balloon.yml')
10
10
  if config_file.file?
11
- config = YAML.load(ERB.new(config_file.read).result)
11
+ config_result = config_file.read
12
+ config = Psych.load_stream(ERB.new(config_result).result)[0]
12
13
  Balloon.configure_load(config, Rails.env)
13
14
  end
14
15
  end
@@ -25,7 +26,8 @@ elsif defined?(Sinatra)
25
26
  Balloon.root = root
26
27
  config_file = File.join(root, 'config/balloon.yml')
27
28
  if File.exist?(config_file)
28
- config = YAML.load(ERB.new(File.read(config_file)).result)
29
+ config_result = File.read(config_file)
30
+ config = Psych.load_stream(ERB.new(config_result).result)[0]
29
31
  Balloon.configure_load(config, env)
30
32
  end
31
33
  end
@@ -4,71 +4,136 @@ module Balloon
4
4
  module Processing
5
5
  extend ActiveSupport::Concern
6
6
 
7
- def resize_with_string(file)
8
- width, height = "", ""
9
- oranginl_img = MiniMagick::Image.open(file.path)
10
- auto_orient!(oranginl_img, file.path)
11
- if self.respond_to?(:uploader_size) && !(store_storage.to_s == "upyun" && upyun_is_image)
12
- uploader_size.each do |s, o|
13
- img = MiniMagick::Image.open(file.path)
14
- raise ProcessError, "process error" unless img
15
- width = img[:width]
16
- height = img[:height]
17
- new_img = resize(img, o)
18
- new_img.write File.join(cache_path, "#{file.basename}_#{s}.#{file.extension}")
19
- end
7
+ def image_processing(image)
8
+ data = {}
9
+ ext = image.extension
10
+
11
+ if respond_to?(:uploader_type_format)
12
+ ext = uploader_type_format
13
+ end
14
+
15
+ processed_img = handle_original(image, ext)
16
+ data[:original] = get_image_data(processed_img)
17
+
18
+ resized_img = handle_resize(image, ext)
19
+ data.merge!(resized_img)
20
+
21
+ mime_type = processed_img.mime_type
22
+ extension = FileExtension.get_extension(mime_type)
23
+ filename = "#{image.basename}.#{extension}"
24
+
25
+ return {
26
+ basename: image.basename,
27
+ width: processed_img.width,
28
+ height: processed_img.height,
29
+ size: processed_img.size,
30
+ filename: filename,
31
+ mime_type: mime_type,
32
+ extension: extension,
33
+ data: data
34
+ }
35
+ end
36
+
37
+ def handle_original(file, ext)
38
+ original_image = MiniMagick::Image.open(file.path)
39
+ convert = MiniMagick::Tool::Convert.new
40
+ convert << file.path
41
+
42
+ auto_orient!(original_image, convert)
43
+ convert.format ext
44
+
45
+ cache_file = File.join(cache_path, "#{file.basename}.#{ext}")
46
+ convert << cache_file
47
+ convert.call
48
+
49
+ return MiniMagick::Image.open(cache_file)
50
+ end
51
+
52
+ def handle_resize(file, ext)
53
+ return {} unless self.respond_to?(:uploader_size)
54
+ return {} if store_storage.to_s == "upyun" && upyun_is_image
55
+ data = {}
56
+
57
+ uploader_size.each do |size, o|
58
+ img = MiniMagick::Image.open(file.path)
59
+ raise ProcessError, "process error" unless img
60
+
61
+ convert = MiniMagick::Tool::Convert.new
62
+ convert << file.path
63
+
64
+ auto_orient!(img, convert)
65
+ convert.format ext
66
+
67
+ resize(convert, img, o)
68
+ cache_file = File.join(cache_path, "#{file.basename}_#{size}.#{ext}")
69
+ convert << cache_file
70
+ convert.call
71
+
72
+ processed_img = MiniMagick::Image.open(cache_file)
73
+ data[size] = get_image_data(processed_img)
20
74
  end
21
- return {width: oranginl_img[:width], height: oranginl_img[:height]}
75
+
76
+ return data
22
77
  end
23
78
 
24
- def resize(image, size)
79
+ def resize(convert, image, size)
25
80
  width, height, symbol = size[:width], size[:height], size[:symbol]
81
+
26
82
  if !symbol.empty? || width.match(/\%/) || height.match(/\%/)
27
83
  if width == height
28
- image = shave(image)
29
- image.resize "#{width}"
84
+ shave(convert, image)
85
+ convert.resize "#{width}"
30
86
  else
31
- image.resize "#{width}x#{height}#{symbol}"
87
+ convert.resize "#{width}x#{height}#{symbol}"
32
88
  end
89
+ return
90
+ end
91
+
92
+ if width == height
93
+ shave(convert, image)
94
+ value = (width.to_f / image[:width].to_f) * 100
95
+ convert.resize "#{value}%"
96
+ return
97
+ end
98
+
99
+ if width.empty?
100
+ value = (height.to_f / image[:height].to_f) * 100
101
+ convert.resize "#{value}%"
102
+ elsif height.empty?
103
+ value = (width.to_f / image[:width].to_f) * 100
104
+ convert.resize "#{value}%"
33
105
  else
34
- if width == height
35
- image = shave(image)
36
- value = (width.to_f / image[:width].to_f) * 100
37
- image.resize "#{value}%"
38
- else
39
- if width.empty?
40
- value = (height.to_f / image[:height].to_f) * 100
41
- image.resize "#{value}%"
42
- elsif height.empty?
43
- value = (width.to_f / image[:width].to_f) * 100
44
- image.resize "#{value}%"
45
- else
46
- image.resize "#{width}x#{height}"
47
- end
48
- end
106
+ convert.resize "#{width}x#{height}"
49
107
  end
50
- return image
51
108
  end
52
109
 
53
- def shave(image)
110
+ def shave(convert, image)
54
111
  w, h = image[:width], image[:height]
112
+
55
113
  if w > h
56
114
  shave_off = ((w - h) / 2).round
57
- image.shave "#{shave_off}x0"
58
- else
59
- shave_off = ((h - w) / 2).round
60
- image.shave "0x#{shave_off}"
115
+ convert.shave "#{shave_off}x0"
116
+ return
61
117
  end
62
- return image
118
+
119
+ shave_off = ((h - w) / 2).round
120
+ convert.shave "0x#{shave_off}"
63
121
  end
64
122
 
65
- def auto_orient!(img, file)
123
+ def auto_orient!(img, covert)
66
124
  if img.exif["Orientation"].to_i > 1
67
- img.auto_orient
68
- img.write file
125
+ convert.auto_orient
69
126
  end
70
127
  end
71
128
 
129
+ def get_image_data(img)
130
+ return {
131
+ width: img.width,
132
+ height: img.height,
133
+ size: img.size
134
+ }
135
+ end
136
+
72
137
  # parseing the size string
73
138
  #
74
139
  # @return [Hash] the options for string
@@ -3,6 +3,7 @@ module Balloon
3
3
  class File < Balloon::Storage::Store
4
4
  def store!
5
5
  _store_path = store_path
6
+ cache_meta = @uploader.cache_meta
6
7
 
7
8
  if !::File.exists? _store_path
8
9
  FileUtils.mkdir_p _store_path
@@ -10,17 +11,23 @@ module Balloon
10
11
  end
11
12
 
12
13
  original_file = set_upload_name
14
+
13
15
  store_original_file = ::File.join _store_path, original_file
14
- cache_original_file = ::File.join @uploader.cache_path, @uploader.info[:filename]
16
+ cache_original_file = ::File.join @uploader.cache_path, cache_meta[:filename]
17
+
15
18
  FileUtils.mv cache_original_file, store_original_file
16
19
 
17
20
  if @uploader.respond_to?(:uploader_size)
18
21
  @uploader.uploader_size.each do |s, o|
19
22
  store_file = ::File.join _store_path, set_upload_name(s)
20
- cache_file = ::File.join @uploader.cache_path, @uploader.info[:basename]+ "_#{s}"+"."+ @uploader.info[:extension]
23
+ cache_file = ::File.join @uploader.cache_path, cache_meta[:basename]+ "_#{s}"+"."+ cache_meta[:extension]
21
24
  FileUtils.mv cache_file, store_file
22
25
  end
23
26
  end
27
+
28
+ # Remove cache path
29
+ FileUtils.remove_dir(@uploader.cache_path)
30
+
24
31
  return { filename: original_file, basename: store_name}
25
32
  end
26
33
 
@@ -55,7 +62,8 @@ module Balloon
55
62
  end
56
63
 
57
64
  def store_path
58
- ::File.expand_path ::File.join(@uploader.root, @uploader.store_dir, upload_dir)
65
+ root_path = @uploader.root || "."
66
+ ::File.expand_path ::File.join(root_path, @uploader.store_dir, upload_dir)
59
67
  end
60
68
  end
61
69
  end
@@ -10,8 +10,9 @@ module Balloon
10
10
  def retrieve!(size_name = nil); end
11
11
 
12
12
  def upload_file
13
- file_info = @uploader.info
13
+ file_info = @uploader.meta
14
14
  return {} if file_info.nil?
15
+
15
16
  basename = file_info[:basename] || ""
16
17
  extension = file_info[:extension] || ""
17
18
  { basename: basename, extension: extension }
@@ -22,24 +23,30 @@ module Balloon
22
23
  end
23
24
 
24
25
  def store_name
25
- return upload_file[:basename] if !@uploader.respond_to?(:uploader_name_format)
26
+ if !@uploader.respond_to?(:uploader_name_format)
27
+ return @uploader.cache_meta[:basename]
28
+ end
29
+
26
30
  name_format = @uploader.uploader_name_format
27
31
  name = name_format[:name]
28
- if name_format[:format].to_s == "downcase"
29
- name = name.downcase
30
- elsif name_format[:format].to_s == "upcase"
31
- name = name.upcase
32
- else
33
- name
32
+
33
+ if name_format[:format].to_s == "downcase"
34
+ return name.downcase
34
35
  end
36
+
37
+ if name_format[:format].to_s == "upcase"
38
+ return name.upcase
39
+ end
40
+
41
+ name
35
42
  end
36
43
 
37
44
  def set_upload_name(size_name = nil )
38
- if size_name
39
- store_name + "_#{size_name.to_s}" + "." + upload_file[:extension]
40
- else
41
- store_name + "." + upload_file[:extension]
45
+ cache_meta = @uploader.cache_meta
46
+ if size_name
47
+ return store_name + "_#{size_name.to_s}" + "." + cache_meta[:extension]
42
48
  end
49
+ store_name + "." + cache_meta[:extension]
43
50
  end
44
51
 
45
52
  def connection
@@ -49,7 +56,7 @@ module Balloon
49
56
  conn = Http::Client.new(options[:url]) do |builder|
50
57
  builder.headers = options[:headers]
51
58
  builder.basic_auth(basic[:user], basic[:password]) if !basic.nil?
52
- builder.token_auth(self, token) if !token.nil?
59
+ builder.token_auth(self, token) if !token.nil?
53
60
  end
54
61
  return conn
55
62
  end
@@ -16,9 +16,11 @@ module Balloon
16
16
 
17
17
  def store!
18
18
  _store_path = store_path
19
+ cache_meta = @uploader.cache_meta
19
20
  original_file = set_upload_name
21
+
20
22
  store_original_file = ::File.join _store_path, original_file
21
- cache_original_file = ::File.join @uploader.cache_path, @uploader.info[:filename]
23
+ cache_original_file = ::File.join @uploader.cache_path, cache_meta[:filename]
22
24
  file = ::File.new cache_original_file
23
25
  response = connection.put(store_original_file, file.read, file.size)
24
26
  raise "Connection errors" if response.nil?
@@ -26,12 +28,13 @@ module Balloon
26
28
  if !@uploader.upyun_is_image && @uploader.respond_to?(:uploader_size)
27
29
  @uploader.uploader_size.each do |s, o|
28
30
  store_file = ::File.join _store_path, set_upload_name(s)
29
- cache_file = ::File.join @uploader.cache_path, @uploader.info[:basename]+ "_#{s}"+"."+ @uploader.info[:extension]
31
+ cache_file = ::File.join @uploader.cache_path, cache_meta[:basename]+ "_#{s}"+"."+ cache_meta[:extension]
30
32
  file = ::File.new cache_file
31
33
  connection.put(store_file, file.read, file.size)
32
34
  end
33
35
  end
34
36
 
37
+ FileUtils.remove_dir(@uploader.cache_path)
35
38
  return { filename: original_file, basename: store_name }
36
39
  end
37
40
 
data/lib/balloon/up.rb CHANGED
@@ -22,15 +22,15 @@ module Balloon
22
22
  end
23
23
 
24
24
  def #{name}
25
- @info
25
+ @meta
26
26
  end
27
27
 
28
28
  def uploader_save
29
- return if info.nil?
29
+ return if cache_meta.nil?
30
30
  set_storage_engine
31
31
  store_info = storage_engine.store!
32
- @info[:filename] = store_info[:filename]
33
- @info[:basename] = store_info[:basename]
32
+ @meta[:filename] = store_info[:filename]
33
+ @meta[:basename] = store_info[:basename]
34
34
  end
35
35
 
36
36
  def uploader_name
@@ -51,6 +51,7 @@ module Balloon
51
51
  key :content_type, String
52
52
  key :file_size, Integer
53
53
  key :storage, String
54
+ key :metadata
54
55
  key :created_at
55
56
  elsif defined?(Mongoid)
56
57
  field :file_name, type: String
@@ -59,6 +60,7 @@ module Balloon
59
60
  field :content_type, type: String
60
61
  field :file_size, type: String
61
62
  field :storage, type: String
63
+ field :metadata
62
64
  field :created_at
63
65
  end
64
66
 
@@ -67,20 +69,23 @@ module Balloon
67
69
 
68
70
  class_eval <<-RUBY
69
71
  def save_db
70
- return if info.nil?
71
- self.file_name = info[:filename]
72
- self.content_type = info[:mime_type]
73
- self.file_size = info[:size]
72
+ return if meta.nil?
73
+ self.file_name = meta[:filename]
74
+ self.content_type = meta[:mime_type]
75
+ self.file_size = meta[:size]
74
76
  self.storage = store_storage.to_s
75
- self.width = info[:width]
76
- self.height = info[:height]
77
+ self.width = meta[:width]
78
+ self.height = meta[:height]
79
+ if self.respond_to?(:metadata)
80
+ self.metadata = meta[:data]
81
+ end
77
82
  end
78
83
 
79
84
  def url(size_name = nil)
80
85
  return "" if !respond_to?(:file_name) || file_name.nil?
81
86
  extension = self.file_name.to_s.match(%r"(?!\\.{1})\\w{2,}$")
82
87
  basename = self.file_name.to_s.gsub(%r"\\.{1}\\w{2,}$",'')
83
- @info = { basename: basename, extension: extension.to_s }
88
+ @meta = { basename: basename, extension: extension.to_s }
84
89
  set_storage_engine
85
90
  storage_engine.retrieve!(size_name)
86
91
  end
@@ -89,7 +94,7 @@ module Balloon
89
94
  return if !respond_to?(:file_name) || file_name.nil?
90
95
  extension = self.file_name.to_s.match(%r"(?!\\.{1})\\w{2,}$")
91
96
  basename = self.file_name.to_s.gsub(%r"\\.{1}\\w{2,}$",'')
92
- @info = { basename: basename, extension: extension.to_s }
97
+ @meta = { basename: basename, extension: extension.to_s }
93
98
  set_storage_engine
94
99
  storage_engine.delete!
95
100
  end
@@ -9,7 +9,7 @@ module Balloon
9
9
  include Balloon::Download
10
10
  attr_accessor :file
11
11
  attr_reader :storage_engine
12
- attr_reader :info
12
+ attr_reader :cache_meta, :meta
13
13
  attr_accessor :download_error, :process_error
14
14
  end
15
15
 
@@ -24,27 +24,27 @@ module Balloon
24
24
  file_mime_type = uploader_file_ext.mime_type
25
25
 
26
26
  if self.respond_to?(:uploader_mimetype_white)
27
- if !uploader_mimetype_white.include?(file_mime_type)
27
+ if !uploader_mimetype_white.include?(file_mime_type)
28
28
  raise Balloon::DownloadError, I18n.translate(:"errors.messages.down_mime_error")
29
29
  end
30
- elsif self.respond_to?(:uploader_mimetype_black)
31
- if !uploader_mimetype_black.include?(file_mime_type)
30
+ end
31
+
32
+ if self.respond_to?(:uploader_mimetype_black)
33
+ if !uploader_mimetype_black.include?(file_mime_type)
32
34
  raise Balloon::DownloadError, I18n.translate(:"errors.messages.down_mime_error")
33
35
  end
34
36
  end
35
37
 
36
38
  generate_cache_directory
37
39
  up_file = uploader_file_ext.save_to cache_path, permissions
38
- uploader_file = up_file
39
- img = resize_with_string up_file
40
- @info = {
41
- width: img[:width],
42
- height: img[:height],
43
- size: up_file.size,
44
- mime_type: up_file.mime_type,
45
- filename: up_file.filename,
46
- basename: up_file.basename,
47
- extension: up_file.extension
40
+ @cache_meta = image_processing up_file
41
+ @meta = {
42
+ width: @cache_meta[:width],
43
+ height: @cache_meta[:height],
44
+ size: @cache_meta[:size],
45
+ mime_type: @cache_meta[:mime_type],
46
+ extension: @cache_meta[:extension],
47
+ data: @cache_meta[:data]
48
48
  }
49
49
  end
50
50
 
@@ -71,16 +71,21 @@ module Balloon
71
71
 
72
72
  def uploader_name_format(info)
73
73
  define_method "uploader_name_format" do
74
- name = info[:name].nil? ? info[:name] : info[:name].call(self)
74
+ name = info[:name].is_a?(Proc) ? info[:name].call(self) : info[:name].to_s
75
75
  { name: name, format: info[:format] }
76
76
  end
77
77
  end
78
78
 
79
+ def uploader_type_format(ext)
80
+ define_method "uploader_type_format" do; ext; end
81
+ end
82
+
79
83
  def uploader_mimetype_white(list)
80
84
  raise "just choise one method" if respond_to?(:uploader_mime_type_black)
81
85
  define_method "uploader_mimetype_white" do; list; end
82
86
  end
83
87
 
88
+
84
89
  def uploader_mimetype_black(list)
85
90
  raise "just choise one method" if respond_to?(:uploader_mime_type_black)
86
91
  define_method "uploader_mimetype_black" do; list; end
@@ -1,3 +1,3 @@
1
1
  module Balloon
2
- VERSION = "1.0.3"
2
+ VERSION = "1.1.1"
3
3
  end
data/lib/balloon.rb CHANGED
@@ -1,13 +1,13 @@
1
- #coding:utf-8
2
- require "balloon/version"
1
+ require 'balloon/version'
3
2
  require 'active_support'
4
3
  require 'active_support/core_ext'
5
4
 
5
+ # Balloon
6
6
  module Balloon
7
7
  class << self
8
8
  attr_accessor :root
9
9
  def configure(&block)
10
- Balloon::Base.configure &block
10
+ Balloon::Base.configure &block
11
11
  end
12
12
 
13
13
  def configure_load(config, env)
@@ -2,7 +2,7 @@ module Balloon
2
2
  module Generators
3
3
  class ConfigGenerator < Rails::Generators::Base
4
4
  desc "create the Balloon configuration at config/balloon.yml"
5
-
5
+
6
6
  def self.source_root
7
7
  @source_root ||= File.expand_path("../templates", __FILE__)
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: balloon
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - yeeli
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-23 00:00:00.000000000 Z
11
+ date: 2022-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: mini_magick
28
+ name: faraday
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: faraday
42
+ name: mime-types
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: mime-types
56
+ name: mini_magick
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rails
70
+ name: activerecord
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rspec
84
+ name: bson_ext
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: mysql2
98
+ name: mongoid
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -123,7 +123,7 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: mongoid
126
+ name: mysql2
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ">="
@@ -137,7 +137,7 @@ dependencies:
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
- name: bson_ext
140
+ name: rails
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - ">="
@@ -151,7 +151,7 @@ dependencies:
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
- name: activerecord
154
+ name: rspec
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - ">="
@@ -173,11 +173,17 @@ extra_rdoc_files: []
173
173
  files:
174
174
  - ".gitignore"
175
175
  - ".rspec"
176
+ - ".rubocop.yml"
176
177
  - Gemfile
177
178
  - README.md
178
179
  - README_EN.md
179
180
  - Rakefile
180
181
  - balloon.gemspec
182
+ - examples/balloon.yml
183
+ - examples/input.gif
184
+ - examples/input.jpg
185
+ - examples/upload.rb
186
+ - examples/upload_gif.rb
181
187
  - lib/balloon.rb
182
188
  - lib/balloon/base.rb
183
189
  - lib/balloon/cache.rb
@@ -220,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
220
226
  - !ruby/object:Gem::Version
221
227
  version: '0'
222
228
  requirements: []
223
- rubygems_version: 3.2.3
229
+ rubygems_version: 3.3.7
224
230
  signing_key:
225
231
  specification_version: 4
226
232
  summary: Ruby image upload libary