gem_fresh 0.1.1 → 0.1.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2deeca659d41796ea26f4b6bed0ef6e115c732c9
4
- data.tar.gz: 775e5b4e6be6f1c53739a622f6808a759f5d49a7
3
+ metadata.gz: 889bacc2aaf73f34a96a60eb81f64ac11b3a6282
4
+ data.tar.gz: 10b2f31c5c0948b64e9e7e1ec13766629b04088f
5
5
  SHA512:
6
- metadata.gz: 65094f85476f668380dc7b10ed6433036dbefc83e7f0bc909615d56f7ea6bae9fe70e18064a1b00f323520365a0a980c19e48bd337b02199ca2406e071756881
7
- data.tar.gz: ded1915dd8ad5096672cbaeb54e7dd04f39e85dc33f996c036df8a1385f2123a2ff7877e9b9a5f115ef7b563ea3cc4bfa3468bf9d15d8609de7179f0bf4855cf
6
+ metadata.gz: 68436a8406863783bd9105e82eccb2f319d8b5a5edee200d22b8012571038ee1c1b79f256c3435d1833d5ef34168b2c2daa71a6b3a112d3befe65aa46f06f507
7
+ data.tar.gz: 1fb5f4e100cacc8d1bab875550b7f6c867bfef3cf02752626d1805e0f73ee7860d28b17157245573243380896b2ce550146b1efcab9abad6a67f01b8ec3cc13b
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # GemFresh
2
2
 
3
+ [![Code Climate](https://codeclimate.com/github/dmcouncil/gem_fresh/badges/gpa.svg)](https://codeclimate.com/github/dmcouncil/gem_fresh)
4
+
3
5
  The purpose of GemFresh is to expose useful information about how outdated your application gems are.
4
6
 
5
7
  ## Setup
@@ -56,3 +58,6 @@ Whenever you add a gem to your Gemfile, add it to GemFresh.rb so that the rake t
56
58
 
57
59
  Gems are assigned points. The more central a gem is, and the more outdated it is, the higher the points. You can think of the points as a "bounty" on the gem, telling you how badly it needs to be updated.
58
60
 
61
+ ## About
62
+
63
+ GemFresh was originally developed at [the District Management Council](http://dmcouncil.org) by Wyatt Greene, and is now maintained by [DMC](/dmcouncil).
@@ -43,7 +43,7 @@ module GemFresh
43
43
 
44
44
  def clean_gems(gems)
45
45
  if gems.include?('rails')
46
- raise "Do not explicitly specify the rails gem in Gemfresh.rb." #TODO: why not?
46
+ raise "Do not explicitly specify the rails gem in gem_fresh.rb." #TODO: why not?
47
47
  end
48
48
  gems
49
49
  end
@@ -7,7 +7,7 @@ module GemFresh
7
7
 
8
8
  def check_for_missing_gems!
9
9
  if missing_gems.any?
10
- message = "The following gems are in your Gemfile but not in your Gemfresh.rb file:\n"
10
+ message = "The following gems are in your Gemfile but not in your gem_fresh.rb file:\n"
11
11
  missing_gems.each do |gem_name|
12
12
  message << " #{gem_name}\n"
13
13
  end
@@ -7,11 +7,40 @@ module GemFresh
7
7
  figure_out_outdated_gems
8
8
  end
9
9
 
10
- private
10
+ private
11
11
 
12
12
  def figure_out_outdated_gems
13
13
  @gem_info ={}
14
14
  raw_gem_info_from_bundler.each do |line|
15
+ line =~ /\A\s*\*\s+(\S+)\s+\((.+)\).*\Z/
16
+ gem_name = $1
17
+ version_data = $2
18
+ @gem_info[gem_name] = extract_versions(version_data)
19
+ end
20
+ end
21
+
22
+ def extract_versions(data_string)
23
+ # It looks like Bundler changed the format of the data
24
+ # returned by `bundle outdated` in version 1.10.
25
+ # Potential future refactor: decide which extraction
26
+ # method to use by actually asking Bundler which version
27
+ # it is and using the appropriate method for that version.
28
+ # Also: Bundler 1.12 will support `bundle outdated --parseable`
29
+ # which looks custom-made for this use case.
30
+ if data_string.include?("newest")
31
+ #
32
+ # Sample lines from `bundle outdated` look like this:
33
+ #
34
+ # * rspec-rails (newest 3.4.0, installed 3.2.3, requested ~> 3.2.3) in groups "development, test"
35
+ # * zeus (newest 0.15.4, installed 0.13.3) in group "test"
36
+ # * websocket-driver (newest 0.6.3, installed 0.5.4)
37
+ #
38
+ versions = data_string.split(', ').map(&:strip).map(&:split) # [["newest", "4.2.5"], ["installed", "3.2.22"], ["requested", "=", "3.2.22"]]
39
+ version_hash = {}
40
+ versions.each { |v| version_hash[v.first.to_sym] = v.last unless v.size > 2 }
41
+ return { available_version: GemVersion.new(version_hash[:newest]),
42
+ current_version: GemVersion.new(version_hash[:installed]) }
43
+ else
15
44
  #
16
45
  # Sample lines from `bundle outdated` look like this:
17
46
  #
@@ -20,20 +49,12 @@ module GemFresh
20
49
  # * bootstrap-multiselect-rails (0.9.5 > 0.0.4)
21
50
  # * byebug (3.5.1 > 2.5.0)
22
51
  # * enum_field (0.2.0 bff7873 > 0.2.0)
23
- # or this:
24
- # * responders (newest 2.1.0, installed 1.1.2) in group "default"
25
- # * resque-retry (newest 1.4.0, installed 1.3.2) in group "default"
26
- # * resque-status (newest 0.5.0, installed 0.4.1, requested = 0.4.1) in group "default"
27
- # * rspec (newest 3.3.0, installed 3.2.0, requested ~> 3.2.0) in groups "development, test"
28
52
  #
29
- words = line.split
30
- words_that_contain_version_numbers = words.select {|word| word =~ /\d+\.\d+/ }
31
- version_numbers = words_that_contain_version_numbers.map {|word| word.gsub(/[\(\),]/, '') }
32
- line =~ /\A\s*\*\s+(\S+)/
33
- gem_name = $1
34
- @gem_info[gem_name] = { available_version: GemVersion.new(version_numbers[0]),
35
- current_version: GemVersion.new(version_numbers[1]) }
36
- end
53
+ versions = data_string.split(" > ").map(&:strip) # ["0.2.0 bff7873", "0.2.0"]
54
+ versions = versions.map{|v| v.split(/\s/).first} # ["0.2.0", "0.2.0"]
55
+ return { available_version: GemVersion.new(versions.first),
56
+ current_version: GemVersion.new(versions.last) }
57
+ end
37
58
  end
38
59
 
39
60
  def raw_gem_info_from_bundler
@@ -1,3 +1,3 @@
1
1
  module GemFresh
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -0,0 +1,6 @@
1
+ namespace :metrics do
2
+ desc "display outdated gem version metrics"
3
+ task :outdated_gems => :environment do
4
+ GemFresh::Reporter.new.report
5
+ end
6
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gem_fresh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anne Geiersbach
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-08 00:00:00.000000000 Z
11
+ date: 2016-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -62,6 +62,7 @@ files:
62
62
  - lib/gem_fresh/railtie.rb
63
63
  - lib/gem_fresh/reporter.rb
64
64
  - lib/gem_fresh/version.rb
65
+ - lib/tasks/metrics.rake
65
66
  homepage: https://github.com/dmcouncil/gem_fresh
66
67
  licenses:
67
68
  - MIT