middleman-simple-thumbnailer 1.0.2 → 1.4.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.
Files changed (65) hide show
  1. checksums.yaml +5 -5
  2. data/.devcontainer/Dockerfile +20 -0
  3. data/.devcontainer/devcontainer.json +35 -0
  4. data/.github/workflows/ci.yml +22 -0
  5. data/.gitignore +4 -0
  6. data/README.md +84 -12
  7. data/config/cucumber.yml +1 -0
  8. data/features/caching_thumbnails_in_development.feature +29 -1
  9. data/features/generate_image_thumbnails.feature +19 -5
  10. data/features/generate_image_thumbnails_image_path.feature +44 -0
  11. data/features/generate_image_thumbnails_relative_assets.feature +43 -0
  12. data/features/generate_new_data_file.feature +21 -0
  13. data/features/given_data_file.feature +30 -0
  14. data/features/support/image_thumbnails_steps.rb +89 -11
  15. data/fixtures/basic-app-data-file-generate/config.rb +1 -0
  16. data/fixtures/basic-app-data-file-generate/source/images/original.jpg +0 -0
  17. data/fixtures/basic-app-data-file-generate/source/page-with-images-to-resize.html.erb +10 -0
  18. data/fixtures/basic-app-data-file-generate/source/page-with-untouched-image.html.erb +9 -0
  19. data/fixtures/basic-app-data-file/config.rb +1 -0
  20. data/fixtures/basic-app-data-file/data/simple_thumbnailer.yml +5 -0
  21. data/fixtures/basic-app-data-file/source/images/original.jpg +0 -0
  22. data/fixtures/basic-app-data-file/source/page-with-images-to-resize.html.erb +10 -0
  23. data/fixtures/basic-app-data-file/source/page-with-untouched-image.html.erb +9 -0
  24. data/fixtures/basic-app-data-file/source/sitemap.html.erb +5 -0
  25. data/fixtures/basic-app-image-path-use-cache/config.rb +1 -0
  26. data/fixtures/basic-app-image-path-use-cache/source/images/original.jpg +0 -0
  27. data/fixtures/basic-app-image-path-use-cache/source/page-with-images-to-resize.html.erb +16 -0
  28. data/fixtures/basic-app-image-path-use-cache/source/page-with-untouched-image.html.erb +12 -0
  29. data/fixtures/basic-app-image-path/config.rb +1 -0
  30. data/fixtures/basic-app-image-path/source/images/original.jpg +0 -0
  31. data/fixtures/basic-app-image-path/source/page-with-images-to-resize.html.erb +16 -0
  32. data/fixtures/basic-app-image-path/source/page-with-untouched-image.html.erb +12 -0
  33. data/fixtures/basic-app-no-resize/config.rb +1 -0
  34. data/fixtures/basic-app-no-resize/source/images/original.jpg +0 -0
  35. data/fixtures/basic-app-no-resize/source/page-with-untouched-image.html.erb +9 -0
  36. data/fixtures/basic-app-relative-assets-use-cache/config.rb +2 -0
  37. data/fixtures/basic-app-relative-assets-use-cache/source/images/original.jpg +0 -0
  38. data/fixtures/basic-app-relative-assets-use-cache/source/page-with-images-to-resize.html.erb +16 -0
  39. data/fixtures/basic-app-relative-assets-use-cache/source/page-with-untouched-image.html.erb +9 -0
  40. data/fixtures/basic-app-relative-assets/config.rb +2 -0
  41. data/fixtures/basic-app-relative-assets/source/images/original.jpg +0 -0
  42. data/fixtures/basic-app-relative-assets/source/page-with-images-to-resize.html.erb +16 -0
  43. data/fixtures/basic-app-relative-assets/source/page-with-untouched-image.html.erb +9 -0
  44. data/fixtures/basic-app-use-cache/config.rb +1 -0
  45. data/fixtures/basic-app-use-cache/source/images/original.jpg +0 -0
  46. data/fixtures/basic-app-use-cache/source/page-with-images-to-resize.html.erb +10 -0
  47. data/fixtures/basic-app-use-cache/source/page-with-untouched-image.html.erb +9 -0
  48. data/fixtures/basic-app/source/page-with-images-to-resize.html.erb +2 -2
  49. data/fixtures/basic-app/source/page-with-untouched-image.html.erb +1 -1
  50. data/fixtures/cached-thumbnails-use-cache/config.rb +1 -0
  51. data/fixtures/cached-thumbnails-use-cache/source/images/original.jpg +0 -0
  52. data/fixtures/cached-thumbnails-use-cache/source/page-with-images-to-resize.html.erb +10 -0
  53. data/fixtures/custom-cache-dir-use-cache/config.rb +3 -0
  54. data/fixtures/custom-cache-dir-use-cache/source/images/original.jpg +0 -0
  55. data/fixtures/custom-cache-dir-use-cache/source/page-with-images-to-resize.html.erb +10 -0
  56. data/lib/middleman-simple-thumbnailer.rb +4 -1
  57. data/lib/middleman-simple-thumbnailer/extension.rb +143 -17
  58. data/lib/middleman-simple-thumbnailer/image.rb +46 -37
  59. data/lib/middleman-simple-thumbnailer/image_store.rb +42 -0
  60. data/lib/middleman-simple-thumbnailer/rack.rb +42 -0
  61. data/lib/middleman-simple-thumbnailer/resource.rb +19 -0
  62. data/lib/middleman-simple-thumbnailer/version.rb +1 -1
  63. data/middleman-simple-thumbnailer.gemspec +8 -6
  64. metadata +104 -45
  65. data/.travis.yml +0 -10
