gems-status 0.1.0
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/LICENSE +20 -0
- data/bin/gems-status +22 -0
- data/lib/gem_simple.rb +10 -0
- data/lib/gems_command.rb +36 -0
- data/lib/gems_composite_command.rb +129 -0
- data/lib/gems_status.rb +40 -0
- data/lib/lockfile_gems.rb +45 -0
- data/lib/obs_gems.rb +97 -0
- data/lib/ruby_gems_gems.rb +48 -0
- data/lib/ruby_gems_gems_gem_simple.rb +23 -0
- data/lib/utils.rb +18 -0
- data/test/Gemfile +104 -0
- data/test/Gemfile.lock +340 -0
- data/test/Gemfile.lock.test +9 -0
- data/test/test-gems_command.rb +63 -0
- data/test/test-gems_composite_command.rb +86 -0
- data/test/test-lockfile_gems.rb +25 -0
- data/test/test-obs_gems.rb +37 -0
- data/test/test-ruby_gems_gems.rb +29 -0
- metadata +110 -0
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (C) 2011 Jordi Massaguer Pla <jmassaguerpla@suse.com>
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
4
|
+
this software and associated documentation files (the "Software"), to deal in
|
5
|
+
the Software without restriction, including without limitation the rights to
|
6
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
7
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
8
|
+
so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
11
|
+
copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
+
SOFTWARE.
|
20
|
+
|
data/bin/gems-status
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
4
|
+
require "gems_status"
|
5
|
+
|
6
|
+
def echo_usage
|
7
|
+
puts "usage: gem-status conf_file"
|
8
|
+
end
|
9
|
+
|
10
|
+
if ARGV.length == 0 then
|
11
|
+
echo_usage
|
12
|
+
exit
|
13
|
+
end
|
14
|
+
|
15
|
+
if !File::exists?(ARGV[0]) then
|
16
|
+
puts "ERROR: File does not exists: #{ARGV[1]}"
|
17
|
+
echo_usage
|
18
|
+
exit
|
19
|
+
end
|
20
|
+
|
21
|
+
GemStatus.new(ARGV[0]).execute
|
22
|
+
|
data/lib/gem_simple.rb
ADDED
data/lib/gems_command.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
|
2
|
+
require "gem_simple"
|
3
|
+
|
4
|
+
class GemsCommand
|
5
|
+
attr_reader :result
|
6
|
+
def gem_name(gem)
|
7
|
+
pos = gem.rindex(".gem")
|
8
|
+
if ! pos then
|
9
|
+
return gem
|
10
|
+
end
|
11
|
+
name = gem[0...pos]
|
12
|
+
pos = name.rindex("-")
|
13
|
+
if ! pos then
|
14
|
+
return name
|
15
|
+
end
|
16
|
+
return name[0...pos]
|
17
|
+
end
|
18
|
+
|
19
|
+
def gem_version(gem)
|
20
|
+
pos = gem.rindex(".gem")
|
21
|
+
if ! pos then
|
22
|
+
return '-1'
|
23
|
+
end
|
24
|
+
name = gem[0...pos]
|
25
|
+
pos = name.rindex("-")
|
26
|
+
if ! pos then
|
27
|
+
return '-1'
|
28
|
+
end
|
29
|
+
pos = pos + 1
|
30
|
+
return name[pos..-1]
|
31
|
+
end
|
32
|
+
|
33
|
+
def execute
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require "gem_simple"
|
2
|
+
require "gems_command"
|
3
|
+
|
4
|
+
class GemsCompositeCommand < GemsCommand
|
5
|
+
def initialize
|
6
|
+
@commands = []
|
7
|
+
@results = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def add_command(command)
|
11
|
+
@commands << command
|
12
|
+
end
|
13
|
+
|
14
|
+
def execute
|
15
|
+
threads = []
|
16
|
+
if !@commands then
|
17
|
+
return
|
18
|
+
end
|
19
|
+
@commands.each do |command|
|
20
|
+
threads << Thread.new { command.execute }
|
21
|
+
end
|
22
|
+
threads.each { |aThread| aThread.join }
|
23
|
+
@commands.each do |command|
|
24
|
+
@results << command.result
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def common_key?(k)
|
29
|
+
if !@results or @results.empty?
|
30
|
+
return false
|
31
|
+
end
|
32
|
+
@results.each do |result|
|
33
|
+
if !result[k] then
|
34
|
+
return false
|
35
|
+
end
|
36
|
+
end
|
37
|
+
return true
|
38
|
+
end
|
39
|
+
|
40
|
+
def equal_gems?(k)
|
41
|
+
if !@results or @results.empty?
|
42
|
+
return false
|
43
|
+
end
|
44
|
+
if !common_key?(k)
|
45
|
+
return false
|
46
|
+
end
|
47
|
+
version = @results[0][k].version
|
48
|
+
md5 = @results[0][k].md5
|
49
|
+
@results.each do |result|
|
50
|
+
if result[k].version != version
|
51
|
+
return false
|
52
|
+
end
|
53
|
+
if result[k].md5 != md5
|
54
|
+
return false
|
55
|
+
end
|
56
|
+
version = result[k].version
|
57
|
+
md5 = result[k].md5
|
58
|
+
end
|
59
|
+
return true
|
60
|
+
end
|
61
|
+
|
62
|
+
def are_there_results?
|
63
|
+
if !@results
|
64
|
+
return false
|
65
|
+
end
|
66
|
+
if !@results[0]
|
67
|
+
return false
|
68
|
+
end
|
69
|
+
if !@results[1]
|
70
|
+
return false
|
71
|
+
end
|
72
|
+
return true
|
73
|
+
end
|
74
|
+
|
75
|
+
def print_html_diff
|
76
|
+
if !are_there_results?
|
77
|
+
return
|
78
|
+
end
|
79
|
+
puts "<table width='100%'>"
|
80
|
+
@results[0].each do |k,v|
|
81
|
+
if !common_key?(k) then
|
82
|
+
next
|
83
|
+
end
|
84
|
+
if equal_gems?(k) then
|
85
|
+
$stderr.puts "DEBUG: equal gems: #{k}"
|
86
|
+
next
|
87
|
+
end
|
88
|
+
puts "<tr><td><span style='font-weight:bold;'>#{k}</span></td></tr>"
|
89
|
+
version = @results[0][k].version
|
90
|
+
md5 = @results[0][k].md5
|
91
|
+
@results.each do |result|
|
92
|
+
puts "<tr>"
|
93
|
+
puts "<td>"
|
94
|
+
puts "#{result[k].origin}"
|
95
|
+
puts "</td>"
|
96
|
+
puts "<td>"
|
97
|
+
v_color = "black"
|
98
|
+
md5_color = "black"
|
99
|
+
if version != result[k].version then
|
100
|
+
v_color = "red"
|
101
|
+
else
|
102
|
+
if md5 != result[k].md5 then
|
103
|
+
md5_color = "red"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
puts "<span style='color: #{v_color}'>"
|
107
|
+
if !version then
|
108
|
+
puts "error: look error log"
|
109
|
+
end
|
110
|
+
puts "#{result[k].version}"
|
111
|
+
puts "</span>"
|
112
|
+
puts "</td>"
|
113
|
+
puts "<td>"
|
114
|
+
puts "<span style='color: #{md5_color}'>"
|
115
|
+
if result[k].md5.empty? then
|
116
|
+
puts "error: look error log"
|
117
|
+
end
|
118
|
+
puts "#{result[k].md5}"
|
119
|
+
puts "</span>"
|
120
|
+
puts "</td>"
|
121
|
+
puts "</tr>"
|
122
|
+
version = result[k].version
|
123
|
+
md5 = result[k].md5
|
124
|
+
end
|
125
|
+
end
|
126
|
+
puts "</table>"
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
data/lib/gems_status.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#TODO: implement license checker: ninka??
|
3
|
+
#TODO: do we need other checkers?
|
4
|
+
#TODO: implement a nicer interface
|
5
|
+
|
6
|
+
require "rubygems"
|
7
|
+
require "xmlsimple"
|
8
|
+
require "open-uri"
|
9
|
+
require "yaml"
|
10
|
+
|
11
|
+
require "gem_simple"
|
12
|
+
require "obs_gems"
|
13
|
+
require "lockfile_gems"
|
14
|
+
require "ruby_gems_gems"
|
15
|
+
require "gems_composite_command"
|
16
|
+
|
17
|
+
class GemStatus
|
18
|
+
def initialize(conf_file)
|
19
|
+
@conf_file = conf_file
|
20
|
+
begin
|
21
|
+
@conf = YAML::load(File::open(conf_file))
|
22
|
+
rescue
|
23
|
+
$stderr.puts "ERROR: There was a problem opening #{conf_file}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def execute
|
28
|
+
gems_composite_command = GemsCompositeCommand.new
|
29
|
+
@conf.each do |c|
|
30
|
+
gems = eval(c["classname"]).new(c)
|
31
|
+
gems_composite_command.add_command(gems)
|
32
|
+
end
|
33
|
+
gems_composite_command.execute
|
34
|
+
puts "<html><head></head><body>"
|
35
|
+
gems_composite_command.print_html_diff
|
36
|
+
puts "</html"
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "xmlsimple"
|
3
|
+
require "open-uri"
|
4
|
+
require "zlib"
|
5
|
+
|
6
|
+
require "bundler"
|
7
|
+
require "ruby_gems_gems_gem_simple"
|
8
|
+
require "gems_command"
|
9
|
+
require "utils"
|
10
|
+
|
11
|
+
class LockfileGems < GemsCommand
|
12
|
+
def initialize(conf)
|
13
|
+
Utils::check_parameters('LockfileGems', conf, ["dirname", "filename", "gems_url"])
|
14
|
+
@dirname = conf['dirname']
|
15
|
+
@filename = conf['filename']
|
16
|
+
@gems_url = conf['gems_url']
|
17
|
+
@result = {}
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_data
|
21
|
+
Dir.chdir(@dirname)
|
22
|
+
data = ""
|
23
|
+
begin
|
24
|
+
data = File.open(@filename).read
|
25
|
+
rescue
|
26
|
+
$stderr.puts "ERROR: There was a problem opening file #{filename} "
|
27
|
+
end
|
28
|
+
return data
|
29
|
+
end
|
30
|
+
|
31
|
+
def execute
|
32
|
+
$stderr.puts "DEBUG: reading #{@filename}"
|
33
|
+
file_data = get_data
|
34
|
+
if file_data.empty?
|
35
|
+
return
|
36
|
+
end
|
37
|
+
lockfile = Bundler::LockfileParser.new(file_data)
|
38
|
+
lockfile.specs.each do |spec|
|
39
|
+
name = spec.name
|
40
|
+
version = spec.version
|
41
|
+
@result[name] = RubyGemsGems_GemSimple.new(name, Gem::Version.create(version) , '', @filename, @gems_url)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/lib/obs_gems.rb
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "xmlsimple"
|
3
|
+
require "open-uri"
|
4
|
+
|
5
|
+
require "gem_simple"
|
6
|
+
require "gems_command"
|
7
|
+
require "utils"
|
8
|
+
|
9
|
+
class OBSGems < GemsCommand
|
10
|
+
def initialize(conf)
|
11
|
+
Utils::check_parameters('OBSGems', conf, ["username", "password", "url", "obs_repo"])
|
12
|
+
@result = {}
|
13
|
+
@username = conf['username']
|
14
|
+
@password = conf['password']
|
15
|
+
@obs_url = conf['url']
|
16
|
+
@repo = conf['obs_repo']
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
def parse_link(linkinfo)
|
21
|
+
if linkinfo.length > 1 then
|
22
|
+
$stderr.puts "ERROR: There is more than one linkinfo element"
|
23
|
+
return
|
24
|
+
end
|
25
|
+
if !linkinfo[0]["project"] then
|
26
|
+
$stderr.puts "ERROR: Project element does not exists in linkinfo"
|
27
|
+
return
|
28
|
+
end
|
29
|
+
if !linkinfo[0]["package"] then
|
30
|
+
$stderr.puts "ERROR: Package element does not exists in linkinfo"
|
31
|
+
return
|
32
|
+
end
|
33
|
+
repo = linkinfo[0]["project"]
|
34
|
+
package = linkinfo[0]["package"]
|
35
|
+
if linkinfo[0]["rev"] then
|
36
|
+
rev = linkinfo[0]["rev"]
|
37
|
+
$stderr.puts "DEBUG: Revision in link: #{rev}."
|
38
|
+
package = package + "?rev=" + rev
|
39
|
+
end
|
40
|
+
$stderr.puts "DEBUG: follow link to project: #{repo} package: #{package}"
|
41
|
+
parse_rpm_data(repo, package)
|
42
|
+
end
|
43
|
+
|
44
|
+
def get_data(url)
|
45
|
+
data = ""
|
46
|
+
begin
|
47
|
+
data = open(url, :http_basic_authentication => [@username, @password]).read
|
48
|
+
rescue
|
49
|
+
$stderr.puts "ERROR: There was a problem opening #{url} "
|
50
|
+
end
|
51
|
+
return data
|
52
|
+
end
|
53
|
+
|
54
|
+
def parse_rpm_data(project, package)
|
55
|
+
url = @obs_url + "/" + project
|
56
|
+
rpm_url = url + "/" + package
|
57
|
+
response = get_data(rpm_url)
|
58
|
+
if response.empty? then
|
59
|
+
return
|
60
|
+
end
|
61
|
+
data = XmlSimple.xml_in(response)
|
62
|
+
if data["linkinfo"] then
|
63
|
+
$stderr.puts "DEBUG: #{data["name"]} is a link."
|
64
|
+
parse_link(data["linkinfo"])
|
65
|
+
return
|
66
|
+
end
|
67
|
+
if !data["entry"] then
|
68
|
+
$stderr.puts "ERROR: something went wrong retrieving info from #{project} : #{package}"
|
69
|
+
return
|
70
|
+
end
|
71
|
+
data["entry"].each do |entry|
|
72
|
+
if entry["name"].end_with?(".gem") then
|
73
|
+
name = gem_name(entry['name'])
|
74
|
+
version = gem_version(entry['name'])
|
75
|
+
md5 = entry['md5']
|
76
|
+
@result[name] = GemSimple.new(name, Gem::Version.new(version), md5, url)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def execute
|
82
|
+
url = @obs_url + "/" + @repo
|
83
|
+
response = get_data(url)
|
84
|
+
if response.empty? then
|
85
|
+
return
|
86
|
+
end
|
87
|
+
data = XmlSimple.xml_in(response)
|
88
|
+
data["entry"].each do |entry|
|
89
|
+
entry.each do |k,v|
|
90
|
+
if k == "name" and v.start_with?("rubygem-") then
|
91
|
+
parse_rpm_data(@repo, v)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "xmlsimple"
|
3
|
+
require "open-uri"
|
4
|
+
require "zlib"
|
5
|
+
|
6
|
+
require "ruby_gems_gems_gem_simple"
|
7
|
+
require "gems_command"
|
8
|
+
require "utils"
|
9
|
+
|
10
|
+
|
11
|
+
class RubyGemsGems < GemsCommand
|
12
|
+
|
13
|
+
def initialize(conf)
|
14
|
+
Utils::check_parameters('RubyGemsGems', conf, ["url", "specs"])
|
15
|
+
@url = conf['url']
|
16
|
+
@specs = conf['specs']
|
17
|
+
@result = {}
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_data
|
22
|
+
specs_url = @url + "/" + @specs
|
23
|
+
begin
|
24
|
+
source = open(specs_url)
|
25
|
+
gz = Zlib::GzipReader.new(source)
|
26
|
+
return gz.read
|
27
|
+
rescue
|
28
|
+
$stderr.puts "ERROR: There was a problem opening #{specs_url} "
|
29
|
+
end
|
30
|
+
return ""
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def execute
|
35
|
+
response = get_data
|
36
|
+
if response.empty? then
|
37
|
+
return
|
38
|
+
end
|
39
|
+
data = Marshal.load(response)
|
40
|
+
data.each do |line|
|
41
|
+
name = line[0]
|
42
|
+
version = Gem::Version.new(line[1])
|
43
|
+
gems_url = "#{@url}/gems"
|
44
|
+
@result[name] = RubyGemsGems_GemSimple.new(name, version,'' , @url, gems_url)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "gem_simple"
|
2
|
+
|
3
|
+
class RubyGemsGems_GemSimple < GemSimple
|
4
|
+
|
5
|
+
def initialize(name, version, md5, origin, gems_url)
|
6
|
+
super(name, version, md5, origin)
|
7
|
+
@gems_url = gems_url
|
8
|
+
end
|
9
|
+
|
10
|
+
def md5
|
11
|
+
gem_uri = "#{@gems_url}/#{@name}-#{@version}.gem"
|
12
|
+
$stderr.puts "DEBUG: download and md5 for #{@name} from #{gem_uri}"
|
13
|
+
begin
|
14
|
+
source = open(gem_uri)
|
15
|
+
digest = Digest::MD5.hexdigest(source.read)
|
16
|
+
return digest
|
17
|
+
rescue
|
18
|
+
$stderr.puts "ERROR: There was a problem opening #{gem_uri}"
|
19
|
+
end
|
20
|
+
return ""
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
data/lib/utils.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
class Utils
|
2
|
+
def Utils.check_parameters(classname, conf, parameters)
|
3
|
+
if !conf['classname'] then
|
4
|
+
$stderr.puts "ERROR: trying to initialize #{classname} when parameter classname does not exists"
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
if conf['classname'] != classname then
|
8
|
+
$stderr.puts "ERROR: trying to initialize #{classname} when parameter classname is #{conf['classname']}"
|
9
|
+
exit
|
10
|
+
end
|
11
|
+
parameters.each do |p|
|
12
|
+
if !conf[p] then
|
13
|
+
$stderr.puts "ERROR: parameter #{p} not found for #{classname}"
|
14
|
+
exit
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/test/Gemfile
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
|
3
|
+
gem 'rake', '>=0.9.2'
|
4
|
+
gem 'rails', '3.1.1'
|
5
|
+
|
6
|
+
gem 'sqlite3-ruby', '>=1.3.3', :require => 'sqlite3'
|
7
|
+
|
8
|
+
# Use unicorn as the web server
|
9
|
+
# gem 'unicorn'
|
10
|
+
|
11
|
+
# Deploy with Capistrano
|
12
|
+
# gem 'capistrano'
|
13
|
+
|
14
|
+
# To use debugger
|
15
|
+
# gem 'ruby-debug'
|
16
|
+
|
17
|
+
# Bundle the extra gems:
|
18
|
+
# gem 'bj'
|
19
|
+
# gem 'nokogiri'
|
20
|
+
# gem 'sqlite3-ruby', :require => 'sqlite3'
|
21
|
+
# gem 'aws-s3', :require => 'aws/s3'
|
22
|
+
|
23
|
+
gem 'newrelic_rpm'
|
24
|
+
|
25
|
+
# Bundle gems for the local environment. Make sure to
|
26
|
+
# put test-only gems in this group so their generators
|
27
|
+
# and rake tasks are available in development mode:
|
28
|
+
group :test do
|
29
|
+
gem 'timecop'
|
30
|
+
gem 'shoulda'
|
31
|
+
gem 'ci_reporter'
|
32
|
+
gem 'factory_girl'
|
33
|
+
gem 'factory_girl_rails'
|
34
|
+
gem 'migration_test_helper'
|
35
|
+
gem 'mocha', :require => false
|
36
|
+
gem 'webmock', :require => 'webmock/test_unit'
|
37
|
+
gem 'fakefs', :require => 'fakefs/safe'
|
38
|
+
end
|
39
|
+
|
40
|
+
group :development do
|
41
|
+
gem 'parallel_tests'
|
42
|
+
end
|
43
|
+
|
44
|
+
gem 'multi_db'
|
45
|
+
gem 'haml'
|
46
|
+
gem 'sass'
|
47
|
+
gem 'friendly_id', '~> 3.3.0.rc2'
|
48
|
+
gem 'uuid_it'
|
49
|
+
gem 'RedCloth'
|
50
|
+
gem "gettext", '>=1.9.3'
|
51
|
+
#gem "gettext_activerecord"
|
52
|
+
gem "has_alter_ego"
|
53
|
+
gem 'oauth', '>=0.4.1'
|
54
|
+
gem "oauth-plugin"
|
55
|
+
gem 'thinking-sphinx', '~>2.0.5', :require => 'thinking_sphinx'
|
56
|
+
gem 'memcache-client'
|
57
|
+
gem 'system_timer'
|
58
|
+
gem 'ruby-openid'
|
59
|
+
gem 'fastercsv'
|
60
|
+
gem 'amazon-ec2'
|
61
|
+
gem 'aws-s3'
|
62
|
+
gem 'pg'
|
63
|
+
gem 'gruff'
|
64
|
+
gem 'rmagick', '=2.12.2'
|
65
|
+
gem 'awesome_nested_set'
|
66
|
+
gem 'verification', '>=1.0.2'
|
67
|
+
#, :git => 'git://github.com/collectiveidea/awesome_nested_set'
|
68
|
+
gem 'http_accept_language'
|
69
|
+
#, :git => 'git://github.com/iain/http_accept_language.git'
|
70
|
+
gem "will_paginate", '~> 3.0.pre4'
|
71
|
+
gem "net-ssh"
|
72
|
+
gem 'sass-rails'
|
73
|
+
gem "uglifier"
|
74
|
+
gem "yui-compressor"
|
75
|
+
# We need prototype-rails for the "render :update" blocks
|
76
|
+
gem 'prototype-rails'
|
77
|
+
gem 'daemons'
|
78
|
+
gem 'coffee-rails'
|
79
|
+
gem 'abingo'
|
80
|
+
gem 'dynamic_form'
|
81
|
+
gem 'private_pub'
|
82
|
+
gem 'faye'
|
83
|
+
|
84
|
+
gem "omniauth", '>=0.2.6'
|
85
|
+
gem "has_mobile_views"
|
86
|
+
|
87
|
+
## Feedzirra not needed for Onsite or kiosk
|
88
|
+
#unless OPTS.onsite_mode or OPTS.kiosk_mode
|
89
|
+
gem 'feedzirra', '>=0.0.24'
|
90
|
+
#end
|
91
|
+
|
92
|
+
# TODO: Handle those special cases:
|
93
|
+
#if !OPTS.onsite_mode and OPTS.graylog2['enabled']
|
94
|
+
gem 'gelf'
|
95
|
+
#end
|
96
|
+
|
97
|
+
# to work around https://github.com/mikel/mail/issues/260,
|
98
|
+
# let's use https://github.com/mikel/mail/pull/265/files
|
99
|
+
gem 'mail'
|
100
|
+
#, :git => 'git://github.com/zimbatm/mail.git'
|
101
|
+
|
102
|
+
group :test do
|
103
|
+
gem "rcov"
|
104
|
+
end
|
data/test/Gemfile.lock
ADDED
@@ -0,0 +1,340 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
POpen4 (0.1.4)
|
5
|
+
Platform (>= 0.4.0)
|
6
|
+
open4
|
7
|
+
Platform (0.4.0)
|
8
|
+
RedCloth (4.2.7)
|
9
|
+
XMLCanonicalizer (1.0.1)
|
10
|
+
log4r (>= 1.0.4)
|
11
|
+
abingo (1.0.3)
|
12
|
+
actionmailer (3.1.1)
|
13
|
+
actionpack (= 3.1.1)
|
14
|
+
mail (~> 2.3.0)
|
15
|
+
actionpack (3.1.1)
|
16
|
+
activemodel (= 3.1.1)
|
17
|
+
activesupport (= 3.1.1)
|
18
|
+
builder (~> 3.0.0)
|
19
|
+
erubis (~> 2.7.0)
|
20
|
+
i18n (~> 0.6)
|
21
|
+
rack (~> 1.3.2)
|
22
|
+
rack-cache (~> 1.1)
|
23
|
+
rack-mount (~> 0.8.2)
|
24
|
+
rack-test (~> 0.6.1)
|
25
|
+
sprockets (~> 2.0.2)
|
26
|
+
activemodel (3.1.1)
|
27
|
+
activesupport (= 3.1.1)
|
28
|
+
builder (~> 3.0.0)
|
29
|
+
i18n (~> 0.6)
|
30
|
+
activerecord (3.1.1)
|
31
|
+
activemodel (= 3.1.1)
|
32
|
+
activesupport (= 3.1.1)
|
33
|
+
arel (~> 2.2.1)
|
34
|
+
tzinfo (~> 0.3.29)
|
35
|
+
activeresource (3.1.1)
|
36
|
+
activemodel (= 3.1.1)
|
37
|
+
activesupport (= 3.1.1)
|
38
|
+
activesupport (3.1.1)
|
39
|
+
multi_json (~> 1.0)
|
40
|
+
addressable (2.2.6)
|
41
|
+
amazon-ec2 (0.9.17)
|
42
|
+
xml-simple (>= 1.0.12)
|
43
|
+
arel (2.2.1)
|
44
|
+
awesome_nested_set (2.0.1)
|
45
|
+
activerecord (>= 3.0.0)
|
46
|
+
aws-s3 (0.6.2)
|
47
|
+
builder
|
48
|
+
mime-types
|
49
|
+
xml-simple
|
50
|
+
babosa (0.3.5)
|
51
|
+
builder (3.0.0)
|
52
|
+
ci_reporter (1.6.5)
|
53
|
+
builder (>= 2.1.2)
|
54
|
+
coffee-rails (3.1.1)
|
55
|
+
coffee-script (>= 2.2.0)
|
56
|
+
railties (~> 3.1.0)
|
57
|
+
coffee-script (2.2.0)
|
58
|
+
coffee-script-source
|
59
|
+
execjs
|
60
|
+
coffee-script-source (1.1.2)
|
61
|
+
crack (0.1.7)
|
62
|
+
curb (0.7.15)
|
63
|
+
daemons (1.0.10)
|
64
|
+
dynamic_form (1.1.4)
|
65
|
+
em-hiredis (0.1.0)
|
66
|
+
hiredis (~> 0.3.0)
|
67
|
+
em-http-request (0.3.0)
|
68
|
+
addressable (>= 2.0.0)
|
69
|
+
escape_utils
|
70
|
+
eventmachine (>= 0.12.9)
|
71
|
+
erubis (2.7.0)
|
72
|
+
escape_utils (0.2.4)
|
73
|
+
eventmachine (0.12.10)
|
74
|
+
execjs (1.2.0)
|
75
|
+
multi_json (~> 1.0)
|
76
|
+
factory_girl (2.1.2)
|
77
|
+
activesupport
|
78
|
+
factory_girl_rails (1.2.0)
|
79
|
+
factory_girl (~> 2.1.0)
|
80
|
+
railties (>= 3.0.0)
|
81
|
+
fakefs (0.4.0)
|
82
|
+
faraday (0.7.5)
|
83
|
+
addressable (~> 2.2.6)
|
84
|
+
multipart-post (~> 1.1.3)
|
85
|
+
rack (>= 1.1.0, < 2)
|
86
|
+
fastercsv (1.5.4)
|
87
|
+
faye (0.6.7)
|
88
|
+
em-hiredis (>= 0.0.1)
|
89
|
+
em-http-request (~> 0.3)
|
90
|
+
eventmachine (~> 0.12.0)
|
91
|
+
json (>= 1.0)
|
92
|
+
rack (>= 1.0)
|
93
|
+
thin (~> 1.2)
|
94
|
+
feedzirra (0.1.1)
|
95
|
+
activesupport (>= 3.0.8)
|
96
|
+
builder (>= 2.1.2)
|
97
|
+
curb (~> 0.7.15)
|
98
|
+
i18n (>= 0.5.0)
|
99
|
+
loofah (~> 1.2.0)
|
100
|
+
nokogiri (>= 1.4.4)
|
101
|
+
rake (>= 0.8.7)
|
102
|
+
rdoc (~> 3.8)
|
103
|
+
sax-machine (~> 0.1.0)
|
104
|
+
friendly_id (3.3.0.rc2)
|
105
|
+
babosa (~> 0.3.0)
|
106
|
+
gelf (1.1.3)
|
107
|
+
json
|
108
|
+
gettext (2.1.0)
|
109
|
+
locale (>= 2.0.5)
|
110
|
+
gruff (0.3.6)
|
111
|
+
haml (3.1.2)
|
112
|
+
has_alter_ego (0.0.9)
|
113
|
+
has_mobile_views (0.0.3)
|
114
|
+
hike (1.2.1)
|
115
|
+
hiredis (0.3.2)
|
116
|
+
http_accept_language (1.0.3)
|
117
|
+
i18n (0.6.0)
|
118
|
+
json (1.6.1)
|
119
|
+
locale (2.0.5)
|
120
|
+
log4r (1.1.9)
|
121
|
+
loofah (1.2.0)
|
122
|
+
nokogiri (>= 1.4.4)
|
123
|
+
macaddr (1.0.0)
|
124
|
+
mail (2.3.0)
|
125
|
+
i18n (>= 0.4.0)
|
126
|
+
mime-types (~> 1.16)
|
127
|
+
treetop (~> 1.4.8)
|
128
|
+
memcache-client (1.8.3)
|
129
|
+
metaclass (0.0.1)
|
130
|
+
migration_test_helper (1.3.3)
|
131
|
+
mime-types (1.16)
|
132
|
+
mocha (0.10.0)
|
133
|
+
metaclass (~> 0.0.1)
|
134
|
+
multi_db (0.3.0)
|
135
|
+
activerecord (>= 2.1.0)
|
136
|
+
tlattr_accessors (>= 0.0.3)
|
137
|
+
multi_json (1.0.3)
|
138
|
+
multi_xml (0.4.1)
|
139
|
+
multipart-post (1.1.3)
|
140
|
+
net-ldap (0.2.2)
|
141
|
+
net-ssh (2.0.23)
|
142
|
+
newrelic_rpm (3.3.0)
|
143
|
+
nokogiri (1.5.0)
|
144
|
+
oa-basic (0.3.0)
|
145
|
+
oa-core (= 0.3.0)
|
146
|
+
rest-client (~> 1.6.0)
|
147
|
+
oa-core (0.3.0)
|
148
|
+
oa-enterprise (0.3.0)
|
149
|
+
XMLCanonicalizer (~> 1.0.1)
|
150
|
+
addressable (~> 2.2.6)
|
151
|
+
net-ldap (~> 0.2.2)
|
152
|
+
nokogiri (~> 1.5.0)
|
153
|
+
oa-core (= 0.3.0)
|
154
|
+
pyu-ruby-sasl (~> 0.0.3.1)
|
155
|
+
rubyntlm (~> 0.1.1)
|
156
|
+
uuid
|
157
|
+
oa-more (0.3.0)
|
158
|
+
multi_json (~> 1.0.0)
|
159
|
+
oa-core (= 0.3.0)
|
160
|
+
rest-client (~> 1.6.0)
|
161
|
+
oa-oauth (0.3.0)
|
162
|
+
faraday (~> 0.7.3)
|
163
|
+
multi_json (~> 1.0.0)
|
164
|
+
multi_xml (~> 0.4.0)
|
165
|
+
oa-core (= 0.3.0)
|
166
|
+
oauth (~> 0.4.0)
|
167
|
+
oauth2 (~> 0.5.0)
|
168
|
+
oa-openid (0.3.0)
|
169
|
+
oa-core (= 0.3.0)
|
170
|
+
rack-openid (~> 1.3.1)
|
171
|
+
ruby-openid-apps-discovery (~> 1.2.0)
|
172
|
+
oauth (0.4.5)
|
173
|
+
oauth-plugin (0.3.14)
|
174
|
+
oauth (>= 0.3.5)
|
175
|
+
oauth2 (0.5.1)
|
176
|
+
faraday (~> 0.7.4)
|
177
|
+
multi_json (~> 1.0.3)
|
178
|
+
omniauth (0.3.0)
|
179
|
+
oa-basic (= 0.3.0)
|
180
|
+
oa-core (= 0.3.0)
|
181
|
+
oa-enterprise (= 0.3.0)
|
182
|
+
oa-more (= 0.3.0)
|
183
|
+
oa-oauth (= 0.3.0)
|
184
|
+
oa-openid (= 0.3.0)
|
185
|
+
open4 (1.0.1)
|
186
|
+
parallel (0.5.11)
|
187
|
+
parallel_tests (0.6.12)
|
188
|
+
parallel
|
189
|
+
pg (0.11.0)
|
190
|
+
polyglot (0.3.2)
|
191
|
+
private_pub (0.2.0)
|
192
|
+
prototype-rails (3.1.0)
|
193
|
+
rails (~> 3.1)
|
194
|
+
pyu-ruby-sasl (0.0.3.2)
|
195
|
+
rack (1.3.5)
|
196
|
+
rack-cache (1.1)
|
197
|
+
rack (>= 0.4)
|
198
|
+
rack-mount (0.8.3)
|
199
|
+
rack (>= 1.0.0)
|
200
|
+
rack-openid (1.3.1)
|
201
|
+
rack (>= 1.1.0)
|
202
|
+
ruby-openid (>= 2.1.8)
|
203
|
+
rack-ssl (1.3.2)
|
204
|
+
rack
|
205
|
+
rack-test (0.6.1)
|
206
|
+
rack (>= 1.0)
|
207
|
+
rails (3.1.1)
|
208
|
+
actionmailer (= 3.1.1)
|
209
|
+
actionpack (= 3.1.1)
|
210
|
+
activerecord (= 3.1.1)
|
211
|
+
activeresource (= 3.1.1)
|
212
|
+
activesupport (= 3.1.1)
|
213
|
+
bundler (~> 1.0)
|
214
|
+
railties (= 3.1.1)
|
215
|
+
railties (3.1.1)
|
216
|
+
actionpack (= 3.1.1)
|
217
|
+
activesupport (= 3.1.1)
|
218
|
+
rack-ssl (~> 1.3.2)
|
219
|
+
rake (>= 0.8.7)
|
220
|
+
rdoc (~> 3.4)
|
221
|
+
thor (~> 0.14.6)
|
222
|
+
rake (0.9.2)
|
223
|
+
rcov (0.9.10)
|
224
|
+
rdoc (3.9.1)
|
225
|
+
rest-client (1.6.7)
|
226
|
+
mime-types (>= 1.16)
|
227
|
+
riddle (1.3.3)
|
228
|
+
rmagick (2.12.2)
|
229
|
+
ruby-openid (2.1.8)
|
230
|
+
ruby-openid-apps-discovery (1.2.0)
|
231
|
+
ruby-openid (>= 2.1.7)
|
232
|
+
rubyntlm (0.1.1)
|
233
|
+
sass (3.1.10)
|
234
|
+
sass-rails (3.1.4)
|
235
|
+
actionpack (~> 3.1.0)
|
236
|
+
railties (~> 3.1.0)
|
237
|
+
sass (>= 3.1.4)
|
238
|
+
sprockets (~> 2.0.0)
|
239
|
+
tilt (~> 1.3.2)
|
240
|
+
sax-machine (0.1.0)
|
241
|
+
nokogiri (> 0.0.0)
|
242
|
+
shoulda (2.11.3)
|
243
|
+
sprockets (2.0.2)
|
244
|
+
hike (~> 1.2)
|
245
|
+
rack (~> 1.0)
|
246
|
+
tilt (~> 1.1, != 1.3.0)
|
247
|
+
sqlite3 (1.3.4)
|
248
|
+
sqlite3-ruby (1.3.3)
|
249
|
+
sqlite3 (>= 1.3.3)
|
250
|
+
system_timer (1.2.4)
|
251
|
+
thin (1.2.11)
|
252
|
+
daemons (>= 1.0.9)
|
253
|
+
eventmachine (>= 0.12.6)
|
254
|
+
rack (>= 1.0.0)
|
255
|
+
thinking-sphinx (2.0.5)
|
256
|
+
activerecord (>= 3.0.3)
|
257
|
+
riddle (>= 1.3.3)
|
258
|
+
thor (0.14.6)
|
259
|
+
tilt (1.3.3)
|
260
|
+
timecop (0.3.5)
|
261
|
+
tlattr_accessors (0.0.3)
|
262
|
+
treetop (1.4.9)
|
263
|
+
polyglot (>= 0.3.1)
|
264
|
+
tzinfo (0.3.30)
|
265
|
+
uglifier (1.0.0)
|
266
|
+
execjs (>= 0.3.0)
|
267
|
+
multi_json (>= 1.0.2)
|
268
|
+
uuid (2.3.2)
|
269
|
+
macaddr (~> 1.0)
|
270
|
+
uuid_it (0.1.0)
|
271
|
+
verification (1.0.2)
|
272
|
+
actionpack (>= 3.0.0, < 3.2.0)
|
273
|
+
activesupport (>= 3.0.0, < 3.2.0)
|
274
|
+
webmock (1.7.7)
|
275
|
+
addressable (~> 2.2, > 2.2.5)
|
276
|
+
crack (>= 0.1.7)
|
277
|
+
will_paginate (3.0.0)
|
278
|
+
xml-simple (1.0.12)
|
279
|
+
yui-compressor (0.9.6)
|
280
|
+
POpen4 (>= 0.1.4)
|
281
|
+
|
282
|
+
PLATFORMS
|
283
|
+
ruby
|
284
|
+
|
285
|
+
DEPENDENCIES
|
286
|
+
RedCloth
|
287
|
+
abingo
|
288
|
+
amazon-ec2
|
289
|
+
awesome_nested_set
|
290
|
+
aws-s3
|
291
|
+
ci_reporter
|
292
|
+
coffee-rails
|
293
|
+
daemons
|
294
|
+
dynamic_form
|
295
|
+
factory_girl
|
296
|
+
factory_girl_rails
|
297
|
+
fakefs
|
298
|
+
fastercsv
|
299
|
+
faye
|
300
|
+
feedzirra (>= 0.0.24)
|
301
|
+
friendly_id (~> 3.3.0.rc2)
|
302
|
+
gelf
|
303
|
+
gettext (>= 1.9.3)
|
304
|
+
gruff
|
305
|
+
haml
|
306
|
+
has_alter_ego
|
307
|
+
has_mobile_views
|
308
|
+
http_accept_language
|
309
|
+
mail
|
310
|
+
memcache-client
|
311
|
+
migration_test_helper
|
312
|
+
mocha
|
313
|
+
multi_db
|
314
|
+
net-ssh
|
315
|
+
newrelic_rpm
|
316
|
+
oauth (>= 0.4.1)
|
317
|
+
oauth-plugin
|
318
|
+
omniauth (>= 0.2.6)
|
319
|
+
parallel_tests
|
320
|
+
pg
|
321
|
+
private_pub
|
322
|
+
prototype-rails
|
323
|
+
rails (= 3.1.1)
|
324
|
+
rake (>= 0.9.2)
|
325
|
+
rcov
|
326
|
+
rmagick (= 2.12.2)
|
327
|
+
ruby-openid
|
328
|
+
sass
|
329
|
+
sass-rails
|
330
|
+
shoulda
|
331
|
+
sqlite3-ruby (>= 1.3.3)
|
332
|
+
system_timer
|
333
|
+
thinking-sphinx (~> 2.0.5)
|
334
|
+
timecop
|
335
|
+
uglifier
|
336
|
+
uuid_it
|
337
|
+
verification (>= 1.0.2)
|
338
|
+
webmock
|
339
|
+
will_paginate (~> 3.0.pre4)
|
340
|
+
yui-compressor
|
@@ -0,0 +1,63 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
|
+
require 'test/unit'
|
3
|
+
require 'gems_command'
|
4
|
+
|
5
|
+
class TestGemsCommand < Test::Unit::TestCase
|
6
|
+
def test_gem_name_wrong_name
|
7
|
+
gem_name = 'wrong_name'
|
8
|
+
result = GemsCommand.new.gem_name(gem_name)
|
9
|
+
expected = gem_name
|
10
|
+
assert_equal(result, expected)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_gem_name_without_version
|
14
|
+
gem_name = 'name.gem'
|
15
|
+
result = GemsCommand.new.gem_name(gem_name)
|
16
|
+
expected = 'name'
|
17
|
+
assert_equal(result, expected)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_gem_name_simple
|
21
|
+
gem_name = 'name-1.0.0.gem'
|
22
|
+
result = GemsCommand.new.gem_name(gem_name)
|
23
|
+
expected = 'name'
|
24
|
+
assert_equal(result, expected)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_gem_name_with_dashes
|
28
|
+
gem_name = 'name-1-1.0.0.gem'
|
29
|
+
result = GemsCommand.new.gem_name(gem_name)
|
30
|
+
expected = 'name-1'
|
31
|
+
assert_equal(result, expected)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_gem_version_no_version
|
35
|
+
gem_name = 'name.gem'
|
36
|
+
result = GemsCommand.new.gem_version(gem_name)
|
37
|
+
expected = '-1'
|
38
|
+
assert_equal(result, expected)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_gem_version_wrong_name
|
42
|
+
gem_name = 'name-1.0'
|
43
|
+
result = GemsCommand.new.gem_version(gem_name)
|
44
|
+
expected = '-1'
|
45
|
+
assert_equal(result, expected)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_gem_version_simple_version
|
49
|
+
gem_name = 'name-1.0.0.gem'
|
50
|
+
result = GemsCommand.new.gem_version(gem_name)
|
51
|
+
expected = '1.0.0'
|
52
|
+
assert_equal(result, expected)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_gem_version_with_dashes
|
56
|
+
gem_name = 'name-a-1.0.0.gem'
|
57
|
+
result = GemsCommand.new.gem_version(gem_name)
|
58
|
+
expected = '1.0.0'
|
59
|
+
assert_equal(result, expected)
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
@@ -0,0 +1,86 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
|
+
require 'test/unit'
|
3
|
+
require 'gems_composite_command'
|
4
|
+
|
5
|
+
class GemsCompositeCommandTest < GemsCompositeCommand
|
6
|
+
attr_accessor :results
|
7
|
+
end
|
8
|
+
|
9
|
+
class TestGemsCompositeCommand < Test::Unit::TestCase
|
10
|
+
def test_common_key_in_empty_results
|
11
|
+
gemscompositecommand = GemsCompositeCommand.new
|
12
|
+
result = gemscompositecommand.common_key?("this key does not exists")
|
13
|
+
assert(!result)
|
14
|
+
end
|
15
|
+
def test_common_key_in_zero_coincidences_one_result
|
16
|
+
gemscompositecommand = GemsCompositeCommandTest.new
|
17
|
+
gemscompositecommand.results = [{"a key"=>"a value"}]
|
18
|
+
result = gemscompositecommand.common_key?("this key does not exists")
|
19
|
+
assert(!result)
|
20
|
+
end
|
21
|
+
def test_common_key_in_zero_coincidences_two_results
|
22
|
+
gemscompositecommand = GemsCompositeCommandTest.new
|
23
|
+
gemscompositecommand.results = [{"a key"=>"a value"},{"another key"=>"another value"}]
|
24
|
+
result = gemscompositecommand.common_key?("this key does not exists")
|
25
|
+
assert(!result)
|
26
|
+
end
|
27
|
+
def test_common_key_in_one_coincidence_one_results
|
28
|
+
gemscompositecommand = GemsCompositeCommandTest.new
|
29
|
+
gemscompositecommand.results = [{"a key"=>"a value"}]
|
30
|
+
result = gemscompositecommand.common_key?("a key")
|
31
|
+
assert(result)
|
32
|
+
end
|
33
|
+
def test_common_key_in_one_coincidence_two_results
|
34
|
+
gemscompositecommand = GemsCompositeCommandTest.new
|
35
|
+
gemscompositecommand.results = [{"a key"=>"a value"},{"another key"=>"another value"}]
|
36
|
+
result = gemscompositecommand.common_key?("a key")
|
37
|
+
assert(!result)
|
38
|
+
end
|
39
|
+
def test_common_key_in_two_coincidence_two_results
|
40
|
+
gemscompositecommand = GemsCompositeCommandTest.new
|
41
|
+
gemscompositecommand.results = [{"a key"=>"a value"},{"a key"=>"another value"}]
|
42
|
+
result = gemscompositecommand.common_key?("a key")
|
43
|
+
assert(result)
|
44
|
+
end
|
45
|
+
def test_equals_when_no_common_keys
|
46
|
+
gemscompositecommand = GemsCompositeCommandTest.new
|
47
|
+
gem1 = GemSimple.new("foo_name","foo_version","md5","origin1")
|
48
|
+
gem2 = GemSimple.new("foo_name","foo_version","md5","origin2")
|
49
|
+
gem3 = GemSimple.new("bar_name","bar_version","md5","origin3")
|
50
|
+
gemscompositecommand.results = [{"foo"=>gem1},{"foo"=>gem2},{"bar"=>gem3}]
|
51
|
+
result = gemscompositecommand.equal_gems?("foo")
|
52
|
+
assert(!result)
|
53
|
+
end
|
54
|
+
def test_equals_when_version_not_equals
|
55
|
+
gemscompositecommand = GemsCompositeCommandTest.new
|
56
|
+
gem1 = GemSimple.new("foo_name","foo_version","md5","origin1")
|
57
|
+
gem2 = GemSimple.new("foo_name","foo_version","md5","origin2")
|
58
|
+
gem3 = GemSimple.new("foo_name","bar_version","md5","origin3")
|
59
|
+
gemscompositecommand.results = [{"foo"=>gem1},{"foo"=>gem2},{"foo"=>gem3}]
|
60
|
+
result = gemscompositecommand.equal_gems?("foo")
|
61
|
+
assert(!result)
|
62
|
+
end
|
63
|
+
def test_equals_when_md5_not_equals
|
64
|
+
gemscompositecommand = GemsCompositeCommandTest.new
|
65
|
+
gem1 = GemSimple.new("foo_name","foo_version","md5","origin1")
|
66
|
+
gem2 = GemSimple.new("foo_name","foo_version","md5","origin2")
|
67
|
+
gem3 = GemSimple.new("foo_name","foo_version","md5_2","origin3")
|
68
|
+
gemscompositecommand.results = [{"foo"=>gem1},{"foo"=>gem2},{"foo"=>gem3}]
|
69
|
+
result = gemscompositecommand.equal_gems?("foo")
|
70
|
+
assert(!result)
|
71
|
+
end
|
72
|
+
def test_equals_when_equals
|
73
|
+
gemscompositecommand = GemsCompositeCommandTest.new
|
74
|
+
gem1 = GemSimple.new("foo_name","foo_version","md5","origin1")
|
75
|
+
gem2 = GemSimple.new("foo_name","foo_version","md5","origin2")
|
76
|
+
gem3 = GemSimple.new("foo_name","foo_version","md5","origin3")
|
77
|
+
gemscompositecommand.results = [{"foo"=>gem1},{"foo"=>gem2},{"foo"=>gem3}]
|
78
|
+
result = gemscompositecommand.equal_gems?("foo")
|
79
|
+
assert(result)
|
80
|
+
end
|
81
|
+
def test_equals_when_no_results
|
82
|
+
gemscompositecommand = GemsCompositeCommandTest.new
|
83
|
+
result = gemscompositecommand.equal_gems?("foo")
|
84
|
+
assert(!result)
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
|
+
require 'test/unit'
|
3
|
+
require 'lockfile_gems'
|
4
|
+
|
5
|
+
class LockfileGemsTest < LockfileGems
|
6
|
+
attr_accessor :result
|
7
|
+
def initialize
|
8
|
+
@dirname = "."
|
9
|
+
@filename = "Gemfile.lock.test"
|
10
|
+
@gems_url = ""
|
11
|
+
@result = {}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class TestLockfileGems < Test::Unit::TestCase
|
16
|
+
def test_get_rubygems_data
|
17
|
+
lockfilegems = LockfileGemsTest.new
|
18
|
+
lockfilegems.execute
|
19
|
+
result = lockfilegems.result["test"].name
|
20
|
+
assert_equal("test",result)
|
21
|
+
result = lockfilegems.result["test"].version
|
22
|
+
assert_equal(Gem::Version.new("0.8.6"), result)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
|
+
require 'test/unit'
|
3
|
+
require 'obs_gems'
|
4
|
+
|
5
|
+
class OBSGemsTest < OBSGems
|
6
|
+
attr_accessor :result
|
7
|
+
def get_data(url)
|
8
|
+
return '<directory name="rubygem-test" rev="3" vrev="3" srcmd5="85dff037c5d450f68e3724af3624c6b4">
|
9
|
+
<entry name="rubygem-test.changes" md5="410f50267b43b7dba33b54cb3f588ecb" size="284" mtime="1276279120" />
|
10
|
+
<entry name="rubygem-test.spec" md5="6a519f6a782a6f3cb151feef1ab69aaa" size="1827" mtime="1276279120" />
|
11
|
+
<entry name="test-0.8.6.gem" md5="123" size="12288" mtime="1262870828" />
|
12
|
+
</directory>
|
13
|
+
'
|
14
|
+
end
|
15
|
+
def initialize
|
16
|
+
@result = {}
|
17
|
+
@username = ""
|
18
|
+
@password = ""
|
19
|
+
@obs_url = ""
|
20
|
+
@repo = ""
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class TestObsGems < Test::Unit::TestCase
|
25
|
+
def test_get_rubygem_data
|
26
|
+
obsgems = OBSGemsTest.new
|
27
|
+
obsgems.execute
|
28
|
+
result = obsgems.result["test"].name
|
29
|
+
assert_equal("test", result)
|
30
|
+
result = obsgems.result["test"].version
|
31
|
+
assert_equal(Gem::Version.new("0.8.6"), result)
|
32
|
+
result = obsgems.result["test"].md5
|
33
|
+
assert_equal("123", result)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
|
+
require 'test/unit'
|
3
|
+
require 'ruby_gems_gems'
|
4
|
+
|
5
|
+
class RubyGemsGemsTest < RubyGemsGems
|
6
|
+
def initialize
|
7
|
+
@url = ""
|
8
|
+
@specs = ""
|
9
|
+
@result = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_data
|
13
|
+
return Marshal.dump([["test","0.8.6"]])
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class TestRubyGemsGems < Test::Unit::TestCase
|
18
|
+
def test_get_rubygems_data
|
19
|
+
rubygemsgems = RubyGemsGemsTest.new
|
20
|
+
rubygemsgems.execute
|
21
|
+
rubygemsgems.result.each {|k,v| puts "k: #{k} v: #{v}"}
|
22
|
+
result = rubygemsgems.result["test"].name
|
23
|
+
assert_equal("test",result)
|
24
|
+
result = rubygemsgems.result["test"].version
|
25
|
+
assert_equal(Gem::Version.new("0.8.6"), result)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
metadata
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gems-status
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Jordi Massaguer Pla
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-02-02 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: xml-simple
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: bundler
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
description: gem-status compares rubygems information from different sources as for reporting which gems are outdated. Sources can be opensuse build service, rubygems.org or a gemfile.lock. Data compared is version and md5sum
|
49
|
+
email: jmassaguerpla@suse.de
|
50
|
+
executables:
|
51
|
+
- gems-status
|
52
|
+
extensions: []
|
53
|
+
|
54
|
+
extra_rdoc_files: []
|
55
|
+
|
56
|
+
files:
|
57
|
+
- LICENSE
|
58
|
+
- lib/ruby_gems_gems.rb
|
59
|
+
- lib/gem_simple.rb
|
60
|
+
- lib/lockfile_gems.rb
|
61
|
+
- lib/ruby_gems_gems_gem_simple.rb
|
62
|
+
- lib/gems_composite_command.rb
|
63
|
+
- lib/obs_gems.rb
|
64
|
+
- lib/gems_command.rb
|
65
|
+
- lib/gems_status.rb
|
66
|
+
- lib/utils.rb
|
67
|
+
- bin/gems-status
|
68
|
+
- test/Gemfile.lock.test
|
69
|
+
- test/test-gems_composite_command.rb
|
70
|
+
- test/test-gems_command.rb
|
71
|
+
- test/test-ruby_gems_gems.rb
|
72
|
+
- test/test-lockfile_gems.rb
|
73
|
+
- test/test-obs_gems.rb
|
74
|
+
- test/Gemfile.lock
|
75
|
+
- test/Gemfile
|
76
|
+
homepage: http://github.com/jordimassaguerpla/gems-status
|
77
|
+
licenses: []
|
78
|
+
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
|
82
|
+
require_paths:
|
83
|
+
- lib
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
hash: 3
|
90
|
+
segments:
|
91
|
+
- 0
|
92
|
+
version: "0"
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
hash: 3
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
version: "0"
|
102
|
+
requirements: []
|
103
|
+
|
104
|
+
rubyforge_project:
|
105
|
+
rubygems_version: 1.8.15
|
106
|
+
signing_key:
|
107
|
+
specification_version: 3
|
108
|
+
summary: compares rubygems from different sources
|
109
|
+
test_files: []
|
110
|
+
|