class Nicht::Stats

Public Class Methods

new(path, search = nil) click to toggle source
# File lib/nicht/stats.rb, line 5
def initialize(path, search = nil)
  @path = "#{path}/**/Gemfile"
  @search = search
  @stats = { per_project: {}, per_gem: {} }
end

Public Instance Methods

render() click to toggle source
# File lib/nicht/stats.rb, line 11
def render
  Dir[@path].each do |path|
    scan_project path
  end
  output
end

Private Instance Methods

add_stat(gem_name, project_name) click to toggle source
# File lib/nicht/stats.rb, line 28
def add_stat(gem_name, project_name)
  gem_name.delete!('\'')
  gem_name.delete!('"')
  @stats[:per_project][project_name] << gem_name
  @stats[:per_gem][gem_name] ||= []
  @stats[:per_gem][gem_name] << project_name
end
dump_per_gem() click to toggle source
# File lib/nicht/stats.rb, line 58
def dump_per_gem
  @stats[:per_gem] = @stats[:per_gem].sort.to_h
  dump_gems = @stats[:per_gem][@search] ? @stats[:per_gem][@search] : @stats[:per_gem].select { |k, v| k.include? @search }
  if dump_gems.empty?
    puts "No matches found for '#{@search}'"
  else
    ap dump_gems
  end
end
dump_per_project() click to toggle source
# File lib/nicht/stats.rb, line 51
def dump_per_project
  @stats[:per_project].each_key do |key|
    @stats[:per_project][key].sort!
  end
  ap @stats[:per_project]
end
output() click to toggle source
# File lib/nicht/stats.rb, line 47
def output
  @search.nil? ? dump_per_project : dump_per_gem
end
scan_project(path) click to toggle source
# File lib/nicht/stats.rb, line 36
def scan_project(path)
  project_name = path.split('/')
  project_name = project_name[project_name.size - 2]
  File.open(path, 'r') do |f|
    @stats[:per_project][project_name] = []
    f.each_line do |line|
      scan_record(line, project_name)
    end
  end
end
scan_record(line, project_name) click to toggle source
# File lib/nicht/stats.rb, line 20
def scan_record(line, project_name)
  candidate = line.split(',').shift.split ' '
  return unless candidate.first == 'gem'
  gem_name = candidate.last
  return if %w[* #].include?(gem_name[0])
  add_stat(gem_name, project_name)
end