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 ADDED
@@ -0,0 +1,3 @@
1
+ .rvmrc
2
+ Gemfile.lock
3
+ pkg
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in gem_version_check.gemspec
4
+ gemspec
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,9 @@
1
+ module GemVersionCheck
2
+ class Configuration
3
+ attr_reader :github_host
4
+
5
+ def initialize(settings = {})
6
+ @github_host = settings[:github_host] || "github.com"
7
+ end
8
+ end
9
+ 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,3 @@
1
+ module GemVersionCheck
2
+ VERSION = "0.0.8"
3
+ 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
@@ -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