class Serum::Rails::App

Attributes

root[R]

Public Class Methods

new(root) click to toggle source
# File lib/serum/rails/app.rb, line 7
def initialize(root)
  @root = File.expand_path(root)
  ensure_root_exists
  ensure_is_rails_app
end

Public Instance Methods

count_gems() click to toggle source
# File lib/serum/rails/app.rb, line 30
def count_gems
  Dir.chdir(@root) do
    run_command('bundle list').split(/\n/).size - 1
  end
end
count_routes() click to toggle source
# File lib/serum/rails/app.rb, line 24
def count_routes
  Dir.chdir(@root) do
    run_command('bundle exec rake routes').split(/\n/).size - 1
  end
end
lines_of_code() click to toggle source

def gems

cd
bundle list | wc -l

end

# File lib/serum/rails/app.rb, line 18
def lines_of_code
  count_lines # matches anything in all folders
end

Private Instance Methods

code_scanner() click to toggle source
# File lib/serum/rails/app.rb, line 73
def code_scanner
  @code_scanner ||= CodeScanner.new(@root)
end
ensure_is_rails_app() click to toggle source
# File lib/serum/rails/app.rb, line 59
def ensure_is_rails_app
  expected_folders = %w[
    app/models
    app/controllers
    app/views
    config
    db
  ]
  expected_folders.each do |expected_folder|
    path = File.join(@root, expected_folder)
    File.directory?(path) or raise "Not a Rails application: #{@root} (expected folder #{expected_folder}"
  end
end
ensure_root_exists() click to toggle source
# File lib/serum/rails/app.rb, line 55
def ensure_root_exists
  File.directory?(@root) or raise "Not a directory: #{@root}"
end
run_command(cmd) click to toggle source
# File lib/serum/rails/app.rb, line 38
def run_command(cmd)
  with_clean_env do
    result = `#{cmd}`
    $?.success? or raise "Error while running command: #{cmd}"
    result
  end
end
with_clean_env(&block) click to toggle source
# File lib/serum/rails/app.rb, line 46
def with_clean_env(&block)
  # Unlike RVM, rbenv does not auto-load Bundler for gem binaries. So.
  if defined?(Bundler)
    Bundler.with_clean_env(&block)
  else
    block.call
  end
end