latest 0.1.0 → 0.2.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/README.md +6 -0
- data/bin/latest +9 -2
- data/lib/latest/gem.rb +26 -5
- data/lib/latest/version.rb +1 -1
- data/lib/latest.rb +2 -2
- data/test/test_gem.rb +3 -3
- data/test/test_latest.rb +23 -4
- metadata +5 -8
data/README.md
CHANGED
@@ -22,6 +22,12 @@ latest rails spree haml
|
|
22
22
|
# haml 3.1.4
|
23
23
|
```
|
24
24
|
|
25
|
+
latest rails spree --pre haml
|
26
|
+
# rails 3.2.1
|
27
|
+
# spree --pre 1.0.0.rc4
|
28
|
+
# haml 3.1.4
|
29
|
+
```
|
30
|
+
|
25
31
|
|
26
32
|
------------------------------------------------------------------------------
|
27
33
|
Installation
|
data/bin/latest
CHANGED
@@ -8,10 +8,17 @@ require "latest"
|
|
8
8
|
if ARGV.first =~ /^-(v|-version)$/
|
9
9
|
puts "Latest v" + Latest::VERSION
|
10
10
|
else
|
11
|
-
ARGV.
|
11
|
+
ARGV.each_with_index do |name, index|
|
12
12
|
print name + " "
|
13
13
|
begin
|
14
|
-
|
14
|
+
gem = Latest.lookup(name)
|
15
|
+
if ARGV[index + 1] == "--pre"
|
16
|
+
ARGV.slice!(index + 1, 1)
|
17
|
+
print "--pre "
|
18
|
+
puts gem.last_prerelease_version
|
19
|
+
else
|
20
|
+
puts gem.last_stable_version
|
21
|
+
end
|
15
22
|
rescue Latest::GemNotFoundError => e
|
16
23
|
print "<- "
|
17
24
|
puts e.message
|
data/lib/latest/gem.rb
CHANGED
@@ -5,20 +5,41 @@ require "json"
|
|
5
5
|
module Latest
|
6
6
|
class Gem
|
7
7
|
|
8
|
-
attr_reader :
|
8
|
+
attr_reader :name, :versions
|
9
9
|
|
10
10
|
def initialize(name)
|
11
|
-
@
|
12
|
-
|
11
|
+
@name = name
|
12
|
+
@versions = fetch
|
13
|
+
if @versions.nil? || @versions.empty?
|
13
14
|
raise ::Latest::GemNotFoundError, "`#{name}` could not be found on rubygems.org!"
|
14
15
|
end
|
15
16
|
self
|
16
17
|
end
|
17
18
|
|
19
|
+
def last_prerelease_version
|
20
|
+
return @last_prerelease_version if @last_prerelease_version
|
21
|
+
@last_prerelease_version = find_latest_version(true)
|
22
|
+
end
|
23
|
+
|
24
|
+
def last_stable_version
|
25
|
+
return @last_stable_version if @last_stable_version
|
26
|
+
@last_stable_version = find_latest_version
|
27
|
+
end
|
28
|
+
|
18
29
|
private
|
19
30
|
|
20
|
-
def
|
21
|
-
|
31
|
+
def find_latest_version(prerelease=false)
|
32
|
+
version = "(not found)"
|
33
|
+
@versions.each do |v|
|
34
|
+
next unless v["prerelease"] == prerelease
|
35
|
+
version = v["number"]
|
36
|
+
break
|
37
|
+
end
|
38
|
+
version
|
39
|
+
end
|
40
|
+
|
41
|
+
def fetch
|
42
|
+
uri = URI("https://rubygems.org/api/v1/versions/#{@name}.json")
|
22
43
|
Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
|
23
44
|
request = Net::HTTP::Get.new uri.request_uri
|
24
45
|
response = http.request request
|
data/lib/latest/version.rb
CHANGED
data/lib/latest.rb
CHANGED
data/test/test_gem.rb
CHANGED
@@ -5,10 +5,10 @@ class TestGem < MiniTest::Unit::TestCase
|
|
5
5
|
|
6
6
|
def test_should_fetch_on_initialize
|
7
7
|
gem = ::Latest::Gem.new("rake")
|
8
|
-
assert_equal
|
9
|
-
assert_equal "rake", gem.
|
8
|
+
assert_equal Array, gem.versions.class
|
9
|
+
assert_equal "rake", gem.name
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def test_raise_error_when_gem_is_not_found
|
13
13
|
assert_raises Latest::GemNotFoundError do
|
14
14
|
::Latest::Gem.new("some-gem-that-probably-wont-exist-2")
|
data/test/test_latest.rb
CHANGED
@@ -4,6 +4,13 @@ require "latest"
|
|
4
4
|
class TestLatest < MiniTest::Unit::TestCase
|
5
5
|
|
6
6
|
BIN = File.expand_path("../../bin/latest", __FILE__)
|
7
|
+
|
8
|
+
STABLE_VERSION_REGEX = /\d+(\.\d+)*$/ # 11.2.123
|
9
|
+
PRERELEASE_VERSION_REGEX = /--pre \d+(\.\d+)*(.[a-z\.\d]+)+$/i # 0.1.23.beta.1
|
10
|
+
|
11
|
+
def assert_version_match(name, string, prerelease=false)
|
12
|
+
assert_match Regexp.new("#{name} #{prerelease ? PRERELEASE_VERSION_REGEX : STABLE_VERSION_REGEX}"), string.strip
|
13
|
+
end
|
7
14
|
|
8
15
|
def test_has_version
|
9
16
|
assert_equal String, Latest::VERSION.class
|
@@ -24,14 +31,26 @@ class TestLatest < MiniTest::Unit::TestCase
|
|
24
31
|
|
25
32
|
def test_executable_fetches_and_prints_version
|
26
33
|
out = `#{BIN} rake`
|
27
|
-
|
34
|
+
assert_version_match "rake", out
|
28
35
|
end
|
29
36
|
|
30
37
|
def test_executable_fetches_and_prints_multiple_versions
|
31
38
|
out = `#{BIN} rake rails spree`.split("\n")
|
32
|
-
|
33
|
-
|
34
|
-
|
39
|
+
assert_version_match "rake", out[0]
|
40
|
+
assert_version_match "rails", out[1]
|
41
|
+
assert_version_match "spree", out[2]
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_executable_fetches_and_prints_prerelease_version
|
45
|
+
out = `#{BIN} rake --pre`
|
46
|
+
assert_version_match "rake", out, true
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_executable_fetches_and_prints_multiple_prerelease_versions
|
50
|
+
out = `#{BIN} rake --pre rails --pre spree`.split("\n")
|
51
|
+
assert_version_match "rake", out[0], true
|
52
|
+
assert_version_match "rails", out[1], true
|
53
|
+
assert_version_match "spree", out[2]
|
35
54
|
end
|
36
55
|
|
37
56
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: latest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-02-14 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70157104359200 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>'
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70157104359200
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bundler
|
27
|
-
requirement: &
|
27
|
+
requirement: &70157104356100 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>'
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70157104356100
|
36
36
|
description: Latest keeps us up to speed by querying rubygems.org for a gem's most
|
37
37
|
recent version number. Yep, that's all it does.
|
38
38
|
email:
|
@@ -73,9 +73,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
73
|
- - ! '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
|
-
segments:
|
77
|
-
- 0
|
78
|
-
hash: 3157611615867857554
|
79
76
|
requirements: []
|
80
77
|
rubyforge_project: latest
|
81
78
|
rubygems_version: 1.8.10
|