mini_paperclip 0.1.1 → 0.1.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/.github/workflows/ruby.yml +1 -0
- data/.gitignore +1 -0
- data/Gemfile +1 -7
- data/README.md +4 -3
- data/gemfiles/development.gemfile +7 -0
- data/gemfiles/rails_52.gemfile +1 -6
- data/gemfiles/rails_60.gemfile +1 -6
- data/gemfiles/rails_head.gemfile +5 -0
- data/lib/mini_paperclip.rb +8 -8
- data/lib/mini_paperclip/attachment.rb +18 -7
- data/lib/mini_paperclip/class_methods.rb +6 -0
- data/lib/mini_paperclip/config.rb +1 -1
- data/lib/mini_paperclip/interpolator.rb +15 -9
- data/lib/mini_paperclip/storage/base.rb +9 -9
- data/lib/mini_paperclip/storage/filesystem.rb +9 -0
- data/lib/mini_paperclip/storage/s3.rb +17 -2
- data/lib/mini_paperclip/validators/file_size_validator.rb +2 -2
- data/lib/mini_paperclip/validators/geometry_validator.rb +4 -2
- data/lib/mini_paperclip/version.rb +1 -1
- metadata +4 -4
- data/gemfiles/rails_52.gemfile.lock +0 -98
- data/gemfiles/rails_60.gemfile.lock +0 -98
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29ef73b42c1c7ef6755a3af5907bab7f285f7fdacb4a6d15d283366d4f46d073
|
4
|
+
data.tar.gz: 877efe3a37db1c2f888df9785ad84bc4220507cfc970ec8bc3632ad3bf5908b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a2395e2c209b4dcee1d518d87bcc972b2c253530edd1926800f2b1e0ab1fc9ab2b3b21c0760248e54d14ea0d74c41e8045d9717870947368e0ca5395d577ec7
|
7
|
+
data.tar.gz: a4dead2af2ebb2c0146b37196b4344683039ba302b0c174a9371b458e4121dd3b4613b5b00622f1d2171c0561d63d44297f5b17d1452b0a817f874c87d108ff5
|
data/.github/workflows/ruby.yml
CHANGED
data/.gitignore
CHANGED
data/Gemfile
CHANGED
@@ -2,11 +2,5 @@ source "https://rubygems.org"
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in mini_paperclip.gemspec
|
4
4
|
gemspec
|
5
|
-
|
6
|
-
gem "rake", "~> 12.0"
|
7
|
-
gem "rspec", "~> 3.0"
|
8
|
-
gem "rack-test"
|
9
|
-
gem "webmock"
|
10
|
-
gem "tapp"
|
11
5
|
gem "activerecord"
|
12
|
-
|
6
|
+
eval_gemfile 'gemfiles/development.gemfile'
|
data/README.md
CHANGED
@@ -104,7 +104,7 @@ end
|
|
104
104
|
|
105
105
|
Interpolate is a simple template system like this.
|
106
106
|
|
107
|
-
template: `:class/:
|
107
|
+
template: `:class/:attachment/:id/:hash.:extension`
|
108
108
|
result: `books/images/1234/abcdef1234567.png`
|
109
109
|
|
110
110
|
You can check default interpolates.
|
@@ -116,8 +116,9 @@ p MiniPaperclip.config.interpolaters
|
|
116
116
|
You can add any interpolate key and process.
|
117
117
|
|
118
118
|
```
|
119
|
-
MiniPaperclip.config.interpolates[
|
120
|
-
|
119
|
+
MiniPaperclip.config.interpolates[':custom_style'] = -> (style) {
|
120
|
+
# This block is called by the scope in the instance of the Interpolator
|
121
|
+
# You can also call `attachment` and `config` in this block
|
121
122
|
}
|
122
123
|
```
|
123
124
|
|
data/gemfiles/rails_52.gemfile
CHANGED
data/gemfiles/rails_60.gemfile
CHANGED
data/lib/mini_paperclip.rb
CHANGED
@@ -24,15 +24,15 @@ module MiniPaperclip
|
|
24
24
|
@config ||= Config.new(
|
25
25
|
# defaults
|
26
26
|
interpolates: {
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
27
|
+
':class' => ->(_) { class_result },
|
28
|
+
':attachment' => ->(_) { attachment_result },
|
29
|
+
':hash' => ->(style) { hash_key(style) },
|
30
|
+
':extension' => ->(_) { extension },
|
31
|
+
':id' => ->(_) { @attachment.record.id },
|
32
|
+
':updated_at' => ->(_) { attachment.updated_at&.to_i },
|
33
|
+
':style' => ->(style) { style }
|
34
34
|
},
|
35
|
-
hash_data: ":class/:
|
35
|
+
hash_data: ":class/:attachment/:id/:style/:updated_at",
|
36
36
|
url_missing_path: ":attachment/:style/missing.png",
|
37
37
|
read_timeout: 60,
|
38
38
|
logger: Logger.new($stdout),
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module MiniPaperclip
|
4
4
|
class Attachment
|
5
|
-
|
5
|
+
UnsupportedError = Class.new(StandardError)
|
6
6
|
|
7
7
|
attr_reader :record, :attachment_name, :config, :storage,
|
8
8
|
:waiting_write_file, :meta_content_type
|
@@ -15,7 +15,7 @@ module MiniPaperclip
|
|
15
15
|
@meta_content_type = nil
|
16
16
|
@dirty = false
|
17
17
|
@storage = Storage.const_get(@config.storage.to_s.camelcase)
|
18
|
-
.new(
|
18
|
+
.new(self, @config)
|
19
19
|
end
|
20
20
|
|
21
21
|
def original_filename
|
@@ -31,7 +31,7 @@ module MiniPaperclip
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def updated_at
|
34
|
-
@record.read_attribute("#{@attachment_name}_updated_at")
|
34
|
+
@record.read_attribute("#{@attachment_name}_updated_at")
|
35
35
|
end
|
36
36
|
|
37
37
|
def file?
|
@@ -110,7 +110,7 @@ module MiniPaperclip
|
|
110
110
|
# data-uri
|
111
111
|
match_data = file.match(/\Adata:([-\w]+\/[-\w\+\.]+)?;base64,(.*)/m)
|
112
112
|
if match_data.nil?
|
113
|
-
raise
|
113
|
+
raise UnsupportedError, "attachment for \"#{file[0..100]}\" is not supported"
|
114
114
|
end
|
115
115
|
raw = Base64.decode64(match_data[2])
|
116
116
|
@record.write_attribute("#{@attachment_name}_file_name", nil)
|
@@ -120,10 +120,10 @@ module MiniPaperclip
|
|
120
120
|
@waiting_write_file = build_tempfile(StringIO.new(raw))
|
121
121
|
@meta_content_type = match_data[1]
|
122
122
|
else
|
123
|
-
raise
|
123
|
+
raise UnsupportedError, "attachment for \"#{file[0..100]}\" is not supported"
|
124
124
|
end
|
125
125
|
else
|
126
|
-
raise
|
126
|
+
raise UnsupportedError, "attachment for #{file.class} is not supported"
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
@@ -168,6 +168,17 @@ module MiniPaperclip
|
|
168
168
|
@waiting_write_file = nil
|
169
169
|
end
|
170
170
|
|
171
|
+
def push_delete_files
|
172
|
+
@storage.push_delete_file(:original)
|
173
|
+
@config.styles&.each_key do |style|
|
174
|
+
@storage.push_delete_file(style)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
def do_delete_files
|
179
|
+
@storage.do_delete_files
|
180
|
+
end
|
181
|
+
|
171
182
|
private
|
172
183
|
|
173
184
|
def strict_content_type(io)
|
@@ -184,7 +195,7 @@ module MiniPaperclip
|
|
184
195
|
end
|
185
196
|
|
186
197
|
def debug(str)
|
187
|
-
MiniPaperclip.config.logger.debug(str)
|
198
|
+
MiniPaperclip.config.logger.debug("[mini_paperclip] #{str}")
|
188
199
|
end
|
189
200
|
end
|
190
201
|
end
|
@@ -19,6 +19,12 @@ module MiniPaperclip
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
22
|
+
before_destroy do
|
23
|
+
public_send(attachment_name).push_delete_files
|
24
|
+
end
|
25
|
+
after_commit(on: :destroy) do
|
26
|
+
public_send(attachment_name).do_delete_files
|
27
|
+
end
|
22
28
|
validates_with Validators::MediaTypeSpoofValidator, {
|
23
29
|
attributes: attachment_name,
|
24
30
|
if: -> { instance_variable_get("@#{attachment_name}")&.dirty? }
|
@@ -2,16 +2,17 @@
|
|
2
2
|
|
3
3
|
module MiniPaperclip
|
4
4
|
class Interpolator
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
attr_reader :attachment, :config
|
6
|
+
|
7
|
+
def initialize(attachment, config)
|
8
|
+
@attachment = attachment
|
8
9
|
@config = config
|
9
10
|
end
|
10
11
|
|
11
12
|
def interpolate(template, style)
|
12
13
|
template.dup.tap do |t|
|
13
14
|
@config.interpolates&.each do |matcher, block|
|
14
|
-
t.gsub!(matcher) { instance_exec(
|
15
|
+
t.gsub!(matcher) { instance_exec(style, &block) }
|
15
16
|
end
|
16
17
|
end
|
17
18
|
end
|
@@ -19,23 +20,28 @@ module MiniPaperclip
|
|
19
20
|
private
|
20
21
|
|
21
22
|
def class_result
|
22
|
-
@record.class.name.underscore.pluralize
|
23
|
+
@attachment.record.class.name.underscore.pluralize
|
23
24
|
end
|
24
25
|
|
25
26
|
def attachment_result
|
26
|
-
@attachment_name.to_s.downcase.pluralize
|
27
|
+
@attachment.attachment_name.to_s.downcase.pluralize
|
27
28
|
end
|
28
29
|
|
29
|
-
def
|
30
|
-
|
30
|
+
def extension
|
31
|
+
attachment.original_filename &&
|
32
|
+
File.extname(attachment.original_filename)[1..-1]
|
31
33
|
end
|
32
34
|
|
33
35
|
def hash_key(style)
|
34
36
|
OpenSSL::HMAC.hexdigest(
|
35
37
|
OpenSSL::Digest::SHA1.new,
|
36
38
|
@config.hash_secret,
|
37
|
-
|
39
|
+
interpolated_hash_data(style),
|
38
40
|
)
|
39
41
|
end
|
42
|
+
|
43
|
+
def interpolated_hash_data(style)
|
44
|
+
interpolate(@config.hash_data, style)
|
45
|
+
end
|
40
46
|
end
|
41
47
|
end
|
@@ -3,13 +3,13 @@
|
|
3
3
|
module MiniPaperclip
|
4
4
|
module Storage
|
5
5
|
class Base
|
6
|
-
attr_reader :config
|
6
|
+
attr_reader :attachment, :config, :interpolator
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@
|
10
|
-
@attachment_name = attachment_name
|
8
|
+
def initialize(attachment, config)
|
9
|
+
@attachment = attachment
|
11
10
|
@config = config
|
12
|
-
@interpolator = Interpolator.new(
|
11
|
+
@interpolator = Interpolator.new(attachment, config)
|
12
|
+
@deletes = []
|
13
13
|
end
|
14
14
|
|
15
15
|
def url_for_read(style)
|
@@ -17,10 +17,10 @@ module MiniPaperclip
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def path_for(style)
|
20
|
-
template = if @
|
21
|
-
@config.url_path
|
22
|
-
else
|
20
|
+
template = if @attachment.original_filename.nil?
|
23
21
|
@config.url_missing_path
|
22
|
+
else
|
23
|
+
@config.url_path
|
24
24
|
end
|
25
25
|
interpolate(template, style)
|
26
26
|
end
|
@@ -32,7 +32,7 @@ module MiniPaperclip
|
|
32
32
|
private
|
33
33
|
|
34
34
|
def debug(str)
|
35
|
-
MiniPaperclip.config.logger.debug(str)
|
35
|
+
MiniPaperclip.config.logger.debug("[mini_paperclip] #{str}")
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -29,6 +29,15 @@ module MiniPaperclip
|
|
29
29
|
def exists?(style)
|
30
30
|
File.exists?(file_path(style))
|
31
31
|
end
|
32
|
+
|
33
|
+
def push_delete_file(style)
|
34
|
+
@deletes.push(file_path(style))
|
35
|
+
end
|
36
|
+
|
37
|
+
def do_delete_files
|
38
|
+
debug("deleting by filesystem #{@deletes}")
|
39
|
+
FileUtils.rm_f(@deletes)
|
40
|
+
end
|
32
41
|
end
|
33
42
|
end
|
34
43
|
end
|
@@ -8,7 +8,7 @@ module MiniPaperclip
|
|
8
8
|
Aws::S3::Client.new.put_object(
|
9
9
|
acl: @config.s3_acl,
|
10
10
|
cache_control: @config.s3_cache_control,
|
11
|
-
content_type: @
|
11
|
+
content_type: @attachment.content_type,
|
12
12
|
body: file.tap(&:rewind),
|
13
13
|
bucket: @config.s3_bucket_name,
|
14
14
|
key: s3_object_key(style),
|
@@ -21,7 +21,7 @@ module MiniPaperclip
|
|
21
21
|
Aws::S3::Client.new.copy_object(
|
22
22
|
acl: @config.s3_acl,
|
23
23
|
cache_control: @config.s3_cache_control,
|
24
|
-
content_type: @
|
24
|
+
content_type: @attachment.content_type,
|
25
25
|
copy_source: from_attachment.storage.object_key(style),
|
26
26
|
bucket: @config.s3_bucket_name,
|
27
27
|
key: s3_object_key(style),
|
@@ -46,6 +46,21 @@ module MiniPaperclip
|
|
46
46
|
rescue Aws::S3::Errors::NotFound
|
47
47
|
false
|
48
48
|
end
|
49
|
+
|
50
|
+
def push_delete_file(style)
|
51
|
+
@deletes.push({ key: s3_object_key(style) })
|
52
|
+
end
|
53
|
+
|
54
|
+
def do_delete_files
|
55
|
+
debug("deleting by S3 to bucket:#{@config.s3_bucket_name},objects:#{@deletes}")
|
56
|
+
Aws::S3::Client.new.delete_objects(
|
57
|
+
bucket: @config.s3_bucket_name,
|
58
|
+
delete: {
|
59
|
+
objects: @deletes,
|
60
|
+
quiet: true,
|
61
|
+
}
|
62
|
+
)
|
63
|
+
end
|
49
64
|
end
|
50
65
|
end
|
51
66
|
end
|
@@ -10,8 +10,8 @@ module MiniPaperclip
|
|
10
10
|
if check_value = options[:less_than]
|
11
11
|
unless attachment_file_size < check_value
|
12
12
|
count = ActiveSupport::NumberHelper.number_to_human_size(check_value)
|
13
|
-
record.errors.add(attribute, :less_than,
|
14
|
-
record.errors.add(attachment_file_size_name, :less_than,
|
13
|
+
record.errors.add(attribute, :less_than, count: count)
|
14
|
+
record.errors.add(attachment_file_size_name, :less_than, count: count)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -31,12 +31,14 @@ module MiniPaperclip
|
|
31
31
|
expected_height_less_than_or_equal_to = options.dig(:height, :less_than_or_equal_to)
|
32
32
|
unless (!expected_width_less_than_or_equal_to || image_size.width <= expected_width_less_than_or_equal_to) &&
|
33
33
|
(!expected_height_less_than_or_equal_to || image_size.height <= expected_height_less_than_or_equal_to)
|
34
|
-
record.errors.add(
|
34
|
+
record.errors.add(
|
35
|
+
attribute,
|
36
|
+
:geometry,
|
35
37
|
actual_width: image_size.width,
|
36
38
|
actual_height: image_size.height,
|
37
39
|
expected_width_less_than_or_equal_to: expected_width_less_than_or_equal_to,
|
38
40
|
expected_height_less_than_or_equal_to: expected_height_less_than_or_equal_to,
|
39
|
-
|
41
|
+
)
|
40
42
|
end
|
41
43
|
end
|
42
44
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_paperclip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ksss
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mini_magick
|
@@ -111,10 +111,10 @@ files:
|
|
111
111
|
- Rakefile
|
112
112
|
- bin/console
|
113
113
|
- bin/setup
|
114
|
+
- gemfiles/development.gemfile
|
114
115
|
- gemfiles/rails_52.gemfile
|
115
|
-
- gemfiles/rails_52.gemfile.lock
|
116
116
|
- gemfiles/rails_60.gemfile
|
117
|
-
- gemfiles/
|
117
|
+
- gemfiles/rails_head.gemfile
|
118
118
|
- lib/mini_paperclip.rb
|
119
119
|
- lib/mini_paperclip/attachment.rb
|
120
120
|
- lib/mini_paperclip/class_methods.rb
|
@@ -1,98 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ..
|
3
|
-
specs:
|
4
|
-
mini_paperclip (0.1.0)
|
5
|
-
activemodel
|
6
|
-
activesupport
|
7
|
-
aws-sdk-s3
|
8
|
-
mimemagic
|
9
|
-
mini_magick
|
10
|
-
|
11
|
-
GEM
|
12
|
-
remote: https://rubygems.org/
|
13
|
-
specs:
|
14
|
-
activemodel (5.2.4.4)
|
15
|
-
activesupport (= 5.2.4.4)
|
16
|
-
activerecord (5.2.4.4)
|
17
|
-
activemodel (= 5.2.4.4)
|
18
|
-
activesupport (= 5.2.4.4)
|
19
|
-
arel (>= 9.0)
|
20
|
-
activesupport (5.2.4.4)
|
21
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
22
|
-
i18n (>= 0.7, < 2)
|
23
|
-
minitest (~> 5.1)
|
24
|
-
tzinfo (~> 1.1)
|
25
|
-
addressable (2.7.0)
|
26
|
-
public_suffix (>= 2.0.2, < 5.0)
|
27
|
-
arel (9.0.0)
|
28
|
-
aws-eventstream (1.1.0)
|
29
|
-
aws-partitions (1.399.0)
|
30
|
-
aws-sdk-core (3.109.3)
|
31
|
-
aws-eventstream (~> 1, >= 1.0.2)
|
32
|
-
aws-partitions (~> 1, >= 1.239.0)
|
33
|
-
aws-sigv4 (~> 1.1)
|
34
|
-
jmespath (~> 1.0)
|
35
|
-
aws-sdk-kms (1.39.0)
|
36
|
-
aws-sdk-core (~> 3, >= 3.109.0)
|
37
|
-
aws-sigv4 (~> 1.1)
|
38
|
-
aws-sdk-s3 (1.85.0)
|
39
|
-
aws-sdk-core (~> 3, >= 3.109.0)
|
40
|
-
aws-sdk-kms (~> 1)
|
41
|
-
aws-sigv4 (~> 1.1)
|
42
|
-
aws-sigv4 (1.2.2)
|
43
|
-
aws-eventstream (~> 1, >= 1.0.2)
|
44
|
-
concurrent-ruby (1.1.7)
|
45
|
-
crack (0.4.4)
|
46
|
-
diff-lcs (1.4.4)
|
47
|
-
hashdiff (1.0.1)
|
48
|
-
i18n (1.8.5)
|
49
|
-
concurrent-ruby (~> 1.0)
|
50
|
-
jmespath (1.4.0)
|
51
|
-
mimemagic (0.3.5)
|
52
|
-
mini_magick (4.11.0)
|
53
|
-
minitest (5.14.2)
|
54
|
-
public_suffix (4.0.6)
|
55
|
-
rack (2.2.3)
|
56
|
-
rack-test (1.1.0)
|
57
|
-
rack (>= 1.0, < 3)
|
58
|
-
rake (12.3.3)
|
59
|
-
rspec (3.10.0)
|
60
|
-
rspec-core (~> 3.10.0)
|
61
|
-
rspec-expectations (~> 3.10.0)
|
62
|
-
rspec-mocks (~> 3.10.0)
|
63
|
-
rspec-core (3.10.0)
|
64
|
-
rspec-support (~> 3.10.0)
|
65
|
-
rspec-expectations (3.10.0)
|
66
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
67
|
-
rspec-support (~> 3.10.0)
|
68
|
-
rspec-mocks (3.10.0)
|
69
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
70
|
-
rspec-support (~> 3.10.0)
|
71
|
-
rspec-support (3.10.0)
|
72
|
-
sqlite3 (1.4.2)
|
73
|
-
tapp (1.5.1)
|
74
|
-
thor
|
75
|
-
thor (1.0.1)
|
76
|
-
thread_safe (0.3.6)
|
77
|
-
tzinfo (1.2.8)
|
78
|
-
thread_safe (~> 0.1)
|
79
|
-
webmock (3.10.0)
|
80
|
-
addressable (>= 2.3.6)
|
81
|
-
crack (>= 0.3.2)
|
82
|
-
hashdiff (>= 0.4.0, < 2.0.0)
|
83
|
-
|
84
|
-
PLATFORMS
|
85
|
-
ruby
|
86
|
-
|
87
|
-
DEPENDENCIES
|
88
|
-
activerecord (~> 5.2.0)
|
89
|
-
mini_paperclip!
|
90
|
-
rack-test
|
91
|
-
rake (~> 12.0)
|
92
|
-
rspec (~> 3.0)
|
93
|
-
sqlite3
|
94
|
-
tapp
|
95
|
-
webmock
|
96
|
-
|
97
|
-
BUNDLED WITH
|
98
|
-
2.1.4
|
@@ -1,98 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ..
|
3
|
-
specs:
|
4
|
-
mini_paperclip (0.1.0)
|
5
|
-
activemodel
|
6
|
-
activesupport
|
7
|
-
aws-sdk-s3
|
8
|
-
mimemagic
|
9
|
-
mini_magick
|
10
|
-
|
11
|
-
GEM
|
12
|
-
remote: https://rubygems.org/
|
13
|
-
specs:
|
14
|
-
activemodel (6.0.3.4)
|
15
|
-
activesupport (= 6.0.3.4)
|
16
|
-
activerecord (6.0.3.4)
|
17
|
-
activemodel (= 6.0.3.4)
|
18
|
-
activesupport (= 6.0.3.4)
|
19
|
-
activesupport (6.0.3.4)
|
20
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
21
|
-
i18n (>= 0.7, < 2)
|
22
|
-
minitest (~> 5.1)
|
23
|
-
tzinfo (~> 1.1)
|
24
|
-
zeitwerk (~> 2.2, >= 2.2.2)
|
25
|
-
addressable (2.7.0)
|
26
|
-
public_suffix (>= 2.0.2, < 5.0)
|
27
|
-
aws-eventstream (1.1.0)
|
28
|
-
aws-partitions (1.399.0)
|
29
|
-
aws-sdk-core (3.109.3)
|
30
|
-
aws-eventstream (~> 1, >= 1.0.2)
|
31
|
-
aws-partitions (~> 1, >= 1.239.0)
|
32
|
-
aws-sigv4 (~> 1.1)
|
33
|
-
jmespath (~> 1.0)
|
34
|
-
aws-sdk-kms (1.39.0)
|
35
|
-
aws-sdk-core (~> 3, >= 3.109.0)
|
36
|
-
aws-sigv4 (~> 1.1)
|
37
|
-
aws-sdk-s3 (1.85.0)
|
38
|
-
aws-sdk-core (~> 3, >= 3.109.0)
|
39
|
-
aws-sdk-kms (~> 1)
|
40
|
-
aws-sigv4 (~> 1.1)
|
41
|
-
aws-sigv4 (1.2.2)
|
42
|
-
aws-eventstream (~> 1, >= 1.0.2)
|
43
|
-
concurrent-ruby (1.1.7)
|
44
|
-
crack (0.4.4)
|
45
|
-
diff-lcs (1.4.4)
|
46
|
-
hashdiff (1.0.1)
|
47
|
-
i18n (1.8.5)
|
48
|
-
concurrent-ruby (~> 1.0)
|
49
|
-
jmespath (1.4.0)
|
50
|
-
mimemagic (0.3.5)
|
51
|
-
mini_magick (4.11.0)
|
52
|
-
minitest (5.14.2)
|
53
|
-
public_suffix (4.0.6)
|
54
|
-
rack (2.2.3)
|
55
|
-
rack-test (1.1.0)
|
56
|
-
rack (>= 1.0, < 3)
|
57
|
-
rake (12.3.3)
|
58
|
-
rspec (3.10.0)
|
59
|
-
rspec-core (~> 3.10.0)
|
60
|
-
rspec-expectations (~> 3.10.0)
|
61
|
-
rspec-mocks (~> 3.10.0)
|
62
|
-
rspec-core (3.10.0)
|
63
|
-
rspec-support (~> 3.10.0)
|
64
|
-
rspec-expectations (3.10.0)
|
65
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
66
|
-
rspec-support (~> 3.10.0)
|
67
|
-
rspec-mocks (3.10.0)
|
68
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
69
|
-
rspec-support (~> 3.10.0)
|
70
|
-
rspec-support (3.10.0)
|
71
|
-
sqlite3 (1.4.2)
|
72
|
-
tapp (1.5.1)
|
73
|
-
thor
|
74
|
-
thor (1.0.1)
|
75
|
-
thread_safe (0.3.6)
|
76
|
-
tzinfo (1.2.8)
|
77
|
-
thread_safe (~> 0.1)
|
78
|
-
webmock (3.10.0)
|
79
|
-
addressable (>= 2.3.6)
|
80
|
-
crack (>= 0.3.2)
|
81
|
-
hashdiff (>= 0.4.0, < 2.0.0)
|
82
|
-
zeitwerk (2.4.1)
|
83
|
-
|
84
|
-
PLATFORMS
|
85
|
-
ruby
|
86
|
-
|
87
|
-
DEPENDENCIES
|
88
|
-
activerecord (~> 6.0.0)
|
89
|
-
mini_paperclip!
|
90
|
-
rack-test
|
91
|
-
rake (~> 12.0)
|
92
|
-
rspec (~> 3.0)
|
93
|
-
sqlite3
|
94
|
-
tapp
|
95
|
-
webmock
|
96
|
-
|
97
|
-
BUNDLED WITH
|
98
|
-
2.1.4
|