Sha256: 20eeb7ca97da51d30453429ce7b3c0ba71279e97ba8e2eb7c94099e07dfc077d

Contents?: true

Size: 1.23 KB

Versions: 16

Compression:

Stored size: 1.23 KB

Contents

# frozen_string_literal: true

module Mutant
  class Loader
    include Anima.new(:binding, :kernel, :source, :subject)

    FROZEN_STRING_FORMAT = "# frozen_string_literal: true\n%s"
    VOID_VALUE_REGEXP    = /\A[^:]+:\d+: void value expression/.freeze

    private_constant(*constants(false))

    class Result
      include Singleton

      # Vale returned on successful load
      class Success < self
      end # Success

      # Vale returned on MRI detecting void value expressions
      class VoidValue < self
      end # VoidValue
    end # Result

    # Call loader
    #
    # @return [Result]
    def self.call(*arguments)
      new(*arguments).call
    end

    # Call loader
    #
    # One off the very few valid uses of eval ever.
    #
    # @return [Result]
    #
    # rubocop:disable Metrics/MethodLength
    def call
      kernel.eval(
        FROZEN_STRING_FORMAT % source,
        binding,
        subject.source_path.to_s,
        subject.source_line
      )
    rescue SyntaxError => exception
      # rubocop:disable Style/GuardClause
      if VOID_VALUE_REGEXP.match?(exception.message)
        Result::VoidValue.instance
      else
        raise
      end
    else
      Result::Success.instance
    end
  end # Loader
end # Mutant

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
mutant-0.11.4 lib/mutant/loader.rb
mutant-0.11.3 lib/mutant/loader.rb
mutant-0.11.2 lib/mutant/loader.rb
mutant-0.11.1 lib/mutant/loader.rb
mutant-0.11.0 lib/mutant/loader.rb
mutant-0.10.35 lib/mutant/loader.rb
mutant-0.10.34 lib/mutant/loader.rb
mutant-0.10.33 lib/mutant/loader.rb
mutant-0.10.32 lib/mutant/loader.rb
mutant-0.10.31 lib/mutant/loader.rb
mutant-0.10.30 lib/mutant/loader.rb
mutant-0.10.29 lib/mutant/loader.rb
mutant-0.10.28 lib/mutant/loader.rb
mutant-0.10.27 lib/mutant/loader.rb
mutant-0.10.26 lib/mutant/loader.rb
mutant-0.10.25 lib/mutant/loader.rb