Sha256: cd8539939a661104a4affb6828d2b1203ada370585a40618568216dc35c4358a

Contents?: true

Size: 1.58 KB

Versions: 24

Compression:

Stored size: 1.58 KB

Contents

module DRG
  autoload :Let, 'drg/let'

  class Scanner
    attr_reader :file

    def initialize(file)
      @file = file
    end

    def lets
      _lets = []
      continuation = false
      File.readlines(file).each do |line|
        if continuation && continuation = line.strip != 'end'
          _lets[-1].value << line
        elsif line =~ /\A\s+let\(?:(\w+)\)?\s*do\s*\n/
          continuation = true
          _lets << Let.new($1.strip, '')
        elsif line =~ /\A\s+let\(?:(\w+)\)?\s*\{(.+)\}/m
          _lets << Let.new($1.strip, $2.strip)
        end
      end
      _lets
    end

    def indentation
      line = nil
      File.open(file) do |f|
        previous_line = nil
        until indent_size(previous_line) != indent_size(line = f.gets)
          previous_line = line
        end
      end
      indent_size(line)
    end

    def methods
      items = []
      klasses = Set.new
      File.readlines(file).each do |line|
        if line =~ /class (\w+)/
          klasses << $1
        end
        case line.to_s.chomp.strip
        when /#?\s*private/i
          break
        when /def (self)?(\.?[a-z0-9_]+)/
          method_name = $2
          if method_name !~ /\A\./
            method_name = "##{method_name}"
          end
          items << "#{klasses.to_a.join('::')}#{method_name}"
        else
          nil
        end
      end
      items
    end

    def describes
      File.readlines(file).map { |line| $2 if line =~ /(describe|context)\s*['"%](.+)\s*['"%]/ }.compact
    end

    def indent_size(line)
      line.to_s.chomp.rstrip[/\s{0,}/].size.to_i
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
drg-0.14.0 lib/drg/scanner.rb
drg-0.13.1 lib/drg/scanner.rb
drg-0.13.0 lib/drg/scanner.rb
drg-0.12.0 lib/drg/scanner.rb
drg-0.11.0 lib/drg/scanner.rb
drg-0.10.0 lib/drg/scanner.rb
drg-0.9.5 lib/drg/scanner.rb
drg-0.9.4 lib/drg/scanner.rb
drg-0.9.3 lib/drg/scanner.rb
drg-0.9.2 lib/drg/scanner.rb
drg-0.9.0 lib/drg/scanner.rb
drg-0.8.1 lib/drg/scanner.rb
drg-0.8.0 lib/drg/scanner.rb
drg-0.7.0 lib/drg/scanner.rb
drg-0.6.0 lib/drg/scanner.rb
drg-0.5.1 lib/drg/scanner.rb
drg-0.5.0 lib/drg/scanner.rb
drg-0.4.2 lib/drg/scanner.rb
drg-0.4.1 lib/drg/scanner.rb
drg-0.4.0 lib/drg/scanner.rb