gems-status 0.38.0 → 0.39.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. data/bin/gems-status +1 -1
  2. data/lib/gems-status.rb +26 -23
  3. data/lib/gems-status/checkers/exists_in_upstream.rb +17 -14
  4. data/lib/gems-status/checkers/gem_checker.rb +8 -6
  5. data/lib/gems-status/checkers/git_check_messages.rb +25 -22
  6. data/lib/gems-status/checkers/hg_check_messages.rb +25 -22
  7. data/lib/gems-status/checkers/not_a_security_alert_checker.rb +161 -158
  8. data/lib/gems-status/checkers/not_native_gem_checker.rb +33 -30
  9. data/lib/gems-status/checkers/not_rails_checker.rb +16 -13
  10. data/lib/gems-status/checkers/print_gem_versions.rb +27 -23
  11. data/lib/gems-status/checkers/scm_check_messages.rb +44 -41
  12. data/lib/gems-status/checkers/scm_security_messages.rb +5 -3
  13. data/lib/gems-status/checkers/security_alert.rb +7 -5
  14. data/lib/gems-status/checkers/svn_check_messages.rb +29 -26
  15. data/lib/gems-status/gem_simple.rb +42 -40
  16. data/lib/gems-status/gems_command.rb +30 -28
  17. data/lib/gems-status/gems_composite_command.rb +85 -82
  18. data/lib/gems-status/gems_status_metadata.rb +2 -2
  19. data/lib/gems-status/html_view.rb +240 -237
  20. data/lib/gems-status/sources/lockfile_gems.rb +64 -61
  21. data/lib/gems-status/sources/obs_gems.rb +86 -83
  22. data/lib/gems-status/sources/ruby_gems_gems.rb +32 -30
  23. data/lib/gems-status/sources/ruby_gems_gems_gem_simple.rb +29 -26
  24. data/lib/gems-status/utils.rb +77 -74
  25. data/test/test-gems_command.rb +52 -49
  26. data/test/test-gems_composite_command.rb +43 -40
  27. data/test/test-helper.rb +2 -0
  28. data/test/test-lockfile_gems.rb +64 -61
  29. data/test/test-not_rails_checker.rb +45 -42
  30. data/test/test-obs_gems.rb +31 -29
  31. data/test/test-ruby_gems_gems.rb +22 -20
  32. data/test/test-utils.rb +42 -39
  33. metadata +181 -176
@@ -1,93 +1,96 @@
1
1
  require "openssl"
2
2
  OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
3
3
 
4
- class Utils
5
- attr_accessor :errors
6
- @@errors = {}
7
- @@md5_sums = {}
8
- @@licenses = {}
9
- @@keys = {}
10
- @@gems = {}
4
+ module GemsStatus
11
5
 
12
- def Utils.errors
13
- return @@errors
14
- end
6
+ class Utils
7
+ attr_accessor :errors
8
+ @@errors = {}
9
+ @@md5_sums = {}
10
+ @@licenses = {}
11
+ @@keys = {}
12
+ @@gems = {}
15
13
 
16
- def Utils.check_parameters(classname, conf, parameters)
17
- if !conf['classname'] then
18
- raise "trying to initialize #{classname} when parameter classname does not exists"
19
- end
20
- if conf['classname'] != classname then
21
- raise "trying to initialize #{classname} when parameter classname is #{conf['classname']}"
14
+ def Utils.errors
15
+ return @@errors
22
16
  end
23
- parameters.each do |p|
24
- if !conf[p] then
25
- raise "parameter #{p} not found for #{classname}"
17
+
18
+ def Utils.check_parameters(classname, conf, parameters)
19
+ if !conf['classname'] then
20
+ raise "trying to initialize #{classname} when parameter classname does not exists"
21
+ end
22
+ if conf['classname'] != classname then
23
+ raise "trying to initialize #{classname} when parameter classname is #{conf['classname']}"
24
+ end
25
+ parameters.each do |p|
26
+ if !conf[p] then
27
+ raise "parameter #{p} not found for #{classname}"
28
+ end
26
29
  end
27
30
  end
28
- end
29
31
 
