paleta 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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