discourse_image_optim 0.24.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.
Files changed (104) hide show
  1. checksums.yaml +7 -0
  2. data/.appveyor.yml +46 -0
  3. data/.gitignore +18 -0
  4. data/.rubocop.yml +110 -0
  5. data/.travis.yml +42 -0
  6. data/CHANGELOG.markdown +316 -0
  7. data/CONTRIBUTING.markdown +11 -0
  8. data/Gemfile +16 -0
  9. data/LICENSE.txt +20 -0
  10. data/README.markdown +358 -0
  11. data/Vagrantfile +38 -0
  12. data/bin/image_optim +28 -0
  13. data/image_optim.gemspec +34 -0
  14. data/lib/image_optim.rb +267 -0
  15. data/lib/image_optim/bin_resolver.rb +142 -0
  16. data/lib/image_optim/bin_resolver/bin.rb +115 -0
  17. data/lib/image_optim/bin_resolver/comparable_condition.rb +60 -0
  18. data/lib/image_optim/bin_resolver/error.rb +6 -0
  19. data/lib/image_optim/bin_resolver/simple_version.rb +31 -0
  20. data/lib/image_optim/cache.rb +72 -0
  21. data/lib/image_optim/cache_path.rb +16 -0
  22. data/lib/image_optim/cmd.rb +122 -0
  23. data/lib/image_optim/config.rb +219 -0
  24. data/lib/image_optim/configuration_error.rb +3 -0
  25. data/lib/image_optim/handler.rb +57 -0
  26. data/lib/image_optim/hash_helpers.rb +45 -0
  27. data/lib/image_optim/image_meta.rb +20 -0
  28. data/lib/image_optim/non_negative_integer_range.rb +11 -0
  29. data/lib/image_optim/optimized_path.rb +25 -0
  30. data/lib/image_optim/option_definition.rb +38 -0
  31. data/lib/image_optim/option_helpers.rb +17 -0
  32. data/lib/image_optim/path.rb +70 -0
  33. data/lib/image_optim/runner.rb +139 -0
  34. data/lib/image_optim/runner/glob_helpers.rb +45 -0
  35. data/lib/image_optim/runner/option_parser.rb +246 -0
  36. data/lib/image_optim/space.rb +29 -0
  37. data/lib/image_optim/true_false_nil.rb +16 -0
  38. data/lib/image_optim/worker.rb +170 -0
  39. data/lib/image_optim/worker/advpng.rb +37 -0
  40. data/lib/image_optim/worker/class_methods.rb +107 -0
  41. data/lib/image_optim/worker/gifsicle.rb +65 -0
  42. data/lib/image_optim/worker/jhead.rb +47 -0
  43. data/lib/image_optim/worker/jpegoptim.rb +63 -0
  44. data/lib/image_optim/worker/jpegrecompress.rb +49 -0
  45. data/lib/image_optim/worker/jpegtran.rb +48 -0
  46. data/lib/image_optim/worker/optipng.rb +53 -0
  47. data/lib/image_optim/worker/pngcrush.rb +56 -0
  48. data/lib/image_optim/worker/pngout.rb +40 -0
  49. data/lib/image_optim/worker/pngquant.rb +61 -0
  50. data/lib/image_optim/worker/svgo.rb +34 -0
  51. data/script/template/jquery-2.1.3.min.js +4 -0
  52. data/script/template/sortable-0.6.0.min.js +2 -0
  53. data/script/template/worker_analysis.erb +254 -0
  54. data/script/update_worker_options_in_readme +59 -0
  55. data/script/worker_analysis +589 -0
  56. data/spec/image_optim/bin_resolver/comparable_condition_spec.rb +37 -0
  57. data/spec/image_optim/bin_resolver/simple_version_spec.rb +65 -0
  58. data/spec/image_optim/bin_resolver_spec.rb +290 -0
  59. data/spec/image_optim/cache_path_spec.rb +57 -0
  60. data/spec/image_optim/cache_spec.rb +162 -0
  61. data/spec/image_optim/cmd_spec.rb +93 -0
  62. data/spec/image_optim/config_spec.rb +254 -0
  63. data/spec/image_optim/handler_spec.rb +90 -0
  64. data/spec/image_optim/hash_helpers_spec.rb +74 -0
  65. data/spec/image_optim/image_meta_spec.rb +61 -0
  66. data/spec/image_optim/optimized_path_spec.rb +58 -0
  67. data/spec/image_optim/option_definition_spec.rb +138 -0
  68. data/spec/image_optim/option_helpers_spec.rb +25 -0
  69. data/spec/image_optim/path_spec.rb +103 -0
  70. data/spec/image_optim/runner/glob_helpers_spec.rb +21 -0
  71. data/spec/image_optim/runner/option_parser_spec.rb +105 -0
  72. data/spec/image_optim/space_spec.rb +23 -0
  73. data/spec/image_optim/worker/optipng_spec.rb +102 -0
  74. data/spec/image_optim/worker/pngquant_spec.rb +67 -0
  75. data/spec/image_optim/worker_spec.rb +303 -0
  76. data/spec/image_optim_spec.rb +259 -0
  77. data/spec/images/broken_jpeg +1 -0
  78. data/spec/images/comparison.png +0 -0
  79. data/spec/images/decompressed.jpeg +0 -0
  80. data/spec/images/icecream.gif +0 -0
  81. data/spec/images/image.jpg +0 -0
  82. data/spec/images/invisiblepixels/generate +24 -0
  83. data/spec/images/invisiblepixels/image.png +0 -0
  84. data/spec/images/lena.jpg +0 -0
  85. data/spec/images/orient/0.jpg +0 -0
  86. data/spec/images/orient/1.jpg +0 -0
  87. data/spec/images/orient/2.jpg +0 -0
  88. data/spec/images/orient/3.jpg +0 -0
  89. data/spec/images/orient/4.jpg +0 -0
  90. data/spec/images/orient/5.jpg +0 -0
  91. data/spec/images/orient/6.jpg +0 -0
  92. data/spec/images/orient/7.jpg +0 -0
  93. data/spec/images/orient/8.jpg +0 -0
  94. data/spec/images/orient/generate +23 -0
  95. data/spec/images/orient/original.jpg +0 -0
  96. data/spec/images/quant/64.png +0 -0
  97. data/spec/images/quant/generate +25 -0
  98. data/spec/images/rails.png +0 -0
  99. data/spec/images/test.svg +3 -0
  100. data/spec/images/transparency1.png +0 -0
  101. data/spec/images/transparency2.png +0 -0
  102. data/spec/images/vergroessert.jpg +0 -0
  103. data/spec/spec_helper.rb +93 -0
  104. metadata +281 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1fb2e73f565ac7380ffc5b5c7a00585bd788834b
