class GemMonitor::Extractor

Attributes

gem_objects[RW]
gemfile_content[RW]
gemfile_lock_content[RW]

Public Class Methods

new(args = {}) click to toggle source
# File lib/gem_monitor/extractor.rb, line 5
def initialize args = {}
  self.gem_objects = []
end

Public Instance Methods

extract_project_gem_objects() click to toggle source
# File lib/gem_monitor/extractor.rb, line 17
def extract_project_gem_objects
  extract_and_create_gems_objects
  gem_objects
end

Private Instance Methods

extract_and_create_gems_objects() click to toggle source
# File lib/gem_monitor/extractor.rb, line 36
def extract_and_create_gems_objects
  gem_names_from_gemfile = project_gems_names
  raise_project_gems_error if gem_names_from_gemfile.empty?
  gem_names_from_gemfile.each do |project_gem_name|
    gem_object = GemObject.new(name: project_gem_name, project_version: extract_gem_version_for(project_gem_name))
    gem_object.latest_version
    self.gem_objects.push gem_object
  end
end
extract_gem_version_for(gem_name) click to toggle source
# File lib/gem_monitor/extractor.rb, line 50
def extract_gem_version_for gem_name
  raw_gem_version = gemfile_lock_content.scan(/\s{2}#{gem_name} \(\S*\)/).join
  raw_gem_version.scan(/\(\S*\)/).join.gsub("(", "").gsub(")", "")
end
project_gems_names() click to toggle source
# File lib/gem_monitor/extractor.rb, line 32
def project_gems_names
  (read_gemfile.scan(/^\s*gem "(.*?)"/) + read_gemfile.scan(/^\s*gem '(.*?)'/)).flatten
end
raise_project_gems_error() click to toggle source
# File lib/gem_monitor/extractor.rb, line 46
def raise_project_gems_error
  raise GemMonitor::Error.new("Could not extract gem names from your Gemfile, please submit an issue on #{GemMonitor.issues_url} along with your gemfile for the team to address the issue.")
end
read_gemfile() click to toggle source
# File lib/gem_monitor/extractor.rb, line 24
def read_gemfile
  GemMonitor::Reader.new(file_path: GemMonitor.configuration.gemfile_path).read
end
read_gemfile_lock() click to toggle source
# File lib/gem_monitor/extractor.rb, line 28
def read_gemfile_lock
  GemMonitor::Reader.new(file_path: GemMonitor.configuration.gemfile_lock_path).read
end