carrierwave-aliyun 0.1.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.
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +114 -0
- data/README.md +26 -0
- data/carrierwave-aliyun.gemspec +22 -0
- data/lib/carrierwave-aliyun.rb +6 -0
- data/lib/carrierwave/aliyun/configuration.rb +35 -0
- data/lib/carrierwave/storage/aliyun.rb +136 -0
- data/spec/foo.gif +0 -0
- data/spec/foo.jpg +0 -0
- data/spec/spec_helper.rb +36 -0
- data/spec/upload_spec.rb +73 -0
- metadata +106 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
uploads
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour --format nested
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://ruby.taobao.org/
|
3
|
+
specs:
|
4
|
+
actionmailer (3.2.1)
|
5
|
+
actionpack (= 3.2.1)
|
6
|
+
mail (~> 2.4.0)
|
7
|
+
actionpack (3.2.1)
|
8
|
+
activemodel (= 3.2.1)
|
9
|
+
activesupport (= 3.2.1)
|
10
|
+
builder (~> 3.0.0)
|
11
|
+
erubis (~> 2.7.0)
|
12
|
+
journey (~> 1.0.1)
|
13
|
+
rack (~> 1.4.0)
|
14
|
+
rack-cache (~> 1.1)
|
15
|
+
rack-test (~> 0.6.1)
|
16
|
+
sprockets (~> 2.1.2)
|
17
|
+
activemodel (3.2.1)
|
18
|
+
activesupport (= 3.2.1)
|
19
|
+
builder (~> 3.0.0)
|
20
|
+
activerecord (3.2.1)
|
21
|
+
activemodel (= 3.2.1)
|
22
|
+
activesupport (= 3.2.1)
|
23
|
+
arel (~> 3.0.0)
|
24
|
+
tzinfo (~> 0.3.29)
|
25
|
+
activeresource (3.2.1)
|
26
|
+
activemodel (= 3.2.1)
|
27
|
+
activesupport (= 3.2.1)
|
28
|
+
activesupport (3.2.1)
|
29
|
+
i18n (~> 0.6)
|
30
|
+
multi_json (~> 1.0)
|
31
|
+
arel (3.0.0)
|
32
|
+
builder (3.0.0)
|
33
|
+
carrierwave (0.5.8)
|
34
|
+
activesupport (~> 3.0)
|
35
|
+
diff-lcs (1.1.3)
|
36
|
+
erubis (2.7.0)
|
37
|
+
hike (1.2.1)
|
38
|
+
i18n (0.6.0)
|
39
|
+
journey (1.0.1)
|
40
|
+
json (1.6.5)
|
41
|
+
mail (2.4.1)
|
42
|
+
i18n (>= 0.4.0)
|
43
|
+
mime-types (~> 1.16)
|
44
|
+
treetop (~> 1.4.8)
|
45
|
+
metaclass (0.0.1)
|
46
|
+
mime-types (1.17.2)
|
47
|
+
mini_magick (3.4)
|
48
|
+
subexec (~> 0.2.1)
|
49
|
+
mocha (0.10.0)
|
50
|
+
metaclass (~> 0.0.1)
|
51
|
+
multi_json (1.0.4)
|
52
|
+
polyglot (0.3.3)
|
53
|
+
rack (1.4.1)
|
54
|
+
rack-cache (1.1)
|
55
|
+
rack (>= 0.4)
|
56
|
+
rack-ssl (1.3.2)
|
57
|
+
rack
|
58
|
+
rack-test (0.6.1)
|
59
|
+
rack (>= 1.0)
|
60
|
+
rails (3.2.1)
|
61
|
+
actionmailer (= 3.2.1)
|
62
|
+
actionpack (= 3.2.1)
|
63
|
+
activerecord (= 3.2.1)
|
64
|
+
activeresource (= 3.2.1)
|
65
|
+
activesupport (= 3.2.1)
|
66
|
+
bundler (~> 1.0)
|
67
|
+
railties (= 3.2.1)
|
68
|
+
railties (3.2.1)
|
69
|
+
actionpack (= 3.2.1)
|
70
|
+
activesupport (= 3.2.1)
|
71
|
+
rack-ssl (~> 1.3.2)
|
72
|
+
rake (>= 0.8.7)
|
73
|
+
rdoc (~> 3.4)
|
74
|
+
thor (~> 0.14.6)
|
75
|
+
rake (0.9.2.2)
|
76
|
+
rdoc (3.12)
|
77
|
+
json (~> 1.4)
|
78
|
+
rest-client (1.6.7)
|
79
|
+
mime-types (>= 1.16)
|
80
|
+
rspec (2.6.0)
|
81
|
+
rspec-core (~> 2.6.0)
|
82
|
+
rspec-expectations (~> 2.6.0)
|
83
|
+
rspec-mocks (~> 2.6.0)
|
84
|
+
rspec-core (2.6.4)
|
85
|
+
rspec-expectations (2.6.0)
|
86
|
+
diff-lcs (~> 1.1.2)
|
87
|
+
rspec-mocks (2.6.0)
|
88
|
+
sprockets (2.1.2)
|
89
|
+
hike (~> 1.2)
|
90
|
+
rack (~> 1.0)
|
91
|
+
tilt (~> 1.1, != 1.3.0)
|
92
|
+
sqlite3 (1.3.5)
|
93
|
+
sqlite3-ruby (1.3.3)
|
94
|
+
sqlite3 (>= 1.3.3)
|
95
|
+
subexec (0.2.1)
|
96
|
+
thor (0.14.6)
|
97
|
+
tilt (1.3.3)
|
98
|
+
treetop (1.4.10)
|
99
|
+
polyglot
|
100
|
+
polyglot (>= 0.3.1)
|
101
|
+
tzinfo (0.3.31)
|
102
|
+
|
103
|
+
PLATFORMS
|
104
|
+
ruby
|
105
|
+
|
106
|
+
DEPENDENCIES
|
107
|
+
carrierwave
|
108
|
+
mini_magick
|
109
|
+
mocha (= 0.10.0)
|
110
|
+
rails
|
111
|
+
rake
|
112
|
+
rest-client
|
113
|
+
rspec (~> 2.6.0)
|
114
|
+
sqlite3-ruby
|
data/README.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# CarrierWave for Aliyun OSS
|
2
|
+
|
3
|
+
This gem adds support for [Aliyun OSS](http://oss.aliyun.com) to [CarrierWave](https://github.com/jnicklas/carrierwave/)
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
gem install carrierwave-aliyun
|
8
|
+
|
9
|
+
## Using Bundler
|
10
|
+
|
11
|
+
gem 'rest-client'
|
12
|
+
gem 'carrierwave-aliyun'
|
13
|
+
|
14
|
+
## Configuration
|
15
|
+
|
16
|
+
You'll need to configure the to use this in config/initializes/carrierwave.rb
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
CarrierWave.configure do |config|
|
20
|
+
config.storage = :aliyun
|
21
|
+
config.aliyun_access_id = "xxxxxx"
|
22
|
+
config.aliyun_access_key = 'xxxxxx'
|
23
|
+
# you need create this bucket first!
|
24
|
+
config.aliyun_bucket = "simple"
|
25
|
+
end
|
26
|
+
```
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "carrierwave-aliyun"
|
6
|
+
s.version = "0.1.0"
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ["Jason Lee"]
|
9
|
+
s.email = ["huacnlee@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/nowa/carrierwave-aliyun"
|
11
|
+
s.summary = %q{Aliyun OSS support for Carrierwave}
|
12
|
+
s.description = %q{Aliyun OSS support for Carrierwave}
|
13
|
+
s.files = `git ls-files`.split("\n")
|
14
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
|
18
|
+
s.add_dependency "carrierwave", [">= 0.5.7"]
|
19
|
+
s.add_dependency "rest-client", [">= 1.6.7"]
|
20
|
+
s.add_development_dependency "rspec", ["~> 2.6"]
|
21
|
+
s.add_development_dependency "rake", ["~> 0.9"]
|
22
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
require "carrierwave/storage/aliyun"
|
2
|
+
require "carrierwave/aliyun/configuration"
|
3
|
+
CarrierWave.configure do |config|
|
4
|
+
config.storage_engines.merge!({:aliyun => "CarrierWave::Storage::Aliyun"})
|
5
|
+
end
|
6
|
+
CarrierWave::Uploader::Base.send(:include, CarrierWave::Aliyun::Configuration)
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module CarrierWave
|
2
|
+
module Aliyun
|
3
|
+
module Configuration
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
included do
|
6
|
+
add_config :aliyun_access_id
|
7
|
+
add_config :aliyun_access_key
|
8
|
+
add_config :aliyun_bucket
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
def add_config(name)
|
14
|
+
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
15
|
+
def self.#{name}(value=nil)
|
16
|
+
@#{name} = value if value
|
17
|
+
return @#{name} if self.object_id == #{self.object_id} || defined?(@#{name})
|
18
|
+
name = superclass.#{name}
|
19
|
+
return nil if name.nil? && !instance_variable_defined?("@#{name}")
|
20
|
+
@#{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
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.#{name}=(value)
|
24
|
+
@#{name} = value
|
25
|
+
end
|
26
|
+
|
27
|
+
def #{name}
|
28
|
+
value = self.class.#{name}
|
29
|
+
value.instance_of?(Proc) ? value.call : value
|
30
|
+
end
|
31
|
+
RUBY
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'carrierwave'
|
3
|
+
require 'digest/hmac'
|
4
|
+
require 'digest/md5'
|
5
|
+
require "rest-client"
|
6
|
+
|
7
|
+
module CarrierWave
|
8
|
+
module Storage
|
9
|
+
class Aliyun < Abstract
|
10
|
+
|
11
|
+
class Connection
|
12
|
+
def initialize(options={})
|
13
|
+
@aliyun_access_id = options[:aliyun_access_id]
|
14
|
+
@aliyun_access_key = options[:aliyun_access_key]
|
15
|
+
@aliyun_bucket = options[:aliyun_bucket]
|
16
|
+
end
|
17
|
+
|
18
|
+
def put(path, file)
|
19
|
+
content_md5 = Digest::MD5.hexdigest(file)
|
20
|
+
content_type = "image/jpg"
|
21
|
+
date = Time.now.gmtime.strftime("%a, %d %b %Y %H:%M:%S GMT")
|
22
|
+
path = "#{@aliyun_bucket}/#{path}"
|
23
|
+
url = "http://storage.aliyun.com/#{path}"
|
24
|
+
auth_sign = sign("PUT", path, content_md5, content_type ,date)
|
25
|
+
headers = {
|
26
|
+
"Authorization" => auth_sign,
|
27
|
+
"Content-Type" => content_type,
|
28
|
+
"Content-Length" => file.length,
|
29
|
+
"Date" => date,
|
30
|
+
"Host" => "storage.aliyun.com",
|
31
|
+
"Expect" => "100-Continue"
|
32
|
+
}
|
33
|
+
response = RestClient.put(url, file, headers)
|
34
|
+
end
|
35
|
+
|
36
|
+
def get(path)
|
37
|
+
@http.get(path)
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
def sign(verb, path, content_md5 = '', content_type = '', date)
|
42
|
+
canonicalized_oss_headers = ''
|
43
|
+
canonicalized_resource = "/#{path}"
|
44
|
+
string_to_sign = "#{verb}\n\n#{content_type}\n#{date}\n#{canonicalized_oss_headers}#{canonicalized_resource}"
|
45
|
+
digest = OpenSSL::Digest::Digest.new('sha1')
|
46
|
+
h = OpenSSL::HMAC.digest(digest, @aliyun_access_key, string_to_sign)
|
47
|
+
h = Base64.encode64(h)
|
48
|
+
"OSS #{@aliyun_access_id}:#{h}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class File
|
53
|
+
def initialize(uploader, base, path)
|
54
|
+
@uploader = uploader
|
55
|
+
@path = path
|
56
|
+
@base = base
|
57
|
+
end
|
58
|
+
|
59
|
+
##
|
60
|
+
# Returns the current path/filename of the file on Cloud Files.
|
61
|
+
#
|
62
|
+
# === Returns
|
63
|
+
#
|
64
|
+
# [String] A path
|
65
|
+
#
|
66
|
+
def path
|
67
|
+
@path
|
68
|
+
end
|
69
|
+
|
70
|
+
##
|
71
|
+
# Reads the contents of the file from Cloud Files
|
72
|
+
#
|
73
|
+
# === Returns
|
74
|
+
#
|
75
|
+
# [String] contents of the file
|
76
|
+
#
|
77
|
+
def read
|
78
|
+
object = oss_connection.get(@path)
|
79
|
+
object.data
|
80
|
+
end
|
81
|
+
|
82
|
+
##
|
83
|
+
# Remove the file from Cloud Files
|
84
|
+
#
|
85
|
+
def delete
|
86
|
+
begin
|
87
|
+
oss_connection.delete(@path)
|
88
|
+
true
|
89
|
+
rescue Exception => e
|
90
|
+
# If the file's not there, don't panic
|
91
|
+
nil
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def url
|
96
|
+
"http://storage.aliyun.com/#{@uploader.aliyun_bucket}/#{@path}"
|
97
|
+
end
|
98
|
+
|
99
|
+
def store(data)
|
100
|
+
oss_connection.put(@path, data)
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
|
105
|
+
def headers
|
106
|
+
@headers ||= { }
|
107
|
+
end
|
108
|
+
|
109
|
+
def connection
|
110
|
+
@base.connection
|
111
|
+
end
|
112
|
+
|
113
|
+
def oss_connection
|
114
|
+
return @oss_connection if @oss_connection
|
115
|
+
|
116
|
+
config = {:aliyun_access_id => @uploader.aliyun_access_id,
|
117
|
+
:aliyun_access_key => @uploader.aliyun_access_key,
|
118
|
+
:aliyun_bucket => @uploader.aliyun_bucket
|
119
|
+
}
|
120
|
+
@oss_connection ||= CarrierWave::Storage::Aliyun::Connection.new(config)
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
def store!(file)
|
126
|
+
f = CarrierWave::Storage::Aliyun::File.new(uploader, self, uploader.store_path)
|
127
|
+
f.store(file.read)
|
128
|
+
f
|
129
|
+
end
|
130
|
+
|
131
|
+
def retrieve!(identifier)
|
132
|
+
CarrierWave::Storage::Aliyun::File.new(uploader, self, uploader.store_path(identifier))
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
data/spec/foo.gif
ADDED
Binary file
|
data/spec/foo.jpg
ADDED
Binary file
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rspec'
|
3
|
+
require 'rspec/autorun'
|
4
|
+
require 'rails'
|
5
|
+
require 'active_record'
|
6
|
+
require "carrierwave"
|
7
|
+
require 'carrierwave/orm/activerecord'
|
8
|
+
require 'carrierwave/processing/mini_magick'
|
9
|
+
|
10
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
11
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
12
|
+
|
13
|
+
require "carrierwave-aliyun"
|
14
|
+
|
15
|
+
|
16
|
+
module Rails
|
17
|
+
class <<self
|
18
|
+
def root
|
19
|
+
[File.expand_path(__FILE__).split('/')[0..-3].join('/'),"spec"].join("/")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
ActiveRecord::Migration.verbose = false
|
25
|
+
|
26
|
+
# 测试的时候需要修改这个地方
|
27
|
+
CarrierWave.configure do |config|
|
28
|
+
config.storage = :aliyun
|
29
|
+
config.aliyun_access_id = "7ewl4zm3mhi45vko9zx022ul"
|
30
|
+
config.aliyun_access_key = 'Ajpi7IRKDKdXYHHFFoS89uQJQE8='
|
31
|
+
config.aliyun_bucket = "carrierwave"
|
32
|
+
end
|
33
|
+
|
34
|
+
def load_file(fname)
|
35
|
+
File.open([Rails.root,fname].join("/"))
|
36
|
+
end
|
data/spec/upload_spec.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
require "open-uri"
|
4
|
+
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
|
5
|
+
|
6
|
+
describe "Upload" do
|
7
|
+
def setup_db
|
8
|
+
ActiveRecord::Schema.define(:version => 1) do
|
9
|
+
create_table :photos do |t|
|
10
|
+
t.column :image, :string
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def drop_db
|
16
|
+
ActiveRecord::Base.connection.tables.each do |table|
|
17
|
+
ActiveRecord::Base.connection.drop_table(table)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class PhotoUploader < CarrierWave::Uploader::Base
|
22
|
+
include CarrierWave::MiniMagick
|
23
|
+
|
24
|
+
version :small do
|
25
|
+
process :resize_to_fill => [120, 120]
|
26
|
+
end
|
27
|
+
|
28
|
+
def store_dir
|
29
|
+
"photos"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class Photo < ActiveRecord::Base
|
34
|
+
mount_uploader :image, PhotoUploader
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
before :all do
|
39
|
+
setup_db
|
40
|
+
end
|
41
|
+
|
42
|
+
after :all do
|
43
|
+
drop_db
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "Upload Image" do
|
47
|
+
context "should upload image" do
|
48
|
+
before(:all) do
|
49
|
+
@file = load_file("foo.jpg")
|
50
|
+
@file1 = load_file("foo.gif")
|
51
|
+
@photo = Photo.new(:image => @file)
|
52
|
+
@photo1 = Photo.new(:image => @file1)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should upload file" do
|
56
|
+
@photo.save.should be_true
|
57
|
+
@photo1.save.should be_true
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should get uploaded file" do
|
61
|
+
img = open(@photo.image.url)
|
62
|
+
img.size.should == @file.size
|
63
|
+
img1 = open(@photo1.image.url)
|
64
|
+
img1.size.should == @file1.size
|
65
|
+
end
|
66
|
+
|
67
|
+
it "sholud get small version uploaded file" do
|
68
|
+
open(@photo.image.small.url).should_not == nil
|
69
|
+
open(@photo1.image.small.url).should_not == nil
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: carrierwave-aliyun
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jason Lee
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: carrierwave
|
16
|
+
requirement: &70172009111240 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.5.7
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70172009111240
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rest-client
|
27
|
+
requirement: &70172009110740 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.6.7
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70172009110740
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &70172009110260 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '2.6'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70172009110260
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: &70172009109780 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.9'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70172009109780
|
58
|
+
description: Aliyun OSS support for Carrierwave
|
59
|
+
email:
|
60
|
+
- huacnlee@gmail.com
|
61
|
+
executables: []
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- .gitignore
|
66
|
+
- .rspec
|
67
|
+
- Gemfile
|
68
|
+
- Gemfile.lock
|
69
|
+
- README.md
|
70
|
+
- carrierwave-aliyun.gemspec
|
71
|
+
- lib/carrierwave-aliyun.rb
|
72
|
+
- lib/carrierwave/aliyun/configuration.rb
|
73
|
+
- lib/carrierwave/storage/aliyun.rb
|
74
|
+
- spec/foo.gif
|
75
|
+
- spec/foo.jpg
|
76
|
+
- spec/spec_helper.rb
|
77
|
+
- spec/upload_spec.rb
|
78
|
+
homepage: https://github.com/nowa/carrierwave-aliyun
|
79
|
+
licenses: []
|
80
|
+
post_install_message:
|
81
|
+
rdoc_options: []
|
82
|
+
require_paths:
|
83
|
+
- lib
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ! '>='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
requirements: []
|
97
|
+
rubyforge_project:
|
98
|
+
rubygems_version: 1.8.10
|
99
|
+
signing_key:
|
100
|
+
specification_version: 3
|
101
|
+
summary: Aliyun OSS support for Carrierwave
|
102
|
+
test_files:
|
103
|
+
- spec/foo.gif
|
104
|
+
- spec/foo.jpg
|
105
|
+
- spec/spec_helper.rb
|
106
|
+
- spec/upload_spec.rb
|