kamifusen 1.11.2 → 1.13.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.
- checksums.yaml +4 -4
- data/.gitignore +0 -7
- data/README.md +43 -5
- data/Rakefile +1 -6
- data/app/views/kamifusen/_view.html.erb +130 -88
- data/kamifusen.gemspec +0 -1
- data/lib/kamifusen/processor.rb +62 -17
- data/lib/kamifusen/railtie.rb +5 -1
- data/lib/kamifusen/version.rb +1 -1
- data/lib/kamifusen.rb +7 -0
- metadata +3 -22
- data/Gemfile +0 -12
- data/Gemfile.lock +0 -206
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d6b3840b515b44e7d6ed8aa12a5356ebba29978d01129ce320c76f3d22a307eb
|
|
4
|
+
data.tar.gz: 64095c851bda7934311a8a3e02d296c4cc777d030bc3e7d418543d5b1c36ac07
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3dcaaa6832c838370e8912a53a024df972450fa51d95661334815e3d74779f4d756718823df8fe435f5f0cb692386c5d999a738c5ee44f0ac418ce54ddbd97ea
|
|
7
|
+
data.tar.gz: 3163c01dbd79f9bbcc1e13ac3b19f11b5b5bab40f681c63f23d0e419721ca7a11cac36581778bc928a5a064ebea201fbb594d9df26b16dc8864bd2712f6c8d23
|
data/.gitignore
CHANGED
data/README.md
CHANGED
|
@@ -2,10 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
Images in Ruby on Rails, as lightweight as possible!
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+

