carrierwave-aliyun 0.1.2 → 0.1.3

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: de75b74723a825b2db59c61c2062cc57847ec4d2
4
+ data.tar.gz: 2b96649234614f4fbc559ba2e4be3daafdb7d861
5
+ SHA512:
6
+ metadata.gz: 6c2c7d7be67f169d47144e3eb8a061efe8127ba1e9c94ff33b4324b0cfb449d859ca73fc301d6656b4ddf5b22c321ffa2d67e8b95a2dfb402aec27bb4a61b30b
7
+ data.tar.gz: c1d55f78f3a70c9bba297e4fb5a38e87863b555b5c8bfa5762519c0979c256be51319fe975f314a7a480dd4e8a7239d3054120bd52b2992da001e53ce1f16627
data/Changelogs.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.1.3
2
+
3
+ * delete 接口加入。
4
+ * 支持 Carriewave 自动在更新上传文件的时候删除老文件(比如,用户重新上传头像,老头像图片文件将会被 CarrierWave 删除)。
5
+
1
6
  ## 0.1.2
2
7
 
3
8
  * 修正 content_type 的支持,自动用原始文件的 content_type,以免上传 zip 之类的文件以后无法下载.
data/README.md CHANGED
@@ -29,4 +29,8 @@ CarrierWave.configure do |config|
29
29
  # 是否使用内部连接,true - 使用 Aliyun 局域网的方式访问 false - 外部网络访问
30
30
  config.aliyun_internal = true
31
31
  end
32
- ```
32
+ ```
33
+
34
+ ## 跳过 CarrierWave 直接调用 Aliyun API
35
+
36
+ 如果你有需求想跳过 CarrierWave,直接调用 Aliyun 的接口,可以参看 `spec/aliyun_spec.rb` 里面有例子。
@@ -1,9 +1,10 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
+ require File.expand_path('lib/carrierwave/aliyun/version')
3
4
 
4
5
  Gem::Specification.new do |s|
5
6
  s.name = "carrierwave-aliyun"
6
- s.version = "0.1.2"
7
+ s.version = CarrierWave::Aliyun::Version.current
7
8
  s.platform = Gem::Platform::RUBY
8
9
  s.authors = ["Jason Lee"]
9
10
  s.email = ["huacnlee@gmail.com"]
@@ -0,0 +1,32 @@
1
+ module CarrierWave
2
+ module Aliyun
3
+ class Version
4
+ MAJOR, MINOR, PATCH = 0, 1, 3
5
+
6
+ ##
7
+ # Returns the major version ( big release based off of multiple minor releases )
8
+ def self.major
9
+ MAJOR
10
+ end
11
+
12
+ ##
13
+ # Returns the minor version ( small release based off of multiple patches )
14
+ def self.minor
15
+ MINOR
16
+ end
17
+
18
+ ##
19
+ # Returns the patch version ( updates, features and (crucial) bug fixes )
20
+ def self.patch
21
+ PATCH
22
+ end
23
+
24
+ ##
25
+ # Returns the current version of the Backup gem ( qualified for the gemspec )
26
+ def self.current
27
+ "#{major}.#{minor}.#{patch}"
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -19,26 +19,50 @@ module CarrierWave
19
19
  end
20
20
  end
21
21
 
22
- def put(path, file, options={})
23
- content_md5 = Digest::MD5.hexdigest(file)
22
+ def put(path, file_data, options={})
23
+ path = format_path(path)
24
+ content_md5 = Digest::MD5.hexdigest(file_data)
24
25
  content_type = options[:content_type] || "image/jpg"
