paleta 0.2.3 → 0.3.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: dbc68d095b1685f151b262ce76ec4c5f51380b07
4
- data.tar.gz: c31c9b06f8045aa81bd4aca725c83411f1c75f55
3
+ metadata.gz: a3e1531d51066d39da5e89abe5aca0a8ac4ee15a
4
+ data.tar.gz: c74e22eec380ab93b18a57220c0bc95d81ecb9d4
5
5
  SHA512:
6
- metadata.gz: 3affa703081598c705dc1b678ac3f8d2dc1b47a363338dd86e7778d0df9b8fcd2ba8d53434f2a7a24130214aab65cf0c83abcb9b4dbdddcc94e2bb26c387d371
7
- data.tar.gz: 707274da81a1aeec5ee96bff51feadd472867791f73aaaffc9619e2b8abb15c569d9e1a6c0b926cb2f0cf9567a9ad7067686b5848a83319b585ff6d355221a3a
6
+ metadata.gz: ecd84c4445cffafb2f0f8d801a9601315bf375eddad66b9353c21304c9ea5801199f3d79d3cb82378a53454618c153a9a214ca0726f1cda7de793f5e92759f46
7
+ data.tar.gz: 3b46763b1cdf9568d835100c101d9bcd70e6138aaadbcac5b524606a5e2a2bce8a4e6fe50bd1fa8f75915c5f73c4be949299aa70b80c715fd48af80d8105860e
data/.gitignore CHANGED
@@ -7,4 +7,5 @@ Guardfile
7
7
  tmp
8
8
  .yardoc
9
9
  _yardoc
10
- doc/
10
+ doc/
11
+ .ruby-version
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 2.1.6
5
+ - 2.2.2
6
+ - jruby-19mode
7
+ jdk:
8
+ - oraclejdk8
9
+ script: bundle exec rspec spec
data/Gemfile CHANGED
@@ -2,4 +2,6 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'rmagick'
5
+ platforms :ruby do
6
+ gem 'rmagick'
7
+ end
@@ -3,4 +3,15 @@ require 'paleta/color'
3
3
  require 'paleta/palette'
4
4
 
5
5
  module Paleta
6
+ class MissingDependencyError < StandardError; end
7
+
8
+ @rmagick_available = begin
9
+ require "rmagick"
10
+ rescue LoadError
11
+ false
12
+ end
13
+
14
+ def self.rmagick_available?
15
+ @rmagick_available
16
+ end
6
17
  end
@@ -302,9 +302,9 @@ module Paleta
302
302
  else; @red, @green, @blue = 0, 0, 0
303
303
  end
304
304
 
305
- @red = 255 * (@red + d3)
306
- @green = 255 * (@green + d3)
307
- @blue = 255 * (@blue + d3)
305
+ @red = (255 * (@red + d3)).to_i
306
+ @green = (255 * (@green + d3)).to_i
307
+ @blue = (255 * (@blue + d3)).to_i
308
308
  end
309
309
 
310
310
  def update_hex
@@ -1,38 +1,10 @@
1
1
  require 'paleta/core_ext/math'
2
2
 
3
3
  module Paleta
4
- module MagickDependent
5
- def self.included(klass)
6
- require 'RMagick' unless defined?(Magick)
7
- klass.extend(ClassMethods)
8
- rescue LoadError
9
- puts "You must install RMagick to use Palette.generate(:from => :image, ...)"
10
- end
11
-
12
- module ClassMethods
13
- def generate_from_image(path, size = 5)
14
- include Magick
15
- begin
16
- image = Magick::ImageList.new(path)
17
-
18
- # quantize image to the nearest power of 2 greater the desired palette size
19
- quantized_image = image.quantize((Math.sqrt(size).ceil ** 2), Magick::RGBColorspace)
20
- colors = quantized_image.color_histogram.sort { |a, b| b[1] <=> a[1] }[0..(size - 1)].map do |color|
21
- Paleta::Color.new(color[0].red / 256, color[0].green / 256, color[0].blue / 256)
22
- end
23
- return Paleta::Palette.new(colors)
24
- rescue Magick::ImageMagickError
25
- raise "Invalid image at " << path
26
- end
27
- end
28
- end
29
- end
30
-
31
4
  # Represents a palette, a collection of {Color}s
32
5
  class Palette
33
6
  include Math
34
7
  include Enumerable
35
- include MagickDependent
36
8
 
37
9
  attr_accessor :colors
38
10
 
@@ -237,6 +209,25 @@ module Paleta
237
209
 
