chroma 0.0.1.alpha.2 → 0.0.1.alpha.3

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.
@@ -1,5 +1,7 @@
1
1
  module Chroma
2
2
  module RgbGenerator
3
+ # Base rgb generator class.
4
+ # @abstract
3
5
  class Base
4
6
  include Helpers::Bounders
5
7
  end
@@ -1,11 +1,18 @@
1
1
  module Chroma
2
2
  module RgbGenerator
3
3
  class FromHexStringValues < Base
4
+ # @param format [Symbol] color format
5
+ # @param r [String] red value
6
+ # @param g [String] green value
7
+ # @param b [String] blue value
8
+ # @param a [String] alpha value
4
9
  def initialize(format, r, g, b, a = 'ff')
5
10
  @format = format || :hex
6
11
  @r, @g, @b, @a = r, g, b, a
7
12
  end
8
13
 
14
+ # Generates a {ColorModes::Rgb}.
15
+ # @return [ColorModes::Rgb]
9
16
  def generate
10
17
  r, g, b = [@r, @g, @b].map { |n| n.to_i(16) }
11
18
  a = @a.to_i(16) / 255.0
@@ -13,14 +20,36 @@ module Chroma
13
20
  end
14
21
 
15
22
  class << self
23
+ # Generates a {ColorModes::Rgb} from 3-character hexadecimal.
24
+ # @return [ColorModes::Rgb]
25
+ #
26
+ # @param format [Symbol] color format
27
+ # @param r [String] red value
28
+ # @param g [String] green value
29
+ # @param b [String] blue value
16
30
  def from_hex3(format, r, g, b)
17
31
  new(format || :hex3, r * 2, g * 2, b * 2)
18
32
  end
19
33
 
34
+ # Generates a {ColorModes::Rgb} from 6-character hexadecimal.
35
+ # @return [ColorModes::Rgb]
36
+ #
37
+ # @param format [Symbol] color format
38
+ # @param r [String] red value
39
+ # @param g [String] green value
40
+ # @param b [String] blue value
20
41
  def from_hex6(format, r, g, b)
21
42
  new(format, r, g, b)
22
43
  end
23
44
 
45
+ # Generates a {ColorModes::Rgb} from 8-character hexadecimal.
46
+ # @return [ColorModes::Rgb]
47
+ #
48
+ # @param format [Symbol] color format
49
+ # @param r [String] red value
50
+ # @param g [String] green value
51
+ # @param b [String] blue value
52
+ # @param a [String] alpha value
24
53
  def from_hex8(format, a, r, g, b)
25
54
  new(format || :hex8, r, g, b, a)
26
55
  end
@@ -1,11 +1,15 @@
1
1
  module Chroma
2
2
  module RgbGenerator
3
3
  class FromHsl < Base
4
+ # @param format [Symbol] color format
5
+ # @param hsl [ColorModes::Hsl]
4
6
  def initialize(format, hsl)
5
7
  @format = format
6
8
  @hsl = hsl
7
9
  end
8
10
 
11
+ # Generates a {ColorModes::Rgb}.
12
+ # @return [ColorModes::Rgb]
9
13
  def generate
10
14
  FromHslValues.new(@format, *@hsl.to_a).generate
11
15
  end
@@ -1,6 +1,11 @@
1
1
  module Chroma
2
2
  module RgbGenerator
3
3
  class FromHslValues < Base
4
+ # @param format [Symbol] color format
5
+ # @param h [String, Numeric] hue value
6
+ # @param s [String, Numeric] saturation value
7
+ # @param l [String, Numeric] lightness value
8
+ # @param a [String, Numeric] alpha value
4
9
  def initialize(format, h, s, l, a = 1)
5
10
  s = to_percentage(s)
6
11
  l = to_percentage(l)
@@ -9,6 +14,8 @@ module Chroma
9
14
  @hsl = ColorModes::Hsl.new(h, s, l, a)
10
15
  end
11
16
 
17
+ # Generates a {ColorModes::Rgb}.
18
+ # @return [ColorModes::Rgb]
12
19
  def generate
13
20
  [Converters::RgbConverter.convert_hsl(@hsl), @format]
14
21
  end
@@ -1,11 +1,15 @@
1
1
  module Chroma
2
2
  module RgbGenerator
3
3
  class FromHsv < Base
4
+ # @param format [Symbol] color format
5
+ # @param hsv [ColorModes::Hsv]
4
6
  def initialize(format, hsv)
5
7
  @format = format
6
8
  @hsv = hsv
7
9
  end
8
10
 
