color_converters 0.1.0 → 0.1.2

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 (21) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +30 -21
  3. data/lib/{color_converter → color_converters}/base_converter.rb +6 -4
  4. data/lib/{color_converter → color_converters}/color.rb +2 -2
  5. data/lib/{color_converter/color_converters → color_converters/converters}/cielab_converter.rb +5 -5
  6. data/lib/{color_converter/color_converters/oklch_converter.rb → color_converters/converters/cielch_converter.rb} +8 -8
  7. data/lib/{color_converter/color_converters → color_converters/converters}/cmyk_converter.rb +1 -1
  8. data/lib/{color_converter/color_converters → color_converters/converters}/hex_converter.rb +2 -2
  9. data/lib/{color_converter/color_converters → color_converters/converters}/hsl_converter.rb +1 -1
  10. data/lib/{color_converter/color_converters → color_converters/converters}/hsl_string_converter.rb +1 -2
  11. data/lib/{color_converter/color_converters → color_converters/converters}/hsv_converter.rb +1 -1
  12. data/lib/{color_converter/color_converters → color_converters/converters}/name_converter.rb +3 -3
  13. data/lib/{color_converter/color_converters → color_converters/converters}/null_converter.rb +1 -1
  14. data/lib/{color_converter/color_converters → color_converters/converters}/rgb_converter.rb +1 -1
  15. data/lib/{color_converter/color_converters → color_converters/converters}/rgb_string_converter.rb +1 -2
  16. data/lib/{color_converter/color_converters → color_converters/converters}/xyz_converter.rb +1 -1
  17. data/lib/color_converters/version.rb +5 -0
  18. data/lib/color_converters.rb +28 -0
  19. metadata +18 -18
  20. data/lib/color_converter/version.rb +0 -5
  21. data/lib/color_converter.rb +0 -28
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41c9c2e35a56c7fcbc75a4b96a923cef9c106c260b2eb567caa958404042466a
4
- data.tar.gz: f8ee279b96b83cb0938acc291a58752e495c2a6295227f9d3ad5f88ea33ad280
3
+ metadata.gz: 571bd439610154032f4532335702ecb175cd3b022b966843b81ebc26c12a5411
4
+ data.tar.gz: 33dad1ab16c74560c7fd4587392400002cc863ee16e77bff739e28577f1b9451
5
5
  SHA512:
6
- metadata.gz: f9db0a0eec4f2380b45a21be819e5c698dbdcf73e5fbf064e2f97f90a0debd46e62e6e5fc63a07ea64b0ba1c84e2150dc6475d029a577747376f27d3acbe9fd1
7
- data.tar.gz: e1a9aec3fee9cb4a467f6d16b42482088c5af3390dead1574015d1cea5e4bdeff69d314f73c9a60566b0ef6d0d087b696235783029888a5da993a351839761e6
6
+ metadata.gz: 6c9138a8fa458032dfcc2319a2d188a545e9042cfe740d168b737a5d984b4ec94501efce7d384a54baf3ea717384e6b9cc0fbebc8d085a2eb46c24879fa2cefb
7
+ data.tar.gz: 5cdd92b601b6458552e617413ff4cd1b884571009d5d565e727e47d57da202feb9e9b4b6a6e8ac0fd2592b612b055bc9aa78cbe530f85336bc5fb0d2a07ed236
data/README.md CHANGED
@@ -41,49 +41,49 @@ Initialize a color:
41
41
 
