chunky_png 1.3.8 → 1.3.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +35 -0
  3. data/.standard.yml +16 -0
  4. data/.yardopts +1 -1
  5. data/CHANGELOG.rdoc +13 -1
  6. data/CONTRIBUTING.rdoc +17 -8
  7. data/Gemfile +5 -3
  8. data/LICENSE +1 -1
  9. data/README.md +6 -1
  10. data/Rakefile +5 -3
  11. data/benchmarks/decoding_benchmark.rb +17 -17
  12. data/benchmarks/encoding_benchmark.rb +22 -19
  13. data/benchmarks/filesize_benchmark.rb +6 -6
  14. data/bin/rake +29 -0
  15. data/bin/standardrb +29 -0
  16. data/chunky_png.gemspec +20 -14
  17. data/lib/chunky_png.rb +46 -45
  18. data/lib/chunky_png/canvas.rb +30 -27
  19. data/lib/chunky_png/canvas/adam7_interlacing.rb +16 -10
  20. data/lib/chunky_png/canvas/data_url_exporting.rb +3 -3
  21. data/lib/chunky_png/canvas/data_url_importing.rb +3 -3
  22. data/lib/chunky_png/canvas/drawing.rb +30 -43
  23. data/lib/chunky_png/canvas/masking.rb +14 -14
  24. data/lib/chunky_png/canvas/operations.rb +28 -24
  25. data/lib/chunky_png/canvas/png_decoding.rb +38 -32
  26. data/lib/chunky_png/canvas/png_encoding.rb +110 -102
  27. data/lib/chunky_png/canvas/resampling.rb +27 -32
  28. data/lib/chunky_png/canvas/stream_exporting.rb +8 -8
  29. data/lib/chunky_png/canvas/stream_importing.rb +8 -8
  30. data/lib/chunky_png/chunk.rb +115 -66
  31. data/lib/chunky_png/color.rb +213 -206
  32. data/lib/chunky_png/datastream.rb +24 -30
  33. data/lib/chunky_png/dimension.rb +18 -11
  34. data/lib/chunky_png/image.rb +11 -11
  35. data/lib/chunky_png/palette.rb +6 -9
  36. data/lib/chunky_png/point.rb +27 -26
  37. data/lib/chunky_png/rmagick.rb +10 -10
  38. data/lib/chunky_png/vector.rb +28 -29
  39. data/lib/chunky_png/version.rb +3 -1
  40. data/spec/chunky_png/canvas/adam7_interlacing_spec.rb +20 -21
  41. data/spec/chunky_png/canvas/data_url_exporting_spec.rb +8 -5
  42. data/spec/chunky_png/canvas/data_url_importing_spec.rb +5 -6
  43. data/spec/chunky_png/canvas/drawing_spec.rb +46 -38
  44. data/spec/chunky_png/canvas/masking_spec.rb +15 -16
  45. data/spec/chunky_png/canvas/operations_spec.rb +68 -67
  46. data/spec/chunky_png/canvas/png_decoding_spec.rb +37 -38
  47. data/spec/chunky_png/canvas/png_encoding_spec.rb +59 -50
  48. data/spec/chunky_png/canvas/resampling_spec.rb +19 -21
  49. data/spec/chunky_png/canvas/stream_exporting_spec.rb +47 -27
  50. data/spec/chunky_png/canvas/stream_importing_spec.rb +10 -11
  51. data/spec/chunky_png/canvas_spec.rb +57 -52
  52. data/spec/chunky_png/color_spec.rb +115 -114
  53. data/spec/chunky_png/datastream_spec.rb +98 -19
  54. data/spec/chunky_png/dimension_spec.rb +10 -10
  55. data/spec/chunky_png/image_spec.rb +11 -14
  56. data/spec/chunky_png/point_spec.rb +21 -23
  57. data/spec/chunky_png/rmagick_spec.rb +7 -8
  58. data/spec/chunky_png/vector_spec.rb +21 -17
  59. data/spec/chunky_png_spec.rb +2 -2
  60. data/spec/png_suite_spec.rb +35 -40
  61. data/spec/resources/itxt_chunk.png +0 -0
  62. data/spec/spec_helper.rb +15 -9
  63. data/tasks/benchmarks.rake +7 -8
  64. metadata +53 -20
  65. data/.travis.yml +0 -16
  66. data/lib/chunky_png/compatibility.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: de005461c2c1664cf8c8328e5769415e26b365fe