|
|
6
7
|
|
|
7
8
|
## Installation
|
|
8
9
|
|
|
10
|
+
Active Storage must be properly installed, with a solution set for the background jobs (we use Delayed Job).
|
|
11
|
+
- https://edgeguides.rubyonrails.org/active_storage_overview.html
|
|
12
|
+
- https://edgeguides.rubyonrails.org/active_job_basics.html#job-execution
|
|
13
|
+
|
|
9
14
|
Add this line to your application's Gemfile:
|
|
10
15
|
|
|
11
16
|
```ruby
|
|
@@ -20,6 +25,10 @@ Or install it yourself as:
|
|
|
20
25
|
|
|
21
26
|
$ gem install kamifusen
|
|
22
27
|
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
Simply use `kamifusen_tag` instead of `image_tag` in your rails views.
|
|
31
|
+
|
|
23
32
|
In the views, use (where object is an active record model, and image is an active storage attachment):
|
|
24
33
|
|
|
25
34
|
```erb
|
|
@@ -39,9 +48,12 @@ config.action_view.sanitized_allowed_tags = ['picture', 'source', 'img']
|
|
|
39
48
|
config.action_view.sanitized_allowed_attributes = ['src', 'type', 'srcset', 'width', 'height', 'alt', 'sizes', 'loading', 'decoding']
|
|
40
49
|
```
|
|
41
50
|
|
|
42
|
-
|
|
51
|
+
You can use the cache for the fragment, by setting
|
|
52
|
+
```erb
|
|
53
|
+
<%= kamifusen_tag object.image, alt: 'A nice image', cached: true %>
|
|
54
|
+
```
|
|
43
55
|
|
|
44
|
-
|
|
56
|
+
## What's the problem?
|
|
45
57
|
|
|
46
58
|
### The initial situation
|
|
47
59
|
|
|
@@ -128,10 +140,36 @@ It generates a code like:
|
|
|
128
140
|
<source srcset="image-400w.webp, image-800w.webp 2x" type="image/webp" media="(min-width: 400px)">
|
|
129
141
|
<source srcset="image-800w.jpg, image-1600w.jpg 2x" type="image/jpg" media="(min-width: 800px)">
|
|
130
142
|
<source srcset="image-400w.jpg, image-800w.jpg 2x" type="image/jpg" media="(min-width: 400px)">
|
|
131
|
-
<img src="image-800.jpg" alt="A nice image" srcset="image-800.jpg, image-1600.jpg 2x">
|
|
143
|
+
<img src="image-800.jpg" alt="A nice image" srcset="image-800.jpg, image-1600.jpg 2x" loading="lazy">
|
|
132
144
|
</picture>
|
|
133
145
|
```
|
|
134
146
|
|
|
147
|
+
### Parameters
|
|
148
|
+
|
|
149
|
+
You can set different parameters :
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
class: "img_class",
|
|
153
|
+
alt: "alt",
|
|
154
|
+
height: height,
|
|
155
|
+
width: width,
|
|
156
|
+
sizes: sizes,
|
|
157
|
+
active_storage_direct_url: direct_url,
|
|
158
|
+
async: async
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Example of sizes parameter :
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
sizes: {
|
|
165
|
+
'(max-width: 576px)': '315px',
|
|
166
|
+
'(max-width: 991px)': '210px',
|
|
167
|
+
'(max-width: 1199px)': '290px',
|
|
168
|
+
'(max-width: 1439px)': '350px',
|
|
169
|
+
'(min-width: 1440px)': '420px'
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
135
173
|
## References
|
|
136
174
|
|
|
137
175
|
- https://developer.mozilla.org/fr/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images
|
|
@@ -156,7 +194,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
|
156
194
|
|
|
157
195
|
## Contributing
|
|
158
196
|
|
|
159
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
|
197
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/noesya/kamifusen. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/kamifusen/blob/master/CODE_OF_CONDUCT.md).
|
|
160
198
|
|
|
161
199
|
## License
|
|
162
200
|
|
data/Rakefile
CHANGED
|
@@ -1,94 +1,136 @@
|
|
|
1
1
|
<%
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
source_is_set = false
|
|
3
|
+
if source.is_a? ActiveStorage::Blob
|
|
4
|
+
source_is_set = true
|
|
5
|
+
elsif source.respond_to?(:attached?)
|
|
6
|
+
source_is_set = source.attached?
|
|
7
|
+
end
|
|
8
|
+
%>
|
|
9
|
+
<%
|
|
10
|
+
if source_is_set
|
|
11
|
+
options ||= {}
|
|
12
|
+
cached = options.dig(:cached)
|
|
13
|
+
cache_if(cached, [source, options]) do
|
|
14
|
+
title = options[:title]
|
|
15
|
+
alt = options[:alt]
|
|
16
|
+
data = options[:data]
|
|
17
|
+
async = options.has_key?(:async) ? options[:async] : true
|
|
18
|
+
active_storage_direct_url = options.has_key?(:active_storage_direct_url) ? options[:active_storage_direct_url] : false
|
|
19
|
+
klass = options[:class]
|
|
20
|
+
picture_class = options[:picture_class]
|
|
21
|
+
width = options[:width]
|
|
22
|
+
height = options[:height]
|
|
23
|
+
crop = options[:crop]
|
|
24
|
+
if crop && (width.nil? || height.nil?)
|
|
25
|
+
raise ArgumentError, "Cropping needs a width and a height."
|
|
26
|
+
end
|
|
27
|
+
variant_sizes = Kamifusen.sizes.dup
|
|
28
|
+
quality = Kamifusen.quality.dup
|
|
29
|
+
default_variant_options = {}
|
|
30
|
+
case ActiveStorage.variant_processor
|
|
31
|
+
when :vips
|
|
32
|
+
default_variant_options = { saver: { quality: quality } }
|
|
33
|
+
when :mini_magick
|
|
34
|
+
default_variant_options = { quality: quality }
|
|
35
|
+
end
|
|
12
36
|
|
|
13
|
-
|
|
14
|
-
|
|
37
|
+
sizes = options[:sizes] || {}
|
|
38
|
+
sizes_value = sizes.map { |key, value| [key, value].join(' ').strip }.join(', ')
|
|
15
39
|
|
|
16
|
-
|
|
17
|
-
|
|
40
|
+
if source&.analyzed? && source.metadata.has_key?('width') && source.metadata.has_key?('height')
|
|
41
|
+
image_width = source.metadata['width']
|
|
42
|
+
image_height = source.metadata['height']
|
|
43
|
+
image_ratio = 1.0 * image_width / image_height
|
|
44
|
+
if width.nil? && height.nil?
|
|
45
|
+
# Image real dimensions
|
|
46
|
+
width = [image_width, variant_sizes.last].min
|
|
47
|
+
height = width / image_ratio
|
|
48
|
+
elsif width.nil?
|
|
49
|
+
# Calculated width, preserving the aspect ratio
|
|
50
|
+
width = height * image_ratio
|
|
51
|
+
elsif height.nil?
|
|
52
|
+
# Calculated height, preserving the aspect ratio
|
|
53
|
+
height = width / image_ratio
|
|
54
|
+
elsif !crop
|
|
55
|
+
# Explicit dimensions, no crop. We redefine the height if aspect ratio is not preserved.
|
|
56
|
+
width = [image_width, width].min
|
|
57
|
+
height = width / image_ratio
|
|
58
|
+
end
|
|
59
|
+
width = width.round
|
|
60
|
+
height = height.round
|
|
61
|
+
end
|
|
18
62
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
#
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
63
|
+
parameters = ""
|
|
64
|
+
parameters += " loading=\"lazy\" decoding=\"async\"" if async
|
|
65
|
+
parameters += " alt=\"#{alt}\"" if alt
|
|
66
|
+
parameters += " title=\"#{title}\"" if title
|
|
67
|
+
parameters += " width=\"#{width}\"" if width
|
|
68
|
+
parameters += " height=\"#{height}\"" if height
|
|
69
|
+
parameters += " class=\"#{klass}\"" if klass
|
|
70
|
+
if data
|
|
71
|
+
data.each do |entry|
|
|
72
|
+
parameters += " data-#{entry.first.to_s}=\"#{entry.last}\""
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
if source.variable?
|
|
76
|
+
# Computing
|
|
77
|
+
if width
|
|
78
|
+
width_retina = width * 2
|
|
79
|
+
variant_sizes.reject! { |size| size > width_retina }
|
|
80
|
+
variant_sizes << width_retina
|
|
81
|
+
variant_sizes.uniq!
|
|
82
|
+
end
|
|
83
|
+
default_width = variant_sizes.max
|
|
84
|
+
default_width = width_retina if width_retina && width_retina > default_width
|
|
85
|
+
if Kamifusen.with_webp
|
|
86
|
+
srcset_webp = variant_sizes.map { |size|
|
|
87
|
+
if crop
|
|
88
|
+
# Width: 400, height: 600 ; if width: 200, height: 300
|
|
89
|
+
variant_height = (height * size / width).round
|
|
90
|
+
variant_options = default_variant_options.merge({ resize_to_fill: [size, variant_height], format: :webp })
|
|
91
|
+
else
|
|
92
|
+
variant_options = default_variant_options.merge({ resize_to_limit: [size, nil], format: :webp })
|
|
93
|
+
end
|
|
94
|
+
variant = source.variant(variant_options)
|
|
95
|
+
"#{ Kamifusen.process(variant, active_storage_direct_url) } #{size}w"
|
|
96
|
+
}.join(', ')
|
|
97
|
+
end
|
|
98
|
+
srcset_default = variant_sizes.map { |size|
|
|
99
|
+
if crop
|
|
100
|
+
# Width: 400, height: 600 ; if width: 200, height: 300
|
|
101
|
+
variant_height = (height * size / width).round
|
|
102
|
+
variant_options = default_variant_options.merge({ resize_to_fill: [size, variant_height] })
|
|
103
|
+
else
|
|
104
|
+
variant_options = default_variant_options.merge({ resize_to_limit: [size, nil] })
|
|
105
|
+
end
|
|
106
|
+
variant = source.variant(variant_options)
|
|
107
|
+
"#{ Kamifusen.process(variant, active_storage_direct_url) } #{size}w"
|
|
108
|
+
}.join(', ')
|
|
109
|
+
if crop
|
|
110
|
+
# Width: 400, height: 600 ; if width: 200, height: 300
|
|
111
|
+
variant_height = (height * default_width / width).round
|
|
112
|
+
variant_options = default_variant_options.merge({ resize_to_fill: [default_width, variant_height] })
|
|
113
|
+
else
|
|
114
|
+
variant_options = default_variant_options.merge({ resize_to_limit: [default_width, nil] })
|
|
115
|
+
end
|
|
116
|
+
variant = source.variant(variant_options)
|
|
117
|
+
default = Kamifusen.process(variant, active_storage_direct_url)
|
|
118
|
+
%>
|
|
119
|
+
<picture<%= " class=\"#{picture_class}\"".html_safe unless picture_class.blank? %>>
|
|
120
|
+
<% if Kamifusen.with_webp %>
|
|
121
|
+
<source srcset="<%= raw srcset_webp %>"
|
|
122
|
+
<%= " sizes=\"#{sizes_value}\"".html_safe unless sizes.empty? %>
|
|
123
|
+
type="image/webp">
|
|
124
|
+
<% end %>
|
|
125
|
+
<source srcset="<%= raw srcset_default %>"
|
|
126
|
+
<%= " sizes=\"#{sizes_value}\"".html_safe unless sizes.empty? %>
|
|
127
|
+
type="<%= source.content_type %>">
|
|
128
|
+
<img src="<%= raw default %>" <%= raw parameters %>>
|
|
129
|
+
</picture>
|
|
130
|
+
<% else %>
|
|
131
|
+
<picture>
|
|
132
|
+
<img src="<%= url_for source %>" type="<%= source.content_type %>"<%= raw parameters %>>
|
|
133
|
+
</picture>
|
|
84
134
|
<% end %>
|
|
85
|
-
|
|
86
|
-
<%= " sizes=\"#{sizes_value}\"".html_safe unless sizes.empty? %>
|
|
87
|
-
type="<%= source.content_type %>">
|
|
88
|
-
<img src="<%= raw default %>" <%= raw parameters %>>
|
|
89
|
-
</picture>
|
|
90
|
-
<% else %>
|
|
91
|
-
<picture>
|
|
92
|
-
<img src="<%= url_for source %>" type="<%= source.content_type %>"<%= raw parameters %>>
|
|
93
|
-
</picture>
|
|
135
|
+
<% end %>
|
|
94
136
|
<% end %>
|
data/kamifusen.gemspec
CHANGED
data/lib/kamifusen/processor.rb
CHANGED
|
@@ -14,28 +14,73 @@ module Kamifusen
|
|
|
14
14
|
|
|
15
15
|
protected
|
|
16
16
|
|
|
17
|
-
def
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if
|
|
17
|
+
def transformations
|
|
18
|
+
@transformations ||= variant.variation.transformations
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def format
|
|
22
|
+
return @format if defined?(@format)
|
|
23
|
+
@format = transformations.fetch(:format)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def quality
|
|
27
|
+
return @quality if defined?(@quality)
|
|
28
|
+
@quality = case ActiveStorage.variant_processor
|
|
29
|
+
when :vips
|
|
30
|
+
transformations.dig(:saver, :quality)
|
|
31
|
+
when :mini_magick
|
|
32
|
+
transformations.fetch(:quality)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def width
|
|
37
|
+
return @width if defined?(@width)
|
|
38
|
+
if transformations.has_key?(:resize)
|
|
39
|
+
Kamifusen.deprecator.warn("The `resize` transformation is deprecated. Please use `resize_to_limit` instead.")
|
|
40
|
+
# resize: "100>"
|
|
23
41
|
resize = transformations[:resize]
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
42
|
+
@width = resize.split('>').first.to_i if '>'.in?(resize)
|
|
43
|
+
elsif transformations.has_key?(:resize_to_limit)
|
|
44
|
+
# resize_to_limit: [100, nil]
|
|
45
|
+
@width = transformations[:resize_to_limit].first.to_i
|
|
46
|
+
elsif transformations.has_key?(:resize_to_fill)
|
|
47
|
+
# resize_to_fill: [400, 600]
|
|
48
|
+
@width = transformations[:resize_to_fill].first.to_i
|
|
29
49
|
end
|
|
30
|
-
|
|
50
|
+
@width
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def height
|
|
54
|
+
return @height if defined?(@height)
|
|
55
|
+
if transformations.has_key?(:resize_to_fill)
|
|
56
|
+
# resize_to_fill: [400, 600]
|
|
57
|
+
@height = transformations[:resize_to_fill].second.to_i
|
|
58
|
+
end
|
|
59
|
+
@height
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def crop
|
|
63
|
+
return @crop if defined?(@crop)
|
|
64
|
+
@crop = transformations.has_key?(:resize_to_fill)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def keycdn_url
|
|
68
|
+
return @keycdn_url if defined?(@keycdn_url)
|
|
69
|
+
@keycdn_url = "#{Kamifusen.keycdn}/#{variant.blob.key}?"
|
|
70
|
+
@keycdn_url += "format=#{format}&" if format.present?
|
|
71
|
+
@keycdn_url += "width=#{width}&" if width.present?
|
|
72
|
+
@keycdn_url += "height=#{height}&" if crop && height.present?
|
|
73
|
+
@keycdn_url += "quality=#{quality}&" if quality.present?
|
|
74
|
+
@keycdn_url
|
|
31
75
|
end
|
|
32
76
|
|
|
33
77
|
def active_storage_url
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
78
|
+
return @active_storage_url if defined?(@active_storage_url)
|
|
79
|
+
@active_storage_url = nil
|
|
80
|
+
@active_storage_url = processed_url if active_storage_direct_url
|
|
81
|
+
@active_storage_url ||= smart_url
|
|
82
|
+
@active_storage_url ||= explicit_url
|
|
83
|
+
@active_storage_url
|
|
39
84
|
end
|
|
40
85
|
|
|
41
86
|
def processed_url
|
data/lib/kamifusen/railtie.rb
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
module Kamifusen
|
|
2
2
|
class Railtie < ::Rails::Railtie
|
|
3
|
-
initializer "
|
|
3
|
+
initializer "kamifusen.deprecator", before: :load_environment_config do |app|
|
|
4
|
+
app.deprecators[:kamifusen] = ActionMailbox.deprecator
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
initializer "kamifusen.view_helpers" do
|
|
4
8
|
ActiveSupport.on_load(:action_view) { include Kamifusen::ViewHelper }
|
|
5
9
|
end
|
|
6
10
|
end
|
data/lib/kamifusen/version.rb
CHANGED
data/lib/kamifusen.rb
CHANGED
|
@@ -11,6 +11,10 @@ module Kamifusen
|
|
|
11
11
|
yield self
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
def self.deprecator
|
|
15
|
+
@deprecator ||= ActiveSupport::Deprecation.new("2.0", "Kamifūsen")
|
|
16
|
+
end
|
|
17
|
+
|
|
14
18
|
def self.process(variant, active_storage_direct_url = false)
|
|
15
19
|
Processor.new(variant, active_storage_direct_url).url
|
|
16
20
|
end
|
|
@@ -55,6 +59,9 @@ module Kamifusen
|
|
|
55
59
|
@@quality = 70
|
|
56
60
|
|
|
57
61
|
class Engine < ::Rails::Engine
|
|
62
|
+
initializer "kamifusen.deprecator", before: :load_environment_config do |app|
|
|
63
|
+
app.deprecators[:kamifusen] = Kamifusen.deprecator
|
|
64
|
+
end
|
|
58
65
|
end
|
|
59
66
|
|
|
60
67
|
class Error < StandardError
|
metadata
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kamifusen
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.13.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sébastien Moulène
|
|
8
8
|
- Arnaud Levy
|
|
9
|
-
autorequire:
|
|
10
9
|
bindir: exe
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: rails
|
|
@@ -39,20 +38,6 @@ dependencies:
|
|
|
39
38
|
- - ">="
|
|
40
39
|
- !ruby/object:Gem::Version
|
|
41
40
|
version: '0'
|
|
42
|
-
- !ruby/object:Gem::Dependency
|
|
43
|
-
name: listen
|
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
|
45
|
-
requirements:
|
|
46
|
-
- - ">="
|
|
47
|
-
- !ruby/object:Gem::Version
|
|
48
|
-
version: '0'
|
|
49
|
-
type: :development
|
|
50
|
-
prerelease: false
|
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
52
|
-
requirements:
|
|
53
|
-
- - ">="
|
|
54
|
-
- !ruby/object:Gem::Version
|
|
55
|
-
version: '0'
|
|
56
41
|
- !ruby/object:Gem::Dependency
|
|
57
42
|
name: sqlite3
|
|
58
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -79,8 +64,6 @@ files:
|
|
|
79
64
|
- ".rubocop.yml"
|
|
80
65
|
- CHANGELOG.md
|
|
81
66
|
- CODE_OF_CONDUCT.md
|
|
82
|
-
- Gemfile
|
|
83
|
-
- Gemfile.lock
|
|
84
67
|
- LICENSE
|
|
85
68
|
- README.md
|
|
86
69
|
- Rakefile
|
|
@@ -102,7 +85,6 @@ licenses:
|
|
|
102
85
|
metadata:
|
|
103
86
|
homepage_uri: https://github.com/sebousan/kamifusen
|
|
104
87
|
source_code_uri: https://github.com/sebousan/kamifusen
|
|
105
|
-
post_install_message:
|
|
106
88
|
rdoc_options: []
|
|
107
89
|
require_paths:
|
|
108
90
|
- lib
|
|
@@ -117,8 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
117
99
|
- !ruby/object:Gem::Version
|
|
118
100
|
version: '0'
|
|
119
101
|
requirements: []
|
|
120
|
-
rubygems_version: 3.
|
|
121
|
-
signing_key:
|
|
102
|
+
rubygems_version: 3.6.9
|
|
122
103
|
specification_version: 4
|
|
123
104
|
summary: Images, light as balloons
|
|
124
105
|
test_files: []
|
data/Gemfile
DELETED
data/Gemfile.lock
DELETED
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
PATH
|
|
2
|
-
remote: .
|
|
3
|
-
specs:
|
|
4
|
-
kamifusen (1.11.2)
|
|
5
|
-
image_processing
|
|
6
|
-
rails
|
|
7
|
-
|
|
8
|
-
GEM
|
|
9
|
-
remote: https://rubygems.org/
|
|
10
|
-
specs:
|
|
11
|
-
actioncable (7.0.2.2)
|
|
12
|
-
actionpack (= 7.0.2.2)
|
|
13
|
-
activesupport (= 7.0.2.2)
|
|
14
|
-
nio4r (~> 2.0)
|
|
15
|
-
websocket-driver (>= 0.6.1)
|
|
16
|
-
actionmailbox (7.0.2.2)
|
|
17
|
-
actionpack (= 7.0.2.2)
|
|
18
|
-
activejob (= 7.0.2.2)
|
|
19
|
-
activerecord (= 7.0.2.2)
|
|
20
|
-
activestorage (= 7.0.2.2)
|
|
21
|
-
activesupport (= 7.0.2.2)
|
|
22
|
-
mail (>= 2.7.1)
|
|
23
|
-
net-imap
|
|
24
|
-
net-pop
|
|
25
|
-
net-smtp
|
|
26
|
-
actionmailer (7.0.2.2)
|
|
27
|
-
actionpack (= 7.0.2.2)
|
|
28
|
-
actionview (= 7.0.2.2)
|
|
29
|
-
activejob (= 7.0.2.2)
|
|
30
|
-
activesupport (= 7.0.2.2)
|
|
31
|
-
mail (~> 2.5, >= 2.5.4)
|
|
32
|
-
net-imap
|
|
33
|
-
net-pop
|
|
34
|
-
net-smtp
|
|
35
|
-
rails-dom-testing (~> 2.0)
|
|
36
|
-
actionpack (7.0.2.2)
|
|
37
|
-
actionview (= 7.0.2.2)
|
|
38
|
-
activesupport (= 7.0.2.2)
|
|
39
|
-
rack (~> 2.0, >= 2.2.0)
|
|
40
|
-
rack-test (>= 0.6.3)
|
|
41
|
-
rails-dom-testing (~> 2.0)
|
|
42
|
-
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
|
43
|
-
actiontext (7.0.2.2)
|
|
44
|
-
actionpack (= 7.0.2.2)
|
|
45
|
-
activerecord (= 7.0.2.2)
|
|
46
|
-
activestorage (= 7.0.2.2)
|
|
47
|
-
activesupport (= 7.0.2.2)
|
|
48
|
-
globalid (>= 0.6.0)
|
|
49
|
-
nokogiri (>= 1.8.5)
|
|
50
|
-
actionview (7.0.2.2)
|
|
51
|
-
activesupport (= 7.0.2.2)
|
|
52
|
-
builder (~> 3.1)
|
|
53
|
-
erubi (~> 1.4)
|
|
54
|
-
rails-dom-testing (~> 2.0)
|
|
55
|
-
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
|
56
|
-
activejob (7.0.2.2)
|
|
57
|
-
activesupport (= 7.0.2.2)
|
|
58
|
-
globalid (>= 0.3.6)
|
|
59
|
-
activemodel (7.0.2.2)
|
|
60
|
-
activesupport (= 7.0.2.2)
|
|
61
|
-
activerecord (7.0.2.2)
|
|
62
|
-
activemodel (= 7.0.2.2)
|
|
63
|
-
activesupport (= 7.0.2.2)
|
|
64
|
-
activestorage (7.0.2.2)
|
|
65
|
-
actionpack (= 7.0.2.2)
|
|
66
|
-
activejob (= 7.0.2.2)
|
|
67
|
-
activerecord (= 7.0.2.2)
|
|
68
|
-
activesupport (= 7.0.2.2)
|
|
69
|
-
marcel (~> 1.0)
|
|
70
|
-
mini_mime (>= 1.1.0)
|
|
71
|
-
activesupport (7.0.2.2)
|
|
72
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
73
|
-
i18n (>= 1.6, < 2)
|
|
74
|
-
minitest (>= 5.1)
|
|
75
|
-
tzinfo (~> 2.0)
|
|
76
|
-
ast (2.4.2)
|
|
77
|
-
builder (3.2.4)
|
|
78
|
-
byebug (11.1.3)
|
|
79
|
-
concurrent-ruby (1.1.9)
|
|
80
|
-
crass (1.0.6)
|
|
81
|
-
digest (3.1.0)
|
|
82
|
-
erubi (1.10.0)
|
|
83
|
-
ffi (1.15.4)
|
|
84
|
-
globalid (1.0.0)
|
|
85
|
-
activesupport (>= 5.0)
|
|
86
|
-
i18n (1.10.0)
|
|
87
|
-
concurrent-ruby (~> 1.0)
|
|
88
|
-
image_processing (1.12.1)
|
|
89
|
-
mini_magick (>= 4.9.5, < 5)
|
|
90
|
-
ruby-vips (>= 2.0.17, < 3)
|
|
91
|
-
io-wait (0.2.1)
|
|
92
|
-
listen (3.7.0)
|
|
93
|
-
rb-fsevent (~> 0.10, >= 0.10.3)
|
|
94
|
-
rb-inotify (~> 0.9, >= 0.9.10)
|
|
95
|
-
loofah (2.14.0)
|
|
96
|
-
crass (~> 1.0.2)
|
|
97
|
-
nokogiri (>= 1.5.9)
|
|
98
|
-
mail (2.7.1)
|
|
99
|
-
mini_mime (>= 0.1.1)
|
|
100
|
-
marcel (1.0.2)
|
|
101
|
-
method_source (1.0.0)
|
|
102
|
-
mini_magick (4.11.0)
|
|
103
|
-
mini_mime (1.1.2)
|
|
104
|
-
mini_portile2 (2.8.0)
|
|
105
|
-
minitest (5.15.0)
|
|
106
|
-
net-imap (0.2.3)
|
|
107
|
-
digest
|
|
108
|
-
net-protocol
|
|
109
|
-
strscan
|
|
110
|
-
net-pop (0.1.1)
|
|
111
|
-
digest
|
|
112
|
-
net-protocol
|
|
113
|
-
timeout
|
|
114
|
-
net-protocol (0.1.2)
|
|
115
|
-
io-wait
|
|
116
|
-
timeout
|
|
117
|
-
net-smtp (0.3.1)
|
|
118
|
-
digest
|
|
119
|
-
net-protocol
|
|
120
|
-
timeout
|
|
121
|
-
nio4r (2.5.8)
|
|
122
|
-
nokogiri (1.13.3)
|
|
123
|
-
mini_portile2 (~> 2.8.0)
|
|
124
|
-
racc (~> 1.4)
|
|
125
|
-
nokogiri (1.13.3-x86_64-darwin)
|
|
126
|
-
racc (~> 1.4)
|
|
127
|
-
parallel (1.21.0)
|
|
128
|
-
parser (3.0.2.0)
|
|
129
|
-
ast (~> 2.4.1)
|
|
130
|
-
racc (1.6.0)
|
|
131
|
-
rack (2.2.3)
|
|
132
|
-
rack-test (1.1.0)
|
|
133
|
-
rack (>= 1.0, < 3)
|
|
134
|
-
rails (7.0.2.2)
|
|
135
|
-
actioncable (= 7.0.2.2)
|
|
136
|
-
actionmailbox (= 7.0.2.2)
|
|
137
|
-
actionmailer (= 7.0.2.2)
|
|
138
|
-
actionpack (= 7.0.2.2)
|
|
139
|
-
actiontext (= 7.0.2.2)
|
|
140
|
-
actionview (= 7.0.2.2)
|
|
141
|
-
activejob (= 7.0.2.2)
|
|
142
|
-
activemodel (= 7.0.2.2)
|
|
143
|
-
activerecord (= 7.0.2.2)
|
|
144
|
-
activestorage (= 7.0.2.2)
|
|
145
|
-
activesupport (= 7.0.2.2)
|
|
146
|
-
bundler (>= 1.15.0)
|
|
147
|
-
railties (= 7.0.2.2)
|
|
148
|
-
rails-dom-testing (2.0.3)
|
|
149
|
-
activesupport (>= 4.2.0)
|
|
150
|
-
nokogiri (>= 1.6)
|
|
151
|
-
rails-html-sanitizer (1.4.2)
|
|
152
|
-
loofah (~> 2.3)
|
|
153
|
-
railties (7.0.2.2)
|
|
154
|
-
actionpack (= 7.0.2.2)
|
|
155
|
-
activesupport (= 7.0.2.2)
|
|
156
|
-
method_source
|
|
157
|
-
rake (>= 12.2)
|
|
158
|
-
thor (~> 1.0)
|
|
159
|
-
zeitwerk (~> 2.5)
|
|
160
|
-
rainbow (3.0.0)
|
|
161
|
-
rake (13.0.6)
|
|
162
|
-
rb-fsevent (0.11.0)
|
|
163
|
-
rb-inotify (0.10.1)
|
|
164
|
-
ffi (~> 1.0)
|
|
165
|
-
regexp_parser (2.1.1)
|
|
166
|
-
rexml (3.2.5)
|
|
167
|
-
rubocop (1.23.0)
|
|
168
|
-
parallel (~> 1.10)
|
|
169
|
-
parser (>= 3.0.0.0)
|
|
170
|
-
rainbow (>= 2.2.2, < 4.0)
|
|
171
|
-
regexp_parser (>= 1.8, < 3.0)
|
|
172
|
-
rexml
|
|
173
|
-
rubocop-ast (>= 1.12.0, < 2.0)
|
|
174
|
-
ruby-progressbar (~> 1.7)
|
|
175
|
-
unicode-display_width (>= 1.4.0, < 3.0)
|
|
176
|
-
rubocop-ast (1.13.0)
|
|
177
|
-
parser (>= 3.0.1.1)
|
|
178
|
-
ruby-progressbar (1.11.0)
|
|
179
|
-
ruby-vips (2.1.4)
|
|
180
|
-
ffi (~> 1.12)
|
|
181
|
-
sqlite3 (1.4.2)
|
|
182
|
-
strscan (3.0.1)
|
|
183
|
-
thor (1.2.1)
|
|
184
|
-
timeout (0.2.0)
|
|
185
|
-
tzinfo (2.0.4)
|
|
186
|
-
concurrent-ruby (~> 1.0)
|
|
187
|
-
unicode-display_width (2.1.0)
|
|
188
|
-
websocket-driver (0.7.5)
|
|
189
|
-
websocket-extensions (>= 0.1.0)
|
|
190
|
-
websocket-extensions (0.1.5)
|
|
191
|
-
zeitwerk (2.5.4)
|
|
192
|
-
|
|
193
|
-
PLATFORMS
|
|
194
|
-
ruby
|
|
195
|
-
x86_64-darwin-20
|
|
196
|
-
|
|
197
|
-
DEPENDENCIES
|
|
198
|
-
byebug
|
|
199
|
-
kamifusen!
|
|
200
|
-
listen
|
|
201
|
-
rake (~> 13.0)
|
|
202
|
-
rubocop (~> 1.7)
|
|
203
|
-
sqlite3
|
|
204
|
-
|
|
205
|
-
BUNDLED WITH
|
|
206
|
-
2.3.2
|