light_resizer 0.1.2 → 0.1.4
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/README.md +37 -0
- data/lib/light_resizer/carrierwave_resize.rb +9 -7
- data/lib/light_resizer/image_loader/original_image.rb +1 -1
- data/lib/light_resizer/middleware/path.rb +12 -4
- data/lib/light_resizer/middleware/resizer.rb +16 -9
- data/lib/light_resizer/middleware.rb +1 -1
- data/lib/light_resizer/version.rb +1 -1
- data/light_resizer.gemspec +1 -0
- data/spec/fixtures/sample.jpg +0 -0
- data/spec/integration/middleware_spec.rb +23 -13
- data/spec/spec_helper.rb +2 -8
- data/spec/unit/image_loader_original_spec.rb +1 -1
- data/spec/unit/middleware_path_spec.rb +10 -4
- data/spec/unit/middleware_resizer_spec.rb +9 -9
- metadata +18 -4
- data/spec/fixtures/avatar.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc5c78b129e5231781ba262d6dac0f7752edd977
|
4
|
+
data.tar.gz: 838eb313c7c7cc204308ae399ab14ed2442df8c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a146c0e1021f487ae735be544bee6bd1191bd2e83a1a6ab4b339fa5dc288a2268dd813b33c5d4a4176060ae5f36e964e113a2b58610fbcc3a12f7a98b6e742e
|
7
|
+
data.tar.gz: 69c813f29b65347c5c73e309a7617e2db3b747d000f785d54bfffbb35dd3a80d4d882f737e6df409f3ef2faada0e0e51c58ac29ce5d200b6ba0e2d4f3caa5fc1
|
data/README.md
CHANGED
@@ -4,4 +4,41 @@ light-resizer
|
|
4
4
|
[](https://travis-ci.org/Rademade/light_resizer)
|
5
5
|
|
6
6
|
Rack middleware for image resizer. Can be integrated with CarrierWave.
|
7
|
+
Instalation
|
8
|
+
===========
|
9
|
+
Install gem:
|
10
|
+
|
11
|
+
$ gem install light_resizer
|
12
|
+
|
13
|
+
And set it in config:
|
14
|
+
```ruby
|
15
|
+
config.middleware.insert_before(Rack::Sendfile, LightResizer::Middleware, Rails.root)
|
16
|
+
```
|
17
|
+
|
18
|
+
|
19
|
+
Usage
|
20
|
+
=====
|
21
|
+
For example we have image in public folder by next url:
|
22
|
+
|
23
|
+
>example.com/images/kitten.jpg
|
24
|
+
|
25
|
+
Url of resized image will be:
|
26
|
+
|
27
|
+
>example.com/images/**light_resize/100x150_kitten.jpg**
|
28
|
+
|
29
|
+
light_resizer will find */public/images/kitten.jpg* and create *light_resize* with resized to size of 100x150px image.
|
30
|
+
|
31
|
+
If you change extension of original image:
|
32
|
+
|
33
|
+
>example.com/images/light_resize/100x150_kitten.**png**
|
34
|
+
|
35
|
+
light_resize will convert image to a new extension.
|
36
|
+
|
37
|
+
Default resize doesn't crop image and fill new space with transparent background.
|
38
|
+
|
39
|
+
To crop image use '*crop*' in url:
|
40
|
+
>example.com/images/light_resize/100x150_crop_kitten.png
|
41
|
+
|
42
|
+
|
43
|
+
|
7
44
|
|
@@ -1,22 +1,24 @@
|
|
1
1
|
module LightResizer
|
2
2
|
module CarrierWaveResize
|
3
|
-
def
|
3
|
+
def resize_without_crop(width, height)
|
4
4
|
filename_prefix = "#{width}x#{height}_"
|
5
|
-
resized_image_path(filename_prefix)
|
5
|
+
resized_image_path(filename_prefix, 'png')
|
6
6
|
end
|
7
7
|
|
8
|
-
|
8
|
+
alias_method :resize, :resize_without_crop
|
9
|
+
|
10
|
+
def resize_with_crop(width, height)
|
9
11
|
filename_prefix = "#{width}x#{height}_crop_"
|
10
12
|
resized_image_path(filename_prefix)
|
11
13
|
end
|
12
14
|
|
13
15
|
private
|
14
|
-
def resized_image_path(prefix)
|
16
|
+
def resized_image_path(prefix, extension = nil)
|
15
17
|
if url
|
16
18
|
path = File.dirname(url)
|
17
|
-
filename = File.basename(url)
|
18
|
-
new_filname = prefix + filename
|
19
|
-
|
19
|
+
filename = File.basename(url, '.*')
|
20
|
+
new_filname = prefix + filename + '.png'
|
21
|
+
|
20
22
|
File.join(path, 'light_resize', new_filname)
|
21
23
|
end
|
22
24
|
end
|
@@ -3,7 +3,7 @@ module LightResizer
|
|
3
3
|
class Middleware
|
4
4
|
class Path
|
5
5
|
|
6
|
-
PREFIX_REGEXP = /^[0-9]+x[0-9]+(_crop)
|
6
|
+
PREFIX_REGEXP = /^[0-9]+x[0-9]+(_crop|_convert)*_/
|
7
7
|
|
8
8
|
attr_reader :request_path
|
9
9
|
|
@@ -20,7 +20,12 @@ module LightResizer
|
|
20
20
|
|
21
21
|
# {Bool} returns true if image should be croped on resize
|
22
22
|
def crop_path?
|
23
|
-
prefix
|
23
|
+
prefix =~ /crop/
|
24
|
+
end
|
25
|
+
|
26
|
+
# {Bool} returns true if image should be converted on resize
|
27
|
+
def convert_path?
|
28
|
+
prefix =~ /convert/
|
24
29
|
end
|
25
30
|
|
26
31
|
# {String} last part of request – relative path
|
@@ -29,6 +34,10 @@ module LightResizer
|
|
29
34
|
File.join(dir, original_filename)
|
30
35
|
end
|
31
36
|
|
37
|
+
def image_extension
|
38
|
+
File.extname(request_path)
|
39
|
+
end
|
40
|
+
|
32
41
|
|
33
42
|
# {String} returns prefix of resized image name
|
34
43
|
# 200x200_crop_image.png => 200x200_crop
|
@@ -51,13 +60,12 @@ module LightResizer
|
|
51
60
|
end
|
52
61
|
|
53
62
|
def filename
|
54
|
-
File.basename(request_path)
|
63
|
+
File.basename(request_path, '.*')
|
55
64
|
end
|
56
65
|
|
57
66
|
def name_segments
|
58
67
|
@segments ||= request_path.split('/')
|
59
68
|
end
|
60
|
-
|
61
69
|
end
|
62
70
|
end
|
63
71
|
end
|
@@ -3,9 +3,9 @@ module LightResizer
|
|
3
3
|
class Middleware
|
4
4
|
class Resizer
|
5
5
|
|
6
|
-
def resize(dimensions, original_path, resize_path, crop)
|
6
|
+
def resize(dimensions, original_path, resize_path, crop, extension, convert)
|
7
7
|
check_resized_dir(resize_path)
|
8
|
-
store_image(dimensions, original_path, resize_path, crop)
|
8
|
+
store_image(dimensions, original_path, resize_path, crop, extension)
|
9
9
|
end
|
10
10
|
|
11
11
|
private
|
@@ -15,27 +15,34 @@ module LightResizer
|
|
15
15
|
#todo permissions?
|
16
16
|
end
|
17
17
|
|
18
|
-
def store_image(dimensions, original_path, resize_path, crop)
|
19
|
-
|
18
|
+
def store_image(dimensions, original_path, resize_path, crop, extension)
|
19
|
+
original_path += '.*'
|
20
|
+
@image = MiniMagick::Image.open Dir[original_path].first
|
20
21
|
|
22
|
+
@extension = extension[1..-1]
|
23
|
+
|
24
|
+
# WARNING: DO NOT CHANGE COMMANDS ORDER FOR @IMAGE OBJECT
|
25
|
+
# realy, don't do this
|
26
|
+
@image.format(@extension)
|
21
27
|
crop ? set_crop_options(dimensions) : set_options(dimensions)
|
22
28
|
|
23
|
-
@image.write resize_path
|
29
|
+
@image.write (resize_path + extension)
|
24
30
|
end
|
25
31
|
|
26
32
|
def set_options(dimensions)
|
27
33
|
@image.combine_options do |c|
|
28
|
-
c.
|
29
|
-
c.
|
34
|
+
c.adaptive_resize dimensions
|
35
|
+
c.add_command 'quality', '0'
|
30
36
|
c.add_command 'extent', dimensions
|
31
37
|
c.gravity 'center'
|
38
|
+
c.background 'transparent'
|
32
39
|
end
|
33
40
|
end
|
34
41
|
|
35
42
|
def set_crop_options(dimensions)
|
36
43
|
@image.combine_options do |c|
|
37
|
-
c.
|
38
|
-
c.
|
44
|
+
c.adaptive_resize dimensions+'^'
|
45
|
+
c.add_command 'quality', '0'
|
39
46
|
c.add_command 'extent', dimensions
|
40
47
|
c.gravity 'center'
|
41
48
|
end
|
@@ -36,7 +36,7 @@ module LightResizer
|
|
36
36
|
|
37
37
|
def resize
|
38
38
|
unless @image_loader.resized_image_exist?
|
39
|
-
@resizer.resize(@path.dimensions, @image_loader.original_path, @image_loader.resize_path, @path.crop_path?)
|
39
|
+
@resizer.resize(@path.dimensions, @image_loader.original_path, @image_loader.resize_path, @path.crop_path?, @path.image_extension, @path.convert_path?)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
data/light_resizer.gemspec
CHANGED
Binary file
|
@@ -1,27 +1,37 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe LightResizer::Middleware do
|
4
|
-
let(:app) {
|
4
|
+
let(:app) { double("app") }
|
5
5
|
let(:resizer) { described_class.new(app, ROOT, 'fixtures') }
|
6
6
|
let(:env) { { 'PATH_INFO' => resize_relative_path} }
|
7
7
|
|
8
|
-
let(:resize_relative_path) { '/light_resize/150x100_avatar.png' } #todo depends for many constant
|
9
8
|
let(:resize_full_path) { File.join(ROOT, 'fixtures', resize_relative_path) }
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
context 'image path' do
|
11
|
+
after(:each) do
|
12
|
+
File.delete(resize_full_path)
|
13
|
+
end
|
14
|
+
let(:resize_relative_path) { '/light_resize/200x100_sample.png' } #todo depends for many constant
|
14
15
|
|
15
|
-
|
16
|
-
|
16
|
+
it 'should approve resize request' do
|
17
|
+
resizer.call(env)
|
17
18
|
|
18
|
-
|
19
|
-
|
19
|
+
expect(resizer.resize_request?).to be_true
|
20
|
+
end
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
it 'should create resized image' do
|
23
|
+
expect(File.exist?(resize_full_path)).to be_false
|
24
|
+
resizer.call(env)
|
25
|
+
expect(File.exist?(resize_full_path)).to be_true
|
26
|
+
end
|
25
27
|
end
|
26
28
|
|
29
|
+
context 'non image path' do
|
30
|
+
let(:resize_relative_path) { 'some/other/path' }
|
31
|
+
|
32
|
+
it 'should call app with right environment' do
|
33
|
+
expect(app).to receive(:call).with(env)
|
34
|
+
resizer.call(env)
|
35
|
+
end
|
36
|
+
end
|
27
37
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,18 +1,12 @@
|
|
1
1
|
require 'coveralls'
|
2
2
|
Coveralls.wear!
|
3
3
|
|
4
|
+
require 'pry'
|
5
|
+
|
4
6
|
require 'rack'
|
5
7
|
require 'light_resizer'
|
6
8
|
ROOT = File.dirname(__FILE__)
|
7
9
|
|
8
|
-
class AppEmulator
|
9
|
-
attr_reader :env
|
10
|
-
def call(env)
|
11
|
-
@env = env
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
10
|
# This file was generated by the `rspec --init` command. Conventionally, all
|
17
11
|
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
18
12
|
# Require this file using `require "spec_helper"` to ensure that it is only
|
@@ -4,7 +4,7 @@ describe LightResizer::ImageLoader::OriginalImage do
|
|
4
4
|
|
5
5
|
let(:root_dir) { File.join(ROOT, 'fixtures') }
|
6
6
|
let(:store_dir) { '/some/dir' }
|
7
|
-
let(:filename) { 'image
|
7
|
+
let(:filename) { 'image' }
|
8
8
|
let(:image_full_path) { File.join(root_dir, store_dir, filename) }
|
9
9
|
let(:original_image) { described_class.new root_dir }
|
10
10
|
|
@@ -12,7 +12,9 @@ describe LightResizer::Middleware::Path do
|
|
12
12
|
|
13
13
|
it { expect(path.image_path?).to be_true }
|
14
14
|
|
15
|
-
it { expect(path.image_path).to eq('/some_dir/image
|
15
|
+
it { expect(path.image_path).to eq('/some_dir/image') }
|
16
|
+
|
17
|
+
it { expect(path.image_extension).to eq('.png') }
|
16
18
|
|
17
19
|
it { expect(path.dimensions).to eq('150x150') }
|
18
20
|
|
@@ -22,16 +24,20 @@ describe LightResizer::Middleware::Path do
|
|
22
24
|
|
23
25
|
context 'resize with crop' do
|
24
26
|
before(:each) do
|
25
|
-
path.request_path = '/some_dir/light_resize/
|
27
|
+
path.request_path = '/some_dir/light_resize/150x150_crop_convert_image.png'
|
26
28
|
end
|
27
29
|
|
28
30
|
it { expect(path.crop_path?).to be_true }
|
29
31
|
|
30
|
-
it { expect(path.
|
32
|
+
it { expect(path.convert_path?).to be_true }
|
33
|
+
|
34
|
+
it { expect(path.image_path).to eq('/some_dir/image') }
|
35
|
+
|
36
|
+
it { expect(path.image_extension).to eq('.png') }
|
31
37
|
|
32
38
|
it { expect(path.dimensions).to eq('150x150') }
|
33
39
|
|
34
|
-
it { expect(path.prefix).to eq('
|
40
|
+
it { expect(path.prefix).to eq('150x150_crop_convert') }
|
35
41
|
end
|
36
42
|
|
37
43
|
context 'wrong path methods' do
|
@@ -3,30 +3,30 @@ require 'spec_helper'
|
|
3
3
|
describe LightResizer::Middleware::Resizer do
|
4
4
|
|
5
5
|
let(:resizer) { described_class.new }
|
6
|
-
let(:image_path) { File.join(ROOT, 'fixtures', '
|
6
|
+
let(:image_path) { File.join(ROOT, 'fixtures', 'sample') }
|
7
7
|
let(:resize_image_path) { File.join(ROOT, 'fixtures', 'light_resize', image_name) }
|
8
8
|
|
9
9
|
context 'resize' do
|
10
10
|
|
11
11
|
after do
|
12
|
-
File.delete( resize_image_path )
|
12
|
+
File.delete( resize_image_path + '.png' )
|
13
13
|
end
|
14
14
|
|
15
15
|
context 'without crop' do
|
16
|
-
let(:image_name) { '
|
16
|
+
let(:image_name) { '50x50_sample' }
|
17
17
|
|
18
18
|
it 'should create resized image file' do
|
19
|
-
resizer.resize('50x50', image_path, resize_image_path, false)
|
20
|
-
expect(File.exist?(resize_image_path)).to eq(true)
|
19
|
+
resizer.resize('50x50', image_path, resize_image_path, false, '.png', true)
|
20
|
+
expect(File.exist?(resize_image_path+'.png')).to eq(true)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
context 'with crop' do
|
25
|
-
let(:image_name) { '
|
26
|
-
|
25
|
+
let(:image_name) { '50x50_crop_convert_sample' }
|
26
|
+
|
27
27
|
it 'should create resized image file' do
|
28
|
-
resizer.resize('50x50', image_path, resize_image_path, true)
|
29
|
-
expect(File.exist?(resize_image_path)).to eq(true)
|
28
|
+
resizer.resize('50x50', image_path, resize_image_path, true, '.png', true)
|
29
|
+
expect(File.exist?(resize_image_path+'.png')).to eq(true)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: light_resizer
|
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
|
- Denis Sergienko
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-06-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mini_magick
|
@@ -95,6 +95,20 @@ dependencies:
|
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: pry
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
98
112
|
description: ''
|
99
113
|
email:
|
100
114
|
- olol.toor@gmail.com
|
@@ -121,7 +135,7 @@ files:
|
|
121
135
|
- lib/light_resizer/middleware/resizer.rb
|
122
136
|
- lib/light_resizer/version.rb
|
123
137
|
- light_resizer.gemspec
|
124
|
-
- spec/fixtures/
|
138
|
+
- spec/fixtures/sample.jpg
|
125
139
|
- spec/integration/middleware_spec.rb
|
126
140
|
- spec/spec_helper.rb
|
127
141
|
- spec/unit/image_loader_original_spec.rb
|
@@ -154,7 +168,7 @@ signing_key:
|
|
154
168
|
specification_version: 4
|
155
169
|
summary: Tiny rack middleware for image resizing.
|
156
170
|
test_files:
|
157
|
-
- spec/fixtures/
|
171
|
+
- spec/fixtures/sample.jpg
|
158
172
|
- spec/integration/middleware_spec.rb
|
159
173
|
- spec/spec_helper.rb
|
160
174
|
- spec/unit/image_loader_original_spec.rb
|
data/spec/fixtures/avatar.png
DELETED
Binary file
|