4
- data.tar.gz: 0cf85db842b733efc160097379b39af523930694
2
+ SHA256:
3
+ metadata.gz: 3700be7193fc5c0b3d545244b775b347ab31a3d87b41833eb9130bfb333350e3
4
+ data.tar.gz: 910e7069e1a5a5d55df088a27d65a88abb04d0f631641f96665e46eb9c6af633
5
5
  SHA512:
6
- metadata.gz: 68ceb6232a10ad75694c1f908b2c7a16d9bb5b0f9c5cf0f2c017b02b60e5655e99341ab44d6135975888b8855ced580054365d670494f64ea35eeee2eabc1ed6
7
- data.tar.gz: 791b4ce5e7e2228b5d3ba0c41edb1f9d0b649bbe15f6ea808bca5c716fad10205f1cff408a3f79daf8389664e58124f4e53e74018ece8da38afed0cf685e3ce7
6
+ metadata.gz: 5e1779c275eb27fdbf03ffdd94859ab3a781206e16ad71638aa43d7912e520ca34385e815117801752038bd6027fec87660931b8ed596685c41ee65993276b19
7
+ data.tar.gz: 75ea37b5c3995bf899ee17bfca07983366a8311e64da2261aa6a67573ddf6d21270e2b3a5b9051c79a8c08ee4220ab184722ee32fd4215adbe30cd39e3fb8709
@@ -0,0 +1,35 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: ["master"]
13
+ pull_request:
14
+ branches: ["master"]
15
+
16
+ jobs:
17
+ test:
18
+ runs-on: ubuntu-latest
19
+ strategy:
20
+ matrix:
21
+ ruby: [ '2.5', '2.6', '2.7' ]
22
+
23
+ steps:
24
+ - uses: actions/checkout@v2
25
+ - name: Set up Ruby
26
+ uses: ruby/setup-ruby@v1
27
+ with:
28
+ ruby-version: ${{ matrix.ruby }}
29
+ - name: Install dependencies
30
+ run: bundle install
31
+ - name: Run tests
32
+ run: bin/rake
33
+ # Skip the linter for now.
34
+ # - name: Lint Ruby code
35
+ # run: bin/standardrb
@@ -0,0 +1,16 @@
1
+ # ChunkyPNG uses and enforces standard.rb as code style (see https://github.com/testdouble/standard).
2
+ # For backwards compatilibity and idiosyncratic preferences of the main author,
3
+ # there are some minor differences listed in here.
4
+
5
+ ruby_version: 2.2
6
+
7
+ ignore:
8
+ - lib/chunky_png/**/*.rb:
9
+ # We allow `for` loops in the codebase, especially in hot paths,
10
+ # because they perform better than `each` blocks.
11
+ - "Style/For"
12
+
13
+ - spec/chunky_png/**/*.rb:
14
+ # In RSpec, having to follow this rule will cause expectations to
15
+ # be less readable, specifically blocks for the `change` matcher.
16
+ - "Lint/AmbiguousBlockAssociation"
data/.yardopts CHANGED
@@ -1,5 +1,5 @@
1
1
  --title "ChunkyPNG - The pure Ruby PNG library"
2
2
  lib/**/*.rb -
3
- BENCHMARKS.rdoc
3
+ BENCHMARKING.rdoc
4
4
  --no-private
5
5
  --hide-void-return
@@ -7,7 +7,19 @@ The file documents the changes to this library over the different versions.
7
7
 
8
8
  === Unreleased changes
9
9
 
