Sha256: 4624434c7ce4203597dfdb458bda509ef7c66bc86751ffcc67081344a033e762

Contents?: true

Size: 1.92 KB

Versions: 34

Compression:

Stored size: 1.92 KB

Contents

# frozen_string_literal: true

require 'colorized_string'
require 'eac_ruby_utils/listable'
require 'eac_ruby_utils/core_ext'

module Avm
  class Result < ::SimpleDelegator
    include ::EacRubyUtils::Listable

    lists.add_string :type, :success, :error, :neutral, :pending, :outdated

    lists.type.values.each do |type| # rubocop:disable Style/HashEachMethods
      singleton_class.define_method type do |value|
        new(value, type)
      end
    end

    TYPE_SUCCESS_COLOR = 'green'
    TYPE_ERROR_COLOR = 'red'
    TYPE_NEUTRAL_COLOR = 'light_black'
    TYPE_PENDING_COLOR = 'yellow'
    TYPE_OUTDATED_COLOR = 'blue'

    class << self
      # Return Avm::Result.success(success_value) if +success+ is truthy.
      # Return Avm::Result.error(error_value || success_value) if +success+ is falsely.
      # @return [Avm::Result]
      def success_or_error(success, success_value, error_value = nil)
        if success
          self.success(success_value)
        else
          error(error_value.presence || success_value)
        end
      end
    end

    attr_reader :type

    def initialize(value, type)
      super(value)
      validate_type(type)
      @type = type
    end

    def label
      label_fg
    end

    def label_fg
      ColorizedString.new(to_s).send(type_color)
    end

    def label_bg
      ColorizedString.new(to_s).light_white.send("on_#{type_color}")
    end

    def type_color
      self.class.const_get("type_#{type}_color".upcase)
    end

    lists.type.values.each do |type| # rubocop:disable Style/HashEachMethods
      define_method "#{type}?" do
        @type == type
      end
    end

    private

    def validate_type(type)
      return if self.class.lists.type.values.include?(type)

      raise "Tipo desconhecido: \"#{type}\" (VĂ¡lido: #{self.class.lists.type.values.join(', ')})"
    end

    class Error < StandardError
      def to_result
        ::Avm::Result.error(message)
      end
    end
  end
end

Version data entries

34 entries across 34 versions & 2 rubygems

Version Path
avm-0.94.1 lib/avm/result.rb
eac_tools-0.98.0 sub/avm/lib/avm/result.rb
avm-0.94.0 lib/avm/result.rb
eac_tools-0.94.0 sub/avm/lib/avm/result.rb
avm-0.93.0 lib/avm/result.rb
eac_tools-0.92.0 sub/avm/lib/avm/result.rb
avm-0.92.0 lib/avm/result.rb
eac_tools-0.91.0 sub/avm/lib/avm/result.rb
avm-0.90.1 lib/avm/result.rb
eac_tools-0.87.1 sub/avm/lib/avm/result.rb
avm-0.90.0 lib/avm/result.rb
eac_tools-0.87.0 sub/avm/lib/avm/result.rb
avm-0.89.0 lib/avm/result.rb
eac_tools-0.86.12 sub/avm/lib/avm/result.rb
avm-0.88.0 lib/avm/result.rb
eac_tools-0.86.11 sub/avm/lib/avm/result.rb
avm-0.87.0 lib/avm/result.rb
eac_tools-0.86.8 sub/avm/lib/avm/result.rb
avm-0.86.2 lib/avm/result.rb
eac_tools-0.86.7 sub/avm/lib/avm/result.rb