gem_version_check 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
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