10
- - Nothing yet!
10
+ - Implemented <tt>ChunkyPNG::Dimension#hash</tt> to fix some specs after a behavior change in RSpec.
11
+
12
+ === 1.3.11 - 2018-11-21
13
+
14
+ - Updated project metadata as published on Rubygems.org
15
+
16
+ === 1.3.10 - 2018-01-23
17
+
18
+ - Fixed a regression in Datastream#metadata, which was not able to deal with iTXt chunks.
19
+
20
+ === 1.3.9 - 2018-01-23
21
+
22
+ - Add support for reading and writing an international textual data (iTXt chunks).
11
23
 
12
24
  === 1.3.8 - 2016-08-31
13
25
 
@@ -1,21 +1,30 @@
1
1
  = Contributing to ChunkyPNG
2
2
 
3
- I will gladly accept any contributions from anybody to improve this library. However, I like to keep
4
- the scope and complexity of this project relatively small. This way, with the limited amount of time I
5
- dedicate to this project, this library remains a solid piece of software that many people rely on in
6
- their workflow.
3
+ I will gladly accept any contributions from anybody to improve this library. However, this is a
4
+ personal open source project, without an active community around it. As a result I am the only
5
+ maintainer, and I’d like to keep the scope and complexity of this project small.
6
+ This way, with the limited amount of time I dedicate to this project, this library remains a
7
+ solid piece of software that many people rely on in their workflow.
7
8
 
8
9
 
9
10
  == Project scope
10
11
 
11
12
  The scope of this library is defined as:
12
13
 
13
- 1. Reading and writing any PNG image that conforms to the spec, with proper handling of images that do not.
14
+ 1. Reading and writing any PNG image that conforms to the spec, with proper error handling of
15
+ images that do not conform to the spec.
14
16
  2. Basic canvas drawing and compositing operations to create new or edit existing images.
17
+ However, I will generally be hesitant to add new drawing and compositing methods, because
18
+ the list could be endless to support every niche use case.
15
19
  3. Remain compatible with Ruby versions that are widely used.
16
20
 
17
- I will close issues and pull requests that go beyond this scope. If you want to work on something,
18
- but are not sure if it will be in scope, feel free to reach out to me!
21
+ I generally consider this gem to be feature complete based on this scope. I will close issues
22
+ and pull requests that go beyond this scope. If you want to work on something, but are not sure
23
+ if it will be accepted, feel free to reach out to me by opening an issue before committing your time.
24
+
25
+ For functionality that goes beyond the scope, I would suggest making it available as a separate
26
+ “plugin” gem (e.g. chunky_png-<my-feature>). If anything in the gem needs to be refactored
27
+ to support this kind of extensibility, I am happy to accept PRs for that.
19
28
 
20
29
 
21
30
  == Reporting bugs
@@ -38,7 +47,7 @@ Title and description:
38
47
  Code:
39
48
 
40
49
  - Don't break backwards compatibility.
41
- - Follow code conventions. They are not defined, so look at the code around you.
50
+ - Follow code conventions. They are enforced through Rubocop.
42
51
  - Add Yardoc comments as documentation.
43
52
 
44
53
  Specs:
data/Gemfile CHANGED
@@ -1,10 +1,12 @@
1
- source 'https://rubygems.org'
1
+ # frozen-string-literal: true
2
+
3
+ source "https://rubygems.org"
2
4
  gemspec
3
5
 
4
6
  platforms :jruby do
5
- gem 'jruby-openssl'
7
+ gem "jruby-openssl"
6
8
  end
7
9
 
8
10
  platform :rbx do
9
- gem 'rubysl'
11
+ gem "rubysl"
10
12
  end
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2015 Willem van Bergen
1
+ Copyright (c) 2010-2019 Willem van Bergen
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -80,7 +80,12 @@ background processing library.
80
80
 
81
81
  The library is written by Willem van Bergen for Floorplanner.com, and released
82
82
  under the MIT license (see LICENSE). Please contact me for questions or
83
- remarks. Patches are greatly appreciated!
83
+ remarks.
84
+
85
+ I generally consider this library to be feature complete. I will gladly accept
86
+ patches to fix bugs and improve performance, but I will generally be hesitant
87
+ to accept new features or API endpoints. Before contributing, please read
88
+ [CONTRIBUTING.rdoc](CONTRIBUTING.rdoc) that explains this in more detail.
84
89
 