11
+ # Generates a {ColorModes::Rgb}.
12
+ # @return [ColorModes::Rgb]
9
13
  def generate
10
14
  FromHsvValues.new(@format, *@hsv.to_a).generate
11
15
  end
@@ -1,6 +1,11 @@
1
1
  module Chroma
2
2
  module RgbGenerator
3
3
  class FromHsvValues < Base
4
+ # @param format [Symbol] color format
5
+ # @param h [String, Numeric] hue value
6
+ # @param s [String, Numeric] saturation value
7
+ # @param v [String, Numeric] value value
8
+ # @param a [String, Numeric] alpha value
4
9
  def initialize(format, h, s, v, a = 1)
5
10
  s = to_percentage(s)
6
11
  v = to_percentage(v)
@@ -9,6 +14,8 @@ module Chroma
9
14
  @hsv = ColorModes::Hsv.new(h, s, v, a)
10
15
  end
11
16
 
17
+ # Generates a {ColorModes::Rgb}.
18
+ # @return [ColorModes::Rgb]
12
19
  def generate
13
20
  [Converters::RgbConverter.convert_hsv(@hsv), @format]
14
21
  end
@@ -1,11 +1,15 @@
1
1
  module Chroma
2
2
  module RgbGenerator
3
3
  class FromRgb < Base
4
+ # @param format [Symbol] color format
5
+ # @param rgb [ColorModes::Rgb]
4
6
  def initialize(format, rgb)
5
- @format = format || :rgb
7
+ @format = format
6
8
  @rgb = rgb
7
9
  end
8
10
 
11
+ # Generates a {ColorModes::Rgb}.
12
+ # @return [ColorModes::Rgb]
9
13
  def generate
10
14
  FromRgbValues.new(@format, @rgb.r, @rgb.g, @rgb.b, @rgb.a).generate
11
15
  end
@@ -1,11 +1,18 @@
1
1
  module Chroma
2
2
  module RgbGenerator
3
3
  class FromRgbValues < Base
4
+ # @param format [Symbol] color format
5
+ # @param r [String, Numeric] red value
6
+ # @param g [String, Numeric] green value
7
+ # @param b [String, Numeric] blue value
8
+ # @param a [String, Numeric] alpha value
4
9
  def initialize(format, r, g, b, a = 1)
5
- @format = format
10
+ @format = format || :rgb
6
11
  @r, @g, @b, @a = r, g, b, a
7
12
  end
8
13
 
14
+ # Generates a {ColorModes::Rgb}.
15
+ # @return [ColorModes::Rgb]
9
16
  def generate
10
17
  r, g, b = [@r, @g, @b].map { |n| bound01(n, 255) * 255 }
11
18
  a = bound_alpha(@a)
@@ -1,6 +1,11 @@
1
1
  module Chroma
2
2
  module RgbGenerator
3
3
  class FromString < Base
4
+ # Returns the regex matchers and rgb generation classes for various
5
+ # string color formats.
6
+ #
7
+ # @api private
8
+ # @return [Hash<Symbol, Hash>]
4
9
  def self.matchers
5
10
  @matchers ||= begin
6
11
  # TinyColor.js matchers
@@ -28,10 +33,14 @@ module Chroma
28
33
  end
29
34
  end
30
35
 
36
+ # @param format [Symbol] unused
37
+ # @param input [String] input to parse
31
38
  def initialize(format, input)
32
39
  @input = normalize_input(input)
33
40
  end
34
41
 
42
+ # Generates a {ColorModes::Rgb}.
43
+ # @return [ColorModes::Rgb]
35
44
  def generate
36
45
  get_generator.generate
37
46
  end
@@ -52,7 +61,9 @@ module Chroma
52
61
  !(match = h[:regex].match(color)).nil?
53
62
  end
54
63
 
55
- raise 'Unrecognized color' if match.nil?
64
+ if match.nil?
65
+ raise Errors::UnrecognizedColor, "Unrecognized color `#{color}'"
66
+ end
56
67
 
57
68
  build_generator(match[1..-1], hash[:class_name], hash[:builder], format)
58
69
  end
@@ -1,3 +1,3 @@
1
1
  module Chroma
2
- VERSION = '0.0.1.alpha.2'
2
+ VERSION = '0.0.1.alpha.3'
3
3
  end
@@ -30,4 +30,10 @@ describe Chroma, '.define_palette' do
30
30
  expect(red.palette.foo).
