Sha256: 7ad058f3c78b1b447b25965c58a0b53fbd3baec3c2e11ae583b9c7acea86e347

Contents?: true

Size: 1.5 KB

Versions: 1

Compression:

Stored size: 1.5 KB

Contents

module RSpecScreenshotDashboard
  class Screenshot
    ATTR = [:url, :argument, :full_path, :group_description, :example_description, :file_with_line, :sequence_number, :backtrace].freeze
    attr_accessor(*ATTR)
    def initialize(opts = {})
      opts.each do |k, v|
        send("#{k}=", v)
      end
    end

    def as_json(opts = {})
      ATTR.map { |k| [k, send(k)] }.to_h.merge(
        local_image: local_image,
        full_image_path: full_image_path,
        line_number: line_number,
        full_test_path: full_test_path,
        snippet: snippet,
        test_file: test_file
      )
    end

    def local_image
      @_local_image ||=
        begin
          prefix = (
            file_with_line.remove(Rails.root.to_s).remove('/spec').split(%r{[/:]})[1..-2].map { |i| i.remove('_spec.rb') } +
            [*group_description, example_description].compact
          ).map { |i| i.gsub(/\W+/, '_') }
          digest = Digest::MD5.hexdigest([file_with_line, snippet].join)
          File.join(*prefix, digest + '.png')
        end
    end

    def full_image_path
      File.join(Config.output_dir, 'screenshots', local_image)
    end

    def line_number
      file_with_line.split(":")[1].to_i
    rescue
      0
    end

    def full_test_path
      file_with_line.split(":")[0]
    end

    def snippet
      File.read(full_test_path).lines[line_number - 5, 9].tap { |i| i[4] = ">>" + i[4].gsub(/^  /, '') }.join
    end

    def test_file
      file_with_line.gsub(Dir.pwd, '').gsub(/:\d+$/, '')
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rspec_screenshot_dashboard-0.1.0.beta lib/rspec_screenshot_dashboard/screenshot.rb