resizing 0.1.3 → 0.3.2
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 +4 -4
- data/lib/resizing.rb +11 -4
- data/lib/resizing/carrier_wave.rb +13 -4
- data/lib/resizing/carrier_wave/storage/file.rb +2 -0
- data/lib/resizing/client.rb +1 -1
- data/lib/resizing/configuration.rb +1 -1
- data/lib/resizing/mock_client.rb +6 -1
- data/lib/resizing/version.rb +1 -1
- data/resizing.gemspec +3 -3
- data/test/data/images/sample1.jpg +0 -0
- data/test/resizing/carrier_wave/storage/file_test.rb +30 -0
- data/test/resizing/carrier_wave/storage/remote_test.rb +0 -0
- data/test/resizing/carrier_wave_test.rb +75 -0
- data/test/resizing/client_test.rb +77 -0
- data/test/resizing/configuration_test.rb +128 -0
- data/test/resizing_test.rb +9 -0
- data/test/test_helper.rb +52 -0
- data/test/vcr/carrier_wave_test/remove_resizing_picture.yml +49 -0
- data/test/vcr/carrier_wave_test/save.yml +54 -0
- data/test/vcr/client/delete.yml +49 -0
- data/test/vcr/client/post.yml +54 -0
- data/test/vcr/client/put.yml +54 -0
- metadata +19 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a68f3747dc45de527ea32a40bb2586783a0ea14d76717bd85186aae178ef18bd
|
4
|
+
data.tar.gz: 5ecebffc8b0eb31c22e3bb408eea3d99db21b90bcdba5178e74f1f0704261ed5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 233c87e03b19be35e89d373a4456aa81cdd82c110eea4cff47f2d8498a852ed203c0443567f0afb8b6d85bd419da49b6accb5e52038e823beddf40d88f84e94d
|
7
|
+
data.tar.gz: 66f18b1648e93a2cbdf73a2a457b9e2591262b795dfbebd232cd0388ca7787a755068a85c84f763f1c28fa7e10c61a4169915aff35184d1f602c6498cca8f63e
|
data/lib/resizing.rb
CHANGED
@@ -6,6 +6,7 @@ require 'json'
|
|
6
6
|
|
7
7
|
module Resizing
|
8
8
|
autoload :Client, 'resizing/client'
|
9
|
+
autoload :MockClient, 'resizing/mock_client'
|
9
10
|
autoload :Configuration, 'resizing/configuration'
|
10
11
|
autoload :CarrierWave, 'resizing/carrier_wave'
|
11
12
|
|
@@ -33,13 +34,11 @@ module Resizing
|
|
33
34
|
end
|
34
35
|
|
35
36
|
def self.post(file_or_binary, options)
|
36
|
-
client
|
37
|
-
client.post file_or_binary, options
|
37
|
+
self.client.post file_or_binary, options
|
38
38
|
end
|
39
39
|
|
40
40
|
def self.put(name, file_or_binary, options)
|
41
|
-
client
|
42
|
-
client.put name, file_or_binary, options
|
41
|
+
self.client.put name, file_or_binary, options
|
43
42
|
end
|
44
43
|
|
45
44
|
# TODO: refactoring
|
@@ -57,4 +56,12 @@ module Resizing
|
|
57
56
|
def self.separate_public_id public_id
|
58
57
|
public_id.match('/projects/(?<project_id>[0-9a-f-]+)/upload/images/(?<image_id>[0-9a-f-]+)(/v(?<version>[^/]+))?')
|
59
58
|
end
|
59
|
+
|
60
|
+
def self.client
|
61
|
+
if self.configure.enable_mock
|
62
|
+
Resizing::MockClient.new
|
63
|
+
else
|
64
|
+
Resizing::Client.new
|
65
|
+
end
|
66
|
+
end
|
60
67
|
end
|
@@ -109,12 +109,21 @@ module Resizing
|
|
109
109
|
|
110
110
|
# rubocop:disable Metrics/AbcSize
|
111
111
|
def transform_string_from(processor)
|
112
|
-
|
112
|
+
action = processor.first
|
113
|
+
value = processor.second
|
114
|
+
|
115
|
+
case action
|
113
116
|
when :resize_to_fill, :resize_to_limit, :resize_to_fit
|
114
|
-
name =
|
115
|
-
{ c: name, w:
|
117
|
+
name = action.to_s.gsub(/resize_to_/, '')
|
118
|
+
{ c: name, w: value.first, h: value.second }
|
119
|
+
when :transformation
|
120
|
+
result = {}
|
121
|
+
result[:q] = value[:quality] if value[:quality]
|
122
|
+
result[:f] = value[:fetch_format] if value[:fetch_format]
|
123
|
+
result[:f] = value[:format] if value[:format]
|
124
|
+
result
|
116
125
|
else
|
117
|
-
raise NotImplementedError, "#{
|
126
|
+
raise NotImplementedError, "#{action} is not supported. #{processor.inspect}"
|
118
127
|
end.map do |key, value|
|
119
128
|
next nil if value.nil?
|
120
129
|
|
data/lib/resizing/client.rb
CHANGED
@@ -11,7 +11,7 @@ module Resizing
|
|
11
11
|
# }
|
12
12
|
# client = Resizing::Client.new(options)
|
13
13
|
# file = File.open('sample.jpg', 'r')
|
14
|
-
# response = client.post(file)
|
14
|
+
# response = client.post(file, content_type: 'image/jpeg')
|
15
15
|
# {
|
16
16
|
# "id"=>"fde443bb-0b29-4be2-a04e-2da8f19716ac",
|
17
17
|
# "project_id"=>"098a2a0d-0000-0000-0000-000000000000",
|
@@ -16,7 +16,7 @@ module Resizing
|
|
16
16
|
#++
|
17
17
|
class Configuration
|
18
18
|
attr_reader :host, :project_id, :secret_token, :open_timeout, :response_timeout, :enable_mock
|
19
|
-
DEFAULT_HOST = 'https://
|
19
|
+
DEFAULT_HOST = 'https://img.resizing.net'
|
20
20
|
DEFAULT_OPEN_TIMEOUT = 2
|
21
21
|
DEFAULT_RESPONSE_TIMEOUT = 10
|
22
22
|
|
data/lib/resizing/mock_client.rb
CHANGED
@@ -17,7 +17,12 @@ module Resizing
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def load_yaml filename
|
20
|
-
|
20
|
+
path = "#{library_root}/#{filename}"
|
21
|
+
YAML.load_file(path)['http_interactions'].first['response']['body']
|
22
|
+
end
|
23
|
+
|
24
|
+
def library_root
|
25
|
+
File.join(File.dirname(__FILE__), '..', '..')
|
21
26
|
end
|
22
27
|
end
|
23
28
|
end
|
data/lib/resizing/version.rb
CHANGED
data/resizing.gemspec
CHANGED
@@ -23,12 +23,12 @@ Gem::Specification.new do |spec|
|
|
23
23
|
# Specify which files should be added to the gem when it is released.
|
24
24
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
25
25
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
26
|
-
`git ls-files -z`.split("\x0")
|
26
|
+
`git ls-files -z`.split("\x0")
|
27
27
|
end
|
28
28
|
spec.bindir = 'exe'
|
29
29
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
30
30
|
spec.require_paths = ['lib']
|
31
|
-
spec.add_runtime_dependency 'faraday', '~> 0.
|
31
|
+
spec.add_runtime_dependency 'faraday', '~> 1.0.1'
|
32
32
|
spec.add_development_dependency 'byebug'
|
33
33
|
spec.add_development_dependency 'carrierwave'
|
34
34
|
spec.add_development_dependency 'fog-aws'
|
@@ -36,7 +36,7 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.add_development_dependency 'minitest-ci'
|
37
37
|
spec.add_development_dependency 'mysql2'
|
38
38
|
spec.add_development_dependency 'pry-byebug'
|
39
|
-
spec.add_development_dependency 'rails', '
|
39
|
+
spec.add_development_dependency 'rails', '~> 5.2.3'
|
40
40
|
spec.add_development_dependency 'rubocop'
|
41
41
|
spec.add_development_dependency 'timecop'
|
42
42
|
spec.add_development_dependency 'vcr'
|
Binary file
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
module Resizing
|
6
|
+
module CarrierWave
|
7
|
+
module Storage
|
8
|
+
class FileTest < Minitest::Test
|
9
|
+
def setup
|
10
|
+
# NOP
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
# NOP
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_store
|
18
|
+
# f = Resizing::CarrierWave::Storage::File.new(uploader)
|
19
|
+
# upload_file = File.new(uploader, path)
|
20
|
+
# f.store(upload_file)
|
21
|
+
# f.save!
|
22
|
+
end
|
23
|
+
|
24
|
+
def uploader
|
25
|
+
MiniTest::Mock.expect(:cache_path)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
File without changes
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
module Resizing
|
6
|
+
class CarrierWaveTest < Minitest::Test
|
7
|
+
def setup
|
8
|
+
TestModel.delete_all
|
9
|
+
|
10
|
+
@configuration_template = {
|
11
|
+
host: 'http://192.168.56.101:5000',
|
12
|
+
project_id: '098a2a0d-c387-4135-a071-1254d6d7e70a',
|
13
|
+
secret_token: '4g1cshg2lq8j93ufhvqrpjswxmtjz12yhfvq6w79jpwi7cr7nnknoqgwzkwerbs6',
|
14
|
+
open_timeout: 10,
|
15
|
+
response_timeout: 20
|
16
|
+
}
|
17
|
+
Resizing.configure = @configuration_template
|
18
|
+
end
|
19
|
+
|
20
|
+
def teardown; end
|
21
|
+
|
22
|
+
def test_remove_resizing_picture
|
23
|
+
model = prepare_model
|
24
|
+
|
25
|
+
VCR.use_cassette 'carrier_wave_test/remove_resizing_picture' do
|
26
|
+
SecureRandom.stub :uuid, '28c49144-c00d-4cb5-8619-98ce95977b9c' do
|
27
|
+
model.remove_resizing_picture!
|
28
|
+
|
29
|
+
assert_nil model.resizing_picture_url
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_do_not_raise_if_empty_column_is_removed
|
35
|
+
model = prepare_model
|
36
|
+
|
37
|
+
VCR.use_cassette 'carrier_wave_test/remove_resizing_picture' do
|
38
|
+
SecureRandom.stub :uuid, '28c49144-c00d-4cb5-8619-98ce95977b9c' do
|
39
|
+
model.resizing_picture.remove!
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_picture_url_return_correct_value_and_when_model_reloaded
|
45
|
+
model = prepare_model
|
46
|
+
model.save!
|
47
|
+
assert_equal(expect_url, model.resizing_picture_url)
|
48
|
+
|
49
|
+
model.reload
|
50
|
+
assert_equal(expect_url, model.resizing_picture_url)
|
51
|
+
end
|
52
|
+
|
53
|
+
def expect_url
|
54
|
+
'http://192.168.56.101:5000/projects/098a2a0d-c387-4135-a071-1254d6d7e70a/'+
|
55
|
+
'upload/images/28c49144-c00d-4cb5-8619-98ce95977b9c/v1Id850__tqNsnoGWWUibtIBZ5NgjV45M/c_limit,w_1000'
|
56
|
+
end
|
57
|
+
|
58
|
+
def prepare_model
|
59
|
+
VCR.use_cassette 'carrier_wave_test/save' do
|
60
|
+
SecureRandom.stub :uuid, '28c49144-c00d-4cb5-8619-98ce95977b9c' do
|
61
|
+
model = TestModel.new
|
62
|
+
file = File.open('test/data/images/sample1.jpg', 'r')
|
63
|
+
uploaded_file = ActionDispatch::Http::UploadedFile.new(
|
64
|
+
filename: File.basename(file.path),
|
65
|
+
type: 'image/jpeg',
|
66
|
+
tempfile: file
|
67
|
+
)
|
68
|
+
|
69
|
+
model.resizing_picture = uploaded_file
|
70
|
+
return model
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
module Resizing
|
6
|
+
class ClientTest < Minitest::Test
|
7
|
+
def setup
|
8
|
+
# NOP
|
9
|
+
@configuration_template = {
|
10
|
+
host: 'http://192.168.56.101:5000',
|
11
|
+
project_id: '098a2a0d-c387-4135-a071-1254d6d7e70a',
|
12
|
+
secret_token: '4g1cshg2lq8j93ufhvqrpjswxmtjz12yhfvq6w79jpwi7cr7nnknoqgwzkwerbs6',
|
13
|
+
open_timeout: 10,
|
14
|
+
response_timeout: 20
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def teardown
|
19
|
+
# NOP
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_that_it_is_initialized
|
23
|
+
Resizing.configure = @configuration_template
|
24
|
+
|
25
|
+
client = Resizing::Client.new
|
26
|
+
assert(!client.config.nil?)
|
27
|
+
assert_equal(client.config, Resizing.configure)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_that_it_is_initialized_with_configuration
|
31
|
+
config = Resizing::Configuration.new(@configuration_template)
|
32
|
+
client = Resizing::Client.new(config)
|
33
|
+
assert(!client.config.nil?)
|
34
|
+
assert_equal(client.config, config)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_that_it_postable_file
|
38
|
+
Resizing.configure = @configuration_template
|
39
|
+
|
40
|
+
client = Resizing::Client.new
|
41
|
+
VCR.use_cassette 'client/post' do
|
42
|
+
f = File.open('test/data/images/sample1.jpg', 'r')
|
43
|
+
r = client.post(f, content_type: 'image/jpeg')
|
44
|
+
assert_equal(r['id'], 'bfdaf2b3-7ec5-41f4-9caa-d53247dd9666')
|
45
|
+
assert_equal(r['project_id'], Resizing.configure.project_id)
|
46
|
+
assert_equal(r['content_type'], 'image/jpeg')
|
47
|
+
assert(!r['latest_version_id'].nil?)
|
48
|
+
assert(!r['latest_etag'].nil?)
|
49
|
+
assert(!r['created_at'].nil?)
|
50
|
+
assert(!r['updated_at'].nil?)
|
51
|
+
assert_equal(r['public_id'], '/projects/098a2a0d-c387-4135-a071-1254d6d7e70a/upload/images/bfdaf2b3-7ec5-41f4-9caa-d53247dd9666/vAyWaxx96gLaAzB9Bq.VbX1_pxfXJ0Jcq')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_that_it_putable_file
|
56
|
+
Resizing.configure = @configuration_template
|
57
|
+
|
58
|
+
client = Resizing::Client.new
|
59
|
+
VCR.use_cassette 'client/put' do
|
60
|
+
f = File.open('test/data/images/sample1.jpg', 'r')
|
61
|
+
name = 'AWEaewfAreaweFAFASfwe'
|
62
|
+
r = client.put(name, f, content_type: 'image/jpeg')
|
63
|
+
assert_equal(r['id'], name)
|
64
|
+
assert_equal(r['project_id'], Resizing.configure.project_id)
|
65
|
+
assert_equal(r['content_type'], 'image/jpeg')
|
66
|
+
assert(!r['latest_version_id'].nil?)
|
67
|
+
assert(!r['latest_etag'].nil?)
|
68
|
+
assert(!r['created_at'].nil?)
|
69
|
+
assert(!r['updated_at'].nil?)
|
70
|
+
assert_equal(
|
71
|
+
r['public_id'],
|
72
|
+
"/projects/098a2a0d-c387-4135-a071-1254d6d7e70a/upload/images/#{name}/v6Ew3HmDAYfb3NMRdLxR45i_gXMbLlGyi"
|
73
|
+
)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
module Resizing
|
6
|
+
class ConfigurationTest < Minitest::Test
|
7
|
+
def setup
|
8
|
+
@template = {
|
9
|
+
host: 'http://192.168.56.101:5000',
|
10
|
+
project_id: '098a2a0d-c387-4135-a071-1254d6d7e70a',
|
11
|
+
secret_token: '4g1cshg2lq8j93ufhvqrpjswxmtjz12yhfvq6w79jpwi7cr7nnknoqgwzkwerbs6',
|
12
|
+
open_timeout: 10,
|
13
|
+
response_timeout: 20
|
14
|
+
}.freeze
|
15
|
+
end
|
16
|
+
|
17
|
+
def teardown
|
18
|
+
# NOP
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_that_it_has_default_host
|
22
|
+
template = @template.dup
|
23
|
+
template.delete(:host)
|
24
|
+
config = Resizing::Configuration.new template
|
25
|
+
assert_equal(config.host, Resizing::Configuration::DEFAULT_HOST)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_that_it_has_same_host_value
|
29
|
+
template = @template.dup
|
30
|
+
config = Resizing::Configuration.new template
|
31
|
+
assert_equal(config.host, template[:host])
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_that_it_has_no_project_id
|
35
|
+
template = @template.dup
|
36
|
+
template.delete(:project_id)
|
37
|
+
assert_raises ConfigurationError do
|
38
|
+
Resizing::Configuration.new template
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_that_it_has_same_project_id_value
|
43
|
+
template = @template.dup
|
44
|
+
config = Resizing::Configuration.new template
|
45
|
+
assert_equal(config.project_id, template[:project_id])
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_that_it_has_no_secret_token
|
49
|
+
template = @template.dup
|
50
|
+
template.delete(:project_id)
|
51
|
+
assert_raises ConfigurationError do
|
52
|
+
Resizing::Configuration.new template
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_that_it_has_same_secret_token_value
|
57
|
+
template = @template.dup
|
58
|
+
config = Resizing::Configuration.new template
|
59
|
+
assert_equal(config.secret_token, template[:secret_token])
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_that_it_has_default_open_timeout
|
63
|
+
template = @template.dup
|
64
|
+
template.delete(:open_timeout)
|
65
|
+
config = Resizing::Configuration.new template
|
66
|
+
assert_equal(config.open_timeout, Resizing::Configuration::DEFAULT_OPEN_TIMEOUT)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_that_it_has_same_open_timeout
|
70
|
+
template = @template.dup
|
71
|
+
config = Resizing::Configuration.new template
|
72
|
+
assert_equal(config.open_timeout, template[:open_timeout])
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_that_it_return_auth_header_token
|
76
|
+
Timecop.freeze(Time.parse('2020-05-29 05:40:00 +0900')) do
|
77
|
+
template = @template.dup
|
78
|
+
config = Resizing::Configuration.new template
|
79
|
+
assert_equal(
|
80
|
+
'v1,1590698400,2b35ee78cd6ce32edb9b4d97b69306c678ce8dea871638ff6144b7be0d26173c',
|
81
|
+
config.generate_auth_header
|
82
|
+
)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_that_it_return_image_url
|
87
|
+
template = @template.dup
|
88
|
+
image_id = 'some-image-id'
|
89
|
+
config = Resizing::Configuration.new template
|
90
|
+
assert_equal(
|
91
|
+
'http://192.168.56.101:5000/projects/098a2a0d-c387-4135-a071-1254d6d7e70a/upload/images/some-image-id',
|
92
|
+
config.generate_image_url(image_id)
|
93
|
+
)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_that_it_return_image_url_with_version_id
|
97
|
+
template = @template.dup
|
98
|
+
image_id = 'some-image-id'
|
99
|
+
version_id = 'version-id'
|
100
|
+
config = Resizing::Configuration.new template
|
101
|
+
assert_equal(
|
102
|
+
'http://192.168.56.101:5000/projects/098a2a0d-c387-4135-a071-1254d6d7e70a/upload/images/some-image-id/vversion-id',
|
103
|
+
config.generate_image_url(image_id, version_id)
|
104
|
+
)
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_that_it_return_transformation_path
|
108
|
+
data = [
|
109
|
+
{ args: { w: 100 }, path: 'w_100' },
|
110
|
+
{ args: { h: 100 }, path: 'h_100' },
|
111
|
+
{ args: { f: 'webp' }, path: 'f_webp' },
|
112
|
+
{ args: { c: 'fill' }, path: 'c_fill' }
|
113
|
+
]
|
114
|
+
config = Resizing::Configuration.new @template
|
115
|
+
data.each do |v|
|
116
|
+
assert_equal(
|
117
|
+
v[:path],
|
118
|
+
config.transformation_path(v[:args])
|
119
|
+
)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_that_it_generated_identifier_path
|
124
|
+
config = Resizing::Configuration.new @template
|
125
|
+
assert_match %r{/projects/#{config.project_id}/upload/images/[\da-z-]}, config.generate_identifier
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|