31
31
  to generate_palette %w(#ff0000 #ffff00 #00ffff #ffff33 #808080)
32
32
  end
33
+
34
+ it 'keeps the same format' do
35
+ add_palette
36
+
37
+ expect('red'.paint.palette.foo).to all have_format :name
38
+ end
33
39
  end
@@ -0,0 +1,173 @@
1
+ describe Chroma::Color, '#palette' do
2
+ let(:red) { 'red'.paint }
3
+
4
+ def palette(name, *args)
5
+ red.palette.send(name, *args)
6
+ end
7
+
8
+ it 'returns an instance of Harmonies' do
9
+ expect(red.palette).to be_a Chroma::Harmonies
10
+ end
11
+
12
+ describe '#complement' do
13
+ it 'returns the color and its complement' do
14
+ expect(red.palette.complement).to generate_palette %w(red cyan)
15
+ end
16
+
17
+ it 'keeps the same format' do
18
+ expect(red.palette.complement).to all have_format :name
19
+ end
20
+
21
+ context 'with option :as' do
22
+ it 'outputs the palette as an array of the string format' do
23
+ expect(red.palette.complement(as: :hex)).
24
+ to eq %w(#ff0000 #00ffff)
25
+ end
26
+ end
27
+ end
28
+
29
+ describe '#triad' do
30
+ it 'returns the triad palette' do
31
+ expect(red.palette.triad).to generate_palette %w(red lime blue)
32
+ end
33
+
34
+ it 'keeps the same format' do
35
+ expect(red.palette.triad).to all have_format :name
36
+ end
37
+
38
+ context 'with option :as' do
39
+ it 'outputs the palette as an array of the string format' do
40
+ expect(red.palette.triad(as: :hex)).
41
+ to eq %w(#ff0000 #00ff00 #0000ff)
42
+ end
43
+ end
44
+ end
45
+
46
+ describe '#tetrad' do
47
+ it 'returns the tetrad palette' do
48
+ expect(red.palette.tetrad).to generate_palette %w(red #80ff00 cyan #7f00ff)
49
+ end
50
+
51
+ it 'keeps the same format' do
52
+ expect(red.palette.tetrad).to all have_format :name
53
+ end
54
+
55
+ context 'with option :as' do
56
+ it 'outputs the palette as an array of the string format' do
57
+ expect(red.palette.tetrad(as: :hex)).
58
+ to eq %w(#ff0000 #80ff00 #00ffff #7f00ff)
59
+ end
60
+ end
61
+ end
62
+
63
+ describe '#split_complement' do
64
+ it 'returns the split complement palette' do
65
+ expect(red.palette.split_complement).to generate_palette %w(red #cf0 #06f)
66
+ end
67
+
68
+ it 'keeps the same format' do
69
+ expect(red.palette.split_complement).to all have_format :name
70
+ end
71
+
72
+ context 'with option :as' do
73
+ it 'outputs the palette as an array of the string format' do
74
+ expect(red.palette.split_complement(as: :hex)).
75
+ to eq %w(#ff0000 #ccff00 #0066ff)
76
+ end
77
+ end
78
+ end
79
+
80
+ describe '#analogous' do
81
+ context 'with default parameters' do
82
+ it 'returns the analogous palette' do
83
+ expect(red.palette.analogous).
84
+ to generate_palette %w(#f00 #f06 #f03 #f00 #f30 #f60)
85
+ end
86
+
87
+ it 'keeps the same format' do
88
+ expect(red.palette.analogous).to all have_format :name
89
+ end
90
+
91
+ context 'with option :as' do
92
+ it 'outputs the palette as an array of the string format' do
93
+ expect(red.palette.analogous(as: :hex)).
94
+ to eq %w(#ff0000 #ff0066 #ff0033 #ff0000 #ff3300 #ff6600)
95
+ end
96
+ end
97
+ end
98
+
99
+ context 'with `results` argument' do
100
+ it 'returns the analogous palette' do
101
+ expect(red.palette.analogous(results: 3)).
102
+ to generate_palette %w(#f00 #ff001a #ff1a00)
103
+ end
104
+
105
+ it 'keeps the same format' do
106
+ expect(red.palette.analogous(results: 3)).to all have_format :name
107
+ end
108
+
109
+ context 'with option :as' do
110
+ it 'outputs the palette as an array of the string format' do
111
+ expect(red.palette.analogous(results: 3, as: :hex)).
112
+ to eq %w(#ff0000 #ff001a #ff1a00)
113
+ end
114
+ end
115
+ end
116
+
117
+ context 'with `results` and `slices` arguments' do
118
+ it 'returns the analogous palette' do
119
+ expect(red.palette.analogous(results: 3, slices: 10)).
120
+ to generate_palette %w(#f00 #ff004c #ff4d00)
121
+ end
122
+
123
+ it 'keeps the same format' do
124
+ expect(red.palette.analogous(results: 3, slices: 10)).to all have_format :name
125
+ end
126
+
127
+ context 'with option :as' do
128
+ it 'outputs the palette as an array of the string format' do
129
+ expect(red.palette.analogous(results: 3, slices: 10, as: :hex)).
130
+ to eq %w(#ff0000 #ff004c #ff4d00)
131
+ end
132
+ end
133
+ end
134
+ end
135
+
136
+ describe '#monochromatic' do
137
+ context 'with default parameters' do
138
+ it 'returns the monochromatic palette' do
139
+ expect(red.palette.monochromatic).
140
+ to generate_palette %w(#f00 #2a0000 #500 #800000 #a00 #d40000)
141
+ end
142
+
143
+ it 'keeps the same format' do
144
+ expect(red.palette.monochromatic).to all have_format :name
145
+ end
146
+
147
+ context 'with option :as' do
148
+ it 'outputs the palette as an array of the string format' do
149
+ expect(red.palette.monochromatic(as: :hex)).
150
+ to eq %w(#ff0000 #2a0000 #550000 #800000 #aa0000 #d40000)
151
+ end
152
+ end
153
+ end
154
+
155
+ context 'with `results` argument' do
156
+ it 'returns the monochromatic palette' do
157
+ expect(red.palette.monochromatic(results: 3)).
158
+ to generate_palette %w(#f00 #500 #a00)
159
+ end
160
+
161
+ it 'keeps the same format' do
162
+ expect(red.palette.monochromatic(results: 3)).to all have_format :name
163
+ end
164
+
165
+ context 'with option :as' do
166
+ it 'outputs the palette as an array of the string format' do
167
+ expect(red.palette.monochromatic(results: 3, as: :hex)).
168
+ to eq %w(#ff0000 #550000 #aa0000)
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,13 @@
1
+ RSpec::Matchers.define :generate_palette do |expected|
2
+ expected.map!(&:paint)
3
+
4
+ match do |actual|
5
+ actual == expected
6
+ end
7
+ end
8
+
9
+ RSpec::Matchers.define :have_format do |expected|
10
+ match do |actual|
11
+ actual.format == expected
12
+ end
13
+ end
@@ -90,10 +90,4 @@ RSpec.configure do |config|
90
90
  =end
91
91
  end
92
92
 
93
- RSpec::Matchers.define :generate_palette do |expected|
94
- expected.map!(&:paint)
95
-
96
- match do |actual|
97
- actual == expected
98
- end
99
- end
93
+ require_relative 'custom_matchers'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chroma
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.alpha.2
4
+ version: 0.0.1.alpha.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Fairbank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-13 00:00:00.000000000 Z
11
+ date: 2015-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -61,6 +61,7 @@ extra_rdoc_files: []
61
61
  files:
62
62
  - ".gitignore"
63
63
  - ".rspec"
64
+ - ".yardopts"
64
65
  - CHANGELOG.md
65
66
  - Gemfile
66
67
  - LICENSE
@@ -77,6 +78,7 @@ files:
77
78
  - lib/chroma/converters/hsl_converter.rb
78
79
  - lib/chroma/converters/hsv_converter.rb
79
80
  - lib/chroma/converters/rgb_converter.rb
81
+ - lib/chroma/errors.rb
80
82
  - lib/chroma/extensions/string.rb
81
83
  - lib/chroma/harmonies.rb
82
84
  - lib/chroma/helpers/bounders.rb
@@ -96,8 +98,10 @@ files:
96
98
  - spec/chroma/define_palette_spec.rb
97
99
  - spec/chroma/paint_spec.rb
98
100
  - spec/color/modifiers_spec.rb
101
+ - spec/color/palette_spec.rb
99
102
  - spec/color/serializers_spec.rb
100
103
  - spec/color_spec.rb
104
+ - spec/custom_matchers.rb
101
105
  - spec/spec_helper.rb
102
106
  homepage: https://github.com/jfairbank/chroma
103
107
  licenses:
@@ -127,6 +131,8 @@ test_files:
127
131
  - spec/chroma/define_palette_spec.rb
128
132
  - spec/chroma/paint_spec.rb
129
133
  - spec/color/modifiers_spec.rb
134
+ - spec/color/palette_spec.rb
130
135
  - spec/color/serializers_spec.rb
131
136
  - spec/color_spec.rb
137
+ - spec/custom_matchers.rb
132
138
  - spec/spec_helper.rb