resizing 1.2.0 → 1.2.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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +17 -2
  3. data/.gitignore +6 -0
  4. data/Gemfile +6 -2
  5. data/README.md +59 -32
  6. data/lib/resizing/active_storage/service/resizing_service.rb +6 -2
  7. data/lib/resizing/active_storage/service.rb +9 -0
  8. data/lib/resizing/active_storage.rb +7 -0
  9. data/lib/resizing/carrier_wave/storage/file.rb +68 -24
  10. data/lib/resizing/carrier_wave/storage/remote.rb +7 -3
  11. data/lib/resizing/carrier_wave.rb +19 -11
  12. data/lib/resizing/client.rb +25 -23
  13. data/lib/resizing/configurable.rb +1 -1
  14. data/lib/resizing/configuration.rb +6 -16
  15. data/lib/resizing/http_clientable.rb +3 -3
  16. data/lib/resizing/mock_client.rb +6 -5
  17. data/lib/resizing/public_id.rb +5 -4
  18. data/lib/resizing/version.rb +1 -1
  19. data/lib/resizing.rb +15 -12
  20. data/resizing.gemspec +5 -8
  21. data/test/resizing/active_storage_service_test.rb +98 -0
  22. data/test/resizing/carrier_wave/storage/file_test.rb +149 -8
  23. data/test/resizing/carrier_wave/storage/remote_test.rb +75 -0
  24. data/test/resizing/carrier_wave_test.rb +373 -32
  25. data/test/resizing/client_test.rb +68 -12
  26. data/test/resizing/configurable_test.rb +82 -0
  27. data/test/resizing/configuration_test.rb +118 -2
  28. data/test/resizing/constants_test.rb +25 -0
  29. data/test/resizing/error_test.rb +73 -0
  30. data/test/resizing/http_clientable_test.rb +84 -0
  31. data/test/resizing/mock_client_test.rb +75 -0
  32. data/test/resizing/public_id_test.rb +1 -1
  33. data/test/resizing_module_test.rb +206 -0
  34. data/test/test_helper.rb +148 -9
  35. data/test/vcr/carrier_wave_test/update_image.yml +63 -0
  36. metadata +29 -36
  37. /data/{exe → bin}/console +0 -0
  38. /data/{exe → bin}/generate-changelog +0 -0
  39. /data/{exe → bin}/setup +0 -0
data/test/test_helper.rb CHANGED
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'simplecov'
3
4
  require 'simplecov-cobertura'
4
5
 
5
6
  SimpleCov.start do
6
- add_filter "/test/"
7
+ add_filter '/test/'
7
8
 
8
9
  if ENV['CI']
9
10
  formatter SimpleCov::Formatter::CoberturaFormatter
@@ -22,15 +23,18 @@ $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
22
23
  require 'time'
23
24
  require 'timecop'
24
25
  require 'vcr'
26
+ require 'logger'
25
27
 
26
28
  require 'rails'
27
29
  require 'active_record'
28
30
  require 'fog-aws'
29
31
  require 'carrierwave'
32
+ require 'carrierwave/orm/activerecord'
30
33
  require 'resizing'
31
34
  require 'pry-byebug'
32
35
 
33
36
  require 'minitest/autorun'
37
+ require 'minitest/mock'
34
38
 
35
39
  VCR.configure do |c|
36
40
  c.cassette_library_dir = 'test/vcr'
@@ -38,11 +42,93 @@ VCR.configure do |c|
38
42
  c.allow_http_connections_when_no_cassette = false
39
43
 
40
44
  # raise Faraday::TimeoutError, when project_id is timeout_project_id
41
- c.before_http_request(lambda {|r| URI(r.uri).path.match? %r(/projects/timeout_project_id) } ) do
45
+ c.before_http_request(->(r) { URI(r.uri).path.match? %r{/projects/timeout_project_id} }) do
42
46
  raise Faraday::TimeoutError
43
47
  end
44
48
  end
45
49
 