85
90
  Please check out CHANGELOG.rdoc to see what changed in all versions.
86
91
 
data/Rakefile CHANGED
@@ -1,11 +1,13 @@
1
+ # frozen-string-literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rspec/core/rake_task"
3
5
 
4
- Dir['tasks/*.rake'].each { |file| load(file) }
6
+ Dir["tasks/*.rake"].each { |file| load(file) }
5
7
 
6
8
  RSpec::Core::RakeTask.new(:spec) do |task|
7
9
  task.pattern = "./spec/**/*_spec.rb"
8
- task.rspec_opts = ['--color']
10
+ task.rspec_opts = ["--color"]
9
11
  end
10
12
 
11
- task :default => [:spec]
13
+ task default: [:spec]
@@ -1,26 +1,26 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
1
+ require "rubygems"
2
+ require "bundler/setup"
3
3
 
4
- require 'benchmark'
5
- require 'chunky_png'
4
+ require "benchmark"
5
+ require "chunky_png"
6
6
 
7
7
  def image_file(name)
8
- File.join(File.dirname(__FILE__), '..', 'spec', 'resources', name)
8
+ File.join(File.dirname(__FILE__), "..", "spec", "resources", name)
9
9
  end
10
10
 
11
11
  def image_data(name)
12
12
  data = nil
13
- File.open(image_file(name), 'rb') { |f| data = f.read }
13
+ File.open(image_file(name), "rb") { |f| data = f.read }
14
14
  data
15
15
  end
16
16
 
17
- no_filtering_stream = image_data('pixelstream_fast_rgba.png')
18
- up_filtering_stream = image_data('pixelstream_reference.png')
19
- paeth_filtering_stream = image_data('pixelstream_best_compression.png')
20
- rgba_pixelstream = image_data('pixelstream.rgba')
21
- rgb_pixelstream = image_data('pixelstream.rgb')
17
+ no_filtering_stream = image_data("pixelstream_fast_rgba.png")
18
+ up_filtering_stream = image_data("pixelstream_reference.png")
19
+ paeth_filtering_stream = image_data("pixelstream_best_compression.png")
20
+ rgba_pixelstream = image_data("pixelstream.rgba")
21
+ rgb_pixelstream = image_data("pixelstream.rgb")
22
22
 
23
- n = (ENV['N'] || '5').to_i
23
+ n = (ENV["N"] || "5").to_i
24
24
 
25
25
  puts "---------------------------------------------"
26
26
  puts "ChunkyPNG (#{ChunkyPNG::VERSION}) decoding benchmark (n=#{n})"
@@ -28,9 +28,9 @@ puts "---------------------------------------------"
28
28
  puts
29
29
 
30
30
  Benchmark.bmbm do |x|
31
- x.report('PNG - no filtering') { n.times { ChunkyPNG::Image.from_blob(no_filtering_stream) } }
32
- x.report('PNG - UP filtering') { n.times { ChunkyPNG::Image.from_blob(up_filtering_stream) } }
33
- x.report('PNG - PAETH filtering') { n.times { ChunkyPNG::Image.from_blob(paeth_filtering_stream) } }
34
- x.report('From RGBA pixelstream') { n.times { ChunkyPNG::Image.from_rgba_stream(240, 180, rgba_pixelstream) } }
35
- x.report('From RGB pixelstream') { n.times { ChunkyPNG::Image.from_rgb_stream(240, 180, rgb_pixelstream) } }
31
+ x.report("PNG - no filtering") { n.times { ChunkyPNG::Image.from_blob(no_filtering_stream) } }
32
+ x.report("PNG - UP filtering") { n.times { ChunkyPNG::Image.from_blob(up_filtering_stream) } }
33
+ x.report("PNG - PAETH filtering") { n.times { ChunkyPNG::Image.from_blob(paeth_filtering_stream) } }
34
+ x.report("From RGBA pixelstream") { n.times { ChunkyPNG::Image.from_rgba_stream(240, 180, rgba_pixelstream) } }
35
+ x.report("From RGB pixelstream") { n.times { ChunkyPNG::Image.from_rgb_stream(240, 180, rgb_pixelstream) } }
36
36
  end