30
- def Utils.log_error(name, msg)
31
- @@errors[name] = "\n" unless @@errors[name]
32
- @@errors[name] << msg << "\n"
33
- $stderr.puts "ERROR: #{msg}"
34
- end
32
+ def Utils.log_error(name, msg)
33
+ @@errors[name] = "\n" unless @@errors[name]
34
+ @@errors[name] << msg << "\n"
35
+ $stderr.puts "ERROR: #{msg}"
36
+ end
35
37
 
36
- def Utils.log_debug(msg)
37
- $stderr.puts "DEBUG: #{msg}"
38
- end
38
+ def Utils.log_debug(msg)
39
+ $stderr.puts "DEBUG: #{msg}"
40
+ end
39
41
 
40
- def Utils.download_md5(name, version, gems_url)
41
- key = "#{name}-#{version}-#{gems_url.gsub("/", "_").gsub(":", "_")}"
42
- return @@md5_sums[key] if @@md5_sums[key]
43
- begin
44
- gem_file_path = self.download_gem(name, version, gems_url)
45
- rescue Exception => e
46
- self.log_error(name, e.message)
47
- return nil
42
+ def Utils.download_md5(name, version, gems_url)
43
+ key = "#{name}-#{version}-#{gems_url.gsub("/", "_").gsub(":", "_")}"
44
+ return @@md5_sums[key] if @@md5_sums[key]
45
+ begin
46
+ gem_file_path = self.download_gem(name, version, gems_url)
47
+ rescue Exception => e
48
+ self.log_error(name, e.message)
49
+ return nil
50
+ end
51
+ md5 = Digest::MD5.hexdigest(open(gem_file_path).read)
52
+ @@md5_sums["#{name}-#{version}"] = md5
53
+ return md5
48
54
  end
49
- md5 = Digest::MD5.hexdigest(open(gem_file_path).read)
50
- @@md5_sums["#{name}-#{version}"] = md5
51
- return md5
52
- end
53
55
 
54
- def Utils.download_license(name, version, gems_url)
55
- key = "#{name}-#{version}-#{gems_url.gsub("/", "_").gsub(":", "_")}"
56
- return @@licenses[key] if @@licenses[key]
57
- begin
58
- gem_file_path = self.download_gem(name, version, gems_url)
59
- rescue Exception => e
60
- self.log_error(name, e.message)
61
- return nil
56
+ def Utils.download_license(name, version, gems_url)
57
+ key = "#{name}-#{version}-#{gems_url.gsub("/", "_").gsub(":", "_")}"
58
+ return @@licenses[key] if @@licenses[key]
59
+ begin
60
+ gem_file_path = self.download_gem(name, version, gems_url)
61
+ rescue Exception => e
62
+ self.log_error(name, e.message)
63
+ return nil
64
+ end
65
+ license = Gem::Format.from_file_by_path(gem_file_path).spec.license
66
+ @@licenses[key] = license
67
+ return license
62
68
  end
63
- license = Gem::Format.from_file_by_path(gem_file_path).spec.license
64
- @@licenses[key] = license
65
- return license
66
- end
67
69
 
68
- private
70
+ private
69
71
 