238
210
  private
239
211
 
212
+ def self.generate_from_image(path, size = 5)
213
+ unless Paleta.rmagick_available?
214
+ raise Paleta::MissingDependencyError, "You must install RMagick to use Palette.generate(:from => :image, ...)"
215
+ end
216
+
217
+ begin
218
+ image = Magick::ImageList.new(path)
219
+
220
+ # quantize image to the nearest power of 2 greater the desired palette size
221
+ quantized_image = image.quantize((Math.sqrt(size).ceil ** 2), Magick::RGBColorspace)
222
+ colors = quantized_image.color_histogram.sort { |a, b| b[1] <=> a[1] }[0..(size - 1)].map do |color|
223
+ Paleta::Color.new(color[0].red / 256, color[0].green / 256, color[0].blue / 256)
224
+ end
225
+ return Paleta::Palette.new(colors)
226
+ rescue Magick::ImageMagickError
227
+ raise "Invalid image at " << path
228
+ end
229
+ end
230
+
240
231
  def self.generate_analogous_from_color(color, size)
241
232
  raise(ArgumentError, "Passed argument is not a Color") unless color.is_a?(Color)
242
233
  palette = self.new(color)
@@ -1,3 +1,3 @@
1
1
  module Paleta
2
- VERSION = "0.2.3"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -17,5 +17,5 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_development_dependency "rspec", "~> 2.8"
19
19
  gem.add_development_dependency "guard-rspec", "~> 1.2"
20
- gem.add_development_dependency "pry-byebug", "~> 2.0"
20
+ gem.add_development_dependency("pry-byebug", "~> 2.0") unless defined?(JRUBY_VERSION)
21
21
  end
@@ -1,5 +1,10 @@
1
1
  # Paleta
2
2
 
3
+ [![Build Status](https://travis-ci.org/jordanstephens/paleta.svg?branch=master)](https://travis-ci.org/jordanstephens/paleta)
4
+ [![Code Climate](https://codeclimate.com/github/jordanstephens/paleta/badges/gpa.svg)](https://codeclimate.com/github/jordanstephens/paleta)
5
+ [![Dependency Status](https://gemnasium.com/jordanstephens/paleta.svg)](https://gemnasium.com/jordanstephens/paleta)
6
+
7
+
3
8
  A gem for working with color palettes
4
9
 
5
10
  ## Installation
@@ -224,15 +224,28 @@ describe Paleta::Palette do
224
224
  end
225
225
  end
226
226
 
227
- it "should generate a Palette from an image" do
228
- path = File.join(File.dirname(__FILE__), '..', 'images/test.jpg')
229
- size = 5
230
- palette = Paleta::Palette.generate(:from => :image, :image => path, :size => size)
231
- palette.size.should == size
232
- end
227
+ unless defined?(JRUBY_VERSION)
228
+ it "should generate a Palette from an image" do
229
+ path = File.join(File.dirname(__FILE__), '..', 'images/test.jpg')
230
+ size = 5
231
+ palette = Paleta::Palette.generate(:from => :image, :image => path, :size => size)
232
+ palette.size.should == size
233
+ end
234
+
235
+ it "should raise when generating a Palette from an image without RMagick" do
236
+ # stub Paleta.rmagick_available? to return false
237
+ allow(Paleta).to receive(:rmagick_available?).and_return(false)
233
238
 
234
- it "should raise an error when generating a Palette from an invalid image" do
235
- expect{ Paleta::Palette.generate(:from => :image, :image => "/no/image.here") }.to raise_error(RuntimeError)
239
+ path = File.join(File.dirname(__FILE__), '..', 'images/test.jpg')
240
+ size = 5
241
+ expect do
242
+ Paleta::Palette.generate(:from => :image, :image => path, :size => size)
243
+ end.to raise_error(Paleta::MissingDependencyError)
244
+ end
245
+
246
+ it "should raise an error when generating a Palette from an invalid image" do
247
+ expect{ Paleta::Palette.generate(:from => :image, :image => "/no/image.here") }.to raise_error(RuntimeError)
248
+ end
236
249
  end
237
250
 
238
251
  it "should return an array of colors, where each color is represented as an array of component values" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paleta
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Stephens
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-24 00:00:00.000000000 Z
11
+ date: 2015-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -60,6 +60,7 @@ extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
62
  - ".gitignore"
63
+ - ".travis.yml"
63
64
  - Gemfile
64
65
  - LICENSE
65
66
  - lib/paleta.rb