Sha256: dfbe5227f21ae0a236c010dee9dd05d346689607fc0ba6f5ad3e41504f903e9b

Contents?: true

Size: 1.36 KB

Versions: 3

Compression:

Stored size: 1.36 KB

Contents

module RSpec
  module Paramz
    module PrettyPrint
      def self.inspect(value, raw_value = true)
        case value
        when Hash
          subject(value)
        when Proc
          to_source(value)
        else
          raw_value ? value : value.inspect
        end
      end

      def self.subject(value)
        return value if value.keys != [:subject]

        _subject = value.values.first
        case _subject
        when Proc
          "subject #{to_source(_subject)}"
        when Hash
          subject_name  = _subject.keys.first
          subject_value = _subject.values.first

          case subject_value
          when Proc
            "subject(:#{subject_name}) #{to_source(subject_value)}"
          else
            "subject { #{subject_value} }"
          end
        else
          value
        end
      end

      def self.to_source(value)
        return value if value.is_a?(NamedProc) || !value.is_a?(Proc)

        node = RubyVM::AbstractSyntaxTree.of(value)
        return value if node.nil?

        path = value.source_location.first
        lines = File.readlines(path)
        source_lines = lines[(node.first_lineno - 1)..(node.last_lineno - 1)]
        source_lines[-1] = source_lines[-1][0..(node.last_column - 1)]
        source_lines[0]  = source_lines[0][node.first_column..]
        source_lines.map(&:strip).join("\n")
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rspec-paramz-1.2.0 lib/rspec/paramz/pretty_print.rb
rspec-paramz-1.1.0 lib/rspec/paramz/pretty_print.rb
rspec-paramz-1.0.0 lib/rspec/paramz/pretty_print.rb