@@ -1,17 +1,20 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
1
+ require "rubygems"
2
+ require "bundler/setup"
3
3
 
4
- require 'benchmark'
5
- require 'chunky_png'
4
+ require "benchmark"
5
+ require "chunky_png"
6
6
 
7
7
  image = ChunkyPNG::Image.new(240, 180, ChunkyPNG::Color::TRANSPARENT)
8
8
 
9
9
  # set some random pixels
10
+
11
+ # rubocop:disable Layout/ExtraSpacing, Layout/SpaceInsideParens
10
12
  image[10, 20] = ChunkyPNG::Color.rgba(255, 0, 0, 255)
11
13
  image[50, 87] = ChunkyPNG::Color.rgba( 0, 255, 0, 255)
12
14
  image[33, 99] = ChunkyPNG::Color.rgba( 0, 0, 255, 255)
15
+ # rubocop:enable Layout/ExtraSpacing, Layout/SpaceInsideParens
13
16
 
14
- n = (ENV['N'] || '5').to_i
17
+ n = (ENV["N"] || "5").to_i
15
18
 
16
19
  puts "---------------------------------------------"
17
20
  puts "ChunkyPNG (#{ChunkyPNG::VERSION}) encoding benchmark (n=#{n})"
@@ -19,22 +22,22 @@ puts "---------------------------------------------"
19
22
  puts
20
23
 
21
24
  Benchmark.bmbm do |x|
22
- x.report('Autodetect (indexed)') { n.times { image.to_blob } }
25
+ x.report("Autodetect (indexed)") { n.times { image.to_blob } }
23
26
 
24
27
  # Presets
25
- x.report(':no_compression') { n.times { image.to_blob(:no_compression) } }
26
- x.report(':fast_rgba') { n.times { image.to_blob(:fast_rgba) } }
27
- x.report(':fast_rgb') { n.times { image.to_blob(:fast_rgb) } }
28
- x.report(':good_compression') { n.times { image.to_blob(:good_compression) } }
29
- x.report(':best_compression') { n.times { image.to_blob(:best_compression) } }
30
-
28
+ x.report(":no_compression") { n.times { image.to_blob(:no_compression) } }
29
+ x.report(":fast_rgba") { n.times { image.to_blob(:fast_rgba) } }
30
+ x.report(":fast_rgb") { n.times { image.to_blob(:fast_rgb) } }
31
+ x.report(":good_compression") { n.times { image.to_blob(:good_compression) } }
32
+ x.report(":best_compression") { n.times { image.to_blob(:best_compression) } }
33
+
31
34
  # Some options
32
- x.report(':rgb') { n.times { image.to_blob(:color_mode => ChunkyPNG::COLOR_TRUECOLOR) } }
33
- x.report(':rgba') { n.times { image.to_blob(:color_mode => ChunkyPNG::COLOR_TRUECOLOR_ALPHA) } }
34
- x.report(':indexed') { n.times { image.to_blob(:color_mode => ChunkyPNG::COLOR_INDEXED) } }
35
- x.report(':interlaced') { n.times { image.to_blob(:interlaced => true) } }
36
-
35
+ x.report(":rgb") { n.times { image.to_blob(color_mode: ChunkyPNG::COLOR_TRUECOLOR) } }
36
+ x.report(":rgba") { n.times { image.to_blob(color_mode: ChunkyPNG::COLOR_TRUECOLOR_ALPHA) } }
37
+ x.report(":indexed") { n.times { image.to_blob(color_mode: ChunkyPNG::COLOR_INDEXED) } }
38
+ x.report(":interlaced") { n.times { image.to_blob(interlaced: true) } }
39
+
37
40
  # Exports