70
- def Utils.download_gem(name, version, gems_url)
71
- gem_uri = URI.parse("#{gems_url}/#{name}-#{version}.gem")
72
- tmp_path = "tmp/utils/gems/#{gems_url.gsub("/", "_").gsub(":", "_")}/"
73
- gem_name = "#{name}-#{version}.gem"
74
- full_path = "#{tmp_path}/#{gem_name}"
75
- return full_path if File.exists? full_path
76
- uri_debug = gem_uri.clone
77
- uri_debug.password = "********" if uri_debug.password
78
- Utils::log_debug "download #{@name} from #{uri_debug}"
79
- FileUtils::mkdir_p(tmp_path) if ! File.exists?(tmp_path)
80
- if gem_uri.user && gem_uri.password
81
- source = open(gem_uri.scheme + "://" + gem_uri.host + "/" + gem_uri.path,
82
- "rb",
83
- :http_basic_authentication=>[gem_uri.user, gem_uri.password])
84
- else
85
- source = open(gem_uri)
86
- end
87
- open(full_path, "wb") do |file|
88
- file.write(source.read)
72
+ def Utils.download_gem(name, version, gems_url)
73
+ gem_uri = URI.parse("#{gems_url}/#{name}-#{version}.gem")
74
+ tmp_path = "tmp/utils/gems/#{gems_url.gsub("/", "_").gsub(":", "_")}/"
75
+ gem_name = "#{name}-#{version}.gem"
76
+ full_path = "#{tmp_path}/#{gem_name}"
77
+ return full_path if File.exists? full_path
78
+ uri_debug = gem_uri.clone
79
+ uri_debug.password = "********" if uri_debug.password
80
+ Utils::log_debug "download #{@name} from #{uri_debug}"
81
+ FileUtils::mkdir_p(tmp_path) if ! File.exists?(tmp_path)
82
+ if gem_uri.user && gem_uri.password
83
+ source = open(gem_uri.scheme + "://" + gem_uri.host + "/" + gem_uri.path,
84
+ "rb",
85
+ :http_basic_authentication=>[gem_uri.user, gem_uri.password])
86
+ else
87
+ source = open(gem_uri)
88
+ end
89
+ open(full_path, "wb") do |file|
90
+ file.write(source.read)
91
+ end
92
+ source.close
93
+ return full_path
89
94
  end
90
- source.close
91
- return full_path
92
95
  end
93
96
  end
@@ -3,62 +3,65 @@ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
3
3
  require 'test/unit'
4
4
  require 'gems-status'
5
5
 
6
- class TestGemsCommand < Test::Unit::TestCase
7
- def test_gem_name_wrong_name
8
- gem_name = 'wrong_name'
9
- result = GemsCommand.new.gem_name(gem_name)
10
- expected = gem_name
11
- assert_equal(result, expected)
12
- end
6
+ module GemsStatus
13
7
 
14
- def test_gem_name_without_version
15
- gem_name = 'name.gem'
16
- result = GemsCommand.new.gem_name(gem_name)
17
- expected = 'name'
18
- assert_equal(result, expected)
19
- end
8
+ class TestGemsCommand < Test::Unit::TestCase
9
+ def test_gem_name_wrong_name
10
+ gem_name = 'wrong_name'
11
+ result = GemsCommand.new.gem_name(gem_name)
12
+ expected = gem_name
13
+ assert_equal(result, expected)
14
+ end
20
15
 
21
- def test_gem_name_simple
22
- gem_name = 'name-1.0.0.gem'
23
- result = GemsCommand.new.gem_name(gem_name)
24
- expected = 'name'
25
- assert_equal(result, expected)
26
- end
16
+ def test_gem_name_without_version
17
+ gem_name = 'name.gem'
18
+ result = GemsCommand.new.gem_name(gem_name)
19
+ expected = 'name'
20
+ assert_equal(result, expected)
21
+ end
27
22
 
28
- def test_gem_name_with_dashes
29
- gem_name = 'name-1-1.0.0.gem'
30
- result = GemsCommand.new.gem_name(gem_name)
31
- expected = 'name-1'
32
- assert_equal(result, expected)
33
- end
23
+ def test_gem_name_simple
24
+ gem_name = 'name-1.0.0.gem'
25
+ result = GemsCommand.new.gem_name(gem_name)
26
+ expected = 'name'
27
+ assert_equal(result, expected)
28
+ end
34
29
 
35
- def test_gem_version_no_version
36
- gem_name = 'name.gem'
37
- result = GemsCommand.new.gem_version(gem_name)
38
- expected = '-1'
39
- assert_equal(result, expected)
40
- end
30
+ def test_gem_name_with_dashes
31
+ gem_name = 'name-1-1.0.0.gem'
32
+ result = GemsCommand.new.gem_name(gem_name)
33
+ expected = 'name-1'
34
+ assert_equal(result, expected)
35
+ end
41
36
 
42
- def test_gem_version_wrong_name
43
- gem_name = 'name-1.0'
44
- result = GemsCommand.new.gem_version(gem_name)
45
- expected = '-1'
46
- assert_equal(result, expected)
47
- end
37
+ def test_gem_version_no_version
38
+ gem_name = 'name.gem'
39
+ result = GemsCommand.new.gem_version(gem_name)
40
+ expected = '-1'
41
+ assert_equal(result, expected)
42
+ end
48
43
 
