Sha256: 6fe3b5ba7492f83074d332893d57a05647ffffadccb1c62975aad09d3425132c

Contents?: true

Size: 1.67 KB

Versions: 3

Compression:

Stored size: 1.67 KB

Contents

module Vedeu

  class ColourCoercer

    # @param value [Vedeu::Colour|Hash<Symbol => Fixnum|String|Symbol>]
    # @return [Vedeu::Colour]
    def self.coerce(value)
      new(value).coerce
    end

    # @param value [Hash<Symbol => Fixnum|String|Symbol>]
    def self.from_hash(value)
      new(value).from_hash
    end

    # @param value [Vedeu::Colour|Hash<Symbol => Fixnum|String|Symbol]
    # @return [Vedeu::ColourCoercer]
    def initialize(value)
      @value = value
    end

    # @return [Vedeu::Colour]
    def coerce
      return value if colour?

      if hash?
        Vedeu::ColourCoercer.from_hash(value)

      else
        build

      end
    end

    # @return [Vedeu::Colour]
    def from_hash
      return build unless value

      if colour_key?
        Vedeu::ColourCoercer.coerce(value[:colour])

      elsif background? || foreground?
        build_from_hash(value)

      else
        build

      end
    end

    protected

    # @!attribute [r] colour
    # @return [void]
    attr_reader :value

    private

    # @return [Vedeu::Colour]
    def build
      Vedeu::Colour.new
    end

    # @param value [Hash<Symbol => Fixnum|String|Symbol>]
    # @return [Vedeu::Colour]
    def build_from_hash(value)
      Vedeu::Colour.new(value)
    end

    # @return [Boolean]
    def colour?
      value.is_a?(Vedeu::Colour)
    end

    # @return [Boolean]
    def hash?
      value.is_a?(Hash)
    end

    # @return [Boolean]
    def background?
      value.key?(:background)
    end

    # @return [Boolean]
    def colour_key?
      value.key?(:colour)
    end

    # @return [Boolean]
    def foreground?
      value.key?(:foreground)
    end

  end # ColourCoercer

end # Vedeu

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
vedeu-0.4.37 lib/vedeu/support/colour_coercer.rb
vedeu-0.4.36 lib/vedeu/support/colour_coercer.rb
vedeu-0.4.35 lib/vedeu/support/colour_coercer.rb