@@ -1,36 +1,114 @@
1
- Given(/^there is no cache directory yet$/) do
2
- remove_dir MiddlemanSimpleThumbnailer::Extension.config.cache_dir
1
+ require 'base64'
2
+ require 'yaml'
3
+ require 'uri'
4
+
5
+ def calculate_resized_image_b64(resize_str)
6
+ base_image = MiniMagick::Image.open(File.expand_path("../../fixtures/basic-app/source/images/original.jpg", __dir__))
7
+ base_image.resize(resize_str)
8
+ Base64.strict_encode64(base_image.to_blob)
3
9
  end
4
10
 
11
+ image10x10 = "<img src=\"data:image/jpeg;base64,"+calculate_resized_image_b64("10x10>")+"\" class=\"image-resized-to10x10\" alt=\"Original.10x10gt\" />"
12
+
13
+ image5x5 = "<img src=\"data:image/jpeg;base64,"+calculate_resized_image_b64("5x5")+"\" class=\"image-resized-to5x5\" alt=\"Original.5x5\" />"
14
+
15
+ srcset20x20 = "<source srcset=\"data:image/jpeg;base64,"+calculate_resized_image_b64("20x20")+"\" media=\"(min-width: 900px)\">"
16
+
17
+ srcset15x15 = "<source srcset=\"data:image/jpeg;base64,"+calculate_resized_image_b64("15x15")+"\" media=\"(min-width: 900px)\">"
18
+
5
19
  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
20
  step %Q{I should see '#{image10x10}'}
9
21
  step %Q{I should see '#{image5x5}'}
10
22
  end
11
23
 
24
+ Then(/^I should see base64ed thumbnails and srcset of the images$/) do
25
+ step %Q{I should see '#{image10x10}'}
26
+ step %Q{I should see '#{image5x5}'}
27
+ step %Q{I should see '#{srcset20x20}'}
28
+ step %Q{I should see '#{srcset15x15}'}
29
+ end
30
+
31
+ Given(/^there is no cache directory yet$/) do
32
+ if directory? MiddlemanSimpleThumbnailer::Extension.config.cache_dir
33
+ remove MiddlemanSimpleThumbnailer::Extension.config.cache_dir
34
+ end
35
+ end
36
+
37
+
12
38
  Then(/^the cache directory should exist (?:at "([^"]+)" )?with the following files$/) do |cache_dir, files|
