Sha256: d3edd73332a6c83398ada9e9f83faeda6af733066b53e72427fed013ea9d8486

Contents?: true

Size: 1.1 KB

Versions: 15

Compression:

Stored size: 1.1 KB

Contents

# frozen_string_literal: true

module Vedeu

  module Coercers

    # Converts a given value into a {Vedeu::Colours::Colour} if
    # possible.
    #
    # @api private
    #
    class Colour < Vedeu::Coercers::Coercer

      # @macro raise_fatal
      # @return [Vedeu::Colours::Colour]
      def coerce
        if coerced?
          value

        elsif absent?(value)
          klass.new

        elsif background?
          klass.new(background: value)

        elsif foreground?
          klass.new(foreground: value)

        elsif hash?(value)
          klass.new(colour_attributes)

        else
          incoercible!

        end
      end

      private

      # @return [Hash]
      def colour_attributes
        Vedeu::Coercers::ColourAttributes.coerce(value)
      end

      # @return [Boolean]
      def background?
        value.is_a?(Vedeu::Colours::Background)
      end

      # @return [Boolean]
      def foreground?
        value.is_a?(Vedeu::Colours::Foreground)
      end

      # @return [Class]
      def klass
        Vedeu::Colours::Colour
      end

    end # Colour

  end # Coercers

end # Vedeu

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
vedeu-0.8.32 lib/vedeu/coercers/colour.rb
vedeu-0.8.31 lib/vedeu/coercers/colour.rb
vedeu-0.8.30 lib/vedeu/coercers/colour.rb
vedeu-0.8.29 lib/vedeu/coercers/colour.rb
vedeu-0.8.28 lib/vedeu/coercers/colour.rb
vedeu-0.8.27 lib/vedeu/coercers/colour.rb
vedeu-0.8.26 lib/vedeu/coercers/colour.rb
vedeu-0.8.25 lib/vedeu/coercers/colour.rb
vedeu-0.8.24 lib/vedeu/coercers/colour.rb
vedeu-0.8.23 lib/vedeu/coercers/colour.rb
vedeu-0.8.22 lib/vedeu/coercers/colour.rb
vedeu-0.8.21 lib/vedeu/coercers/colour.rb
vedeu-0.8.20 lib/vedeu/coercers/colour.rb
vedeu-0.8.19 lib/vedeu/coercers/colour.rb
vedeu-0.8.18 lib/vedeu/coercers/colour.rb