gems-status 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/gem_simple.rb CHANGED
@@ -1,11 +1,42 @@
1
1
  class GemSimple
2
- attr_reader :name, :version, :md5, :origin, :gems_url
3
- def initialize(name, version, md5, origin, gems_url=nil )
2
+ attr_reader :name, :version, :md5, :origin, :gems_url, :dependencies
3
+ def initialize(name, version, md5, origin, gems_url=nil, dependencies = nil )
4
4
  @name = name
5
5
  @version = version
6
6
  @md5 = md5
7
7
  @origin = origin
8
8
  @gems_url = gems_url
9
+ @dependencies = dependencies
9
10
  end
11
+
12
+ #TODO: write a test for this
13
+ def depends?(gem)
14
+ if !@dependencies
15
+ Utils::log_error("ERROR: trying to get depends on a gem that has no info on dependencies #{@name} depends #{gem.name}")
16
+ return false
17
+ end
18
+ @dependencies.each do |dep|
19
+ return true if dep.name == gem.name
20
+ end
21
+ return false
22
+ end
23
+
24
+ #TODO: write a test for this
25
+ def merge_deps(gem)
26
+ if !@dependencies || !gem.dependencies
27
+ Utils::log_error("ERROR: trying to merge depends on a gem that has no info on dependencies #{@name} merge #{gem.name}")
28
+ return false
29
+ end
30
+ changes = false
31
+ gem.dependencies.each do |dep|
32
+ if !@dependencies.include?(dep)
33
+ changes = true
34
+ @dependencies << dep
35
+ Utils::log_debug("DEBUG: adding #{dep} to dependencies")
36
+ end
37
+ end
38
+ return changes
39
+ end
40
+
10
41
  end
11
42
 
@@ -1,3 +1,3 @@
1
1
  module GemsStatusMetadata
2
- VERSION = "0.2.5"
2
+ VERSION = "0.2.6"
3
3
  end
data/lib/lockfile_gems.rb CHANGED
@@ -28,6 +28,25 @@ class LockfileGems < GemsCommand
28
28
  return data
29
29
  end
30
30
 
31
+ def update_gem_dependencies(gem)
32
+ Utils::log_debug("DEBUG: updating dependencies for #{gem.name}")
33
+ changes = false
34
+ @result.each do |k, gem2|
35
+ if gem.depends?(gem2)
36
+ changes = gem.merge_deps(gem2) || changes
37
+ end
38
+ end
39
+ return changes
40
+ end
41
+
42
+ def update_dependencies
43
+ changes = false
44
+ @result.each do |k, gem|
45
+ changes = update_gem_dependencies(gem) || changes
46
+ end
47
+ update_dependencies if changes
48
+ end
49
+
31
50
  def execute
32
51
  @filenames.each do |filename|
33
52
  Utils::log_debug "DEBUG: reading #{filename}"
@@ -41,10 +60,17 @@ class LockfileGems < GemsCommand
41
60
  name = spec.name
42
61
  version = Gem::Version.create(spec.version)
43
62
  if @result[name] && @result[name].version != version
44
- Utils::log_error "ERROR: Same gem with different versions: #{name} - #{version} - #{filename}\n #{name} - #{@result[name].version} - #{@result[name].origin} "
63
+ Utils::log_error "
64
+ ERROR: Same gem with different versions:
65
+ #{name} - #{version} - #{filename}\n
66
+ #{name} - #{@result[name].version} - #{@result[name].origin} "
45
67
  end
46
- @result[name] = RubyGemsGems_GemSimple.new(name, version , '', filename, @gems_url)
68
+ dependencies = spec.dependencies
69
+ Utils::log_debug "DEBUG: dependencies for #{name} #{dependencies}"
70
+ @result[name] = RubyGemsGems_GemSimple.new(name, version , '', filename,
71
+ @gems_url, dependencies)
47
72
  end
73
+ update_dependencies
48
74
  end
49
75
  end
50
76
 