13
39
  cache_dir ||= MiddlemanSimpleThumbnailer::Extension.config.cache_dir
14
- check_directory_presence([cache_dir], true)
40
+ expect(cache_dir).to be_an_existing_directory
15
41
  cd cache_dir
16
- check_file_presence(files.raw.map{|file_row| file_row[0]}, true)
42
+ files.raw.map{|file_row| file_row[0]}.each { |f| expect(f).to be_an_existing_file }
17
43
  end
18
44
 
45
+ Then(/^I should see base64ed data of the cached thumbnails with image path$/) do
46
+ # data that won't ever be generated by resizing an actual image
47
+ cached_10x10_data = "foo"
48
+ cached_5x5_data = "bar"
49
+ cached_15x15_data = "hello"
50
+ cached_20x20_data = "world"
51
+ cachedimage10x10 = "<img src=\"data:image/jpeg;base64,#{Base64.strict_encode64(cached_10x10_data)}\" class=\"image-resized-to10x10\" />"
52
+ cachedimage5x5 = "<img src=\"data:image/jpeg;base64,#{Base64.strict_encode64(cached_5x5_data)}\" class=\"image-resized-to5x5\" />"
53
+ cachedsrcset20x20 = "<source srcset=\"data:image/jpeg;base64,#{Base64.strict_encode64(cached_20x20_data)}\" media=\"(min-width: 900px)\">"
54
+ cachedsrcset15x15 = "<source srcset=\"data:image/jpeg;base64,#{Base64.strict_encode64(cached_15x15_data)}\" media=\"(min-width: 900px)\">"
55
+ step %Q{I should see '#{cachedimage10x10}'}
56
+ step %Q{I should see '#{cachedimage5x5}'}
57
+ step %Q{I should see '#{cachedsrcset20x20}'}
58
+ step %Q{I should see '#{cachedsrcset15x15}'}
59
+ end
60
+
19
61
  Then(/^I should see base64ed data of the cached thumbnails$/) do
20
62
  # data that won't ever be generated by resizing an actual image
21
63
  cached_10x10_data = "foo"
22
64
  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}'}
65
+ cachedimage10x10 = "<img src=\"data:image/jpeg;base64,#{Base64.strict_encode64(cached_10x10_data)}\" class=\"image-resized-to10x10\" alt=\"\" />"
66
+ cachedimage5x5 = "<img src=\"data:image/jpeg;base64,#{Base64.strict_encode64(cached_5x5_data)}\" class=\"image-resized-to5x5\" alt=\"\" />"
67
+ step %Q{I should see '#{cachedimage10x10}'}
68
+ step %Q{I should see '#{cachedimage5x5}'}
27
69
  end
28
70
 
71
+ Then(/^I should see urls for the following cached thumbnails:$/) do |table|
72
+ table.hashes.each do |row|
73
+ isRelative = (row['relative'].to_s == "true")
74
+ urlPrefix = isRelative ? '' : '/'
75
+ if(row['type'] == "img")
76
+ imagedef = "<img src=\"#{urlPrefix}images/original.jpg?simple-thumbnailer=original.jpg%7C#{URI.encode_www_form_component(row['size'])}\" class=\"image-resized-to#{row['class']}\" alt=\"#{row['alt']}\" />"
77
+ else
78
+ imagedef = "<source srcset=\"#{urlPrefix}images/original.jpg?simple-thumbnailer=original.jpg%7C#{URI.encode_www_form_component(row['size'])}\" media=\"(min-width: 900px)\">"
79
+ end
80
+
81
+ step %Q{I should see '#{imagedef}'}
82
+ end
83
+ end
84
+
85
+
29
86
  Then(/^the following images should exist:$/) do |table|
