Sha256: 3948d8fd49e810a42980f81365a0a0ba5b8dd3fe80b5ea34c6e81c90fd5fb0a6

Contents?: true

Size: 1.72 KB

Versions: 15

Compression:

Stored size: 1.72 KB

Contents

require 'optparse'

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

options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: rails_best_practices [options]"
  
  opts.on("-d", "--debug", "Debug mode") do
    options['debug'] = true
  end

  ['vendor', 'spec', 'test', 'stories'].each do |pattern|
    opts.on("--#{pattern}", "include #{pattern} files") do
      options[pattern] = true
    end
  end

  opts.on_tail("-h", "--help", "Show this message") do
    puts opts
    exit
  end

  opts.parse!
end

runner = RailsBestPractices::Core::Runner.new
runner.set_debug if options['debug']

files = expand_dirs_to_files(ARGV)
files = model_first_sort(files)
files = add_duplicate_migrations(files)
['vendor', 'spec', 'test', 'stories'].each do |pattern|
  files = ignore_files(files, "#{pattern}/") unless options[pattern]
end
files.each { |file| runner.check_file(file) }

runner.errors.each {|error| puts error}
if runner.errors.size > 0
  puts "\ngo to http://wiki.github.com/flyerhzm/rails_best_practices to see how to solve these errors."
  puts "\nFound #{runner.errors.size} errors."
end

exit runner.errors.size

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
rails_best_practices-0.3.15 lib/rails_best_practices/command.rb
rails_best_practices-0.3.14 lib/rails_best_practices/command.rb
rails_best_practices-0.3.13 lib/rails_best_practices/command.rb
rails_best_practices-0.3.12 lib/rails_best_practices/command.rb
rails_best_practices-0.3.11 lib/rails_best_practices/command.rb
rails_best_practices-0.3.10 lib/rails_best_practices/command.rb
rails_best_practices-0.3.9 lib/rails_best_practices/command.rb
rails_best_practices-0.3.8 lib/rails_best_practices/command.rb
rails_best_practices-0.3.7 lib/rails_best_practices/command.rb
rails_best_practices-0.3.6 lib/rails_best_practices/command.rb
rails_best_practices-0.3.5 lib/rails_best_practices/command.rb
rails_best_practices-0.3.4 lib/rails_best_practices/command.rb
rails_best_practices-0.3.3 lib/rails_best_practices/command.rb
rails_best_practices-0.3.2 lib/rails_best_practices/command.rb
rails_best_practices-0.3.1 lib/rails_best_practices/command.rb