middleman-simple-thumbnailer 0.0.7 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a029a01dea0919da0ca8df40c240028c7e4ba594
4
- data.tar.gz: ed75c2c1c1c6b4cf71ccc05ee73efc5945829aac
3
+ metadata.gz: 970a34916a98e53b27b650a4d97725a822911abf
4
+ data.tar.gz: 4fc0641da7aa4a9dda676dc7b17549570cdf3329
5
5
  SHA512:
6
- metadata.gz: 3151a7706156e5352e11911f8a7618ff4b4028506d0cbe3054452d228fe7515d19afa921b0fbca1528bf1c7e1c2fe6f7357e1b625dc7d272baf027a086b28320
7
- data.tar.gz: 031831ec30df21887ca84d915da7dfcd58e5f43c4b1f445beda70616c4fe9678b26d7110c07511b4143cc111c589cb95ec4ac829f40cc8e6ae138ddb398bcd97
6
+ metadata.gz: 7352c9a9a36745cd7fa2b738220b025fe8517e7bea518bdc74d6ea38214debc732010294965d70b2e7f53b3d0ee720fd5e482ae6dfa3ff5ea8e55d2c40f6a029
7
+ data.tar.gz: 4e1925a962cd47b6e55edbf906cc9ca367f548697b670bb8bec33a8ce590acce7f8bab34758e8e97c45fb754e29f4e4f24dce3c27a33868484a6d814d6320e8d
data/.gitignore CHANGED
@@ -3,3 +3,4 @@
3
3
  Gemfile.lock