@@ -4,27 +4,16 @@ require 'open-uri'
4
4
  require 'gem_checker'
5
5
 
6
6
  class NotRailsChecker < GemChecker
7
+ RAILS_GEMS = ["rails", "railties","activesupport"]
7
8
  def NotRailsChecker.check?(gem)
8
- result = nil
9
- gem_uri = "#{gem.gems_url}/#{gem.name}-#{gem.version}.gem"
10
- begin
11
- source = open(gem_uri, Gem.binary_mode) do |io|
12
- result = Gem::Format.from_io io
9
+ return false if !gem.dependencies
10
+ gem.dependencies.each do |dep|
11
+ if RAILS_GEMS.include?(dep.name)
12
+ return false
13
13
  end
14
- rescue IOError
15
- #bug on open-uri:137 on closing strings
16
- #it should be
17
- #io.close if io && !io.closed?
18
- #or is a bug on rubygems???
19
- rescue => e
20
- Utils::log_error "ERROR: There was a problem opening #{gem_uri} #{e.class} #{e.message}"
21
- end
22
- return false unless result
23
- result.spec.dependencies.each do |gem|
24
- return false if gem.name == "rails"
25
14
  end
26
15
  return true
27
- end
16
+ end
28
17
 
29
18
  def NotRailsChecker.description
30
19
  "This gem depends on rails or could not get spec: "
@@ -2,8 +2,8 @@ require "gem_simple"
2
2
 
3
3
  class RubyGemsGems_GemSimple < GemSimple
4
4
 
5
- def initialize(name, version, md5, origin, gems_url)
6
- super(name, version, nil, origin, gems_url)
5
+ def initialize(name, version, md5, origin, gems_url, dependencies=nil)
6
+ super(name, version, nil, origin, gems_url, dependencies)
7
7
  end
8
8
 
9
9
  def md5
@@ -4,6 +4,11 @@ GEM
4
4
  test (0.8.6)
5
5
  test2 (1.2.3)
6
6
  test2 (1.2.3)
7
+ test3 (1.2.3)
8
+ test3 (1.2.3)
9
+ test4 (1.2.3)
10
+ test4 (1.2.3)
11
+ test2 (1.2.3)
7
12
 
8
13
  PLATFORMS
9
14
  ruby
@@ -1,22 +1,23 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
2
  require 'test/unit'
3
3
  require 'lockfile_gems'
4
+ require 'rubygems/dependency'
4
5
 
5
6
  class LockfileGemsTest < LockfileGems
6
7
  attr_accessor :result
7
8
  def initialize
8
- @dirname = "."
9
- @filename = "Gemfile.lock.test"
9
+ #TODO: this won't work in other development machines!
10
+ @filenames = ["/home/jordi/work/suse/gems-status/test/Gemfile.lock.test"]
10
11
  @gems_url = ""
11
12
  @result = {}
12
13
  end
13
14
  end
14
15
 
15
16
  class TestLockfileGems < Test::Unit::TestCase
16
- def test_get_rubygems_data
17
+ def test_get_rubygems_names
17
18
  lockfilegems = LockfileGemsTest.new
18
19
  lockfilegems.execute
19
- assert(lockfilegems.result.length == 2)
20
+ assert(lockfilegems.result.length == 4)
20
21
  result = lockfilegems.result["test"].name
21
22
  assert_equal("test",result)
22
23
  result = lockfilegems.result["test"].version
@@ -25,6 +26,33 @@ class TestLockfileGems < Test::Unit::TestCase
25
26
  assert_equal("test2",result)
26
27
  result = lockfilegems.result["test2"].version
27
28
  assert_equal(Gem::Version.new("1.2.3"), result)