42
42
  ```ruby
43
43
  # from hex
44
- color = Color.new("#3366cc")
45
- color = Color.new("#36c")
44
+ color = ColorConverters::Color.new("#3366cc")
45
+ color = ColorConverters::Color.new("#36c")
46
46
 
47
47
  # from rgb(a)
48
- color = Color.new(r: 51, g: 102, b: 204)
49
- color = Color.new(r: 51, g: 102, b: 204, a: 0.5)
48
+ color = ColorConverters::Color.new(r: 51, g: 102, b: 204)
49
+ color = ColorConverters::Color.new(r: 51, g: 102, b: 204, a: 0.5)
50
50
 
51
51
  # from hsl(a)
52
- color = Color.new(h: 225, s: 73, l: 57)
53
- color = Color.new(h: 225, s: 73, l: 57, a: 0.5)
52
+ color = ColorConverters::Color.new(h: 225, s: 73, l: 57)
53
+ color = ColorConverters::Color.new(h: 225, s: 73, l: 57, a: 0.5)
54
54
 
55
55
  # from hsv/hsb
56
- color = Color.new(h: 220, s: 75, v: 80)
57
- color = Color.new(h: 220, s: 75, b: 80)
56
+ color = ColorConverters::Color.new(h: 220, s: 75, v: 80)
57
+ color = ColorConverters::Color.new(h: 220, s: 75, b: 80)
58
58
 
59
59
  # from cmyk
60
- color = Color.new(c: 74, m: 58, y: 22, k: 3)
60
+ color = ColorConverters::Color.new(c: 74, m: 58, y: 22, k: 3)
61
61
 
62
62
  # from xyz
63
- color = Color.new(x: 16, y: 44, z: 32)
63
+ color = ColorConverters::Color.new(x: 16, y: 44, z: 32)
64
64
 
65
65
  # from cielab
66
- color = Color.new(l: 16, a: 44, b: 32)
66
+ color = ColorConverters::Color.new(l: 16, a: 44, b: 32, space: :cie)
67
67
 
68
- # from oklch
69
- color = Color.new(l: 16, c: 44, h: 32)
68
+ # from cielch
69
+ color = ColorConverters::Color.new(l: 16, c: 44, h: 32, space: :cie)
70
70
 
71
71
  # from textual color
72
- color = Color.new("blue")
72
+ color = ColorConverters::Color.new("blue")
73
73
 
74
74
  # from a css rgb(a) string
75
- color = Color.new("rgb(51, 102, 204)")
76
- color = Color.new("rgba(51, 102, 204, 0.5)")
75
+ color = ColorConverters::Color.new("rgb(51, 102, 204)")
76
+ color = ColorConverters::Color.new("rgba(51, 102, 204, 0.5)")
77
77
 
78
78
  # from a css hsl(a) string
79
- color = Color.new("hsl(225, 73%, 57%)")
80
- color = Color.new("hsl(225, 73%, 57%, 0.5)")
79
+ color = ColorConverters::Color.new("hsl(225, 73%, 57%)")
80
+ color = ColorConverters::Color.new("hsl(225, 73%, 57%, 0.5)")
81
81
  ```
82
82
 
83
83
  Converters
84
84
 
85
85
  ```ruby
86
- color = Color.new(r: 70, g: 130, b: 180, a: 0.5)
86
+ color = ColorConverters::Color.new(r: 70, g: 130, b: 180, a: 0.5)
87
87
 
88
88
  color.alpha
89
89
  => 0.5
@@ -109,7 +109,7 @@ color.xyz
109
109
  color.cielab
110
110
  => {:l=>52.47, :a=>-4.08, :b=>-32.19}
111
111
 
112
- color.oklch
112
+ color.cielch
113
113
  => {:l=>52.47, :c=>32.45, :h=>262.78}
114
114
 
115
115
  color.hex
@@ -121,13 +121,22 @@ color.name
121
121
 
122
122
  ## Options
123
123
 
124
+ ### space
125
+
126
+ As there are certain color spaces that use the same letter keys, there needed to be a way to different between those space.
127
+ The space parameter allows that, with examples in the usage code above
128
+
129
+ ```ruby
130
+ ColorConverters::Color.new(l: 64, a: 28, b: -15, space: :cie)
131
+ ```
132
+
124
133
  ### limit_override
125
134
 
126
135
  By default all values are checked to be within the expected number ranges, i.e.; rgb between 0-255 each.
127
136
  This parameter allows you to ignore those ranges and submit any values you want.
128
137
 
129
138
  ```ruby