38
- x.report('to RGBA pixelstream') { n.times { image.to_rgba_stream } }
39
- x.report('to RGB pixelstream') { n.times { image.to_rgb_stream } }
41
+ x.report("to RGBA pixelstream") { n.times { image.to_rgba_stream } }
42
+ x.report("to RGB pixelstream") { n.times { image.to_rgb_stream } }
40
43
  end
@@ -1,10 +1,10 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
1
+ require "rubygems"
2
+ require "bundler/setup"
3
3
 
4
- require 'benchmark'
5
- require 'chunky_png'
4
+ require "benchmark"
5
+ require "chunky_png"
6
6
 
7
- files = ['pixelstream_reference.png', 'operations.png', 'clock.png']
7
+ files = ["pixelstream_reference.png", "operations.png", "clock.png"]
8
8
 
9
9
  def encode_png(image, constraints = {})
10
10
  filesize = nil
@@ -13,7 +13,7 @@ def encode_png(image, constraints = {})
13
13
  end
14
14
 
15
15
  files.each do |file|
16
- filename = File.join(File.dirname(__FILE__), '..', 'spec', 'resources', file)
16
+ filename = File.join(File.dirname(__FILE__), "..", "spec", "resources", file)
17
17
  image = ChunkyPNG::Canvas.from_file(filename)
18
18
 
19
19
  puts "#{file}: #{image.width}x#{image.height} - #{image.palette.size} colors"
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rake' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("rake", "rake")
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'standardrb' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("standard", "standardrb")
@@ -1,11 +1,11 @@
1
- # -*- encoding: utf-8 -*-
1
+ # frozen-string-literal: true
2
2
 
3
- lib = File.expand_path('../lib', __FILE__)
3
+ lib = File.expand_path("../lib", __FILE__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'chunky_png/version'
5
+ require "chunky_png/version"
6
6
 
7
7
  Gem::Specification.new do |s|
8
- s.name = 'chunky_png'
8
+ s.name = "chunky_png"
9
9
 
10
10
  # Do not change the version and date fields by hand. This will be done
11
11
  # automatically by the gem release script.
@@ -31,16 +31,22 @@ Gem::Specification.new do |s|
31
31
  provides a massive speed boost to encoding and decoding.
32
32
  EOT
33
33
 
34
- s.authors = ['Willem van Bergen']
35
- s.email = ['willem@railsdoctors.com']
36
- s.homepage = 'http://wiki.github.com/wvanbergen/chunky_png'
37
- s.license = 'MIT'
38
-
39
- s.add_development_dependency('rake')
40
- s.add_development_dependency('rspec', '~> 3')
41
-
42
- s.rdoc_options << '--title' << s.name << '--main' << 'README.rdoc' << '--line-numbers' << '--inline-source'
43
- s.extra_rdoc_files = ['README.md', 'BENCHMARKING.rdoc', 'CONTRIBUTING.rdoc', 'CHANGELOG.rdoc']
34
+ s.authors = ["Willem van Bergen"]
35
+ s.email = ["willem@railsdoctors.com"]
36
+ s.homepage = "https://github.com/wvanbergen/chunky_png/wiki"
37
+ s.license = "MIT"
38
+ s.metadata = {
39
+ "source_code_uri" => "https://github.com/wvanbergen/chunky_png",
40
+ "wiki_uri" => "https://github.com/wvanbergen/chunky_png/wiki",
41
+ }
42
+
43
+ s.add_development_dependency("rake")
44
+ s.add_development_dependency("standard")
45
+ s.add_development_dependency("yard", "~> 0.9")
46
+ s.add_development_dependency("rspec", "~> 3")
47
+
48
+ s.rdoc_options << "--title" << s.name << "--main" << "README.rdoc" << "--line-numbers" << "--inline-source"
49
+ s.extra_rdoc_files = ["README.md", "BENCHMARKING.rdoc", "CONTRIBUTING.rdoc", "CHANGELOG.rdoc"]
44
50
 
45
51
  s.files = `git ls-files`.split($/)
46
52
  s.test_files = s.files.grep(%r{^(test|spec|features)/})