29
+ result = lockfilegems.result["test3"].name
30
+ assert_equal("test3",result)
31
+ result = lockfilegems.result["test3"].version
32
+ assert_equal(Gem::Version.new("1.2.3"), result)
33
+ result = lockfilegems.result["test4"].name
34
+ assert_equal("test4",result)
35
+ result = lockfilegems.result["test4"].version
36
+ assert_equal(Gem::Version.new("1.2.3"), result)
37
+ end
38
+
39
+ def test_get_rubygems_dependencies
40
+ lockfilegems = LockfileGemsTest.new
41
+ lockfilegems.execute
42
+ result = lockfilegems.result["test"].dependencies
43
+ assert(result)
44
+ result = lockfilegems.result["test"].dependencies.length
45
+ assert_equal(3, result)
46
+ result = lockfilegems.result["test"].dependencies
47
+ assert_equal(
48
+ Gem::Dependency.new("test2", Gem::Requirement.new(["= 1.2.3"])),
49
+ result[0])
50
+ assert_equal(
51
+ Gem::Dependency.new("test3", Gem::Requirement.new(["= 1.2.3"])),
52
+ result[1])
53
+ assert_equal(
54
+ Gem::Dependency.new("test4", Gem::Requirement.new(["= 1.2.3"])),
55
+ result[2])
28
56
  end
29
57
  end
30
58
 
@@ -0,0 +1,54 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+ require 'rubygems'
3
+ require 'test/unit'
4
+ require 'gems_command'
5
+ require 'gem_simple'
6
+ require 'not_rails_checker'
7
+
8
+ class TestNotRailsChecker < Test::Unit::TestCase
9
+ def test_gem_with_no_deps
10
+ gem = GemSimple.new("name", Gem::Version.new("1.2.3"), nil, nil, nil, nil)
11
+ check = NotRailsChecker
12
+ result = check.check?(gem)
13
+ assert(!result)
14
+ end
15
+ def test_gem_with_no_deps_2
16
+ gem = GemSimple.new("name", Gem::Version.new("1.2.3"), nil, nil, nil, [])
17
+ check = NotRailsChecker
18
+ result = check.check?(gem)
19
+ assert(result)
20
+ end
21
+ def test_gem_with_rail_dep
22
+ deps = [
23
+ Gem::Dependency.new("rails", Gem::Requirement.new("> 0.0.0")),
24
+ Gem::Dependency.new("foo", Gem::Requirement.new("> 0.0.0"))
25
+ ]
26
+
27
+ gem = GemSimple.new("name", Gem::Version.new("1.2.3"), nil, nil, nil, deps)
28
+ check = NotRailsChecker
29
+ result = check.check?(gem)
30
+ assert(!result)
31
+ end
32
+ def test_gem_with_no_rail_dep
33
+ deps = [
34
+ Gem::Dependency.new("norails", Gem::Requirement.new("> 0.0.0")),
35
+ Gem::Dependency.new("foo", Gem::Requirement.new("> 0.0.0"))
36
+ ]
37
+
38
+ gem = GemSimple.new("name", Gem::Version.new("1.2.3"), nil, nil, nil, deps)
39
+ check = NotRailsChecker
40
+ result = check.check?(gem)
41
+ assert(result)
42
+ end
43
+ def test_gem_with_railties_dep
44
+ deps = [
45
+ Gem::Dependency.new("railties", Gem::Requirement.new("> 0.0.0")),
46
+ Gem::Dependency.new("foo", Gem::Requirement.new("> 0.0.0"))
47
+ ]
48
+
49
+ gem = GemSimple.new("name", Gem::Version.new("1.2.3"), nil, nil, nil, deps)
50
+ check = NotRailsChecker
51
+ result = check.check?(gem)
52
+ assert(!result)
53
+ end
54
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gems-status
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 5
10
- version: 0.2.5
9
+ - 6
10
+ version: 0.2.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jordi Massaguer Pla
@@ -77,6 +77,7 @@ files:
77
77
  - test/test-utils.rb
78
78
  - test/test-ruby_gems_gems.rb
79
79
  - test/test-lockfile_gems.rb
80
+ - test/test-not_rails_checker.rb
80
81
  - test/test-obs_gems.rb
81
82
  - test/Gemfile.lock
82
83
  - test/Gemfile