module Badger def Badger.is_repo? dir begin Git.open(dir) rescue ArgumentError puts 'Run this from inside a git repo' exit 1 end end def Badger.git_remote dir begin remote = nil is_repo?(dir).remotes.each do |r| if r.url.match /github.com/ remote = r.url end end rescue NoMethodError puts 'This repo does not appear to have a github remote' exit 2 end if remote.nil? puts 'This repo does not appear to have a github remote' exit 2 end remote end def Badger.slug_extract remote_url remote_url.match(/.*github.com[\/:](.*)/)[1].gsub(/.git$/, '') end def Badger.has_travis? dir ((Dir.entries dir).select { |i| '.travis.yml' == i }).any? end def Badger.has_gemfile? dir gemfiles(dir).any? end def Badger.has_coveralls? dir lines = [] gemfiles(dir).each do |gemfile| lines += File.readlines(File.join(dir, gemfile)) end lines.grep(/coveralls/).any? end def Badger.spec_files dir (Dir.entries dir).select { |i| i =~ /gemspec/ } end def Badger.gemfiles dir targets = [] targets += (Dir.entries dir).select { |i| i =~ /Gemfile/ } targets += spec_files dir targets end def Badger.find_license dir license_file = (Dir.entries dir).select { |i| i =~ /LICENSE/ }[0] if license_file words = File.open(File.join(dir, license_file), 'r').read Config.instance.licenses.each_pair do |k, v| if words =~ /#{v['regex']}/im return k end end end nil end def Badger.search_gemspec dir spec_file = spec_files(dir)[0] if spec_file params = {} gs = File.readlines(File.join(dir, spec_file)) params[:rubygem] = eval (gs.grep /\.name /)[0].sub(/^\s.*\./, '') lines = (gs.grep /licenses?/) if lines.any? l = eval (lines[0]).sub(/^\s.*\./, '') params[:licenses] = l.class.name == 'Array' ? l : [l] end end params || nil end end