Sha256: 9055cdaf5f6b6ced0c725c54dc026e23eebfa1eb1b10ab310cb72513a5e44d44

Contents?: true

Size: 1.16 KB

Versions: 21

Compression:

Stored size: 1.16 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, __FILE__, __LINE__ + 1
            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

21 entries across 21 versions & 1 rubygems

Version Path
gitlab-triage-1.15.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.14.3 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.14.2 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.14.1 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.14.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.13.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.12.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.11.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.10.1 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.10.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.9.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.8.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.7.1 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.7.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.6.1 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.6.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.5.1 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.5.0 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.4.2 lib/gitlab/triage/resource/context.rb
gitlab-triage-1.4.1 lib/gitlab/triage/resource/context.rb