carrierwave-upyun 1.0.0 → 1.0.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: 6915aa09ab9b7059d576c1dc6162cfaefd60ba5c48bcb4361724f321b43ebe93
4
- data.tar.gz: 03af17a59f9c9aa13a742565c4e20c8c1c1c7a1df7726736c99047e21c8e2ca4
3
+ metadata.gz: f791f761160e72a58c354c42e721eafa4a7f832eb5ecc5b7bc79a8a870c852b9
4
+ data.tar.gz: 9af67d6bdf3b6b82cc8e237b4e867a08fdc27e595c90e20b5a8630b3defffdc0
5
5
  SHA512:
6
- metadata.gz: 6888113e3efb214f774fa9f28df17c16465c5b66aded6d35949b4fc5435a211c8a9129ebd4349bc4a6fb32d9ca23ca59711906810e485d3d49a096f97e3273b1
7
- data.tar.gz: 357b98e4ff157f305d60843bbaa54d88bd7f1f19b66885ee127c724de44254b6ad1ce444dddc98ee7c230a5789a9546fbfadc1bd07e60cee6b374f27961321a2
6
+ metadata.gz: 9fd03f1cbf3f23f5df6cb1015508d7e29406f2eb55eccf7170417be372220d0eedc59323b9c853473013a094fb55923065572d64e843afc195166d5e478413fb
7
+ data.tar.gz: a2090f8fd7154ddefbc43914d11929a7f1871e38eea1b0a7bbbd81557053eb88273164120f2b8c785e0f58271e1f8eb58f78b0c8f397d0fb7f596cb42ea9928f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## 1.0.1
2
+
3
+ - 对于 CarrierWave 的 cache 机制正确支持;
4
+ - 对 UpYun 偶发的 `concurrent put or delete` 错误容错;
5
+ - 清理不必要的 dependency.
6
+
7
+ ## 1.0.0
8
+
9
+ - 支持 CarrierWave 2.0.0+;
10
+
1
11
  ## 0.2.2
2
12
 
3
13
  - 减少 Gem 文件尺寸,避免带入不必要的问题;
@@ -24,4 +34,4 @@
24
34
 
25
35
  ## 0.1.6
26
36
 
27
- - 改进 Upyun 初始化,将少连接的过程;
37
+ - 改进 Upyun 初始化,将少连接的过程;
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "carrierwave/storage/upyun"
2
4
  require "carrierwave/upyun/configuration"
3
5
 
4
6
  CarrierWave.configure do |config|
5
- config.storage_engines.merge!({upyun: "CarrierWave::Storage::UpYun"})
7
+ config.storage_engines.merge!(upyun: "CarrierWave::Storage::UpYun")
6
8
  end
7
9
 
8
- CarrierWave::Uploader::Base.send(:include, CarrierWave::UpYun::Configuration)
10
+ CarrierWave::Uploader::Base.include CarrierWave::UpYun::Configuration
@@ -1,4 +1,5 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  require "faraday"
3
4
 
4
5
  module CarrierWave
@@ -15,7 +16,10 @@ module CarrierWave
15
16
  #
16
17
  #
17
18
  class UpYun < Abstract
18
- DEFAULT_API_URL = 'http://v0.api.upyun.com'
19
+ DEFAULT_API_URL = "http://v0.api.upyun.com"
20
+
21
+ class UploadError < RuntimeError; end
22
+ class ConcurrentUploadError < RuntimeError; end
19
23
 
20
24
  class File < CarrierWave::SanitizedFile
21
25
  def initialize(uploader, base, path)
@@ -31,9 +35,7 @@ module CarrierWave
31
35
  #
32
36
  # [String] A path
33
37
  #
34
- def path
35
- @path
36
- end
38
+ attr_reader :path
37
39
 
38
40
  def escaped_path
39
41
  @escaped_path ||= CGI.escape(@path)
@@ -43,9 +45,7 @@ module CarrierWave
43
45
  @content_type || ""
44
46
  end
45
47
 
46
- def content_type=(new_content_type)
47
- @content_type = new_content_type
48
- end
48
+ attr_writer :content_type
49
49
 
50
50
  ##
51
51
  # Reads the contents of the file from Cloud Files
@@ -64,13 +64,11 @@ module CarrierWave
64
64
  # Remove the file from Cloud Files
65
65
  #
66
66
  def delete
67
- begin
68
- conn.delete(escaped_path)
69
- true
70
- rescue => e
71
- puts "carrierwave-upyun delete failed: #{e.inspect}"
72
- nil
73
- end
67
+ conn.delete(escaped_path)
68
+ true
69
+ rescue StandardError => e
70
+ puts "carrierwave-upyun delete failed: #{e.inspect}"
71
+ nil
74
72
  end
75
73
 
76
74
  ##
@@ -83,6 +81,7 @@ module CarrierWave
83
81
  #
84
82
  def url
85
83
  return nil unless @uploader.upyun_bucket_host
84
+
86
85
  [@uploader.upyun_bucket_host, @path].join("/")
87
86
  end
88
87
 
@@ -101,34 +100,42 @@ module CarrierWave
101
100
  #
102
101
  # boolean
103
102
  #
