Sha256: a6ff5a83dcdb59d32d93b9358c51d20944fee4818bd6a5b91da5ed7d09802039

Contents?: true

Size: 1.25 KB

Versions: 3

Compression:

Stored size: 1.25 KB

Contents

require 'rails_best_practices/checks'
require 'rails_best_practices/core'

module RailsBestPractices
  
  class <<self
    def analyze_files(dir = '.', options = {})
      files = expand_dirs_to_files(dir)
      files = model_first_sort(files)
      files = add_duplicate_migrations(files)
      ['vendor', 'spec', 'test', 'stories', 'features'].each do |pattern|
        files = ignore_files(files, "#{pattern}/") unless options[pattern]
      end
      files
    end
  
    def expand_dirs_to_files *dirs
      extensions = ['rb', 'erb', 'haml', 'builder']

      dirs.flatten.map { |p|
        if File.directory? p
          Dir[File.join(p, '**', "*.{#{extensions.join(',')}}")]
        else
          p
        end
      }.flatten
    end

    # for law_of_demeter_check
    def model_first_sort files
      files.sort { |a, b|
        if a =~ /models\/.*rb/
          -1
        elsif b =~ /models\/.*rb/
          1
        else
          a <=> b
        end
      }
    end

    # for always_add_db_index_check
    def add_duplicate_migrations files
      migration_files = files.select { |file| file.index("db/migrate") }
      (files << migration_files).flatten
    end

    def ignore_files files, pattern
      files.reject { |file| file.index(pattern) }
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rails_best_practices-0.3.24 lib/rails_best_practices.rb
rails_best_practices-0.3.23 lib/rails_best_practices.rb
rails_best_practices-0.3.22 lib/rails_best_practices.rb