dblock/heroku-commander

View on GitHub
lib/heroku/commander/errors/base.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Heroku
  class Commander
    module Errors
      class Base < StandardError

        # Problem occurred.
        attr_reader :problem

        # Summary of the problem.
        attr_reader :summary

        # Suggested problem resolution.
        attr_reader :resolution

        # Compose the message.
        # === Parameters
        # [key] Lookup key in the translation table.
        # [attributes] The objects to pass to create the message.
        def compose_message(key, attributes = {})
          @problem = create_problem(key, attributes)
          @summary = create_summary(key, attributes)
          @resolution = create_resolution(key, attributes)

          "\nProblem:\n  #{@problem}"+
          "\nSummary:\n  #{@summary}"+
          "\nResolution:\n  #{@resolution}"
        end

        private

          BASE_KEY = "heroku.commander.errors.messages" #:nodoc:

          # Given the key of the specific error and the options hash, translate the
          # message.
          #
          # === Parameters
          # [key] The key of the error in the locales.
          # [options] The objects to pass to create the message.
          #
          # Returns a localized error message string.
          def translate(key, options)
            ::I18n.translate("#{BASE_KEY}.#{key}", { :locale => :en }.merge(options)).strip
          end

          # Create the problem.
          #
          # === Parameters
          # [key] The error key.
          # [attributes] The attributes to interpolate.
          #
          # Returns the problem.
          def create_problem(key, attributes)
            translate("#{key}.message", attributes)
          end

          # Create the summary.
          #
          # === Parameters
          # [key] The error key.
          # [attributes] The attributes to interpolate.
          #
          # Returns the summary.
          def create_summary(key, attributes)
            translate("#{key}.summary", attributes)
          end

          # Create the resolution.
          #
          # === Parameters
          # [key] The error key.
          # [attributes] The attributes to interpolate.
          #
          # Returns the resolution.
          def create_resolution(key, attributes)
            translate("#{key}.resolution", attributes)
          end

      end
    end
  end
end