4
4
  pkg/*
5
5
  .rvmrc
6
+ tmp
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ script:
2
+ - cucumber
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - ruby-head
7
+ notifications:
8
+ email:
9
+ on_success: always
10
+ on_failure: always
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2014-2015 Jakub Niewczas
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- Middleman Simple Thumbnailer
1
+ Middleman Simple Thumbnailer [![Build Status](https://travis-ci.org/kubenstein/middleman-simple-thumbnailer.png?branch=master)](https://travis-ci.org/kubenstein/middleman-simple-thumbnailer)
2
2
  =============
3
3
 
4
4
  Middleman Simple Thumbnailer is a [Middleman](http://middlemanapp.com/) extension that allows you to create image thumbnails by providing `resize_to` option to image_tag helper.
@@ -13,6 +13,12 @@ gem 'middleman-simple-thumbnailer'
13
13
 
14
14
  Usage
15
15
  -----
16
+ Enable the extension in `config.rb`:
17
+ ```
18
+ activate :middleman_simple_thumbnailer
19
+ ```
20
+
21
+ And modify your `image_tag`'s by adding `resize_to` parameter:
16
22
  ```
17
23
  = image_tag image, resize_to: '50x50', class: 'thumbnail'
18
24
  ```
@@ -22,7 +28,6 @@ Build/Development modes
22
28
  During development thumbnails will be created on fly and presented as a base64 strings.
23
29
  During build thumbnails will be created as normal files and stored in same dir as their originals.
24
30
 
25
- TODO
31
+ LICENSE
26
32
  -----
27
- - add caching mechanizm in development mode
28
- - add tests
33
+ MIT
@@ -0,0 +1,21 @@
1
+ Feature: Caching thumbnails in development
2
+
3
+ Scenario: Cached thumbnails are created
4
+ Given the Server is running at "basic-app"
5
+ And there is no cache directory yet
6
+ When I go to "/page-with-images-to-resize.html"
7
+ Then the cache directory should exist with the following files
8
+ | images/original.10x10gt.eb4e78fd2554225b2.jpg |
9
+ | images/original.5x5.eb4e78fd2554225b2.jpg |
10
+
11
+ Scenario: Cached thumbnails are used, if present
12
+ Given the Server is running at "cached-thumbnails"
13
+ When I go to "/page-with-images-to-resize.html"
14
+ Then I should see base64ed data of the cached thumbnails
15
+
16
+ Scenario: Manually setting the cache directory
17
+ Given the Server is running at "custom-cache-dir"
18
+ When I go to "/page-with-images-to-resize.html"
19
+ Then the cache directory should exist at "tmp/xxx" with the following files
20
+ | images/original.10x10.eb4e78fd2554225b2.jpg |
21
+ | images/original.5x5.eb4e78fd2554225b2.jpg |
@@ -0,0 +1,27 @@
1
+ Feature: Generate image thumbnails
2
+
3
+ Scenario: Preserve default image_tag behaviour if no resize_to param is given
4
+ Given the Server is running at "basic-app"
5
+ When I go to "/page-with-untouched-image.html"
6
+ Then I should see '<img src="/images/original.jpg" />'
7
+
8
+ Scenario: Preserve default image_tag behaviour after build if no resize_to param was given
9
+ Given a fixture app "basic-app"
10
+ And a successfully built app at "basic-app"
11
+ When I cd to "build"
12
+ Then the file "page-with-untouched-image.html" should contain '<img src="/images/original.jpg" />'
13
+
14
+ Scenario: Generate base64 thumbnail of image with resize_to param given
15
+ Given the Server is running at "basic-app"
16
+ When I go to "/page-with-images-to-resize.html"
17
+ Then I should see base64ed thumbnails of the images
18
+
19
+ Scenario: After build server resized images
20
+ Given a fixture app "basic-app"
21
+ And a successfully built app at "basic-app"
22
+ When I cd to "build"
23
+ Then the following files should exist:
24
+ | images/original.10x10gt.jpg |
25
+ | images/original.5x5.jpg |
26
+ And the file "page-with-images-to-resize.html" should contain '<img class="image-resized-to10x10" src="/images/original.10x10gt.jpg" />'
27
+ And the file "page-with-images-to-resize.html" should contain '<img class="image-resized-to5x5" src="/images/original.5x5.jpg" />'
@@ -0,0 +1,4 @@
1
+ PROJECT_ROOT_PATH = File.expand_path("#{__FILE__}/../../../")
2
+ require 'middleman-core'
3
+ require 'middleman-core/step_definitions'
4
+ require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-simple-thumbnailer')
@@ -0,0 +1,27 @@
1
+ Given(/^there is no cache directory yet$/) do
2
+ remove_dir MiddlemanSimpleThumbnailer::Extension.config.cache_dir
3
+ end
4
+
5
+ Then(/^I should see base64ed thumbnails of the images$/) do
6
+ image10x10 = "<img class=\"image-resized-to10x10\" src=\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlu\nbwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMg\nc1JHQgAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAA\nADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAAC\nGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRk\nAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRt\nZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAA\nCAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXds\nZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2\nNi0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAA\nAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABv\nogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+E\nAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAA\nAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5\nNjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAA\nAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAt\nIHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJl\nbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAA\nAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0y\nLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4A\nEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAA\nAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3Vy\ndgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBU\nAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEA\nxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFF\nAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB\n8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLB\nAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oD\nxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTw\nBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgG\nWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gfl\nB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJ\nugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuw\nC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N\n+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBh\nEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMT\nIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYD\nFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZ\nRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyj\nHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEg\nbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRN\nJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEo\noijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0M\nLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox\n8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbp\nNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8\nZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHu\nQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BI\nBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4l\nTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U\n21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuV\nW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi\n8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpI\nap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfBy\nS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pG\neqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC\n9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuW\ni/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU\n9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5A\nnq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+Co\nUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJL\nssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9\nFb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/\nyD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHT\nRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i\n3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq\n5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb7\n94r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t////2wBDAAgFBgcGBQgH\nBgcJCAgJDBMMDAsLDBgREg4THBgdHRsYGxofIywlHyEqIRobJjQnKi4vMTIx\nHiU2OjYwOiwwMTD/2wBDAQgJCQwKDBcMDBcwIBsgMDAwMDAwMDAwMDAwMDAw\nMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDD/wAARCAAFAAoD\nAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAwf/xAAeEAABBAEFAAAA\nAAAAAAAAAAACAAEDEQQSISIyYf/EABYBAQEBAAAAAAAAAAAAAAAAAAACA//E\nABcRAQEBAQAAAAAAAAAAAAAAAAAxARH/2gAMAwEAAhEDEQA/AJDhyDCBCIMd\nFXN78W0icBJmyjIQ6Q2d26p0f//Z\n\" />"
7
+ image5x5 = "<img class=\"image-resized-to5x5\" src=\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlu\nbwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMg\nc1JHQgAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAA\nADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAAC\nGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRk\nAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRt\nZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAA\nCAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXds\nZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2\nNi0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAA\nAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABv\nogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+E\nAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAA\nAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5\nNjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAA\nAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAt\nIHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJl\nbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAA\nAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0y\nLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4A\nEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAA\nAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3Vy\ndgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBU\nAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEA\nxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFF\nAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB\n8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLB\nAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oD\nxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTw\nBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgG\nWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gfl\nB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJ\nugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuw\nC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N\n+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBh\nEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMT\nIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYD\nFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZ\nRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyj\nHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEg\nbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRN\nJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEo\noijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0M\nLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox\n8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbp\nNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8\nZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHu\nQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BI\nBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4l\nTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U\n21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuV\nW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi\n8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpI\nap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfBy\nS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pG\neqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC\n9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuW\ni/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU\n9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5A\nnq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+Co\nUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJL\nssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9\nFb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/\nyD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHT\nRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i\n3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq\n5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb7\n94r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t////2wBDAAgFBgcGBQgH\nBgcJCAgJDBMMDAsLDBgREg4THBgdHRsYGxofIywlHyEqIRobJjQnKi4vMTIx\nHiU2OjYwOiwwMTD/2wBDAQgJCQwKDBcMDBcwIBsgMDAwMDAwMDAwMDAwMDAw\nMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDD/wAARCAACAAUD\nAREAAhEBAxEB/8QAFAABAAAAAAAAAAAAAAAAAAAAB//EABkQAQACAwAAAAAA\nAAAAAAAAAAECAwARMf/EABUBAQEAAAAAAAAAAAAAAAAAAAID/8QAFREBAQAA\nAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhEDEQA/ACFkxoqIqGnmWov/2Q==\n\" />"
8
+ step %Q{I should see '#{image10x10}'}
9
+ step %Q{I should see '#{image5x5}'}
10
+ end
11
+
12
+ Then(/^the cache directory should exist (?:at "([^"]+)" )?with the following files$/) do |cache_dir, files|
13
+ cache_dir ||= MiddlemanSimpleThumbnailer::Extension.config.cache_dir
14
+ check_directory_presence([cache_dir], true)
15
+ cd cache_dir
16
+ check_file_presence(files.raw.map{|file_row| file_row[0]}, true)
17
+ end
18
+
19
+ Then(/^I should see base64ed data of the cached thumbnails$/) do
20
+ # data that won't ever be generated by resizing an actual image
21
+ cached_10x10_data = "foo"
22
+ cached_5x5_data = "bar"
23
+ image10x10 = "<img class=\"image-resized-to10x10\" src=\"data:image/jpeg;base64,#{Base64.encode64(cached_10x10_data)}\" />"
24
+ image5x5 = "<img class=\"image-resized-to5x5\" src=\"data:image/jpeg;base64,#{Base64.encode64(cached_5x5_data)}\" />"
25
+ step %Q{I should see '#{image10x10}'}
26
+ step %Q{I should see '#{image5x5}'}
27
+ end
@@ -0,0 +1 @@
1
+ activate :middleman_simple_thumbnailer
@@ -0,0 +1,10 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Hello World</title>
5
+ </head>
6
+ <body>
7
+ <%= image_tag 'original.jpg', resize_to: '10x10>', class: 'image-resized-to10x10' %>
8
+ <%= image_tag 'original.jpg', resize_to: '5x5', class: 'image-resized-to5x5' %>
9
+ </body>
10
+ </html>
@@ -0,0 +1,9 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Hello World</title>
5
+ </head>
6
+ <body>
7
+ <%= image_tag 'original.jpg' %>
8
+ </body>
9
+ </html>
@@ -0,0 +1 @@
1
+ activate :middleman_simple_thumbnailer
@@ -0,0 +1,10 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Hello World</title>
5
+ </head>
6
+ <body>
7
+ <%= image_tag 'original.jpg', resize_to: '10x10', class: 'image-resized-to10x10' %>
8
+ <%= image_tag 'original.jpg', resize_to: '5x5', class: 'image-resized-to5x5' %>
9
+ </body>
10
+ </html>
@@ -0,0 +1,3 @@
1
+ activate :middleman_simple_thumbnailer do |thumbnails|
2
+ thumbnails.cache_dir = 'tmp/xxx'
3
+ end
@@ -0,0 +1,10 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Hello World</title>
5
+ </head>
6
+ <body>
7
+ <%= image_tag 'original.jpg', resize_to: '10x10', class: 'image-resized-to10x10' %>
8
+ <%= image_tag 'original.jpg', resize_to: '5x5', class: 'image-resized-to5x5' %>
9
+ </body>
10
+ </html>
@@ -8,6 +8,8 @@
8
8
  module MiddlemanSimpleThumbnailer
9
9
  class Extension < Middleman::Extension
10
10
 
11
+ option :cache_dir, 'tmp/simple-thumbnailer-cache', 'Directory (relative to project root) for cached thumbnails.'
12
+
11
13
  def initialize(app, options_hash={}, &block)
12
14
  super
13
15
  app.after_build do |builder|
@@ -18,6 +20,10 @@ module MiddlemanSimpleThumbnailer
18
20
  end
19
21
  end
20
22
 
23
+ def after_configuration
24
+ MiddlemanSimpleThumbnailer::Image.options = options
25
+ end
26
+
21
27
  helpers do
22
28
 
23
29
  def image_tag(path, options={})
@@ -1,6 +1,10 @@
1
+ require "digest"
2
+
1
3
  module MiddlemanSimpleThumbnailer
2
4
  class Image
3
5
  @@all_objects = []
6
+ @@options = nil
7
+
4
8
  attr_accessor :img_path, :middleman_config, :resize_to
5
9
 
6
10
  def initialize(img_path, middleman_config)
@@ -19,12 +23,14 @@ module MiddlemanSimpleThumbnailer
19
23
  end
20
24
 
21
25
  def base64_data
22
- Base64.encode64(image.to_blob)
26
+ Base64.encode64(File.read(cached_resized_img_abs_path))
23
27
  end
24
28
 
25
29
  def resize!(resize_to)
26
30
  self.resize_to = resize_to
31
+ return if cached_thumbnail_available?
27
32
  image.resize(resize_to)
33
+ save_cached_thumbnail
28
34
  end
29
35
 
30
36
  def save!
@@ -34,6 +40,10 @@ module MiddlemanSimpleThumbnailer
34
40
  def self.all_objects
35
41
  @@all_objects
36
42
  end
43
+
44
+ def self.options=(options)
45
+ @@options = options
46
+ end
37
47
 
38
48
 
39
49
  private
@@ -42,12 +52,17 @@ module MiddlemanSimpleThumbnailer
42
52
  @image ||= MiniMagick::Image.open(abs_path)
43
53
  end
44
54
 
55
+ def image_checksum
56
+ @image_checksum ||= Digest::SHA2.file(abs_path).hexdigest[0..16]
57
+ end
58
+
45
59
  def image_name
46
60
  File.basename(abs_path)
47
61
  end
48
62
 
49
63
  def resized_image_name
50
- image_name.split('.').tap { |a| a.insert(-2, resize_to) }.join('.')
64
+ image_name.split('.').tap { |a| a.insert(-2, resize_to) }.join('.') # add resize_to sufix
65
+ .gsub(/[%@!<>]/, '>' => 'gt', '<' => 'lt') # sanitize file name
51
66
  end
52
67
 
53
68
  def abs_path
@@ -62,6 +77,21 @@ module MiddlemanSimpleThumbnailer
62
77
  File.join(build_dir, middleman_abs_path).gsub(image_name, resized_image_name)
63
78
  end
64
79
 
80
+ def cached_resized_img_abs_path
81
+ File.join(cache_dir, middleman_abs_path).gsub(image_name, resized_image_name).split('.').tap { |a|
82
+ a.insert(-2, image_checksum)
83
+ }.join('.')
84
+ end
85
+
86
+ def cached_thumbnail_available?
87
+ File.exist?(cached_resized_img_abs_path)
88
+ end
89
+
90
+ def save_cached_thumbnail
91
+ FileUtils.mkdir_p(File.dirname(cached_resized_img_abs_path))
92
+ image.write(cached_resized_img_abs_path)
93
+ end
94
+
65
95
  def source_dir
66
96
  middleman_config[:source]
67
97
  end
@@ -74,5 +104,8 @@ module MiddlemanSimpleThumbnailer
74
104
  middleman_config[:build_dir]
75
105
  end
76
106
 
107
+ def cache_dir
108
+ @@options.cache_dir
109
+ end
77
110
  end
78
111
  end
@@ -1,3 +1,3 @@
1
1
  module MiddlemanSimpleThumbnailer
2
- VERSION = '0.0.7'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -5,17 +5,21 @@ require 'middleman-simple-thumbnailer/version'
5
5
  Gem::Specification.new do |s|
6
6
  s.name = 'middleman-simple-thumbnailer'
7
7
  s.version = MiddlemanSimpleThumbnailer::VERSION
8
- s.authors = ['kubenstein']
9
- s.email = ['kubenstein@gmail.com']
8
+ s.authors = ['Jakub Niewczas']
9
+ s.email = ['niewczas.jakub@gmail.com']
10
10
  s.homepage = 'https://github.com/kubenstein/middleman-simple-thumbnailer'
11
11
  s.license = 'MIT'
12
12
  s.summary = %q{Middleman extension that allows you to create image thumbnails by providing resize_to option to image_tag helper}
13
13
  s.description = %q{Middleman extension that allows you to create image thumbnails by providing resize_to option to image_tag helper}
14
14
 
15
15
  s.files = `git ls-files`.split("\n")
16
- s.test_files = `git ls-files -- {test,spec,features}/*`.split('\n')
16
+ s.test_files = `git ls-files -- {fixtures,features}/*`.split("\n")
17
17
  s.require_paths = ['lib']
18
18
 
19
- s.add_runtime_dependency 'middleman', '~> 3'
19
+ s.add_runtime_dependency 'middleman-core', '~> 3'
20
20
  s.add_runtime_dependency 'mini_magick', '~> 4'
21
+
22
+ s.add_development_dependency 'rake', '~> 10'
23
+ s.add_development_dependency 'aruba', '~>0.5.4'
24
+ s.add_development_dependency 'cucumber', '~> 1.3'
21
25
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-simple-thumbnailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - kubenstein
7
+ - Jakub Niewczas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-23 00:00:00.000000000 Z
11
+ date: 2015-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: middleman
14
+ name: middleman-core
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ~>
@@ -38,18 +38,78 @@ dependencies:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '10'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: aruba
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.5.4
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 0.5.4
69
+ - !ruby/object:Gem::Dependency
70
+ name: cucumber
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '1.3'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '1.3'
41
83
  description: Middleman extension that allows you to create image thumbnails by providing
42
84
  resize_to option to image_tag helper
43
85
  email:
44
- - kubenstein@gmail.com
86
+ - niewczas.jakub@gmail.com
45
87
  executables: []
46
88
  extensions: []
47
89
  extra_rdoc_files: []
48
90
  files:
49
91
  - .gitignore
92
+ - .travis.yml
50
93
  - Gemfile
94
+ - MIT-LICENSE
51
95
  - README.md
52
96
  - Rakefile
97
+ - features/caching_thumbnails_in_development.feature
98
+ - features/generate_image_thumbnails.feature
99
+ - features/support/env.rb
100
+ - features/support/image_thumbnails_steps.rb
101
+ - fixtures/basic-app/config.rb
102
+ - fixtures/basic-app/source/images/original.jpg
103
+ - fixtures/basic-app/source/page-with-images-to-resize.html.erb
104
+ - fixtures/basic-app/source/page-with-untouched-image.html.erb
105
+ - fixtures/cached-thumbnails/config.rb
106
+ - fixtures/cached-thumbnails/source/images/original.jpg
107
+ - fixtures/cached-thumbnails/source/page-with-images-to-resize.html.erb
108
+ - fixtures/cached-thumbnails/tmp/simple-thumbnailer-cache/images/original.10x10.eb4e78fd2554225b2.jpg
109
+ - fixtures/cached-thumbnails/tmp/simple-thumbnailer-cache/images/original.5x5.eb4e78fd2554225b2.jpg
110
+ - fixtures/custom-cache-dir/config.rb
111
+ - fixtures/custom-cache-dir/source/images/original.jpg
112
+ - fixtures/custom-cache-dir/source/page-with-images-to-resize.html.erb
53
113
  - lib/middleman-simple-thumbnailer.rb
54
114
  - lib/middleman-simple-thumbnailer/extension.rb
55
115
  - lib/middleman-simple-thumbnailer/image.rb
@@ -75,9 +135,25 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
135
  version: '0'
76
136
  requirements: []
77
137
  rubyforge_project:
78
- rubygems_version: 2.4.5
138
+ rubygems_version: 2.4.4
79
139
  signing_key:
80
140
  specification_version: 4
81
141
  summary: Middleman extension that allows you to create image thumbnails by providing
82
142
  resize_to option to image_tag helper
83
- test_files: []
143
+ test_files:
144
+ - features/caching_thumbnails_in_development.feature
145
+ - features/generate_image_thumbnails.feature
146
+ - features/support/env.rb
147
+ - features/support/image_thumbnails_steps.rb
148
+ - fixtures/basic-app/config.rb
149
+ - fixtures/basic-app/source/images/original.jpg
150
+ - fixtures/basic-app/source/page-with-images-to-resize.html.erb
151
+ - fixtures/basic-app/source/page-with-untouched-image.html.erb
152
+ - fixtures/cached-thumbnails/config.rb
153
+ - fixtures/cached-thumbnails/source/images/original.jpg
154
+ - fixtures/cached-thumbnails/source/page-with-images-to-resize.html.erb
155
+ - fixtures/cached-thumbnails/tmp/simple-thumbnailer-cache/images/original.10x10.eb4e78fd2554225b2.jpg
156
+ - fixtures/cached-thumbnails/tmp/simple-thumbnailer-cache/images/original.5x5.eb4e78fd2554225b2.jpg
157
+ - fixtures/custom-cache-dir/config.rb
158
+ - fixtures/custom-cache-dir/source/images/original.jpg
159
+ - fixtures/custom-cache-dir/source/page-with-images-to-resize.html.erb