49
- def test_gem_version_simple_version
50
- gem_name = 'name-1.0.0.gem'
51
- result = GemsCommand.new.gem_version(gem_name)
52
- expected = '1.0.0'
53
- assert_equal(result, expected)
54
- end
44
+ def test_gem_version_wrong_name
45
+ gem_name = 'name-1.0'
46
+ result = GemsCommand.new.gem_version(gem_name)
47
+ expected = '-1'
48
+ assert_equal(result, expected)
49
+ end
50
+
51
+ def test_gem_version_simple_version
52
+ gem_name = 'name-1.0.0.gem'
53
+ result = GemsCommand.new.gem_version(gem_name)
54
+ expected = '1.0.0'
55
+ assert_equal(result, expected)
56
+ end
57
+
58
+ def test_gem_version_with_dashes
59
+ gem_name = 'name-a-1.0.0.gem'
60
+ result = GemsCommand.new.gem_version(gem_name)
61
+ expected = '1.0.0'
62
+ assert_equal(result, expected)
63
+ end
55
64
 
56
- def test_gem_version_with_dashes
57
- gem_name = 'name-a-1.0.0.gem'
58
- result = GemsCommand.new.gem_version(gem_name)
59
- expected = '1.0.0'
60
- assert_equal(result, expected)
61
65
  end
62
66
 
63
67
  end
64
-
@@ -3,47 +3,50 @@ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
3
3
  require 'test/unit'
4
4
  require 'gems-status'
5
5
 
6
- class GemsCompositeCommandTest < GemsCompositeCommand
7
- attr_accessor :results
8
- end
6
+ module GemsStatus
9
7
 
10
- class TestGemsCompositeCommand < Test::Unit::TestCase
11
- def test_common_key_in_empty_results
12
- gemscompositecommand = GemsCompositeCommand.new('id')
13
- result = gemscompositecommand.common_key?("this key does not exists")
14
- assert(!result)
15
- end
16
- def test_common_key_in_zero_coincidences_one_result
17
- gemscompositecommand = GemsCompositeCommandTest.new('id')
18
- gemscompositecommand.results['id'] = {"a key"=>"a value"}
19
- result = gemscompositecommand.common_key?("this key does not exists")
20
- assert(!result)
21
- end
22
- def test_common_key_in_zero_coincidences_two_results
23
- gemscompositecommand = GemsCompositeCommandTest.new('id')
24
- gemscompositecommand.results['id'] = {"a key"=>"a value"}
25
- gemscompositecommand.results['id2'] = {"another key"=>"another value"}
26
- result = gemscompositecommand.common_key?("this key does not exists")
27
- assert(!result)
8
+ class GemsCompositeCommandTest < GemsCompositeCommand
9
+ attr_accessor :results
28
10
  end