104
- def store(data, headers = {})
105
- res = conn.put(escaped_path, data) do |req|
106
- req.headers = {'Expect' => '', 'Mkdir' => 'true'}.merge(headers)
103
+ def store(new_file, headers = {})
104
+ res = conn.put(escaped_path, new_file.read) do |req|
105
+ req.headers = { "Expect" => "", "Mkdir" => "true" }.merge(headers)
107
106
  end
107
+
108
108
  if res.status != 200
109
- puts "Update failed: #{res.body}"
110
- return false
109
+ # code: 42900007 -> concurrent put or delete
110
+ json = JSON.parse(res.body)
111
+ # retry upload
112
+ raise ConcurrentUploadError, res.body if json["code"] == 42_900_007
113
+
114
+ raise UploadError, res.body
111
115
  end
112
116
 
113
117
  true
118
+ rescue ConcurrentUploadError => e
119
+ puts "Warning: UpYun error #{e.message}, retry again."
120
+ retry
114
121
  end
115
122
 
116
123
  def headers
117
124
  @headers ||= begin
118
125
  conn.get(@path).headers
119
- rescue Faraday::ClientError
120
- {}
126
+ rescue Faraday::ClientError
127
+ {}
121
128
  end
122
129
  end
123
130
 
124
131
  def conn
125
- return @conn if defined?(@conn)
126
-
127
- api_host = @uploader.upyun_api_host || DEFAULT_API_URL
128
- @conn = Faraday.new(url: "#{api_host}/#{@uploader.upyun_bucket}") do |req|
129
- req.request :basic_auth, @uploader.upyun_username, @uploader.upyun_password
130
- req.request :url_encoded
131
- req.adapter Faraday.default_adapter
132
+ @conn ||= begin
133
+ api_host = @uploader.upyun_api_host || DEFAULT_API_URL
134
+ Faraday.new(url: "#{api_host}/#{@uploader.upyun_bucket}") do |req|
135
+ req.request :basic_auth, @uploader.upyun_username, @uploader.upyun_password
136
+ req.request :url_encoded
137
+ req.adapter Faraday.default_adapter
138
+ end
132
139
  end
133
140
  end
134
141
  end # File
@@ -146,7 +153,7 @@ module CarrierWave
146
153
  #
147
154
  def store!(file)
148
155
  f = File.new(uploader, self, uploader.store_path)
149
- f.store(file.read, 'Content-Type' => file.content_type)
156
+ f.store(file, "Content-Type" => file.content_type)
150
157
  f
151
158
  end
152
159
 
@@ -165,8 +172,8 @@ module CarrierWave
165
172
  end
166
173
 
167
174
  def cache!(file)
168
- f = File.new(uploader, self, uploader.store_path)
169
- f.store(file.read, 'Content-Type' => file.content_type)
175
+ f = File.new(uploader, self, uploader.cache_path)
176
+ f.store(file, "Content-Type" => file.content_type)
170
177
  f
171
178
  end
172
179
 
@@ -174,11 +181,9 @@ module CarrierWave
174
181
  File.new(uploader, self, uploader.cache_path(identifier))
175
182
  end
176
183
 
177
- def delete_dir!(path)
178
- end
184
+ def delete_dir!(path); end
179
185
 
180
- def clean_cache!(seconds)
181
- end
186
+ def clean_cache!(seconds); end
182
187
  end # CloudFiles
183
188
  end # Storage
184
189
  end # CarrierWave
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module CarrierWave
2
4
  module UpYun
3
5
  module Configuration
@@ -10,13 +12,13 @@ module CarrierWave
10
12
  add_config :upyun_bucket_host
11
13
  end
12
14
  end
13
-
15
+
14
16
  module ClassMethods
15
17
  def add_config(name)
16
18
  class_eval <<-RUBY, __FILE__, __LINE__ + 1
17
19
  def self.#{name}(value=nil)
18
20
  @#{name} = value if value
19
- return @#{name} if self.object_id == #{self.object_id} || defined?(@#{name})
21
+ return @#{name} if self.object_id == #{object_id} || defined?(@#{name})
20
22
  name = superclass.#{name}
21
23
  return nil if name.nil? && !instance_variable_defined?("@#{name}")
22
24
  @#{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
@@ -31,7 +33,7 @@ module CarrierWave
31
33
  value.instance_of?(Proc) ? value.call : value
32
34
  end
33
35
  RUBY
34
- end
36
+ end
35
37
  end
36
38
  end
37
- end
39
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carrierwave-upyun
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nowa Zhu
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-08-19 00:00:00.000000000 Z
12
+ date: 2019-11-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: carrierwave
@@ -45,76 +45,6 @@ dependencies:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.8.0
48
- - !ruby/object:Gem::Dependency
49
- name: sqlite3
50
- requirement: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- type: :development
56
- prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: activerecord
64
- requirement: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- type: :development
70
- prerelease: false
71
- version_requirements: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- - !ruby/object:Gem::Dependency
77
- name: sqlite3-ruby
78
- requirement: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- type: :development
84
- prerelease: false
85
- version_requirements: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- - !ruby/object:Gem::Dependency
91
- name: mini_magick
92
- requirement: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- type: :development
98
- prerelease: false
99
- version_requirements: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- - !ruby/object:Gem::Dependency
105
- name: rspec
106
- requirement: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- type: :development
112
- prerelease: false
113
- version_requirements: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
48
  description: UpYun Storage support for CarrierWave
119
49
  email:
120
50
  - nowazhu@gmail.com