paperclip-storage-aliyun 0.1.2 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/aliyun/connection.rb +11 -3
- data/lib/aliyun/data_center.rb +17 -11
- metadata +3 -20
- data/.editorconfig +0 -13
- data/.gitignore +0 -3
- data/.rspec +0 -1
- data/.rubocop.yml +0 -11
- data/Gemfile +0 -16
- data/README.md +0 -65
- data/paperclip-storage-aliyun.gemspec +0 -16
- data/spec/aliyun_spec.rb +0 -77
- data/spec/attachments/girl.jpg +0 -0
- data/spec/attachments/masu.pdf +0 -0
- data/spec/attachments//347/276/216/345/245/263.jpg +0 -0
- data/spec/fixtures/schema.rb +0 -8
- data/spec/lib/paperclip/storage/aliyun_spec.rb +0 -87
- data/spec/spec_helper.rb +0 -27
- data/spec/support/post.rb +0 -24
- data/spec/support/rails.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 25b96669f6b0a9f6c7f727cecd1ef74045f3a69aa0ace67b0558b6c7f15fb358
|
4
|
+
data.tar.gz: 2ba4caf9e55a44037772e7059075cce390dcf27f6a903b052d058dd554d07189
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d46717fbd0418be321ae684a2ecc64c405fb4d51a8b265041896a924fa8994721962ba346902e9a95bb790a5b3cb9513a2bc05a63e0beddf2fe7f7dd377d166f
|
7
|
+
data.tar.gz: 1dc297fe30701431f94144ac5e08604f9181b45b188cf9f719dd30529b309a83cc5be8560fb5f54f3ecfe9bbd3ccfb48e3e5370e3ca2178300ec016da4c800e3
|
data/lib/aliyun/connection.rb
CHANGED
@@ -26,7 +26,7 @@ module Aliyun
|
|
26
26
|
# @option access_id [String] used to set "Authorization" request header
|
27
27
|
# @option access_key [String] the access key
|
28
28
|
# @option bucket [String] bucket used to access
|
29
|
-
# @option data_center [String] available data center name, e.g. 'hangzhou'
|
29
|
+
# @option data_center [String] available data center name, e.g. 'cn-hangzhou'
|
30
30
|
# @option internal [true, false] if the service should be accessed through internal network
|
31
31
|
# @option host_alias [String] the alias of the host, such as the CDN domain name
|
32
32
|
# @note both access_id and acces_key are related to authorization algorithm:
|
@@ -44,7 +44,7 @@ module Aliyun
|
|
44
44
|
@aliyun_alias_host = options[:host_alias] || @aliyun_upload_host
|
45
45
|
end
|
46
46
|
|
47
|
-
# Return the meta informations for
|
47
|
+
# Return the meta informations for a file specified by the path
|
48
48
|
# https://docs.aliyun.com/#/pub/oss/api-reference/object&HeadObject
|
49
49
|
#
|
50
50
|
# @param path [String] the path of file storaged in Aliyun OSS
|
@@ -64,8 +64,16 @@ module Aliyun
|
|
64
64
|
# :x_oss_request_id=>"55BD83A5D4C05BDFF4A329E0"}}
|
65
65
|
#
|
66
66
|
def head(path)
|
67
|
+
path = format_path(path)
|
68
|
+
bucket_path = get_bucket_path(path)
|
69
|
+
date = gmtdate
|
70
|
+
headers = {
|
71
|
+
'Host' => @aliyun_upload_host,
|
72
|
+
'Date' => date,
|
73
|
+
'Authorization' => sign('HEAD', bucket_path, '', '', date)
|
74
|
+
}
|
67
75
|
url = path_to_url(path)
|
68
|
-
RestClient.head(url).headers
|
76
|
+
RestClient.head(url, headers).headers
|
69
77
|
rescue RestClient::ResourceNotFound
|
70
78
|
{}
|
71
79
|
end
|
data/lib/aliyun/data_center.rb
CHANGED
@@ -5,30 +5,36 @@ module Aliyun
|
|
5
5
|
# https://docs.aliyun.com/#/pub/oss/product-documentation/domain-region
|
6
6
|
AVAILABLE_DATA_CENTERS = %w(
|
7
7
|
oss-cn-hangzhou
|
8
|
+
oss-cn-shanghai
|
8
9
|
oss-cn-qingdao
|
9
10
|
oss-cn-beijing
|
10
|
-
oss-cn-
|
11
|
+
oss-cn-zhangjiakou
|
12
|
+
oss-cn-huhehaote
|
11
13
|
oss-cn-shenzhen
|
12
|
-
oss-cn-
|
14
|
+
oss-cn-hongkong
|
13
15
|
oss-us-west-1
|
16
|
+
oss-us-east-1
|
14
17
|
oss-ap-southeast-1
|
18
|
+
oss-ap-southeast-2
|
19
|
+
oss-ap-southeast-3
|
20
|
+
oss-ap-southeast-5
|
21
|
+
oss-ap-northeast-1
|
22
|
+
oss-ap-south-1
|
23
|
+
oss-eu-central-1
|
24
|
+
oss-eu-west-1
|
25
|
+
oss-me-east-1
|
15
26
|
)
|
16
27
|
|
17
28
|
def get_endpoint(options)
|
18
|
-
data_center =
|
29
|
+
data_center = options[:data_center]
|
19
30
|
|
20
|
-
unless data_center
|
31
|
+
data_center.prepend('oss-') unless data_center.match(/^oss/)
|
32
|
+
|
33
|
+
unless AVAILABLE_DATA_CENTERS.include?(data_center)
|
21
34
|
fail InvalildDataCenter, "Unsupported Data Center #{options[:data_center]} Detected"
|
22
35
|
end
|
23
36
|
|
24
37
|
"#{data_center}#{options[:internal] ? '-internal' : ''}.aliyuncs.com"
|
25
38
|
end
|
26
|
-
|
27
|
-
def find_center(data_center)
|
28
|
-
return if /^(oss|cn|us|ap|oss-cn)$/.match(data_center)
|
29
|
-
|
30
|
-
regexp = Regexp.new(data_center)
|
31
|
-
AVAILABLE_DATA_CENTERS.find { |center| regexp.match(center) }
|
32
|
-
end
|
33
39
|
end
|
34
40
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paperclip-storage-aliyun
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Hong
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2019-08-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: paperclip
|
@@ -45,27 +45,11 @@ executables: []
|
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
-
- ".editorconfig"
|
49
|
-
- ".gitignore"
|
50
|
-
- ".rspec"
|
51
|
-
- ".rubocop.yml"
|
52
|
-
- Gemfile
|
53
|
-
- README.md
|
54
48
|
- lib/aliyun/connection.rb
|
55
49
|
- lib/aliyun/data_center.rb
|
56
50
|
- lib/aliyun/errors.rb
|
57
51
|
- lib/paperclip-storage-aliyun.rb
|
58
52
|
- lib/paperclip/storage/aliyun.rb
|
59
|
-
- paperclip-storage-aliyun.gemspec
|
60
|
-
- spec/aliyun_spec.rb
|
61
|
-
- spec/attachments/girl.jpg
|
62
|
-
- spec/attachments/masu.pdf
|
63
|
-
- spec/attachments/美女.jpg
|
64
|
-
- spec/fixtures/schema.rb
|
65
|
-
- spec/lib/paperclip/storage/aliyun_spec.rb
|
66
|
-
- spec/spec_helper.rb
|
67
|
-
- spec/support/post.rb
|
68
|
-
- spec/support/rails.rb
|
69
53
|
homepage: https://github.com/Martin91/paperclip-storage-aliyun
|
70
54
|
licenses:
|
71
55
|
- MIT
|
@@ -85,8 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
69
|
- !ruby/object:Gem::Version
|
86
70
|
version: '0'
|
87
71
|
requirements: []
|
88
|
-
|
89
|
-
rubygems_version: 2.6.6
|
72
|
+
rubygems_version: 3.0.1
|
90
73
|
signing_key:
|
91
74
|
specification_version: 4
|
92
75
|
summary: Extend a Aliyun OSS storage for paperclip
|
data/.editorconfig
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
# EditorConfig is awesome: http://EditorConfig.org
|
2
|
-
|
3
|
-
# top-most EditorConfig file
|
4
|
-
root = true
|
5
|
-
|
6
|
-
# Unix-style newlines with a newline ending every file
|
7
|
-
[*]
|
8
|
-
charset = utf-8
|
9
|
-
indent_style = space
|
10
|
-
indent_size = 2
|
11
|
-
end_of_line = lf
|
12
|
-
insert_final_newline = true
|
13
|
-
trim_trailing_whitespace = true
|
data/.gitignore
DELETED
data/.rspec
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
--color
|
data/.rubocop.yml
DELETED
data/Gemfile
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
source 'https://gems.ruby-china.org'
|
2
|
-
|
3
|
-
gemspec
|
4
|
-
|
5
|
-
group :test do
|
6
|
-
gem 'activerecord', '~> 4.0.0'
|
7
|
-
# A database backend that translates database interactions into no-ops. Using
|
8
|
-
# NullDB enables you to test your model business logic - including after_save
|
9
|
-
# hooks - without ever touching a real database.
|
10
|
-
gem 'activerecord-nulldb-adapter'
|
11
|
-
gem 'rspec', '~> 3.3.0'
|
12
|
-
# Use rubocop to lint our Ruby codes
|
13
|
-
gem 'rubocop', '~> 0.34.2'
|
14
|
-
gem 'pry'
|
15
|
-
gem 'pry-nav'
|
16
|
-
end
|
data/README.md
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
Aliyun Open Storage Service for Paperclip
|
2
|
-
===
|
3
|
-
This gem implement the support for [Aliyun open storage service(OSS)](http://oss.aliyun.com) to [Paperclip](https://github.com/thoughtbot/paperclip).
|
4
|
-
|
5
|
-
#### Installation
|
6
|
-
```shell
|
7
|
-
gem install paperclip-storage-aliyun
|
8
|
-
```
|
9
|
-
Or, if you are using a bundler, you can append the following line into your **Gemfile**:
|
10
|
-
```ruby
|
11
|
-
gem 'paperclip-storage-aliyun'
|
12
|
-
```
|
13
|
-
|
14
|
-
#### Configuration
|
15
|
-
In order to make all the things work, you should do some important configurations through a initializer:
|
16
|
-
|
17
|
-
If you are developing a Rails application, you can append a new initializer like:
|
18
|
-
```ruby
|
19
|
-
# [rails_root]/config/initializers/paperclip-aliyun-configuration.rb
|
20
|
-
Paperclip::Attachment.default_options[:aliyun] = {
|
21
|
-
access_id: '3VL9XMho8iCushj8',
|
22
|
-
access_key: 'VAUI2q7Tc6yTh1jr3kBsEUzZ84gEa2',
|
23
|
-
bucket: 'xx-test',
|
24
|
-
data_center: 'hangzhou',
|
25
|
-
internal: false,
|
26
|
-
protocol: 'https'
|
27
|
-
}
|
28
|
-
```
|
29
|
-
Then, in the model which defines the attachment, specify your storage and other options, for example:
|
30
|
-
```ruby
|
31
|
-
# [rails_root]/app/models/image.rb
|
32
|
-
class Image < ActiveRecord::Base
|
33
|
-
has_attached_file :attachment, {
|
34
|
-
storage: :aliyun,
|
35
|
-
styles: { thumbnail: "60x60#"},
|
36
|
-
path: 'public/system/:class/:attachment/:id_partition/:style/:filename',
|
37
|
-
url: ':aliyun_upload_url'
|
38
|
-
}
|
39
|
-
end
|
40
|
-
```
|
41
|
-
|
42
|
-
Similar to Paperclip::Storage::S3, there are four options for the url by now:
|
43
|
-
- `:aliyun_upload_url` : the url based on the options you give
|
44
|
-
- `:aliyun_internal_url` : the internal url, no matter what `options[:aliyun][:internal]` is
|
45
|
-
- `:aliyun_external_url` : the external url, no matter what `options[:aliyun][:internal]` is
|
46
|
-
- `:aliyun_alias_url` : the alias url based on the `host_alias` you give, typically used together with CDN
|
47
|
-
|
48
|
-
Please note the values above are all strings, not symbols. You could still make your own url if only you know what you are doing.
|
49
|
-
|
50
|
-
#### Test
|
51
|
-
1. Update connection settings in `spec/spec_helper.rb`:
|
52
|
-
|
53
|
-
```ruby
|
54
|
-
# Aliyun defaults
|
55
|
-
OSS_CONNECTION_OPTIONS = {
|
56
|
-
access_id: 'your_access_key_id',
|
57
|
-
access_key: 'your_access_key_secret',
|
58
|
-
bucket: 'your_bucket',
|
59
|
-
data_center: 'your_data_center',
|
60
|
-
internal: false,
|
61
|
-
protocol: 'https'
|
62
|
-
}
|
63
|
-
```
|
64
|
-
|
65
|
-
2. Run `bundle exec rspec spec`.
|
@@ -1,16 +0,0 @@
|
|
1
|
-
Gem::Specification.new do |s|
|
2
|
-
s.name = 'paperclip-storage-aliyun'
|
3
|
-
s.platform = Gem::Platform::RUBY
|
4
|
-
s.require_path = 'lib'
|
5
|
-
s.summary = 'Extend a Aliyun OSS storage for paperclip'
|
6
|
-
s.description = 'Extend a Aliyun OSS storage for paperclip'
|
7
|
-
s.version = '0.1.2'
|
8
|
-
s.files = `git ls-files`.split("\n")
|
9
|
-
s.authors = ['Martin Hong', 'Aidi Stan']
|
10
|
-
s.email = 'hongzeqin@gmail.com'
|
11
|
-
s.homepage = 'https://github.com/Martin91/paperclip-storage-aliyun'
|
12
|
-
s.license = 'MIT'
|
13
|
-
|
14
|
-
s.add_runtime_dependency 'paperclip', '>= 3.5.2'
|
15
|
-
s.add_runtime_dependency 'rest-client', '>= 1.6.7'
|
16
|
-
end
|
data/spec/aliyun_spec.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
require 'net/http'
|
4
|
-
|
5
|
-
describe Aliyun::Connection do
|
6
|
-
before :all do
|
7
|
-
@connection = ::Aliyun::Connection.new OSS_CONNECTION_OPTIONS
|
8
|
-
@path = 'a/a.jpg'
|
9
|
-
end
|
10
|
-
|
11
|
-
describe '#initialize' do
|
12
|
-
it 'raise error when use invalid data center' do
|
13
|
-
expect do
|
14
|
-
::Aliyun::Connection.new data_center: 'guangzhou'
|
15
|
-
end.to raise_error(Aliyun::InvalildDataCenter)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '#put' do
|
20
|
-
it 'upload the attachment' do
|
21
|
-
url = @connection.put @path, load_attachment('girl.jpg')
|
22
|
-
response_code = Net::HTTP.get_response(URI.parse(url)).code
|
23
|
-
expect(response_code).to eq('200')
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'support setting content type' do
|
27
|
-
content_type = 'application/pdf'
|
28
|
-
path = 'pdfs/masu.pdf'
|
29
|
-
@connection.put path, load_attachment('masu.pdf'), content_type: content_type
|
30
|
-
file_meta = @connection.head(path)
|
31
|
-
expect(file_meta[:content_type]).to eq(content_type)
|
32
|
-
|
33
|
-
@connection.delete path
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe '#delete' do
|
38
|
-
it 'delete the attachment' do
|
39
|
-
url = @connection.delete @path
|
40
|
-
response_code = Net::HTTP.get_response(URI.parse(url)).code
|
41
|
-
expect(response_code).to eq('404')
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "delete attachment with Chinese name" do
|
45
|
-
it "delete the attachment" do
|
46
|
-
path = "a/美女.jpg"
|
47
|
-
@connection.put path, load_attachment('美女.jpg')
|
48
|
-
url = @connection.delete path
|
49
|
-
response_code = Net::HTTP.get_response(URI.parse(url)).code
|
50
|
-
expect(response_code).to eq('404')
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe '#exists?' do
|
56
|
-
before :all do
|
57
|
-
@connection.put @path, load_attachment('girl.jpg')
|
58
|
-
@path_include_chinese = "美女.jpg"
|
59
|
-
@connection.put @path_include_chinese, load_attachment("美女.jpg")
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'return true if the file has been uploaded' do
|
63
|
-
expect(@connection.exists?(@path)).to be_truthy
|
64
|
-
end
|
65
|
-
|
66
|
-
it "return false if the specified file didn't exist" do
|
67
|
-
@connection.delete @path
|
68
|
-
expect(@connection.exists?(@path)).to be_falsey
|
69
|
-
end
|
70
|
-
|
71
|
-
it "also return true for existed file with path include chinese characters" do
|
72
|
-
expect(@connection.exists?(@path_include_chinese)).to be_truthy
|
73
|
-
url = "#{@connection.aliyun_protocol}://#{@connection.aliyun_upload_host}/#{@path_include_chinese}"
|
74
|
-
expect(@connection.exists?(url)).to be_truthy
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
data/spec/attachments/girl.jpg
DELETED
Binary file
|
data/spec/attachments/masu.pdf
DELETED
Binary file
|
Binary file
|
data/spec/fixtures/schema.rb
DELETED
@@ -1,87 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'open-uri'
|
3
|
-
require 'net/http'
|
4
|
-
require 'support/post'
|
5
|
-
|
6
|
-
describe Paperclip::Storage::Aliyun do
|
7
|
-
before :all do
|
8
|
-
@file = load_attachment('girl.jpg')
|
9
|
-
@post = Post.create attachment: @file
|
10
|
-
end
|
11
|
-
|
12
|
-
after :all do
|
13
|
-
@post.destroy! if @post && @post.respond_to?(:id)
|
14
|
-
@file.close
|
15
|
-
end
|
16
|
-
|
17
|
-
describe '#flush_writes' do
|
18
|
-
it 'uploads the attachment to Aliyun' do
|
19
|
-
response = open(@post.attachment.url)
|
20
|
-
expect(response).to be_truthy
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'get uploaded file from Aliyun' do
|
24
|
-
attachment = open @post.attachment.url
|
25
|
-
expect(attachment.size).to eq(@file.size)
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'set content type according to the original file' do
|
29
|
-
attachment = load_attachment('masu.pdf')
|
30
|
-
post = Post.create attachment: attachment
|
31
|
-
headers = RestClient.head(post.attachment.url).headers
|
32
|
-
expect(headers[:content_type]).to eq('application/pdf')
|
33
|
-
|
34
|
-
post.destroy
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe '#exists?' do
|
39
|
-
it 'returns true if the file exists on Aliyun' do
|
40
|
-
expect(@post.attachment).to exist
|
41
|
-
end
|
42
|
-
|
43
|
-
it "returns false if the file doesn't exist on Aliyun" do
|
44
|
-
post = Post.new attachment: @file
|
45
|
-
expect(post.attachment).not_to exist
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'not raise exception when attachment not saved' do
|
49
|
-
post = Post.create
|
50
|
-
expect { post.attachment.exists? }.not_to raise_error
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe '#copy_to_local_file' do
|
55
|
-
it 'copies file from Aliyun to a local file' do
|
56
|
-
destination = File.join(Bundler.root, 'tmp/photo.jpg')
|
57
|
-
@post.attachment.copy_to_local_file(:original, destination)
|
58
|
-
expect(File.exist?(destination)).to be_truthy
|
59
|
-
|
60
|
-
File.delete destination
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe '#flush_deletes' do
|
65
|
-
it 'deletes the attachment from Aliyun' do
|
66
|
-
attachment_url = @post.attachment.url
|
67
|
-
@post.destroy
|
68
|
-
|
69
|
-
response_code = Net::HTTP.get_response(URI.parse(attachment_url)).code
|
70
|
-
expect(response_code).to eq('404')
|
71
|
-
end
|
72
|
-
|
73
|
-
context "work with path include Chinese characters" do
|
74
|
-
before do
|
75
|
-
@file_with_chinese_char_name = load_attachment("美女.jpg")
|
76
|
-
@post_with_chinese_char_name_file = Post.create attachment: @file_with_chinese_char_name
|
77
|
-
end
|
78
|
-
|
79
|
-
it "deletes the attachment from Aliyun" do
|
80
|
-
attachment_url = @post_with_chinese_char_name_file.attachment.url
|
81
|
-
@post_with_chinese_char_name_file.destroy
|
82
|
-
response_code = Net::HTTP.get_response(URI.parse(attachment_url)).code
|
83
|
-
expect(response_code).to eq('404')
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'pry'
|
2
|
-
require 'pry-nav'
|
3
|
-
require 'paperclip-storage-aliyun'
|
4
|
-
|
5
|
-
Paperclip.logger.level = ::Logger::UNKNOWN
|
6
|
-
Dir[Bundler.root.join('spec/support/**/*.rb')].each(&method(:require))
|
7
|
-
|
8
|
-
# Aliyun defaults
|
9
|
-
OSS_CONNECTION_OPTIONS = {
|
10
|
-
access_id: '4adTRa4dWto3vxiq',
|
11
|
-
access_key: 'hzEWBDWlt3N0SPPj6EfYAr4ISdaizW',
|
12
|
-
bucket: 'martin-test',
|
13
|
-
data_center: 'hangzhou',
|
14
|
-
internal: false
|
15
|
-
# host_alias: nil
|
16
|
-
}
|
17
|
-
|
18
|
-
# Paperclip defaults
|
19
|
-
Paperclip::Attachment.default_options[:storage] = :aliyun
|
20
|
-
Paperclip::Attachment.default_options[:aliyun] = OSS_CONNECTION_OPTIONS
|
21
|
-
Paperclip::Attachment.default_options[:path] = 'public/system/:class/:attachment/:id_partition/:style/:filename'
|
22
|
-
Paperclip::Attachment.default_options[:url] = ':aliyun_upload_url'
|
23
|
-
|
24
|
-
# Utility methods
|
25
|
-
def load_attachment(file_name)
|
26
|
-
File.open(Bundler.root.join("spec/attachments/#{file_name}"), 'rb')
|
27
|
-
end
|
data/spec/support/post.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'active_record'
|
2
|
-
require 'nulldb'
|
3
|
-
require 'paperclip'
|
4
|
-
|
5
|
-
class Post < ActiveRecord::Base
|
6
|
-
include Paperclip::Glue
|
7
|
-
|
8
|
-
has_attached_file :attachment
|
9
|
-
do_not_validate_attachment_file_type :attachment
|
10
|
-
end
|
11
|
-
|
12
|
-
RSpec.configure do |config|
|
13
|
-
config.before(:all) do
|
14
|
-
FileUtils.mkdir_p File.join(Bundler.root, 'tmp')
|
15
|
-
ActiveRecord::Base.establish_connection(
|
16
|
-
adapter: 'nulldb',
|
17
|
-
schema: File.join(Bundler.root, 'spec/fixtures/schema.rb')
|
18
|
-
)
|
19
|
-
end
|
20
|
-
|
21
|
-
config.after(:all) do
|
22
|
-
ActiveRecord::Base.remove_connection
|
23
|
-
end
|
24
|
-
end
|