module Chroma::ColorModes

Private Class Methods

build(name, *attrs) click to toggle source

Builds a new color mode class.

@param name [String] the class name @param attrs [Array<Symbol>] the instance attribute names @!macro [attach] build

@!parse class $1
  attr_accessor :$2, :$3, :$4, :a

  # @param $2 [Numeric]
  # @param $3 [Numeric]
  # @param $4 [Numeric]
  # @param a [Numeric]
  def initialize(${2-4}, a = 1)
    @$2, @$3, @$4, @a = $2, $3, $4, a
  end

  # Returns the values `$2`, `$3`, `$4`, and `a` as an array.
  #
  # @return [Array<Numeric>]
  def to_a
    [@$2, @$3, @$4, @a]
  end

  alias_method :to_ary, :to_a
  end
# File lib/chroma/color_modes.rb, line 31
      def build(name, *attrs)
        class_eval <<-EOS
          class #{name}
            attr_accessor #{(attrs + [:a]).map{|attr| ":#{attr}"} * ', '}

            def initialize(#{attrs * ', '}, a = 1)
              #{attrs.map{|attr| "@#{attr}"} * ', '}, @a = #{attrs * ', '}, a
            end

            def to_a
              [#{attrs.map{|attr| "@#{attr}"} * ', '}, @a]
            end

            alias_method :to_ary, :to_a
          end
        EOS
      end