25
- date = Time.now.gmtime.strftime("%a, %d %b %Y %H:%M:%S GMT")
26
- path = "#{@aliyun_bucket}/#{path}"
27
- url = "http://#{@aliyun_host}/#{path}"
28
- auth_sign = sign("PUT", path, content_md5, content_type ,date)
26
+ date = gmtdate
27
+ url = path_to_url(path)
28
+ auth_sign = sign("PUT", path, content_md5, content_type,date)
29
29
  headers = {
30
30
  "Authorization" => auth_sign,
31
31
  "Content-Type" => content_type,
32
- "Content-Length" => file.length,
32
+ "Content-Length" => file_data.length,
33
33
  "Date" => date,
34
34
  "Host" => @aliyun_host,
35
35
  "Expect" => "100-Continue"
36
36
  }
37
- response = RestClient.put(url, file, headers)
37
+ response = RestClient.put(url, file_data, headers)
38
+ return url
38
39
  end
39
40
 
40
- def get(path)
41
- @http.get(path)
41
+ def delete(path)
42
+ path = format_path(path)
43
+ date = gmtdate
44
+ headers = {
45
+ "Host" => @aliyun_host,
46
+ "Date" => date,
47
+ "Authorization" => sign("DELETE", path, "", "" ,date)
48
+ }
49
+ url = path_to_url(path)
50
+ RestClient.delete(url, headers)
51
+ return url
52
+ end
53
+
54
+ def gmtdate
55
+ Time.now.gmtime.strftime("%a, %d %b %Y %H:%M:%S GMT")
56
+ end
57
+
58
+ def format_path(path)
59
+ return "" if path.blank?
60
+ path.gsub!(/^\//,"")
61
+ [@aliyun_bucket, path].join("/")
62
+ end
63
+
64
+ def path_to_url(path)
65
+ "http://#{@aliyun_host}/#{path}"
42
66
  end
43
67
 
44
68
  private
@@ -92,6 +116,7 @@ module CarrierWave
92
116
  true
93
117
  rescue Exception => e
94
118
  # If the file's not there, don't panic
119
+ puts "carrierwave-aliyun delete file failed: #{e}"
95
120
  nil
96
121
  end
97
122
  end
@@ -0,0 +1,29 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+ require "open-uri"
3
+ require "net/http"
4
+
5
+ describe "Aliyun" do
6
+ before(:all) do
7
+ opts = {
8
+ :aliyun_access_id => ALIYUN_ACCESS_ID,
9
+ :aliyun_access_key => ALIYUN_ACCESS_KEY,
10
+ :aliyun_bucket => ALIYUN_BUCKET
11
+ }
12
+ @connection = CarrierWave::Storage::Aliyun::Connection.new(opts)
13
+ end
14
+
15
+ it "should put" do
16
+ url = @connection.put("a/a.jpg",load_file("foo.jpg").read)
17
+ Net::HTTP.get_response(URI.parse(url)).code.should == "200"
18
+ end
19
+
20
+ it "should put with / prefix" do
21
+ url = @connection.put("/a/a.jpg",load_file("foo.jpg").read)
22
+ Net::HTTP.get_response(URI.parse(url)).code.should == "200"
23
+ end
24
+
25
+ it "should delete" do
26
+ url = @connection.delete("/a/a.jpg")
27
+ Net::HTTP.get_response(URI.parse(url)).code.should == "404"
28
+ end
29
+ end
data/spec/spec_helper.rb CHANGED
@@ -24,11 +24,15 @@ end
24
24
  ActiveRecord::Migration.verbose = false
25
25
 
26
26
  # 测试的时候需要修改这个地方
27
+ ALIYUN_ACCESS_ID = "7ewl4zm3mhi45vko9zx022ul"
28
+ ALIYUN_ACCESS_KEY = 'Ajpi7IRKDKdXYHHFFoS89uQJQE8='
29
+ ALIYUN_BUCKET = "carrierwave"
30
+
27
31
  CarrierWave.configure do |config|
28
32
  config.storage = :aliyun
29
- config.aliyun_access_id = "7ewl4zm3mhi45vko9zx022ul"
30
- config.aliyun_access_key = 'Ajpi7IRKDKdXYHHFFoS89uQJQE8='
31
- config.aliyun_bucket = "carrierwave"
33
+ config.aliyun_access_id = ALIYUN_ACCESS_ID
34
+ config.aliyun_access_key = ALIYUN_ACCESS_KEY
35
+ config.aliyun_bucket = ALIYUN_BUCKET
32
36
  # config.aliyun_internal = false
33
37
  end
34
38
 
data/spec/upload_spec.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
3
  require "open-uri"
4
+ require "net/http"
4
5
  ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
5
6
 
6
7
  describe "Upload" do
@@ -101,6 +102,12 @@ describe "Upload" do
101
102
  attach.size.should == @file.size
102
103
  end
103
104
 
105
+ it "should delete old file when upload a new file again" do
106
+ old_url = @attachment.file.url
107
+ @attachment.file = load_file("foo.gif")
108
+ @attachment.save
109
+ Net::HTTP.get_response(URI.parse(old_url)).code.should == "404"
110
+ end
104
111
  end
105
112
  end
106
113
  end
metadata CHANGED
@@ -1,48 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carrierwave-aliyun
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
5
- prerelease:
4
+ version: 0.1.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jason Lee
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-01-10 00:00:00.000000000 Z
11
+ date: 2013-03-12 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: carrierwave
16
- prerelease: false
17
15
  requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 0.5.7
22
- none: false
23
20
  type: :runtime
21
+ prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
23
  requirements:
26
- - - ! '>='
24
+ - - '>='
27
25
  - !ruby/object:Gem::Version
28
26
  version: 0.5.7
29
- none: false
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rest-client
32
- prerelease: false
33
29
  requirement: !ruby/object:Gem::Requirement
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: 1.6.7
38
- none: false
39
34
  type: :runtime
35
+ prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
37
  requirements:
42
- - - ! '>='
38
+ - - '>='
43
39
  - !ruby/object:Gem::Version
44
40
  version: 1.6.7
45
- none: false
46
41
  description: Aliyun OSS support for Carrierwave
47
42
  email:
48
43
  - huacnlee@gmail.com
@@ -59,7 +54,9 @@ files:
59
54
  - carrierwave-aliyun.gemspec
60
55
  - lib/carrierwave-aliyun.rb
61
56
  - lib/carrierwave/aliyun/configuration.rb
57
+ - lib/carrierwave/aliyun/version.rb
62
58
  - lib/carrierwave/storage/aliyun.rb
59
+ - spec/aliyun_spec.rb
63
60
  - spec/foo.gif
64
61
  - spec/foo.jpg
65
62
  - spec/foo.zip
@@ -67,29 +64,29 @@ files:
67
64
  - spec/upload_spec.rb
68
65
  homepage: https://github.com/nowa/carrierwave-aliyun
69
66
  licenses: []
67
+ metadata: {}
70
68
  post_install_message:
71
69
  rdoc_options: []
72
70
  require_paths:
73
71
  - lib
74
72
  required_ruby_version: !ruby/object:Gem::Requirement
75
73
  requirements:
76
- - - ! '>='
74
+ - - '>='
77
75
  - !ruby/object:Gem::Version
78
76
  version: '0'
79
- none: false
80
77
  required_rubygems_version: !ruby/object:Gem::Requirement
81
78
  requirements:
82
- - - ! '>='
79
+ - - '>='
83
80
  - !ruby/object:Gem::Version
84
81
  version: '0'
85
- none: false
86
82
  requirements: []
87
83
  rubyforge_project:
88
- rubygems_version: 1.8.24
84
+ rubygems_version: 2.0.2
89
85
  signing_key:
90
- specification_version: 3
86
+ specification_version: 4
91
87
  summary: Aliyun OSS support for Carrierwave
92
88
  test_files:
89
+ - spec/aliyun_spec.rb
93
90
  - spec/foo.gif
94
91
  - spec/foo.jpg
95
92
  - spec/foo.zip