Sha256: 907027f1b20005f61d45bda788f7c22111699107874f6b1d83f014906cf5d5a4

Contents?: true

Size: 1.14 KB

Versions: 9

Compression:

Stored size: 1.14 KB

Contents

# frozen_string_literal: true

require_relative 'base'
require_relative 'issue'
require_relative 'merge_request'
require_relative 'instance_version'

module Gitlab
  module Triage
    module Resource
      module Context
        EvaluationError = Class.new(RuntimeError)

        def self.build(resource, **options)
          const_name = (resource[:type] || 'Base')
            .to_s.singularize.camelcase

          Resource.const_get(const_name).new(resource, **options).extend(self)
        end

        def eval(ruby)
          instance_eval <<~RUBY
            begin
              #{ruby}
            rescue StandardError, ScriptError => e
              raise EvaluationError.new(e.message)
            end
          RUBY
        rescue EvaluationError => e
          # This way we could obtain the original backtrace and error
          # If we just let instance_eval raise an error, the backtrace
          # won't contain the actual line where it's giving an error.
          raise e.cause
        end

        private

        def instance_version
          @instance_version ||= InstanceVersion.new(parent: self)
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
gitlab-triage-1.3.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.2.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.1.1 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.1.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.0.1 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.0.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-0.17.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-0.16.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-0.15.0 lib/gitlab/triage/resource/context.rb