Sha256: 2c0ba12c11ef8f377ad884e5da9a55671232d53b2a08d1334ccb6d682a6d9427

Contents?: true

Size: 1.26 KB

Versions: 4

Compression:

Stored size: 1.26 KB

Contents

module Serum
  module Rails
    class CodeScanner

      DEFAULT_FOLDERS = %w[app lib config public].freeze
      ANYTHING = /.*/.freeze
      DEBUG = false

      def initialize(root)
        @root = root
      end

      def count_lines(options = {})
        pattern = options.fetch(:pattern, ANYTHING)
        folders = Array.wrap(options.fetch(:folders, DEFAULT_FOLDERS))
        type_selection = TypeSelection.new(options[:types])
        paths(folders, type_selection).sort.sum do |path|
          count_occurrences(path, pattern)
        end
      end

      private

      def paths(folders, type_selection)
        patterns = []
        folders.each do |folder|
          type_selection.extensions.each do |extension|
            patterns << "#{@root}/#{folder}/**/*.#{extension}"
          end
        end
        # puts "Calling patterns: #{patterns}"
        Dir[*patterns]
      end

      def count_occurrences(path, pattern)
        content = File.read(path) or raise "Could not read file: #{path}"
        #if path =~ /session_store/
        #  puts "-----"
        #  puts content
        #  puts "-----"
        #end
        matches = content.scan(pattern)
        matches.each { |match| puts "#{path}: #{match}" } if DEBUG
        matches.size
      end

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
serum-rails-0.2.1 lib/serum/rails/code_scanner.rb
serum-rails-0.2.0 lib/serum/rails/code_scanner.rb
serum-rails-0.1.1 lib/serum/rails/code_scanner.rb
serum-rails-0.1.0 lib/serum/rails/code_scanner.rb