Class: Stylegen::Color

Inherits:
Object
  • Object
show all
Defined in:
lib/stylegen/colors/color.rb

Constant Summary collapse

MAX_PRECISION =
16

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(red, green, blue, alpha) ⇒ Color

Returns a new instance of Color.



9
10
11
12
13
14
# File 'lib/stylegen/colors/color.rb', line 9

def initialize(red, green, blue, alpha)
  @red = red
  @green = green
  @blue = blue
  @alpha = alpha
end

Instance Attribute Details

#alphaObject (readonly)

Returns the value of attribute alpha.



5
6
7
# File 'lib/stylegen/colors/color.rb', line 5

def alpha
  @alpha
end

#blueObject (readonly)

Returns the value of attribute blue.



5
6
7
# File 'lib/stylegen/colors/color.rb', line 5

def blue
  @blue
end

#greenObject (readonly)

Returns the value of attribute green.



5
6
7
# File 'lib/stylegen/colors/color.rb', line 5

def green
  @green
end

#redObject (readonly)

Returns the value of attribute red.



5
6
7
# File 'lib/stylegen/colors/color.rb', line 5

def red
  @red
end

Class Method Details

.from_hex(hex, alpha = nil) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/stylegen/colors/color.rb', line 16

def self.from_hex(hex, alpha = nil)
  if (match = hex.downcase.match(/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/))
    r = Integer(match.captures[0], 16) / 255.0
    g = Integer(match.captures[1], 16) / 255.0
    b = Integer(match.captures[2], 16) / 255.0
  elsif (match = hex.downcase.match(/^#?([a-f\d])([a-f\d])([a-f\d])$/))
    r = Integer(match.captures[0] * 2, 16) / 255.0
    g = Integer(match.captures[1] * 2, 16) / 255.0
    b = Integer(match.captures[2] * 2, 16) / 255.0
  else
    raise ArgumentError, "Invalid color syntax: #{hex}"
  end

  Color.new(
    r.round(MAX_PRECISION),
    g.round(MAX_PRECISION),
    b.round(MAX_PRECISION),
    alpha || 1.0
  )
end

Instance Method Details

#grayscale?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/stylegen/colors/color.rb', line 37

def grayscale?
  @red == @green && @green == @blue
end

#to_s(struct_name, indent = 0) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/stylegen/colors/color.rb', line 41

def to_s(struct_name, indent = 0)
  if grayscale?
    "#{struct_name}(white: #{@red}, alpha: #{@alpha})"
  else
    indent_prefix = ' ' * indent

    result = []
    result << "#{struct_name}("
    result << "#{indent_prefix}    red: #{@red},"
    result << "#{indent_prefix}    green: #{@green},"
    result << "#{indent_prefix}    blue: #{@blue},"
    result << "#{indent_prefix}    alpha: #{@alpha}"
    result << "#{indent_prefix})"

    result.join("\n")
  end
end