Module: Lowendinsight::GemfileDependencies

Defined in:
lib/lowendinsight/gemfile_dependencies.rb

Class Method Summary collapse

Class Method Details

.get_all_dependencies_from_file(file) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/lowendinsight/gemfile_dependencies.rb', line 42

def self.get_all_dependencies_from_file(file)
  d = []
  top_level = get_dependencies_from_file(file)
  if top_level[0]["message"]
    d = top_level
  else
    top_level.each do |h|
      version = h["specified"].split(" ")[1].strip
      deps = get_dependencies_from_rubygems(h["name"], version)
      d << {"name" => h["name"], "specified" => version, "available" => get_latest_version_from_rubygems(h["name"]), "dependencies" => deps}
    end
  end
  return d
end

.get_dependencies_from_file(file) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/lowendinsight/gemfile_dependencies.rb', line 87

def self.get_dependencies_from_file(file)
  gf = Gemnasium::Parser.gemfile file
  d = []
  if gf.dependencies.empty?
    d << {"message"=>"no dependencies defined in Gemfile, perhaps gemspec"}
  else
    gf.dependencies.each do |dep|
      d << {"name" => dep.name, "specified" => dep.requirement.to_s}
    end
  end
  return d
end

.get_dependencies_from_repo(url) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/lowendinsight/gemfile_dependencies.rb', line 26

def self.get_dependencies_from_repo(url)
  @url = url
  paths = URI(@url).path.split("/")
  @name = paths[(paths.size)-1]
  g = Git.clone(@url, @name, :path => '/tmp/checkout')
  gf = Gemnasium::Parser.gemfile Bundler.read_file("/tmp/checkout/#{@name}/Gemfile")
  d = []
  gf.dependencies.each do |dep|
    d << {"name" => dep.name, "specified" => dep.requirement.to_s}
  end

  FileUtils.rm_rf("/tmp/checkout/#{@name}")

  return d
end

.get_dependencies_from_rubygems(gem, version) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/lowendinsight/gemfile_dependencies.rb', line 64

def self.get_dependencies_from_rubygems(gem, version)
  uri = URI("https://rubygems.org/api/v1/dependencies.json?gems=#{gem}")
  res = Net::HTTP.get(uri)
  j = JSON.parse(res)
  d = []
  if version == '0'
    last = j.last
    last["dependencies"].each do |dep|
      d << {"name" => dep[0], "specified" => dep.last}
    end
  else
    j.each do |g|
      if g["number"] == version
        g["dependencies"].each do |dep|
          inner_deps = get_dependencies_from_rubygems(dep[0], dep.last.split(" ")[1])
          d << {"name" => dep[0],"specified" => dep.last, "dependencies" => inner_deps}
        end
      end
    end
  end
  return d
end

.get_latest_version_from_rubygems(gem) ⇒ Object



57
58
59
60
61
62
# File 'lib/lowendinsight/gemfile_dependencies.rb', line 57

def self.get_latest_version_from_rubygems(gem)
  uri = URI("https://rubygems.org/api/v1/versions/#{gem}/latest.json")
  res = Net::HTTP.get(uri)
  j = JSON.parse(res)
  return j["version"]
end