29
- def test_common_key_in_one_coincidence_one_results
30
- gemscompositecommand = GemsCompositeCommandTest.new('id')
31
- gemscompositecommand.results['id']= {"a key"=>"a value"}
32
- result = gemscompositecommand.common_key?("a key")
33
- assert(!result)
34
- end
35
- def test_common_key_in_one_coincidence_two_results
36
- gemscompositecommand = GemsCompositeCommandTest.new('id')
37
- gemscompositecommand.results['id']= {"a key"=>"a value"}
38
- gemscompositecommand.results['id2']= {"another key"=>"another value"}
39
- result = gemscompositecommand.common_key?("a key")
40
- assert(!result)
41
- end
42
- def test_common_key_in_two_coincidence_two_results
43
- gemscompositecommand = GemsCompositeCommandTest.new('id')
44
- gemscompositecommand.results['id']= {"a key"=>"a value"}
45
- gemscompositecommand.results['id2']= {"a key"=>"another value"}
46
- result = gemscompositecommand.common_key?("a key")
47
- assert(result)
11
+
12
+ class TestGemsCompositeCommand < Test::Unit::TestCase
13
+ def test_common_key_in_empty_results
14
+ gemscompositecommand = GemsCompositeCommand.new('id')
15
+ result = gemscompositecommand.common_key?("this key does not exists")
16
+ assert(!result)
17
+ end
18
+ def test_common_key_in_zero_coincidences_one_result
19
+ gemscompositecommand = GemsCompositeCommandTest.new('id')
20
+ gemscompositecommand.results['id'] = {"a key"=>"a value"}
21
+ result = gemscompositecommand.common_key?("this key does not exists")
22
+ assert(!result)
23
+ end
24
+ def test_common_key_in_zero_coincidences_two_results
25
+ gemscompositecommand = GemsCompositeCommandTest.new('id')
26
+ gemscompositecommand.results['id'] = {"a key"=>"a value"}
27
+ gemscompositecommand.results['id2'] = {"another key"=>"another value"}
28
+ result = gemscompositecommand.common_key?("this key does not exists")
29
+ assert(!result)
30
+ end
31
+ def test_common_key_in_one_coincidence_one_results
32
+ gemscompositecommand = GemsCompositeCommandTest.new('id')
33
+ gemscompositecommand.results['id']= {"a key"=>"a value"}
34
+ result = gemscompositecommand.common_key?("a key")
35
+ assert(!result)
36
+ end
37
+ def test_common_key_in_one_coincidence_two_results
38
+ gemscompositecommand = GemsCompositeCommandTest.new('id')
39
+ gemscompositecommand.results['id']= {"a key"=>"a value"}
40
+ gemscompositecommand.results['id2']= {"another key"=>"another value"}
41
+ result = gemscompositecommand.common_key?("a key")
42
+ assert(!result)
43
+ end
44
+ def test_common_key_in_two_coincidence_two_results
45
+ gemscompositecommand = GemsCompositeCommandTest.new('id')
46
+ gemscompositecommand.results['id']= {"a key"=>"a value"}
47
+ gemscompositecommand.results['id2']= {"a key"=>"another value"}
48
+ result = gemscompositecommand.common_key?("a key")
49
+ assert(result)
50
+ end
48
51
  end
49
52
  end
data/test/test-helper.rb CHANGED
@@ -1,3 +1,5 @@
1
1
  require 'simplecov'
2
2
  SimpleCov.start
3
+ require 'coveralls'
4
+ Coveralls.wear!
3
5
 
@@ -4,69 +4,72 @@ require 'test/unit'
4
4
  require 'gems-status'
5
5
  require 'rubygems/dependency'
6
6
 
7
- class LockfileGemsTest < LockfileGems
8
- attr_accessor :result
9
- def initialize
10
- dir=File.expand_path(File.dirname(__FILE__))
11
- puts "DEBUG: dir : #{dir} #{dir.class.name}"
12
- @filenames = ["#{dir}/Gemfile.lock.test"]
13
- @gems_url = ""
14
- @result = {}
7
+ module GemsStatus
8
+
9
+ class LockfileGemsTest < LockfileGems
10
+ attr_accessor :result
11
+ def initialize
12
+ dir=File.expand_path(File.dirname(__FILE__))
13
+ puts "DEBUG: dir : #{dir} #{dir.class.name}"
14
+ @filenames = ["#{dir}/Gemfile.lock.test"]
15
+ @gems_url = ""
16
+ @result = {}
17
+ end
15
18
  end
16
- end
17
19
 
