gem_version_check 0.0.8
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/.gitignore +3 -0
- data/Gemfile +4 -0
- data/README.md +38 -0
- data/Rakefile +14 -0
- data/bin/gem_version_check +12 -0
- data/gem_version_check.gemspec +23 -0
- data/lib/gem_version_check.rb +24 -0
- data/lib/gem_version_check/checks.rb +42 -0
- data/lib/gem_version_check/cli.rb +25 -0
- data/lib/gem_version_check/configuration.rb +9 -0
- data/lib/gem_version_check/dependency.rb +38 -0
- data/lib/gem_version_check/formatter/json.rb +41 -0
- data/lib/gem_version_check/formatter/pretty_print.rb +45 -0
- data/lib/gem_version_check/project.rb +85 -0
- data/lib/gem_version_check/version.rb +3 -0
- data/spec/configuration_spec.rb +18 -0
- data/spec/dependency_spec.rb +40 -0
- data/spec/project_spec.rb +57 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/stubs/rails_app_example.lock +139 -0
- metadata +141 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# Gem Version Checker
|
2
|
+
|
3
|
+
Check gem dependencies of ruby apps and generate report.
|
4
|
+
|
5
|
+
At XING we use this gem in combination with jenkins to automatically check on gem versions across our many projects.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
gem install gem_version_check
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
Use the Github project name:
|
14
|
+
|
15
|
+
gem_version_check fdietz/team_dashboard activesupport rspec
|
16
|
+
|
17
|
+
Use any url to a Gemfile.lock:
|
18
|
+
|
19
|
+
gem_version_check https://raw.github.com/fdietz/team_dashboard/raw/master/Gemfile.lock activesupport rspec
|
20
|
+
|
21
|
+
## Configuration
|
22
|
+
|
23
|
+
Use GITHUB_HOST environment variable if you use Enterprise Github:
|
24
|
+
|
25
|
+
GITHUB_HOST=github.mycompany.com gem_version_check fdietz/team_dashboard activesupport rspec
|
26
|
+
|
27
|
+
## Example Report
|
28
|
+
|
29
|
+
### Pretty Print
|
30
|
+
|
31
|
+
Example command: gem_version_check fdietz/team_dashboard activesupport rspec
|
32
|
+
|
33
|
+
Output:
|
34
|
+
|
35
|
+
Project: fdietz/team_dashboard
|
36
|
+
* activesupport: != 3.2.8
|
37
|
+
* rspec: != 2.11.0
|
38
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'rubygems'
|
3
|
+
begin
|
4
|
+
require 'bundler/setup'
|
5
|
+
rescue LoadError
|
6
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
7
|
+
end
|
8
|
+
|
9
|
+
Bundler::GemHelper.install_tasks
|
10
|
+
|
11
|
+
require 'rspec/core/rake_task'
|
12
|
+
|
13
|
+
RSpec::Core::RakeTask.new
|
14
|
+
task :default => :spec
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
|
4
|
+
|
5
|
+
require "rubygems"
|
6
|
+
require "gem_version_check"
|
7
|
+
|
8
|
+
GemVersionCheck.configuration = {
|
9
|
+
:github_host => ENV["GITHUB_HOST"]
|
10
|
+
}
|
11
|
+
|
12
|
+
GemVersionCheck::Cli.run(ARGV)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "gem_version_check/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "gem_version_check"
|
7
|
+
s.version = GemVersionCheck::VERSION
|
8
|
+
s.authors = ["Frederik Dietz"]
|
9
|
+
s.email = ["fdietz@github.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = "Check your gem dependencies"
|
12
|
+
s.description = "Check for a given github project if gem dependencies are up to date"
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
s.add_development_dependency 'rake'
|
20
|
+
s.add_development_dependency 'rspec'
|
21
|
+
s.add_development_dependency 'mocha'
|
22
|
+
s.add_runtime_dependency "bundler"
|
23
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "bundler"
|
2
|
+
|
3
|
+
require "gem_version_check/cli"
|
4
|
+
require "gem_version_check/version"
|
5
|
+
require "gem_version_check/project"
|
6
|
+
require "gem_version_check/dependency"
|
7
|
+
require "gem_version_check/checks"
|
8
|
+
require "gem_version_check/configuration"
|
9
|
+
require "gem_version_check/formatter/json"
|
10
|
+
require "gem_version_check/formatter/pretty_print"
|
11
|
+
|
12
|
+
module GemVersionCheck
|
13
|
+
extend self
|
14
|
+
|
15
|
+
class GemfileLockNotFoundError < StandardError; end
|
16
|
+
|
17
|
+
def configuration
|
18
|
+
@@configuration ||= Configuration.new
|
19
|
+
end
|
20
|
+
|
21
|
+
def configuration=(settings)
|
22
|
+
@@configuration = Configuration.new(settings)
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Enumerable for gem name => version hash
|
2
|
+
module GemVersionCheck
|
3
|
+
class Checks
|
4
|
+
include Enumerable
|
5
|
+
|
6
|
+
def initialize(gem_names = nil)
|
7
|
+
@gem_names = gem_names || configured_checks
|
8
|
+
end
|
9
|
+
|
10
|
+
def each(&block)
|
11
|
+
members.each(&block)
|
12
|
+
end
|
13
|
+
|
14
|
+
def members
|
15
|
+
@members ||= begin
|
16
|
+
puts "Fetching gemspecs for all listed gems..."
|
17
|
+
checks = {}
|
18
|
+
@gem_names.each do |gem_name|
|
19
|
+
spec = Gem.latest_spec_for(gem_name)
|
20
|
+
if spec
|
21
|
+
puts " * #{gem_name}: #{spec.version.to_s}"
|
22
|
+
checks[gem_name] = spec.version.to_s
|
23
|
+
else
|
24
|
+
puts " * #{gem_name}: not found (Maybe a typo?)"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
checks
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def configured_checks
|
34
|
+
ActiveSupport::JSON.decode(IO.read(checks_file))
|
35
|
+
end
|
36
|
+
|
37
|
+
def checks_file
|
38
|
+
File.expand_path("../../../checks.json", __FILE__)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module GemVersionCheck
|
2
|
+
module Cli
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def run(params)
|
6
|
+
result = nil
|
7
|
+
if (params.size >= 2)
|
8
|
+
generate_report(params)
|
9
|
+
else
|
10
|
+
puts "Missing params: gem_version_check my-gh-name/my-project gem1 gem2 gem3"
|
11
|
+
exit(1)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def generate_report(params)
|
16
|
+
result = GemVersionCheck::Project.generate_report(params.shift, params)
|
17
|
+
puts GemVersionCheck::Formatter::PrettyPrint.new(result).format
|
18
|
+
result.check_failed? ? exit(1) : exit(0)
|
19
|
+
rescue GemVersionCheck::GemfileLockNotFoundError => e
|
20
|
+
puts "Can't find Gemfile.lock for #{e}"
|
21
|
+
exit(1)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module GemVersionCheck
|
2
|
+
class Dependency
|
3
|
+
|
4
|
+
attr_reader :name, :expected_version, :version
|
5
|
+
|
6
|
+
def initialize(name, expected_version)
|
7
|
+
@name = name
|
8
|
+
@expected_version = expected_version
|
9
|
+
end
|
10
|
+
|
11
|
+
def check(lock_file)
|
12
|
+
@version = spec_version(@name, lock_file)
|
13
|
+
@used = !!@version
|
14
|
+
return unless used?
|
15
|
+
|
16
|
+
@result = @expected_version == @version
|
17
|
+
end
|
18
|
+
|
19
|
+
def valid?
|
20
|
+
!!@result
|
21
|
+
end
|
22
|
+
|
23
|
+
def used?
|
24
|
+
@used
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def spec_version(name, lock_file)
|
30
|
+
spec = find_spec(name, lock_file)
|
31
|
+
spec ? spec.version.to_s : nil
|
32
|
+
end
|
33
|
+
|
34
|
+
def find_spec(name, lock_file)
|
35
|
+
lock_file.specs.find { |spec| spec.name == name }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module GemVersionCheck
|
2
|
+
module Formatter
|
3
|
+
class JSON
|
4
|
+
def initialize(report_result)
|
5
|
+
@report_result = Array(report_result)
|
6
|
+
end
|
7
|
+
|
8
|
+
def format
|
9
|
+
result = []
|
10
|
+
Array(@report_result).each do |project|
|
11
|
+
project_hash = project_hash(project)
|
12
|
+
project.report.each do |dependency|
|
13
|
+
project_hash[:dependencies] << dependency_hash(dependency)
|
14
|
+
end
|
15
|
+
result << project_hash
|
16
|
+
end
|
17
|
+
result.to_json
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def project_hash(project)
|
23
|
+
project_hash = {
|
24
|
+
:name => project.name,
|
25
|
+
:check_failed => project.check_failed?,
|
26
|
+
:dependencies => []
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
def dependency_hash(dependency)
|
31
|
+
dep_hash = {
|
32
|
+
:name => dependency.name,
|
33
|
+
:expected_version => dependency.expected_version,
|
34
|
+
:version => dependency.version,
|
35
|
+
:used => dependency.used?,
|
36
|
+
:valid => dependency.valid?
|
37
|
+
}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
module GemVersionCheck
|
3
|
+
module Formatter
|
4
|
+
class PrettyPrint
|
5
|
+
def initialize(report_result)
|
6
|
+
@report_result = Array(report_result)
|
7
|
+
end
|
8
|
+
|
9
|
+
def format
|
10
|
+
result = ""
|
11
|
+
@report_result.each do |project|
|
12
|
+
dep = ""
|
13
|
+
project.report.each do |dependency|
|
14
|
+
dep << " * #{dependency.name}: "
|
15
|
+
if dependency.used?
|
16
|
+
if dependency.valid?
|
17
|
+
dep << "#{green}#{dependency.expected_version} ✓"
|
18
|
+
else
|
19
|
+
dep << "#{dependency.expected_version} != #{red}#{dependency.version}"
|
20
|
+
end
|
21
|
+
dep << black + "\n"
|
22
|
+
else
|
23
|
+
dep << "not used\n"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
result << "Project: #{project.check_failed? ? red : green}#{project.name}#{black}" + "\n" + dep
|
27
|
+
end
|
28
|
+
result
|
29
|
+
end
|
30
|
+
|
31
|
+
def black
|
32
|
+
"\033[30m"
|
33
|
+
end
|
34
|
+
|
35
|
+
def green
|
36
|
+
"\033[32m"
|
37
|
+
end
|
38
|
+
|
39
|
+
def red
|
40
|
+
"\033[31m"
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require "uri"
|
2
|
+
require "net/http"
|
3
|
+
|
4
|
+
module GemVersionCheck
|
5
|
+
class Project
|
6
|
+
attr_reader :repository, :report
|
7
|
+
|
8
|
+
def self.generate_report(project_name, checks = nil)
|
9
|
+
project = Project.new(project_name, checks || Checks.new())
|
10
|
+
project.report
|
11
|
+
project
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(project, checks)
|
15
|
+
@project = project
|
16
|
+
@checks = checks
|
17
|
+
end
|
18
|
+
|
19
|
+
def name
|
20
|
+
@project
|
21
|
+
end
|
22
|
+
|
23
|
+
def report
|
24
|
+
@report ||= generate_report
|
25
|
+
end
|
26
|
+
|
27
|
+
def generate_report
|
28
|
+
@check_failed = false
|
29
|
+
result = []
|
30
|
+
@checks.each do |key, value|
|
31
|
+
dependency = Dependency.new(key, value)
|
32
|
+
dependency.check(lock_file)
|
33
|
+
@check_failed = true unless dependency.valid?
|
34
|
+
result << dependency
|
35
|
+
end
|
36
|
+
result
|
37
|
+
end
|
38
|
+
|
39
|
+
def check_failed?
|
40
|
+
@check_failed
|
41
|
+
end
|
42
|
+
|
43
|
+
def lock_file
|
44
|
+
@lock_file ||= Bundler::LockfileParser.new(download_gemfile_lock(repository))
|
45
|
+
end
|
46
|
+
|
47
|
+
def repository
|
48
|
+
@repository ||= begin
|
49
|
+
if @project =~ /^http(s)?:\/\//
|
50
|
+
@project
|
51
|
+
else
|
52
|
+
gemfile_lock_url
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
# github.com redirects github.com/user/project/raw/master/Gemfile.lock to raw.github.com/user/project/master/Gemfile.lock
|
60
|
+
# github enterprise does not redirect
|
61
|
+
# TODO: change if github enterprise redirects too
|
62
|
+
def gemfile_lock_url
|
63
|
+
if GemVersionCheck.configuration.github_host == "github.com"
|
64
|
+
"https://raw.#{GemVersionCheck.configuration.github_host}/#{@project}/master/Gemfile.lock"
|
65
|
+
else
|
66
|
+
"https://#{GemVersionCheck.configuration.github_host}/#{@project}/raw/master/Gemfile.lock"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def download_gemfile_lock(repository)
|
71
|
+
uri = URI.parse(repository)
|
72
|
+
body = request(uri)
|
73
|
+
raise GemfileLockNotFoundError.new(repository) if body.nil?
|
74
|
+
body
|
75
|
+
end
|
76
|
+
|
77
|
+
def request(uri)
|
78
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
79
|
+
http.use_ssl = true if uri.scheme == 'https'
|
80
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
81
|
+
response = http.request(request)
|
82
|
+
response.code == "200" ? response.body : nil
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
module GemVersionCheck
|
5
|
+
describe Configuration do
|
6
|
+
after do
|
7
|
+
end
|
8
|
+
|
9
|
+
it "returns github.com as default github_host" do
|
10
|
+
GemVersionCheck.configuration.github_host.should == "github.com"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "returns specified value if set" do
|
14
|
+
GemVersionCheck.configuration = { :github_host => "test" }
|
15
|
+
GemVersionCheck.configuration.github_host.should == "test"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
module GemVersionCheck
|
5
|
+
describe Dependency do
|
6
|
+
|
7
|
+
context "#check" do
|
8
|
+
let(:lock_file) { Bundler::LockfileParser.new(lock_file_content("Gemfile.lock")) }
|
9
|
+
|
10
|
+
let(:dependency) { Dependency.new("activesupport", "3.2.9") }
|
11
|
+
let(:invalid_dependency) { Dependency.new("activesupport", "3.2.10") }
|
12
|
+
let(:not_found_dependency) { Dependency.new("rails", "3.2.9") }
|
13
|
+
|
14
|
+
context "#valid?" do
|
15
|
+
it "is valid if current version == expected version" do
|
16
|
+
dependency.check(lock_file)
|
17
|
+
dependency.should be_valid
|
18
|
+
end
|
19
|
+
|
20
|
+
it "is invalid if current version != expected version" do
|
21
|
+
invalid_dependency.check(lock_file)
|
22
|
+
invalid_dependency.should_not be_valid
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "#used?" do
|
27
|
+
it "returns true if found in lock file" do
|
28
|
+
dependency.check(lock_file)
|
29
|
+
dependency.should be_used
|
30
|
+
end
|
31
|
+
|
32
|
+
it "return false if not found in lock file" do
|
33
|
+
not_found_dependency.check(lock_file)
|
34
|
+
not_found_dependency.should_not be_used
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
module GemVersionCheck
|
5
|
+
describe Project do
|
6
|
+
let(:url) { "https://github.com/toadkicker/teststrap/raw/master/Gemfile.lock" }
|
7
|
+
let(:redirect_url) { "https://raw.github.com/toadkicker/teststrap/master/Gemfile.lock" }
|
8
|
+
|
9
|
+
let(:lock_file) { Bundler::LockfileParser.new(lock_file_content("rails_app_example.lock")) }
|
10
|
+
let(:project) {
|
11
|
+
project = Project.new("toadkicker/teststrap", %w(actionpack not_existing))
|
12
|
+
project.stubs(:lock_file).returns(lock_file)
|
13
|
+
project
|
14
|
+
}
|
15
|
+
|
16
|
+
context "#report" do
|
17
|
+
it "returns array of all dependencies" do
|
18
|
+
project.report.size.should == 2
|
19
|
+
project.report.first.name.should == "actionpack"
|
20
|
+
project.report.last.name.should == "not_existing"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "#check_failed?" do
|
25
|
+
it "returns true if at least one dependency is not up to date or non existing" do
|
26
|
+
project.check_failed? == true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "#repository" do
|
31
|
+
it "returns a url as is" do
|
32
|
+
project = Project.new(url, [])
|
33
|
+
project.repository.should == url
|
34
|
+
end
|
35
|
+
|
36
|
+
it "returns a resolved url if gh project name given" do
|
37
|
+
project = Project.new("toadkicker/teststrap", [])
|
38
|
+
project.repository.should == redirect_url
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "#lock_file" do
|
43
|
+
it "downloads lock file content and returns lock_file" do
|
44
|
+
project = Project.new(redirect_url, [])
|
45
|
+
project.expects(:request).returns(lock_file_content("Gemfile.lock"))
|
46
|
+
project.lock_file.specs.size.should > 0
|
47
|
+
end
|
48
|
+
|
49
|
+
it "raises GemfileLockNotFoundError if not found" do
|
50
|
+
project1 = Project.new(redirect_url, [])
|
51
|
+
project1.expects(:request).returns(nil)
|
52
|
+
expect { project1.lock_file }.to raise_error(GemfileLockNotFoundError)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "gem_version_check"
|
4
|
+
require "mocha/api"
|
5
|
+
|
6
|
+
def lock_file_content(filename)
|
7
|
+
IO.read(File.expand_path("../stubs/#{filename}", __FILE__))
|
8
|
+
end
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
config.before do
|
12
|
+
GemVersionCheck.configuration = { :github_host => "github.com" }
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
GIT
|
2
|
+
remote: git://github.com/toadkicker/twitter-bootstrap-rails.git
|
3
|
+
revision: 7b4446d4ab1a5d80a1ef732e1f8cc4d87a2309e4
|
4
|
+
specs:
|
5
|
+
twitter-bootstrap-rails (2.1.6)
|
6
|
+
actionpack (>= 3.1)
|
7
|
+
execjs
|
8
|
+
railties (>= 3.1)
|
9
|
+
|
10
|
+
GEM
|
11
|
+
remote: https://rubygems.org/
|
12
|
+
specs:
|
13
|
+
actionmailer (3.2.8)
|
14
|
+
actionpack (= 3.2.8)
|
15
|
+
mail (~> 2.4.4)
|
16
|
+
actionpack (3.2.8)
|
17
|
+
activemodel (= 3.2.8)
|
18
|
+
activesupport (= 3.2.8)
|
19
|
+
builder (~> 3.0.0)
|
20
|
+
erubis (~> 2.7.0)
|
21
|
+
journey (~> 1.0.4)
|
22
|
+
rack (~> 1.4.0)
|
23
|
+
rack-cache (~> 1.2)
|
24
|
+
rack-test (~> 0.6.1)
|
25
|
+
sprockets (~> 2.1.3)
|
26
|
+
activemodel (3.2.8)
|
27
|
+
activesupport (= 3.2.8)
|
28
|
+
builder (~> 3.0.0)
|
29
|
+
activerecord (3.2.8)
|
30
|
+
activemodel (= 3.2.8)
|
31
|
+
activesupport (= 3.2.8)
|
32
|
+
arel (~> 3.0.2)
|
33
|
+
tzinfo (~> 0.3.29)
|
34
|
+
activeresource (3.2.8)
|
35
|
+
activemodel (= 3.2.8)
|
36
|
+
activesupport (= 3.2.8)
|
37
|
+
activesupport (3.2.8)
|
38
|
+
i18n (~> 0.6)
|
39
|
+
multi_json (~> 1.0)
|
40
|
+
arel (3.0.2)
|
41
|
+
builder (3.0.4)
|
42
|
+
coffee-rails (3.2.2)
|
43
|
+
coffee-script (>= 2.2.0)
|
44
|
+
railties (~> 3.2.0)
|
45
|
+
coffee-script (2.2.0)
|
46
|
+
coffee-script-source
|
47
|
+
execjs
|
48
|
+
coffee-script-source (1.4.0)
|
49
|
+
commonjs (0.2.6)
|
50
|
+
erubis (2.7.0)
|
51
|
+
execjs (1.4.0)
|
52
|
+
multi_json (~> 1.0)
|
53
|
+
formtastic (2.2.1)
|
54
|
+
actionpack (>= 3.0)
|
55
|
+
formtastic-bootstrap (2.0.0)
|
56
|
+
formtastic (~> 2.2)
|
57
|
+
formtastic-bootstrap
|
58
|
+
hike (1.2.1)
|
59
|
+
i18n (0.6.1)
|
60
|
+
journey (1.0.4)
|
61
|
+
jquery-rails (2.1.3)
|
62
|
+
railties (>= 3.1.0, < 5.0)
|
63
|
+
thor (~> 0.14)
|
64
|
+
json (1.7.5)
|
65
|
+
less (2.2.2)
|
66
|
+
commonjs (~> 0.2.6)
|
67
|
+
less-rails (2.2.6)
|
68
|
+
actionpack (>= 3.1)
|
69
|
+
less (~> 2.2.0)
|
70
|
+
libv8 (3.3.10.4)
|
71
|
+
mail (2.4.4)
|
72
|
+
i18n (>= 0.4.0)
|
73
|
+
mime-types (~> 1.16)
|
74
|
+
treetop (~> 1.4.8)
|
75
|
+
mime-types (1.19)
|
76
|
+
multi_json (1.3.7)
|
77
|
+
pg (0.14.1)
|
78
|
+
polyglot (0.3.3)
|
79
|
+
rack (1.4.1)
|
80
|
+
rack-cache (1.2)
|
81
|
+
rack (>= 0.4)
|
82
|
+
rack-ssl (1.3.2)
|
83
|
+
rack
|
84
|
+
rack-test (0.6.2)
|
85
|
+
rack (>= 1.0)
|
86
|
+
rails (3.2.8)
|
87
|
+
actionmailer (= 3.2.8)
|
88
|
+
actionpack (= 3.2.8)
|
89
|
+
activerecord (= 3.2.8)
|
90
|
+
activeresource (= 3.2.8)
|
91
|
+
activesupport (= 3.2.8)
|
92
|
+
bundler (~> 1.0)
|
93
|
+
railties (= 3.2.8)
|
94
|
+
railties (3.2.8)
|
95
|
+
actionpack (= 3.2.8)
|
96
|
+
activesupport (= 3.2.8)
|
97
|
+
rack-ssl (~> 1.3.2)
|
98
|
+
rake (>= 0.8.7)
|
99
|
+
rdoc (~> 3.4)
|
100
|
+
thor (>= 0.14.6, < 2.0)
|
101
|
+
rake (0.9.2.2)
|
102
|
+
rdoc (3.12)
|
103
|
+
json (~> 1.4)
|
104
|
+
sass (3.2.2)
|
105
|
+
sass-rails (3.2.5)
|
106
|
+
railties (~> 3.2.0)
|
107
|
+
sass (>= 3.1.10)
|
108
|
+
tilt (~> 1.3)
|
109
|
+
sprockets (2.1.3)
|
110
|
+
hike (~> 1.2)
|
111
|
+
rack (~> 1.0)
|
112
|
+
tilt (~> 1.1, != 1.3.0)
|
113
|
+
therubyracer (0.10.2)
|
114
|
+
libv8 (~> 3.3.10)
|
115
|
+
thor (0.16.0)
|
116
|
+
tilt (1.3.3)
|
117
|
+
treetop (1.4.12)
|
118
|
+
polyglot
|
119
|
+
polyglot (>= 0.3.1)
|
120
|
+
tzinfo (0.3.34)
|
121
|
+
uglifier (1.3.0)
|
122
|
+
execjs (>= 0.3.0)
|
123
|
+
multi_json (~> 1.0, >= 1.0.2)
|
124
|
+
|
125
|
+
PLATFORMS
|
126
|
+
ruby
|
127
|
+
|
128
|
+
DEPENDENCIES
|
129
|
+
coffee-rails (~> 3.2.1)
|
130
|
+
formtastic
|
131
|
+
formtastic-bootstrap
|
132
|
+
jquery-rails
|
133
|
+
less-rails
|
134
|
+
pg
|
135
|
+
rails (= 3.2.8)
|
136
|
+
sass-rails (~> 3.2.3)
|
137
|
+
therubyracer
|
138
|
+
twitter-bootstrap-rails!
|
139
|
+
uglifier (>= 1.0.3)
|
metadata
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gem_version_check
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.8
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Frederik Dietz
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-11-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: mocha
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: bundler
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: Check for a given github project if gem dependencies are up to date
|
79
|
+
email:
|
80
|
+
- fdietz@github.com
|
81
|
+
executables:
|
82
|
+
- gem_version_check
|
83
|
+
extensions: []
|
84
|
+
extra_rdoc_files: []
|
85
|
+
files:
|
86
|
+
- .gitignore
|
87
|
+
- Gemfile
|
88
|
+
- README.md
|
89
|
+
- Rakefile
|
90
|
+
- bin/gem_version_check
|
91
|
+
- gem_version_check.gemspec
|
92
|
+
- lib/gem_version_check.rb
|
93
|
+
- lib/gem_version_check/checks.rb
|
94
|
+
- lib/gem_version_check/cli.rb
|
95
|
+
- lib/gem_version_check/configuration.rb
|
96
|
+
- lib/gem_version_check/dependency.rb
|
97
|
+
- lib/gem_version_check/formatter/json.rb
|
98
|
+
- lib/gem_version_check/formatter/pretty_print.rb
|
99
|
+
- lib/gem_version_check/project.rb
|
100
|
+
- lib/gem_version_check/version.rb
|
101
|
+
- spec/configuration_spec.rb
|
102
|
+
- spec/dependency_spec.rb
|
103
|
+
- spec/project_spec.rb
|
104
|
+
- spec/spec_helper.rb
|
105
|
+
- spec/stubs/rails_app_example.lock
|
106
|
+
homepage: ''
|
107
|
+
licenses: []
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options: []
|
110
|
+
require_paths:
|
111
|
+
- lib
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
segments:
|
119
|
+
- 0
|
120
|
+
hash: 2738635845954003320
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
segments:
|
128
|
+
- 0
|
129
|
+
hash: 2738635845954003320
|
130
|
+
requirements: []
|
131
|
+
rubyforge_project:
|
132
|
+
rubygems_version: 1.8.24
|
133
|
+
signing_key:
|
134
|
+
specification_version: 3
|
135
|
+
summary: Check your gem dependencies
|
136
|
+
test_files:
|
137
|
+
- spec/configuration_spec.rb
|
138
|
+
- spec/dependency_spec.rb
|
139
|
+
- spec/project_spec.rb
|
140
|
+
- spec/spec_helper.rb
|
141
|
+
- spec/stubs/rails_app_example.lock
|