50
+ # VCRカセットのリクエストが実際に使用されたかを検証するヘルパー
51
+ module VCRRequestAssertions
52
+ # VCRカセット内でブロックを実行し、カセットのインタラクションがすべて使用されたことを確認
53
+ #
54
+ # @param cassette_name [String] VCRカセット名
55
+ # @param options [Hash] VCR.use_cassetteに渡すオプション
56
+ # @yield 実行するブロック
57
+ # @return [void]
58
+ #
59
+ # @example
60
+ # assert_vcr_requests_made 'carrier_wave_test/remove_resizing_picture' do
61
+ # model.remove_resizing_picture!
62
+ # model.save!
63
+ # end
64
+ def assert_vcr_requests_made(cassette_name, options = {})
65
+ options = { record: :none }.merge(options)
66
+
67
+ VCR.use_cassette(cassette_name, options) do |cassette|
68
+ interaction_list = cassette.http_interactions
69
+ initial_count = interaction_list.remaining_unused_interaction_count
70
+
71
+ assert initial_count.positive?,
72
+ "Cassette '#{cassette_name}' should have at least 1 interaction"
73
+
74
+ yield cassette if block_given?
75
+
76
+ remaining_count = interaction_list.remaining_unused_interaction_count
77
+ used_count = initial_count - remaining_count
78
+
79
+ assert_equal 0, remaining_count,
80
+ "Expected all #{initial_count} cassette interactions to be used, " \
81
+ "but #{remaining_count} remain unused (#{used_count} were used)"
82
+ end
83
+ end
84
+
85
+ # VCRカセット内でブロックを実行し、指定した数のインタラクションが使用されたことを確認
86
+ #
87
+ # @param cassette_name [String] VCRカセット名
88
+ # @param expected_count [Integer] 使用されるべきインタラクション数
89
+ # @param options [Hash] VCR.use_cassetteに渡すオプション
90
+ # @yield 実行するブロック
91
+ # @return [void]
92
+ #
93
+ # @example
94
+ # assert_vcr_requests_count 'client/post', 1 do
95
+ # Resizing.post(file)
96
+ # end
97
+ def assert_vcr_requests_count(cassette_name, expected_count, options = {})
98
+ options = { record: :none }.merge(options)
99
+
100
+ VCR.use_cassette(cassette_name, options) do |cassette|
101
+ interaction_list = cassette.http_interactions
102
+ initial_count = interaction_list.remaining_unused_interaction_count
103
+
104
+ yield cassette if block_given?
105
+
106
+ remaining_count = interaction_list.remaining_unused_interaction_count
107
+ used_count = initial_count - remaining_count
108
+
109
+ assert_equal expected_count, used_count,
110
+ "Expected #{expected_count} cassette interactions to be used, " \
111
+ "but #{used_count} were used"
112
+ end
113
+ end
114
+
115
+ # VCRカセット内でブロックを実行し、リクエストが発行されないことを確認
116
+ #
117
+ # @param cassette_name [String] VCRカセット名
118
+ # @param options [Hash] VCR.use_cassetteに渡すオプション
119
+ # @yield 実行するブロック
120
+ # @return [void]
121
+ #
122
+ # @example
123
+ # assert_vcr_no_requests 'carrier_wave_test/remove_resizing_picture' do
124
+ # model.remove_resizing_picture = true
125
+ # # save!を呼ばないのでリクエストは発行されない
126
+ # end
127
+ def assert_vcr_no_requests(cassette_name, options = {}, &block)
128
+ assert_vcr_requests_count(cassette_name, 0, options, &block)
129
+ end
130
+ end
131
+
46
132
  ActiveRecord::Base.establish_connection(
47
133
  adapter: 'mysql2',
48
134
  host: '127.0.0.1',
@@ -56,7 +142,7 @@ ActiveRecord::Base.establish_connection(
56
142
  ActiveRecord::Schema.define do
57
143
  self.verbose = false
58
144
 
59
- %i(test_models test_jpg_models test_model_with_default_urls).each do |model_name|
145
+ %i[test_models test_jpg_models test_model_with_default_urls].each do |model_name|
60
146
  connection.execute "drop table if exists #{model_name}"
61
147
 
62
148
  create_table model_name do |t|
@@ -101,19 +187,72 @@ class ResizingUploaderWithDefaultURL < CarrierWave::Uploader::Base
101
187
  end
102
188
 
103
189
  class TestModel < ::ActiveRecord::Base
104
- extend CarrierWave::Mount
105
-
106
190
  mount_uploader :resizing_picture, ResizingUploader
107
191
  end
108
192
 
109
193
  class TestJPGModel < ::ActiveRecord::Base
110
- extend CarrierWave::Mount
111
-
112
194
  mount_uploader :resizing_picture, ResizingJPGUploader
113
195
  end
114
196
 
115
197
  class TestModelWithDefaultURL < ::ActiveRecord::Base
116
- extend CarrierWave::Mount
117
-
118
198
  mount_uploader :resizing_picture, ResizingUploaderWithDefaultURL
119
199
  end
200
+
201
+ # コールバックのテスト用モデル
202
+ # mount_uploader が登録する各種コールバックが正しく動作するかをテストするため
203
+ # カスタムコールバックを追加して呼び出しを追跡する
204
+ class TestModelWithCallbackTracking < ::ActiveRecord::Base
205
+ self.table_name = 'test_models'
206
+
207
+ mount_uploader :resizing_picture, ResizingUploader
208
+
209
+ attr_accessor :callback_log
210
+
211
+ # before_save / after_save コールバック
212
+ before_save :track_before_save
213
+ after_save :track_after_save
214
+
215
+ # before_destroy / after_destroy コールバック
216
+ before_destroy :track_before_destroy
217
+ after_destroy :track_after_destroy
218
+
219
+ # after_commit コールバック
220
+ after_commit :track_create_commit, on: :create
221
+ after_commit :track_update_commit, on: :update
222
+ after_commit :track_destroy_commit, on: :destroy
223
+
224
+ def initialize(*args)
225
+ super
226
+ @callback_log = []
227
+ end
228
+
229
+ private
230
+
231
+ def track_before_save
232
+ @callback_log << :before_save
233
+ end
234
+
235
+ def track_after_save
236
+ @callback_log << :after_save
237
+ end
238
+
239
+ def track_before_destroy
240
+ @callback_log << :before_destroy
241
+ end
242
+
243
+ def track_after_destroy
244
+ @callback_log << :after_destroy
245
+ end
246
+
247
+ def track_create_commit
248
+ @callback_log << :create_commit
249
+ end
250
+
251
+ def track_update_commit
252
+ @callback_log << :update_commit
253
+ end
254
+
255
+ def track_destroy_commit
256
+ @callback_log << :destroy_commit
257
+ end
258
+ end
@@ -0,0 +1,63 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://192.168.56.101:5000/projects/e06e710d-f026-4dcf-b2c0-eab0de8bb83f/upload/images/
6
+ body:
7
+ encoding: ASCII-8BIT
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v1.0.1
12
+ response:
13
+ status:
14
+ code: 200
15
+ message: OK
16
+ headers:
17
+ content-type:
18
+ - application/json; charset=utf-8
19
+ body:
20
+ encoding: UTF-8
21
+ string: '{"id":"old-image-id-1111-1111-111111111111","project_id":"e06e710d-f026-4dcf-b2c0-eab0de8bb83f","content_type":"image/jpeg","version":"v1","public_id":"/projects/e06e710d-f026-4dcf-b2c0-eab0de8bb83f/upload/images/old-image-id-1111-1111-111111111111/v1"}'
22
+ recorded_at: Sun, 11 Oct 2020 04:56:48 GMT
23
+ - request:
24
+ method: post
25
+ uri: http://192.168.56.101:5000/projects/e06e710d-f026-4dcf-b2c0-eab0de8bb83f/upload/images/
26
+ body:
27
+ encoding: ASCII-8BIT
28
+ string: ''
29
+ headers:
30
+ User-Agent:
31
+ - Faraday v1.0.1
32
+ response:
33
+ status:
34
+ code: 200
35
+ message: OK
36
+ headers:
37
+ content-type:
38
+ - application/json; charset=utf-8
39
+ body:
40
+ encoding: UTF-8
41
+ string: '{"id":"new-image-id-2222-2222-222222222222","project_id":"e06e710d-f026-4dcf-b2c0-eab0de8bb83f","content_type":"image/jpeg","version":"v2","public_id":"/projects/e06e710d-f026-4dcf-b2c0-eab0de8bb83f/upload/images/new-image-id-2222-2222-222222222222/v2"}'
42
+ recorded_at: Sun, 11 Oct 2020 04:56:49 GMT
43
+ - request:
44
+ method: delete
45
+ uri: http://192.168.56.101:5000/projects/e06e710d-f026-4dcf-b2c0-eab0de8bb83f/upload/images/old-image-id-1111-1111-111111111111
46
+ body:
47
+ encoding: US-ASCII
48
+ string: ''
49
+ headers:
50
+ User-Agent:
51
+ - Faraday v1.0.1
52
+ response:
53
+ status:
54
+ code: 200
55
+ message: OK
56
+ headers:
57
+ content-type:
58
+ - application/json; charset=utf-8
59
+ body:
60
+ encoding: UTF-8
61
+ string: '{"id":"old-image-id-1111-1111-111111111111","project_id":"e06e710d-f026-4dcf-b2c0-eab0de8bb83f"}'
62
+ recorded_at: Sun, 11 Oct 2020 04:56:50 GMT
63
+ recorded_with: VCR 6.0.0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resizing
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Junichiro Kasuya
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-29 00:00:00.000000000 Z
11
+ date: 2026-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rails
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">"
46
- - !ruby/object:Gem::Version
47
- version: '6.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">"
53
- - !ruby/object:Gem::Version
54
- version: '6.0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: carrierwave
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -84,16 +70,16 @@ dependencies:
84
70
  name: minitest
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - ">="
73
+ - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '0'
75
+ version: '5.16'
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - ">="
80
+ - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '0'
82
+ version: '5.16'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: minitest-ci
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -109,7 +95,7 @@ dependencies:
109
95
  - !ruby/object:Gem::Version
110
96
  version: '0'
111
97
  - !ruby/object:Gem::Dependency
112
- name: rubocop
98
+ name: mysql2
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - ">="
@@ -123,7 +109,7 @@ dependencies:
123
109
  - !ruby/object:Gem::Version
124
110
  version: '0'
125
111
  - !ruby/object:Gem::Dependency
126
- name: timecop
112
+ name: rubocop
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
115
  - - ">="
@@ -137,7 +123,7 @@ dependencies:
137
123
  - !ruby/object:Gem::Version
138
124
  version: '0'
139
125
  - !ruby/object:Gem::Dependency
140
- name: vcr
126
+ name: simplecov
141
127
  requirement: !ruby/object:Gem::Requirement
142
128
  requirements:
143
129
  - - ">="
@@ -151,7 +137,7 @@ dependencies:
151
137
  - !ruby/object:Gem::Version
152
138
  version: '0'
153
139
  - !ruby/object:Gem::Dependency
154
- name: mysql2
140
+ name: simplecov-cobertura
155
141
  requirement: !ruby/object:Gem::Requirement
156
142
  requirements:
157
143
  - - ">="
@@ -165,7 +151,7 @@ dependencies:
165
151
  - !ruby/object:Gem::Version
166
152
  version: '0'
167
153
  - !ruby/object:Gem::Dependency
168
- name: simplecov
154
+ name: timecop
169
155
  requirement: !ruby/object:Gem::Requirement
170
156
  requirements:
171
157
  - - ">="
@@ -179,7 +165,7 @@ dependencies:
179
165
  - !ruby/object:Gem::Version
180
166
  version: '0'
181
167
  - !ruby/object:Gem::Dependency
182
- name: simplecov-cobertura
168
+ name: vcr
183
169
  requirement: !ruby/object:Gem::Requirement
184
170
  requirements:
185
171
  - - ">="
@@ -195,10 +181,7 @@ dependencies:
195
181
  description: 'Client and utilities for Resizing '
196
182
  email:
197
183
  - junichiro.kasuya@gmail.com
198
- executables:
199
- - console
200
- - generate-changelog
201
- - setup
184
+ executables: []
202
185
  extensions: []
203
186
  extra_rdoc_files: []
204
187
  files:
@@ -210,11 +193,13 @@ files:
210
193
  - LICENSE.txt
211
194
  - README.md
212
195
  - Rakefile
196
+ - bin/console
197
+ - bin/generate-changelog
198
+ - bin/setup
213
199
  - docker-compose.yml
214
- - exe/console
215
- - exe/generate-changelog
216
- - exe/setup
217
200
  - lib/resizing.rb
201
+ - lib/resizing/active_storage.rb
202
+ - lib/resizing/active_storage/service.rb
218
203
  - lib/resizing/active_storage/service/resizing_service.rb
219
204
  - lib/resizing/carrier_wave.rb
220
205
  - lib/resizing/carrier_wave/storage/file.rb
@@ -230,16 +215,24 @@ files:
230
215
  - resizing.gemspec
231
216
  - test/data/images/empty_file.jpg
232
217
  - test/data/images/sample1.jpg
218
+ - test/resizing/active_storage_service_test.rb
233
219
  - test/resizing/carrier_wave/storage/file_test.rb
234
220
  - test/resizing/carrier_wave/storage/remote_test.rb
235
221
  - test/resizing/carrier_wave_test.rb
236
222
  - test/resizing/client_test.rb
223
+ - test/resizing/configurable_test.rb
237
224
  - test/resizing/configuration_test.rb
225
+ - test/resizing/constants_test.rb
226
+ - test/resizing/error_test.rb
227
+ - test/resizing/http_clientable_test.rb
228
+ - test/resizing/mock_client_test.rb
238
229
  - test/resizing/public_id_test.rb
230
+ - test/resizing_module_test.rb
239
231
  - test/resizing_test.rb
240
232
  - test/test_helper.rb
241
233
  - test/vcr/carrier_wave_test/remove_resizing_picture.yml
242
234
  - test/vcr/carrier_wave_test/save.yml
235
+ - test/vcr/carrier_wave_test/update_image.yml
243
236
  - test/vcr/client/delete.yml
244
237
  - test/vcr/client/error.yml
245
238
  - test/vcr/client/metadata.yml
@@ -260,14 +253,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
260
253
  requirements:
261
254
  - - ">="
262
255
  - !ruby/object:Gem::Version
263
- version: 2.3.0
256
+ version: 3.0.0
264
257
  required_rubygems_version: !ruby/object:Gem::Requirement
265
258
  requirements:
266
259
  - - ">="
267
260
  - !ruby/object:Gem::Version
268
261
  version: '0'
269
262
  requirements: []
270
- rubygems_version: 3.5.3
263
+ rubygems_version: 3.3.27
271
264
  signing_key:
272
265
  specification_version: 4
273
266
  summary: Client and utilities for Resizing
File without changes
File without changes
/data/{exe → bin}/setup RENAMED
File without changes