30
87
  table.hashes.each do |row|
31
- in_current_dir do
88
+ cd('.') do
32
89
  image = MiniMagick::Image.open(row["filename"])
33
90
  expect(image.dimensions).to eq row["dimensions"].split("x").map(&:to_i)
34
91
  end
35
92
  end
36
93
  end
94
+
95
+ Then(/^file "([^"]+)" should contain the following data:$/) do |file, data|
96
+ expect(file).to be_an_existing_file
97
+ cd('.') do
98
+ specs = YAML.load_file(file)
99
+ expect(specs.length).to eq(data.hashes.length)
100
+ data.hashes.each do |hash|
101
+ expect(specs).to include(hash)
102
+ end
103
+ end
104
+ end
105
+
106
+ Then(/^the file "([^"]*)" should not contain '([^']*)'$/) do |file, partial_content|
107
+ expect(file).not_to have_file_content(Regexp.new(Regexp.escape(partial_content)), true)
108
+ end
109
+
110
+ When(/^I visit all images$/) do
111
+ page.body.scan(/\<img src=\"(.*?)\"[^>]*\>/) do |m|
112
+ visit(m[0]) if !m[0].start_with?('data:')
113
+ end
114
+ end
@@ -0,0 +1 @@
1
+ activate :middleman_simple_thumbnailer, use_specs: true
@@ -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, use_specs: true
@@ -0,0 +1,5 @@
1
+ ---
2
+ - path: original.jpg
3
+ resize_to: 10x10
4
+ - path: "*.jpg"
5
+ resize_to: 5x5
@@ -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-to10x10gt' %>
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,5 @@
1
+ <ul>
2
+ <% sitemap.resources.each do |page| %>
3
+ <li><a href="<%= "#{page.url}" %>"><%= "#{page.url}" %></a></li>
4
+ <% end %>
5
+ </ul>
@@ -0,0 +1 @@
1
+ activate :middleman_simple_thumbnailer, use_cache_dev: true
@@ -0,0 +1,16 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Hello World</title>
5
+ </head>
6
+ <body>
7
+ <picture>
8
+ <source srcset="<%= image_path 'original.jpg', resize_to: '20x20' %>" media="(min-width: 900px)">
9
+ <%= image_tag 'original.jpg', resize_to: '10x10>', class: 'image-resized-to10x10', alt: 'Original.10x10gt' %>
10
+ </picture>
11
+ <picture>
12
+ <source srcset="<%= image_path 'original.jpg', resize_to: '15x15' %>" media="(min-width: 900px)">
13
+ <%= image_tag 'original.jpg', resize_to: '5x5', class: 'image-resized-to5x5', alt: 'Original.5x5' %>
14
+ </picture>
15
+ </body>
16
+ </html>
@@ -0,0 +1,12 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Hello World</title>
5
+ </head>
6
+ <body>
7
+ <picture>
8
+ <source srcset="<%= image_path 'original.jpg' %>" media="(min-width: 900px)">
9
+ <%= image_tag 'original.jpg', alt: 'Original' %>
10
+ </picture>
11
+ </body>
12
+ </html>
@@ -0,0 +1 @@
1
+ activate :middleman_simple_thumbnailer
@@ -0,0 +1,16 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Hello World</title>
5
+ </head>
6
+ <body>
7
+ <picture>
8
+ <source srcset="<%= image_path 'original.jpg', resize_to: '20x20' %>" media="(min-width: 900px)">
9
+ <%= image_tag 'original.jpg', resize_to: '10x10>', class: 'image-resized-to10x10', alt: 'Original.10x10gt' %>
10
+ </picture>
11
+ <picture>
12
+ <source srcset="<%= image_path 'original.jpg', resize_to: '15x15' %>" media="(min-width: 900px)">
13
+ <%= image_tag 'original.jpg', resize_to: '5x5', class: 'image-resized-to5x5', alt: 'Original.5x5' %>
14
+ </picture>
15
+ </body>
16
+ </html>
@@ -0,0 +1,12 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Hello World</title>
5
+ </head>
6
+ <body>
7
+ <picture>
8
+ <source srcset="<%= image_path 'original.jpg' %>" media="(min-width: 900px)">
9
+ <%= image_tag 'original.jpg', alt: 'Original' %>
10
+ </picture>
11
+ </body>
12
+ </html>
@@ -0,0 +1 @@
1
+ activate :middleman_simple_thumbnailer
@@ -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', alt:"Original" %>
8
+ </body>
9
+ </html>
@@ -0,0 +1,2 @@
1
+ activate :middleman_simple_thumbnailer, use_cache_dev: true
2
+ activate :relative_assets
@@ -0,0 +1,16 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Hello World</title>
5
+ </head>
6
+ <body>
7
+ <picture>
8
+ <source srcset="<%= image_path 'original.jpg', resize_to: '20x20>'%>" media="(min-width: 900px)">
9
+ <%= image_tag 'original.jpg', resize_to: '10x10', class: 'image-resized-to10x10', alt:'Original.10x10gt' %>
10
+ </picture>
11
+ <picture>
12
+ <source srcset="<%= image_path 'original.jpg', resize_to: '15x15>'%>" media="(min-width: 900px)">
13
+ <%= image_tag 'original.jpg', resize_to: '5x5', class: 'image-resized-to5x5', alt:'Original.5x5' %>
14
+ </picture>
15
+ </body>
16
+ </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', alt: 'Original' %>
8
+ </body>
9
+ </html>
@@ -0,0 +1,2 @@
1
+ activate :middleman_simple_thumbnailer
2
+ activate :relative_assets
@@ -0,0 +1,16 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Hello World</title>
5
+ </head>
6
+ <body>
7
+ <picture>
8
+ <source srcset="<%= image_path 'original.jpg', resize_to: '20x20>'%>" media="(min-width: 900px)">
9
+ <%= image_tag 'original.jpg', resize_to: '10x10', class: 'image-resized-to10x10', alt:'Original.10x10gt' %>
10
+ </picture>
11
+ <picture>
12
+ <source srcset="<%= image_path 'original.jpg', resize_to: '15x15>'%>" media="(min-width: 900px)">
13
+ <%= image_tag 'original.jpg', resize_to: '5x5', class: 'image-resized-to5x5', alt:'Original.5x5' %>
14
+ </picture>
15
+ </body>
16
+ </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', alt: 'Original' %>
8
+ </body>
9
+ </html>
@@ -0,0 +1 @@
1
+ activate :middleman_simple_thumbnailer, use_cache_dev: true
@@ -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', alt: 'Original.10x10gt' %>
8
+ <%= image_tag 'original.jpg', resize_to: '5x5', class: 'image-resized-to5x5', alt: 'Original.5x5' %>
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', alt:"Original" %>
8
+ </body>
9
+ </html>
@@ -4,7 +4,7 @@
4
4
  <title>Hello World</title>
5
5
  </head>
6
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' %>
7
+ <%= image_tag 'original.jpg', resize_to: '10x10>', class: 'image-resized-to10x10', alt: 'Original.10x10gt' %>
8
+ <%= image_tag 'original.jpg', resize_to: '5x5', class: 'image-resized-to5x5', alt: 'Original.5x5' %>
9
9
  </body>
10
10
  </html>
@@ -4,6 +4,6 @@
4
4
  <title>Hello World</title>
5
5
  </head>
6
6
  <body>
7
- <%= image_tag 'original.jpg' %>
7
+ <%= image_tag 'original.jpg', alt:"Original" %>
8
8
  </body>
9
9
  </html>
@@ -0,0 +1 @@
1
+ activate :middleman_simple_thumbnailer, use_cache_dev: true
@@ -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, use_cache_dev: true 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>