4
+ data.tar.gz: 8f038053449c63112cc8e53de6ac547491e03687
5
+ SHA512:
6
+ metadata.gz: 8f7a3069203b276b6011f8ab728ac41e8555c736da82032516f40894beea78379cc5683644efabed4a4f71d2fa2e3329f27e1495daf3ceef595707dbe6910f3e
7
+ data.tar.gz: c434d27b7c0c251d2fe6b9359b9e34778182b1d039b76b38edafe54830d2261df3dfd481f5e16eb27e27722faea99b265d3c190440e0668f1279e5d5369f395d
@@ -0,0 +1,46 @@
1
+ version: '{build}-{branch}'
2
+ install:
3
+ - mkdir tmp\bin || exit 0
4
+ - set PATH=%cd%\tmp\bin;%PATH%
5
+ - ruby --version
6
+ - bundle package --all
7
+
8
+ - ps: git --work-tree=tmp\bin checkout origin/windows-binaries -- '*.exe'
9
+
10
+ - ps: | # svgo
11
+ npm install -g svgo
12
+
13
+ - ps: | # ImageMagick
14
+ if ((-not (test-path tmp/bin/convert.exe)) -or (-not (test-path tmp/bin/compare.exe)) -or (-not (test-path tmp/bin/magic.xml))) {
15
+ choco install -y imagemagick.tool
16
+ cp C:\ProgramData\chocolatey\lib\imagemagick.tool\tools\convert.exe tmp\bin
17
+ cp C:\ProgramData\chocolatey\lib\imagemagick.tool\tools\compare.exe tmp\bin
18
+ cp C:\ProgramData\chocolatey\lib\imagemagick.tool\tools\magic.xml tmp\bin
19
+ }
20
+
21
+ - bundle exec image_optim --info --allow-lossy --no-pack
22
+ cache:
23
+ - tmp/bin
24
+ build: off
25
+ test_script:
26
+ - ps: |
27
+ $path = $env:Path
28
+ $rubypaths = ls -Path C:\Ruby*\bin
29
+ foreach ($rubypath in $rubypaths[-2, -1]) {
30
+ echo "################################################################################"
31
+ $env:Path = "$rubypath;" + $path
32
+ ruby --version
33
+ bundle package --all
34
+ bundle install --local -j4
35
+ bundle exec rspec
36
+ if ($LASTEXITCODE -gt 0) {
37
+ exit 1
38
+ }
39
+ rm tmp/optimize_test -recurse -force
40
+ cp spec/images tmp/optimize_test -recurse -force
41
+ bundle exec image_optim --allow-lossy -r tmp/optimize_test
42
+ if ($LASTEXITCODE -gt 0) {
43
+ exit 1
44
+ }
45
+ }
46
+ $env:Path = $path
@@ -0,0 +1,18 @@
1
+ /pkg/
2
+ /*.gem
3
+
4
+ /doc/
5
+ /rdoc/
6
+ /.yardoc/
7
+ /coverage/
8
+ /vendor/
9
+
10
+ /Gemfile.lock
11
+ Makefile
12
+ *.o
13
+ *.bundle
14
+ /tmp/
15
+ /.vagrant/
16
+
17
+ /analysis/
18
+ /.analysis_variants.yml
@@ -0,0 +1,110 @@
1
+ AllCops:
2
+ Exclude:
3
+ - '*.gemspec'
4
+ - 'vendor/**/*'
5
+
6
+ Bundler/OrderedGems:
7
+ Enabled: false
8
+
9
+ Lint/AmbiguousBlockAssociation:
10
+ Exclude:
11
+ - spec/**/*_spec.rb
12
+
13
+ Lint/EndAlignment:
14
+ EnforcedStyleAlignWith: variable
15
+
16
+ Lint/UnneededSplatExpansion:
17
+ Enabled: false
18
+
19
+ Metrics/AbcSize:
20
+ Max: 30
21
+
22
+ Metrics/BlockLength:
23
+ Exclude:
24
+ - 'lib/image_optim/runner/option_parser.rb'
25
+ - 'script/worker_analysis'
26
+ - 'spec/**/*.rb'
27
+
28
+ Metrics/ClassLength:
29
+ Max: 150
30
+
31
+ Metrics/CyclomaticComplexity:
32
+ Max: 10
33
+
34
+ Metrics/MethodLength:
35
+ Max: 25
36
+
37
+ Metrics/PerceivedComplexity:
38
+ Max: 8
39
+
40
+ Security/MarshalLoad:
41
+ Exclude:
42
+ - 'script/worker_analysis'
43
+
44
+ Style/AccessModifierIndentation:
45
+ EnforcedStyle: outdent
46
+
47
+ Style/Alias:
48
+ EnforcedStyle: prefer_alias_method
49
+
50
+ Style/CaseIndentation:
51
+ EnforcedStyle: end
52
+
53
+ Style/DotPosition:
54
+ EnforcedStyle: trailing
55
+
56
+ Style/DoubleNegation:
57
+ Enabled: false
58
+
59
+ Style/EmptyCaseCondition:
60
+ Enabled: false
61
+
62
+ Style/Encoding:
63
+ EnforcedStyle: when_needed
64
+
65
+ Style/HashSyntax:
66
+ EnforcedStyle: hash_rockets
67
+
68
+ Style/IfUnlessModifier:
69
+ MaxLineLength: 40
70
+
71
+ Style/IndentArray:
72
+ EnforcedStyle: consistent
73
+
74
+ Style/IndentAssignment:
75
+ Enabled: false
76
+
77
+ Style/IndentHash:
78
+ EnforcedStyle: consistent
79
+
80
+ Style/IndentHeredoc:
81
+ Enabled: false
82
+
83
+ Style/ParallelAssignment:
84
+ Enabled: false
85
+
86
+ Style/PercentLiteralDelimiters:
87
+ PreferredDelimiters:
88
+ '%w': '[]'
89
+ '%W': '[]'
90
+
91
+ Style/Semicolon:
92
+ AllowAsExpressionSeparator: true
93
+
94
+ Style/SignalException:
95
+ EnforcedStyle: semantic
96
+
97
+ Style/SpaceBeforeBlockBraces:
98
+ EnforcedStyle: no_space
99
+
100
+ Style/SpaceInsideHashLiteralBraces:
101
+ EnforcedStyle: no_space
102
+
103
+ Style/TrailingCommaInArguments:
104
+ EnforcedStyleForMultiline: no_comma
105
+
106
+ Style/TrailingCommaInLiteral:
107
+ EnforcedStyleForMultiline: comma
108
+
109
+ Style/SymbolArray:
110
+ Enabled: false
@@ -0,0 +1,42 @@
1
+ sudo: false
2
+ language: ruby
3
+ cache:
4
+ bundler: true
5
+ directories:
6
+ - $(npm root)
7
+ - ~/bin
8
+ rvm:
9
+ - '1.8.7-p371'
10
+ - '1.9.3-p551'
11
+ - '2.0.0-p648'
12
+ - '2.1.10'
13
+ - '2.2.7'
14
+ - '2.3.4'
15
+ - '2.4.1'
16
+ - 'jruby-1.7.26'
17
+ - 'jruby-9.0.5.0'
18
+ - 'jruby-9.1.5.0'
19
+ script:
20
+ - bundle exec image_optim --info
21
+ - bundle exec rspec
22
+ before_install:
23
+ - mkdir -p ~/bin
24
+ - command -v svgo || npm install svgo
25
+ - command -v pngout || curl -L "http://static.jonof.id.au/dl/kenutils/pngout-20130221-linux.tar.gz" | tar -xz -C ~/bin --strip-components 2 --wildcards '*/x86_64/pngout'
26
+ matrix:
27
+ include:
28
+ - env: CODECLIMATE=✓
29
+ rvm: '2.4.1'
30
+ after_success: bundle exec codeclimate-test-reporter
31
+ - env: RUBOCOP=✓
32
+ rvm: '2.4.1'
33
+ script: bundle exec rubocop
34
+ before_install:
35
+ - env: CHECK_RUBIES=✓
36
+ rvm: '2.4.1'
37
+ script: bundle exec travis_check_rubies
38
+ before_install:
39
+ addons:
40
+ code_climate:
41
+ repo_token:
42
+ secure: FDikT3JnOJHOAFSaKwVPB1VOphU0sSzAnzQ+YjSt9XFE+9uFQHth/j4rFoVoqALhCj+47trv6spwkbcSjGCVzm+87OI80GkLCCzNjDOz2W4sP9JWItVgS1VoWW+ioPxpLgpguTb3wutwKOUMEAf+40EX657ZiHumM7nNHrF+RCU=
@@ -0,0 +1,316 @@
1
+ # ChangeLog
2
+
3
+ ## unreleased
4
+
5
+ * Add `timeout` option to workers [#21](https://github.com/toy/image_optim/issues/21)
6
+ [@tgxworld](http://github.com/tgxworld)
7
+
8
+ ## v0.24.2 (2017-02-18)
9
+
10
+ * Describe `nice` level option [#140](https://github.com/toy/image_optim/issues/140) [@toy](https://github.com/toy)
11
+ * Add instruction for installing `pngout` using brew [#143](https://github.com/toy/image_optim/pull/143) [@lukaselmer](https://github.com/lukaselmer)
12
+
13
+ ## v0.24.1 (2016-11-20)
14
+
15
+ * Use `image_size ~> 1.5` with `apng` detection, so apng images are not optimised to one frame version [#142](https://github.com/toy/image_optim/issues/142) [@toy](https://github.com/toy)
16
+ * Don't show `?` for unknown bin version in message about inability to determine version [@toy](https://github.com/toy)
17
+ * Deduplicate bin resolving error messages [@toy](https://github.com/toy)
18
+
19
+ ## v0.24.0 (2016-08-14)
20
+
21
+ * Rails image assets optimization is extracted into [image\_optim\_rails gem](https://github.com/toy/image_optim_rails) [#127](https://github.com/toy/image_optim/issues/127) [@toy](https://github.com/toy)
22
+ * Add proper handling of `ImageOptim.respond_to?` [@toy](https://github.com/toy)
23
+ * Fix an issue not working OptiPNG `interlace` option [#136](https://github.com/toy/image_optim/pull/136) [@mrk21](https://github.com/mrk21)
24
+ * Minimize number of file system calls in default implementation of `optimized?` [#137](https://github.com/toy/image_optim/issues/137) [@toy](https://github.com/toy)
25
+
26
+ ## v0.23.0 (2016-07-17)
27
+
28
+ * Added `cache_dir` and `cache_worker_digests` options to cache results [#83](https://github.com/toy/image_optim/issues/83) [@gpakosz](https://github.com/gpakosz)
29
+ * Should work on windows [#24](https://github.com/toy/image_optim/issues/24) [@toy](https://github.com/toy)
30
+ * Rename `ImageOptim::ImagePath` to `ImageOptim::Path` and its method `#format` to `#image_format` [@toy](https://github.com/toy)
31
+ * Ignore empty config files [#133](https://github.com/toy/image_optim/issues/133) [@toy](https://github.com/toy)
32
+ * Use `FileUtils.move` in `ImagePath#replace` to rename file instead of copying on same device, don't preserve mtime and atime [#134](https://github.com/toy/image_optim/issues/134) [@toy](https://github.com/toy)
33
+ * Make `:allow_lossy` an individual option for workers that can use it, so it will be in the list of worker options [#130](https://github.com/toy/image_optim/issues/130) [@toy](https://github.com/toy)
34
+ * Use first 8 characters of sha1 hex for jpegrescan version [#131](https://github.com/toy/image_optim/issues/131) [@toy](https://github.com/toy)
35
+
36
+ ## v0.22.1 (2016-02-21)
37
+
38
+ * Fix missing old (1.x) `pngquant` version as it was output to stderr [#123](https://github.com/toy/image_optim/issues/123) [@toy](https://github.com/toy)
39
+ * Fix capturing wrong version of `pngcrush` when it complains about different png.h and png.c [#122](https://github.com/toy/image_optim/issues/122) [@toy](https://github.com/toy)
40
+ * Add support for `sprockets-rails` 3.x, kudos to [@iggant](https://github.com/iggant) and [@valff](https://github.com/valff) for initial PRs [#120](https://github.com/toy/image_optim/pull/120) [#121](https://github.com/toy/image_optim/pull/121) [#126](https://github.com/toy/image_optim/pull/126) [@toy](https://github.com/toy)
41
+ * Use rubocop ~> 0.37 [@toy](https://github.com/toy)
42
+
43
+ ## v0.22.0 (2015-11-21)
44
+
45
+ * Unify getting description of option default value using `default_description` [@toy](https://github.com/toy)
46
+ * Don't use `-strip` option for optipng when the bin version is less than 0.7 [#106](https://github.com/toy/image_optim/issues/106) [@toy](https://github.com/toy)
47
+ * Use quality `0..100` by default in lossy mode of pngquant worker [#77](https://github.com/toy/image_optim/issues/77) [@toy](https://github.com/toy)
48
+ * Add `:disable_plugins` and `:enable_plugins` options to `svgo` worker [#110](https://github.com/toy/image_optim/pull/110) [@tomhughes](https://github.com/tomhughes)
49
+ * Allow setting config in rails like `config.assets.image_optim.name = value` [#111](https://github.com/toy/image_optim/pull/111) [@toy](https://github.com/toy)
50
+
51
+ ## v0.21.0 (2015-05-30)
52
+
53
+ * Use exifr 1.2.2 with fix for a bug [#85](https://github.com/toy/image_optim/issues/85) [@toy](https://github.com/toy)
54
+ * Change order of png workers according to analysis to pngcrush, optipng, pngquant, pngout, advpng (was pngquant, pngcrush, pngout, advpng, optipng) [@toy](https://github.com/toy)
55
+ * Run worker command without invoking shell (except ruby < 1.9 and jruby) [@toy](https://github.com/toy)
56
+ * Add disabling worker by passing `:disable => true` (previously only by passing `false` instead of options hash) [@toy](https://github.com/toy)
57
+ * Add tests for railtie, also to prevent [issues like #72](https://github.com/toy/image_optim/issues/72) [#73](https://github.com/toy/image_optim/issues/73) [@toy](https://github.com/toy)
58
+ * Remove haml development dependency [@toy](https://github.com/toy)
59
+ * Add `-strip` option to optipng worker to remove all metadata chunks, on by default [#75](https://github.com/toy/image_optim/issues/75) [@jwidderich](https://github.com/jwidderich)
60
+ * Fixing minor spelling mistakes from `--help` output [#79](https://github.com/toy/image_optim/issues/79) [@kaspergrubbe](https://github.com/kaspergrubbe)
61
+
62
+ ## v0.20.2 (2014-12-26)
63
+
64
+ * Fix `ImagePath#temp_path` for ruby 2.2 caused by `Tmpname#make_tmpname` accepting only objects directly convertible to String for prefix and suffix starting with 2.2 [#74](https://github.com/toy/image_optim/issues/74) [@toy](https://github.com/toy)
65
+
66
+ ## v0.20.1 (2014-12-19)
67
+
68
+ * Fix [paperclip-optimizer issue #13](https://github.com/janfoeh/paperclip-optimizer/issues/13): railtie broken with `undefined local variable or method 'app'` [#72](https://github.com/toy/image_optim/issues/72) [@janfoeh](https://github.com/janfoeh)
69
+
70
+ ## v0.20.0 (2014-12-15)
71
+
72
+ * Ignore and show warning for lossy options `jpegoptim#max_quality` and `pngquant#quality` in default/lossless mode [#71](https://github.com/toy/image_optim/issues/71) [@toy](https://github.com/toy)
73
+ * Add `:blacken` option to `pngcrush` worker, to blacken fully transparent pixels, on by default [@toy](https://github.com/toy)
74
+ * Command line option `--no-progress` to disable showing progress of optimizing images [@toy](https://github.com/toy)
75
+
76
+ ## v0.19.1 (2014-11-22)
77
+
78
+ * Blacklist pngcrush 1.7.80 as it loses one color in indexed images [@toy](https://github.com/toy)
79
+
80
+ ## v0.19.0 (2014-11-08)
81
+
82
+ * Added lossy worker `jpegrecompress` (uses [`jpeg-recompress`](https://github.com/danielgtaylor/jpeg-archive#jpeg-recompress)), disabled unless `:allow_lossy` is true [#65](https://github.com/toy/image_optim/issues/65) [@wjordan](https://github.com/wjordan) [@toy](https://github.com/toy)
83
+ * `:allow_lossy` option to allow lossy workers and optimizations [@toy](https://github.com/toy)
84
+ * Don't warn multiple times about problematic binary [#69](https://github.com/toy/image_optim/issues/69) [@toy](https://github.com/toy)
85
+ * Run gisicle two times (with interlace off then with on) if interlace is not set explicitly [#70](https://github.com/toy/image_optim/issues/70) [@toy](https://github.com/toy)
86
+ * Remove app and other extensions from gif images [@toy](https://github.com/toy)
87
+ * Change behaviour of gifsicle interlace option to deinterlace for `false`, pass `nil` to leave as is [@toy](https://github.com/toy)
88
+ * Worker can change its initialization by overriding `init` and can initialize multiple instances [#70](https://github.com/toy/image_optim/issues/70) [@toy](https://github.com/toy)
89
+
90
+ ## v0.18.0 (2014-11-01)
91
+
92
+ * Add interface to `image_optim_pack` [@toy](https://github.com/toy)
93
+ * Use `in_threads ~> 1.3` [@toy](https://github.com/toy)
94
+ * Added options to Gifsicle, specifically --careful (for compatibility) and --optimize for granularity [#51](https://github.com/toy/image_optim/issues/51) [@kaspergrubbe](https://github.com/kaspergrubbe)
95
+ * `:skip_missing_workers` option to skip workers with missing or problematic binaries [#66](https://github.com/toy/image_optim/issues/66) [@toy](https://github.com/toy)
96
+ * Speedup specs (~8x) [#60](https://github.com/toy/image_optim/issues/60) [@toy](https://github.com/toy)
97
+ * `script/worker_analysis` to compare worker chains by optimization, time and losslessness [@toy](https://github.com/toy)
98
+ * `Cmd` module to ensure interrupted commands can't go unnoticed [@toy](https://github.com/toy)
99
+
100
+ ## v0.17.1 (2014-10-06)
101
+
102
+ * Fix bin path resolving method missing vendor directory [@toy](https://github.com/toy)
103
+
104
+ ## v0.17.0 (2014-10-04)
105
+
106
+ * Use pure ruby detection of bin path [@toy](https://github.com/toy)
107
+ * Fail if version of bin can't be detected [#39](https://github.com/toy/image_optim/issues/39) [@toy](https://github.com/toy)
108
+ * Check path in `XXX_BIN` to exist, be a file and be executable [@toy](https://github.com/toy)
109
+ * `image_optim --info` to perform initialization with verbose output without running optimizations [@toy](https://github.com/toy)
110
+ * Changeable config paths [@toy](https://github.com/toy)
111
+
112
+ ## v0.16.0 (2014-09-12)
113
+
114
+ * Wrote this ChangeLog [#62](https://github.com/toy/image_optim/issues/62) [@toy](https://github.com/toy)
115
+ * Use rubocop ~> 0.26.0 [@toy](https://github.com/toy)
116
+ * Install advancecomp from source in travis script [#61](https://github.com/toy/image_optim/issues/61) [@toy](https://github.com/toy)
117
+ * Move expansion of config path to read method and rescue with warning [#58](https://github.com/toy/image_optim/issues/58) [@toy](https://github.com/toy)
118
+ * Show workers options in verbose mode [#56](https://github.com/toy/image_optim/issues/56) [@toy](https://github.com/toy)
119
+ * Resolve all bins during initialization [#22](https://github.com/toy/image_optim/issues/22) [@toy](https://github.com/toy)
120
+ * Add exclusion glob patterns, `.*` by default [#35](https://github.com/toy/image_optim/issues/35) [#48](https://github.com/toy/image_optim/issues/48) [@toy](https://github.com/toy)
121
+ * Show better warning when running image_optim for a directory without recursive option [@toy](https://github.com/toy)
122
+ * Use stable sort for workers [@toy](https://github.com/toy)
123
+ * Check binary version instead of using which to check if binary is present [#59](https://github.com/toy/image_optim/issues/59) [@toy](https://github.com/toy)
124
+
125
+ ## v0.15.0 (2014-08-19)
126
+
127
+ * Use advpng worker before optipng [@toy](https://github.com/toy)
128
+ * Fix order of results (use progress ~> 3.0.1) [@toy](https://github.com/toy)
129
+ * Change array returned from `optimize_images`, `optimize_images!` and `optimize_images_data` to contain pairs of item and result instead of just result [@toy](https://github.com/toy)
130
+ * Fixed `Space` causing exception with negative numbers [@toy](https://github.com/toy)
131
+ * Added pngquant worker [#14](https://github.com/toy/image_optim/issues/14) [#32](https://github.com/toy/image_optim/issues/32) [#40](https://github.com/toy/image_optim/issues/40) [#52](https://github.com/toy/image_optim/issues/52) [@adammathys](https://github.com/adammathys) [@smasry](https://github.com/smasry) [@toy](https://github.com/toy)
132
+ * Add instructions to errors from bin resolver [@toy](https://github.com/toy)
133
+ * Use in_threads ~> 1.2.2 with fix for silent exceptions [@toy](https://github.com/toy)
134
+ * Fix `LocalJumpError` in railtie initializer block (ruby 2.1.2, rails 4.1.4) [#50](https://github.com/toy/image_optim/issues/50) [@schnittchen](https://github.com/schnittchen)
135
+
136
+ ## v0.14.0 (2014-07-17)
137
+
138
+ * Added Inch CI and Gittip badges to README [@toy](https://github.com/toy)
139
+ * Assign worker options to constants for documentation [@toy](https://github.com/toy)
140
+ * Code style, reorganized, comments, added rubocop [@toy](https://github.com/toy)
141
+ * Switch to rspec 3.0 [@toy](https://github.com/toy)
142
+ * Don't mention versions in instructions for installing jpegoptim and pngcrush [@toy](https://github.com/toy)
143
+
144
+ ## v0.13.3 (2014-05-22)
145
+
146
+ * Added instruction about libjpeg-turbo-utils [#49](https://github.com/toy/image_optim/issues/49) [@toy](https://github.com/toy)
147
+
148
+ ## v0.13.2 (2014-04-24)
149
+
150
+ * Updated versions of `pngcrush` and `jpegoptim` in installation instructions [#46](https://github.com/toy/image_optim/issues/46) [@toy](https://github.com/toy)
151
+ * Script for updating instructions in README [@toy](https://github.com/toy)
152
+ * Typo in README [#45](https://github.com/toy/image_optim/issues/45) [@rawsyntax](https://github.com/rawsyntax)
153
+
154
+ ## v0.13.1 (2014-04-08)
155
+
156
+ * Use image_size ~> 1.3.0 so only `FormatError` exceptions are caught and show warning [#44](https://github.com/toy/image_optim/issues/44) [@lencioni](https://github.com/lencioni)
157
+
158
+ ## v0.13.0 (2014-04-06)
159
+
160
+ * Detect and warn about broken images [#43](https://github.com/toy/image_optim/issues/43) [@toy](https://github.com/toy)
161
+ * Output image_optim version when running in verbose mode [@toy](https://github.com/toy)
162
+ * Show resolved version in version exceptions and warnings [@toy](https://github.com/toy)
163
+ * Warn if advpng version is less than 1.17 as it does not use zopfli [#17](https://github.com/toy/image_optim/issues/17) [#18](https://github.com/toy/image_optim/issues/18) [@toy](https://github.com/toy)
164
+
165
+ ## v0.12.1 (2014-03-10)
166
+
167
+ * Don't try to register preprocessors when sprockets library is not initialized (app.assets is nil) [#41](https://github.com/toy/image_optim/issues/41) [@toy](https://github.com/toy)
168
+ * Output resolved binaries when verbose [@toy](https://github.com/toy)
169
+ * Output nice level and number of threads when verbose [@toy](https://github.com/toy)
170
+ * Output config to stderr when verbose [@toy](https://github.com/toy)
171
+ * Don't limit number of threads [@toy](https://github.com/toy)
172
+
173
+ ## v0.12.0 (2014-03-02)
174
+
175
+ * Checking bin versions [#33](https://github.com/toy/image_optim/issues/33) [@toy](https://github.com/toy)
176
+
177
+ ## v0.11.2 (2014-03-01)
178
+
179
+ * Fixed building PATH environment variable [@toy](https://github.com/toy)
180
+
181
+ ## v0.11.1 (2014-02-20)
182
+
183
+ * Allow `-v` for version if it is the only argument [@toy](https://github.com/toy)
184
+ * Fixed initializing railtie [#37](https://github.com/toy/image_optim/issues/37) [@toy](https://github.com/toy)
185
+
186
+ ## v0.11.0 (2014-02-16)
187
+
188
+ * Use image_size ~> 1.2.0 [@toy](https://github.com/toy)
189
+ * Added `svgo` worker and support for svg files [#27](https://github.com/toy/image_optim/issues/27) [#30](https://github.com/toy/image_optim/issues/30) [@nybblr](https://github.com/nybblr)
190
+ * Properly unlink temporary files [#29](https://github.com/toy/image_optim/issues/29) [@toy](https://github.com/toy)
191
+ * Read options from rails app configuration `app.config.assets.image_optim` in railtie [#31](https://github.com/toy/image_optim/issues/31) [@bencrouse](https://github.com/bencrouse)
192
+ * Updated versions of `pngcrush` and `jpegoptim` in installation instructions [#26](https://github.com/toy/image_optim/issues/26) [@jc00ke](https://github.com/jc00ke)
193
+
194
+ ## v0.10.2 (2014-01-25)
195
+
196
+ * Fixed regression with progress introduced in v0.10.0 [@toy](https://github.com/toy)
197
+
198
+ ## v0.10.1 (2014-01-23)
199
+
200
+ * Ensure binary data (ruby 1.9+) from `optimize_image_data` and `optimize_images_data` [#25](https://github.com/toy/image_optim/issues/25) [@toy](https://github.com/toy)
201
+ * Mention `optimize_image_data` and `optimize_images_data` in README [#25](https://github.com/toy/image_optim/issues/25) [@toy](https://github.com/toy)
202
+
203
+ ## v0.10.0 (2013-12-25)
204
+
205
+ * Fixed bug with inheritance of `DelegateClass` in jruby 1.9 and 2.0 [@toy](https://github.com/toy)
206
+ * Return `ImagePath::Optimized` containing also original path and size from `optimize_image` and `optimize_image!` [#12](https://github.com/toy/image_optim/issues/12) [@toy](https://github.com/toy)
207
+ * Show exception backtrace when verbose [@toy](https://github.com/toy)
208
+ * Fail if there were warnings with paths to optimize [@toy](https://github.com/toy)
209
+ * Rails (sprockets) preprocessor [#2](https://github.com/toy/image_optim/issues/2) [@toy](https://github.com/toy)
210
+ * Use fspath ~> 2.1.0 with fixes for jruby 1.7.8 [@toy](https://github.com/toy)
211
+ * Add `optimize_image_data` and `optimize_images_data` [@toy](https://github.com/toy)
212
+ * Read config from `image_optim.yml` at `XDG_CONFIG_HOME` (`~/.config` by default) and from `.image_optim.yml` in current working directory [#13](https://github.com/toy/image_optim/issues/13) [@toy](https://github.com/toy)
213
+ * Added badges to README [@toy](https://github.com/toy)
214
+ * Big refactoring [@toy](https://github.com/toy)
215
+
216
+ ## v0.9.1 (2013-08-20)
217
+
218
+ * Use progress ~> 3.0.0 and in_threads ~> 1.2.0 [@toy](https://github.com/toy)
219
+
220
+ ## v0.9.0 (2013-07-30)
221
+
222
+ * Use fspath ~> 2.0.5 with bug fix for jruby in 1.8 mode [@toy](https://github.com/toy)
223
+ * Overcome wrong implementation of `Process::Status` in jruby [@toy](https://github.com/toy)
224
+ * Fix for jruby not `File.rename` not accepting non String [@toy](https://github.com/toy)
225
+ * Fix for jruby `File.rename` not accepting non String [@toy](https://github.com/toy)
226
+ * Added `.travis.yml` [@toy](https://github.com/toy)
227
+ * Added `jhead` worker [@toy](https://github.com/toy)
228
+
229
+ ## v0.8.1 (2013-05-27)
230
+
231
+ * Fixed variable name in `jpegoptim` worker [@toy](https://github.com/toy)
232
+ * Added example of using `PATH` with ImageOptim.app bins [#11](https://github.com/toy/image_optim/issues/11) [@toy](https://github.com/toy)
233
+
234
+ ## v0.8.0 (2013-03-27)
235
+
236
+ * Print options if verbose [@toy](https://github.com/toy)
237
+ * Added worker options to README using script [#5](https://github.com/toy/image_optim/issues/5) [@toy](https://github.com/toy)
238
+ * Setting worker options using arguments to image_optim bin [@toy](https://github.com/toy)
239
+ * Option definitions with description, default value and validation instead of attribute reader in options [@toy](https://github.com/toy)
240
+ * Don't change PATH for ruby process [@toy](https://github.com/toy)
241
+ * Vendor `jpegrescan` [@toy](https://github.com/toy)
242
+ * Option to use `jpegrescan` in `jpegtran` worker, off by default [#6](https://github.com/toy/image_optim/issues/6) [@toy](https://github.com/toy)
243
+
244
+ ## v0.7.3 (2013-02-24)
245
+
246
+ * Use image_size ~> 1.1.2 [@toy](https://github.com/toy)
247
+
248
+ ## v0.7.2 (2013-01-18)
249
+
250
+ * Make `apply_threading` accept enum instead of array [@toy](https://github.com/toy)
251
+
252
+ ## v0.7.1 (2013-01-17)
253
+
254
+ * Use more compatible redirect syntax `>&` [#9](https://github.com/toy/image_optim/issues/9) [@teaforthecat](https://github.com/teaforthecat)
255
+
256
+ ## v0.7.0 (2013-01-17)
257
+
258
+ * Use `system` with `env` and `nice` instead of forking [#8](https://github.com/toy/image_optim/issues/8) [@toy](https://github.com/toy)
259
+ * Don't use `-s` of `which` as it is nonstandard [#7](https://github.com/toy/image_optim/issues/7) [@toy](https://github.com/toy)
260
+ * Added bin resolving with ability to specify binary paths using environment variables [@toy](https://github.com/toy)
261
+ * Reorganized workers [@toy](https://github.com/toy)
262
+ * Added links to tool projects [@toy](https://github.com/toy)
263
+
264
+ ## v0.6.0 (2012-11-15)
265
+
266
+ * Warn if directly added files are not images or are not optimizable [@toy](https://github.com/toy)
267
+ * Recursively scan directories for images [#4](https://github.com/toy/image_optim/issues/4) [@toy](https://github.com/toy)
268
+ * Typo in bin/image_optim [#3](https://github.com/toy/image_optim/issues/3) [@fabiomcosta](https://github.com/fabiomcosta)
269
+
270
+ ## v0.5.1 (2012-08-07)
271
+
272
+ * Nice output for configuration and binary resolving errors [@toy](https://github.com/toy)
273
+
274
+ ## v0.5.0 (2012-08-05)
275
+
276
+ * Verbose output [@toy](https://github.com/toy)
277
+
278
+ ## v0.4.2 (2012-02-26)
279
+
280
+ * Use image_size ~> 1.1 [@toy](https://github.com/toy)
281
+
282
+ ## v0.4.1 (2012-02-14)
283
+
284
+ * Added binary installation instructions to README [#1](https://github.com/toy/image_optim/issues/1) [@jingoro](https://github.com/jingoro)
285
+
286
+ ## v0.4.0 (2012-01-13)
287
+
288
+ * Added usage to README [@toy](https://github.com/toy)
289
+ * Allow setting nice level, 10 by default [@toy](https://github.com/toy)
290
+ * Use `fork` instead of `system` [@toy](https://github.com/toy)
291
+
292
+ ## v0.3.2 (2012-01-12)
293
+
294
+ * Fixed setting max thread count [@toy](https://github.com/toy)
295
+
296
+ ## v0.3.1 (2012-01-12)
297
+
298
+ * Fixed parsing thread option [@toy](https://github.com/toy)
299
+
300
+ ## v0.3.0 (2012-01-12)
301
+
302
+ * Output size change per file and total [@toy](https://github.com/toy)
303
+ * Warn about non files [@toy](https://github.com/toy)
304
+
305
+ ## v0.2.1 (2012-01-11)
306
+
307
+ * Simplified determining presence of bin [@toy](https://github.com/toy)
308
+
309
+ ## v0.2.0 (2012-01-10)
310
+
311
+ * Reduce number of created temp files to minimum [@toy](https://github.com/toy)
312
+ * Use fspath ~> 2.0.3 [@toy](https://github.com/toy)
313
+
314
+ ## v0.1.0 (2012-01-09)
315
+
316
+ * Initial release [@toy](https://github.com/toy)