18
- class TestLockfileGems < Test::Unit::TestCase
19
- def test_get_rubygems_names
20
- lockfilegems = LockfileGemsTest.new
21
- lockfilegems.execute
22
- assert(lockfilegems.result.length == 6)
23
- result = lockfilegems.result["test"][0].name
24
- assert_equal("test",result)
25
- result = lockfilegems.result["test"][0].version
26
- assert_equal(Gem::Version.new("0.8.6"), result)
27
- result = lockfilegems.result["test2"][0].name
28
- assert_equal("test2",result)
29
- result = lockfilegems.result["test2"][0].version
30
- assert_equal(Gem::Version.new("1.2.3"), result)
31
- result = lockfilegems.result["test3"][0].name
32
- assert_equal("test3",result)
33
- result = lockfilegems.result["test3"][0].version
34
- assert_equal(Gem::Version.new("1.2.3"), result)
35
- result = lockfilegems.result["test4"][0].name
36
- assert_equal("test4",result)
37
- result = lockfilegems.result["test4"][0].version
38
- assert_equal(Gem::Version.new("1.2.3"), result)
39
- result = lockfilegems.result["from_git"][0].version
40
- assert_equal(Gem::Version.new("1.0.3"), result)
41
- result = lockfilegems.result["dep_from_git"][0].version
42
- assert_equal(Gem::Version.new("1.0.0"), result)
43
- end
20
+ class TestLockfileGems < Test::Unit::TestCase
21
+ def test_get_rubygems_names
22
+ lockfilegems = LockfileGemsTest.new
23
+ lockfilegems.execute
24
+ assert(lockfilegems.result.length == 6)
25
+ result = lockfilegems.result["test"][0].name
26
+ assert_equal("test",result)
27
+ result = lockfilegems.result["test"][0].version
28
+ assert_equal(Gem::Version.new("0.8.6"), result)
29
+ result = lockfilegems.result["test2"][0].name
30
+ assert_equal("test2",result)
31
+ result = lockfilegems.result["test2"][0].version
32
+ assert_equal(Gem::Version.new("1.2.3"), result)
33
+ result = lockfilegems.result["test3"][0].name
34
+ assert_equal("test3",result)
35
+ result = lockfilegems.result["test3"][0].version
36
+ assert_equal(Gem::Version.new("1.2.3"), result)
37
+ result = lockfilegems.result["test4"][0].name
38
+ assert_equal("test4",result)
39
+ result = lockfilegems.result["test4"][0].version
40
+ assert_equal(Gem::Version.new("1.2.3"), result)
41
+ result = lockfilegems.result["from_git"][0].version
42
+ assert_equal(Gem::Version.new("1.0.3"), result)
43
+ result = lockfilegems.result["dep_from_git"][0].version
44
+ assert_equal(Gem::Version.new("1.0.0"), result)
45
+ end
44
46
 
45
- def test_get_rubygems_dependencies
46
- lockfilegems = LockfileGemsTest.new
47
- lockfilegems.execute
48
- result = lockfilegems.result["test"][0].dependencies
49
- assert(result)
50
- result = lockfilegems.result["test"][0].dependencies.length
51
- assert_equal(3, result)
52
- result = lockfilegems.result["test"][0].dependencies
53
- assert_equal(
54
- Gem::Dependency.new("test2", Gem::Requirement.new(["= 1.2.3"])),
55
- result[0])
56
- assert_equal(
57
- Gem::Dependency.new("test3", Gem::Requirement.new(["= 1.2.3"])),
58
- result[1])
59
- assert_equal(
60
- Gem::Dependency.new("test4", Gem::Requirement.new(["= 1.2.3"])),
61
- result[2])
62
- end
47
+ def test_get_rubygems_dependencies
48
+ lockfilegems = LockfileGemsTest.new
49
+ lockfilegems.execute
50
+ result = lockfilegems.result["test"][0].dependencies
51
+ assert(result)
52
+ result = lockfilegems.result["test"][0].dependencies.length
53
+ assert_equal(3, result)
54
+ result = lockfilegems.result["test"][0].dependencies
55
+ assert_equal(
56
+ Gem::Dependency.new("test2", Gem::Requirement.new(["= 1.2.3"])),
57
+ result[0])
58
+ assert_equal(
59
+ Gem::Dependency.new("test3", Gem::Requirement.new(["= 1.2.3"])),
60
+ result[1])
61
+ assert_equal(
62
+ Gem::Dependency.new("test4", Gem::Requirement.new(["= 1.2.3"])),
63
+ result[2])
64
+ end
63
65
 
64
- def test_from_git
65
- lockfilegems = LockfileGemsTest.new
66
- lockfilegems.execute
67
- result = lockfilegems.result["from_git"][0].gems_url
68
- assert(result.start_with?("git://"))
69
- assert(lockfilegems.result["from_git"][0].from_git?)
70
- end
71
- end
66
+ def test_from_git
67
+ lockfilegems = LockfileGemsTest.new
68
+ lockfilegems.execute
69
+ result = lockfilegems.result["from_git"][0].gems_url
70
+ assert(result.start_with?("git://"))
71
+ assert(lockfilegems.result["from_git"][0].from_git?)
72
+ end
73
+ end
72
74
 
75
+ end