130
- Color.new(r: 270, g: 1300, b: 380, a: 0.5, limit_override: true)
139
+ ColorConverters::Color.new(r: 270, g: 1300, b: 380, a: 0.5, limit_override: true)
131
140
  ```
132
141
 
133
142
  ## Development
@@ -1,6 +1,6 @@
1
1
  require 'active_support/core_ext/object/blank'
2
2
 
3
- module ColorConverter
3
+ module ColorConverters
4
4
  class BaseConverter
5
5
  IMPORT_DP = 2
6
6
  OUTPUT_DP = 2
@@ -26,6 +26,8 @@ module ColorConverter
26
26
  def initialize(color_input, limit_override = false)
27
27
  @original_value = color_input
28
28
 
29
+ # self.clamp_input(color_input) if limit_clamp == true
30
+
29
31
  if limit_override == false && !self.validate_input(color_input)
30
32
  raise InvalidColorError # validation method is defined in each convertor
31
33
  end
@@ -72,13 +74,13 @@ module ColorConverter
72
74
  end
73
75
 
74
76
  def cielab
75
- l, a, b = CielabConverter.xyz_to_lab(XyzConverter.rgb_to_xyz(self.rgb_array_frac))
77
+ l, a, b = CielabConverter.xyz_to_cielab(XyzConverter.rgb_to_xyz(self.rgb_array_frac))
76
78
 
77
79
  { l: l.round(OUTPUT_DP), a: a.round(OUTPUT_DP), b: b.round(OUTPUT_DP) }
78
80
  end
79
81
 
80
- def oklch
81
- l, c, h = OklchConverter.lab_to_lch(CielabConverter.xyz_to_lab(XyzConverter.rgb_to_xyz(self.rgb_array_frac)))
82
+ def cielch
83
+ l, c, h = CielchConverter.cielab_to_cielch(CielabConverter.xyz_to_cielab(XyzConverter.rgb_to_xyz(self.rgb_array_frac)))
82
84
 
83
85
  { l: l.round(OUTPUT_DP), c: c.round(OUTPUT_DP), h: h.round(OUTPUT_DP) }
84
86
  end
@@ -1,7 +1,7 @@
1
- module ColorConverter
1
+ module ColorConverters
2
2
  class Color
3
3
  extend Forwardable
4
- def_delegators :@converter, :rgb, :hex, :hsl, :hsv, :hsb, :cmyk, :xyz, :cielab, :oklch, :name, :alpha
4
+ def_delegators :@converter, :rgb, :hex, :hsl, :hsv, :hsb, :cmyk, :xyz, :cielab, :cielch, :name, :alpha
5
5
 
6
6
  def initialize(color)
7
7
  @converter = BaseConverter.factory(color)
@@ -1,9 +1,9 @@
1
- module ColorConverter
1
+ module ColorConverters
2
2
  class CielabConverter < BaseConverter
3
3
  def self.matches?(color_input)
4
4
  return false unless color_input.is_a?(Hash)
5
5
 
6
- color_input.keys - [:l, :a, :b] == []
6
+ color_input.keys - [:l, :a, :b, :space] == [] && color_input[:space].to_s == 'cie'
7
7
  end
8
8
 
9
9
  def self.bounds
@@ -18,11 +18,11 @@ module ColorConverter
18
18
  end
19
19
 
20
20
  def input_to_rgba(color_input)
21
- xyz_hash = CielabConverter.lab_to_xyz(color_input)
21
+ xyz_hash = CielabConverter.cielab_to_xyz(color_input)
22
22
  XyzConverter.new(xyz_hash, limit_override: true).rgba
23
23
  end
24
24
 
25
- def self.lab_to_xyz(color_input)
25
+ def self.cielab_to_xyz(color_input)
26
26
  l = color_input[:l].to_f
27
27
  a = color_input[:a].to_f
28
28
  b = color_input[:b].to_f
@@ -48,7 +48,7 @@ module ColorConverter
48
48
  { x: x, y: y, z: z }
49
49
  end
50
50
 
51
- def self.xyz_to_lab(xyz_array)
51
+ def self.xyz_to_cielab(xyz_array)
52
52
  x, y, z = xyz_array
53
53
 
54
54
  # The D65 standard illuminant white point
@@ -1,9 +1,9 @@
1
- module ColorConverter
2
- class OklchConverter < BaseConverter
1
+ module ColorConverters
2
+ class CielchConverter < BaseConverter
3
3
  def self.matches?(color_input)
4
4
  return false unless color_input.is_a?(Hash)
5
5
 
6
- color_input.keys - [:l, :c, :h] == []
6
+ color_input.keys - [:l, :c, :h, :space] == [] && color_input[:space].to_s == 'cie'
7
7
  end
8
8
 
9
9
  def self.bounds
@@ -13,17 +13,17 @@ module ColorConverter
13
13
  private
14
14
 
15
15
  def validate_input(color_input)
16
- bounds = OklchConverter.bounds
16
+ bounds = CielchConverter.bounds
17
17
  color_input[:l].to_f.between?(*bounds[:l]) && color_input[:c].to_f.between?(*bounds[:c]) && color_input[:h].to_f.between?(*bounds[:h])
18
18
  end
19
19
 
20
20
  def input_to_rgba(color_input)
21
- lab_hash = OklchConverter.lch_to_lab(color_input)
22
- xyz_hash = CielabConverter.lab_to_xyz(lab_hash)
21
+ lab_hash = CielchConverter.cielch_to_cielab(color_input)
22
+ xyz_hash = CielabConverter.cielab_to_xyz(lab_hash)
23
23
  XyzConverter.new(xyz_hash, limit_override: true).rgba
24
24
  end
25
25
 
26
- def self.lch_to_lab(color_input)
26
+ def self.cielch_to_cielab(color_input)
27
27
  l = color_input[:l].to_f
28
28
  c = color_input[:c].to_f
29
29
  h = color_input[:h].to_f
@@ -36,7 +36,7 @@ module ColorConverter
36
36
  { l: l, a: a, b: b }
37
37
  end
38
38
 
39
- def self.lab_to_lch(lab_array)
39
+ def self.cielab_to_cielch(lab_array)
40
40
  l, aa, bb = lab_array
41
41
 
42
42
  c = ((aa**2) + (bb**2))**0.5
@@ -1,4 +1,4 @@
1
- module ColorConverter
1
+ module ColorConverters
2
2
  class CmykConverter < BaseConverter
3
3
  def self.matches?(color_input)
4
4
  return false unless color_input.is_a?(Hash)
@@ -1,4 +1,4 @@
1
- module ColorConverter
1
+ module ColorConverters
2
2
  class HexConverter < BaseConverter
3
3
  def self.matches?(color)
4
4
  return false unless color.is_a?(String)
@@ -9,8 +9,8 @@ module ColorConverter
9
9
  private
10
10
 
11
11
  def validate_input(color_input)
12
+ # TODO
12
13
  true
13
- # color_input[:l].to_f.between?(0.0, 100.0) && color_input[:a].between?(-128.0, 127.0) && color_input[:b].between?(-128.0, 127.0)
14
14
  end
15
15
 
16
16
  def input_to_rgba(color_input)
@@ -1,4 +1,4 @@
1
- module ColorConverter
1
+ module ColorConverters
2
2
  class HslConverter < BaseConverter
3
3
  def self.matches?(color_input)
4
4
  return false unless color_input.is_a?(Hash)
@@ -1,4 +1,4 @@
1
- module ColorConverter
1
+ module ColorConverters
2
2
  class HslStringConverter < BaseConverter
3
3
  def self.matches?(color_input)
4
4
  return false unless color_input.is_a?(String)
@@ -10,7 +10,6 @@ module ColorConverter
10
10
 
11
11
  def validate_input(color_input)
12
12
  true
13
- # color_input[:l].between?(0.0, 100.0) && color_input[:a].between?(-128.0, 127.0) && color_input[:b].between?(-128.0, 127.0)
14
13
  end
15
14
 
16
15
  def input_to_rgba(color_input)
@@ -1,4 +1,4 @@
1
- module ColorConverter
1
+ module ColorConverters
2
2
  class HsvConverter < BaseConverter
3
3
  def self.matches?(color_input)
4
4
  return false unless color_input.is_a?(Hash)
@@ -1,4 +1,4 @@
1
- module ColorConverter
1
+ module ColorConverters
2
2
  class NameConverter < BaseConverter
3
3
  def self.matches?(color_input)
4
4
  return false unless color_input.is_a?(String)
@@ -15,9 +15,9 @@ module ColorConverter
15
15
 
16
16
  private
17
17
 
18
- def validate_input(color_input)
18
+ def validate_input(color_input) #
19
+ # TODO: validate against list of keys?
19
20
  true
20
- # color_input[:l].between?(0.0, 100.0) && color_input[:a].between?(-128.0, 127.0) && color_input[:b].between?(-128.0, 127.0)
21
21
  end
22
22
 
23
23
  def input_to_rgba(color_input)
@@ -1,4 +1,4 @@
1
- module ColorConverter
1
+ module ColorConverters
2
2
  class NullConverter < BaseConverter
3
3
  def self.matches?(_color_input)
4
4
  true
@@ -1,4 +1,4 @@
1
- module ColorConverter
1
+ module ColorConverters
2
2
  class RgbConverter < BaseConverter
3
3
  def self.matches?(color_input)
4
4
  return false unless color_input.is_a?(Hash)
@@ -1,4 +1,4 @@
1
- module ColorConverter
1
+ module ColorConverters
2
2
  class RgbStringConverter < BaseConverter
3
3
  def self.matches?(color_input)
4
4
  return false unless color_input.is_a?(String)
@@ -10,7 +10,6 @@ module ColorConverter
10
10
 
11
11
  def validate_input(color_input)
12
12
  true
13
- # color_input[:l].between?(0.0, 100.0) && color_input[:a].between?(-128.0, 127.0) && color_input[:b].between?(-128.0, 127.0)
14
13
  end
15
14
 
16
15
  def input_to_rgba(color_input)
@@ -1,4 +1,4 @@
1
- module ColorConverter
1
+ module ColorConverters
2
2
  class XyzConverter < BaseConverter
3
3
  def self.matches?(color_input)
4
4
  return false unless color_input.is_a?(Hash)
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ColorConverters
4
+ VERSION = '0.1.2'
5
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+
5
+ require 'color_converters/version'
6
+
7
+ require 'color_converters/color'
8
+ require 'color_converters/base_converter'
9
+
10
+ require 'color_converters/converters/rgb_converter'
11
+ require 'color_converters/converters/rgb_string_converter'
12
+ require 'color_converters/converters/hex_converter'
13
+ require 'color_converters/converters/hsl_converter'
14
+ require 'color_converters/converters/hsl_string_converter'
15
+ require 'color_converters/converters/hsv_converter'
16
+ require 'color_converters/converters/cmyk_converter'
17
+ require 'color_converters/converters/xyz_converter'
18
+ require 'color_converters/converters/cielab_converter'
19
+ require 'color_converters/converters/cielch_converter'
20
+
21
+ require 'color_converters/converters/name_converter'
22
+ require 'color_converters/converters/null_converter'
23
+
24
+ module ColorConverters
25
+ class Error < StandardError; end
26
+ class InvalidColorError < Error; end
27
+ # Your code goes here...
28
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: color_converters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Louis Davis
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-06-25 00:00:00.000000000 Z
10
+ date: 2025-06-26 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activesupport
@@ -32,22 +32,22 @@ extra_rdoc_files: []
32
32
  files:
33
33
  - README.md
34
34
  - Rakefile
35
- - lib/color_converter.rb
36
- - lib/color_converter/base_converter.rb
37
- - lib/color_converter/color.rb
38
- - lib/color_converter/color_converters/cielab_converter.rb
39
- - lib/color_converter/color_converters/cmyk_converter.rb
40
- - lib/color_converter/color_converters/hex_converter.rb
41
- - lib/color_converter/color_converters/hsl_converter.rb
42
- - lib/color_converter/color_converters/hsl_string_converter.rb
43
- - lib/color_converter/color_converters/hsv_converter.rb
44
- - lib/color_converter/color_converters/name_converter.rb
45
- - lib/color_converter/color_converters/null_converter.rb
46
- - lib/color_converter/color_converters/oklch_converter.rb
47
- - lib/color_converter/color_converters/rgb_converter.rb
48
- - lib/color_converter/color_converters/rgb_string_converter.rb
49
- - lib/color_converter/color_converters/xyz_converter.rb
50
- - lib/color_converter/version.rb
35
+ - lib/color_converters.rb
36
+ - lib/color_converters/base_converter.rb
37
+ - lib/color_converters/color.rb
38
+ - lib/color_converters/converters/cielab_converter.rb
39
+ - lib/color_converters/converters/cielch_converter.rb
40
+ - lib/color_converters/converters/cmyk_converter.rb
41
+ - lib/color_converters/converters/hex_converter.rb
42
+ - lib/color_converters/converters/hsl_converter.rb
43
+ - lib/color_converters/converters/hsl_string_converter.rb
44
+ - lib/color_converters/converters/hsv_converter.rb
45
+ - lib/color_converters/converters/name_converter.rb
46
+ - lib/color_converters/converters/null_converter.rb
47
+ - lib/color_converters/converters/rgb_converter.rb
48
+ - lib/color_converters/converters/rgb_string_converter.rb
49
+ - lib/color_converters/converters/xyz_converter.rb
50
+ - lib/color_converters/version.rb
51
51
  homepage: https://github.com/louiswdavis/color_converters
52
52
  licenses:
53
53
  - MIT
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ColorConverter
4
- VERSION = '0.1.0'
5
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'forwardable'
4
-
5
- require 'color_converter/version'
6
-
7
- require 'color_converter/color'
8
- require 'color_converter/base_converter'
9
-
10
- require 'color_converter/color_converters/rgb_converter'
11
- require 'color_converter/color_converters/rgb_string_converter'
12
- require 'color_converter/color_converters/hex_converter'
13
- require 'color_converter/color_converters/hsl_converter'
14
- require 'color_converter/color_converters/hsl_string_converter'
15
- require 'color_converter/color_converters/hsv_converter'
16
- require 'color_converter/color_converters/cmyk_converter'
17
- require 'color_converter/color_converters/xyz_converter'
18
- require 'color_converter/color_converters/cielab_converter'
19
- require 'color_converter/color_converters/oklch_converter'
20
-
21
- require 'color_converter/color_converters/name_converter'
22
- require 'color_converter/color_converters/null_converter'
23
-
24
- module ColorConverter
25
- class Error < StandardError; end
26
- class InvalidColorError < Error; end
27
- # Your code goes here...
28
- end