version-check 0.1.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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +4 -0
- data/Manifest.txt +8 -0
- data/README.md +111 -0
- data/Rakefile +29 -0
- data/lib/version/check.rb +67 -0
- data/lib/version/check/version.rb +20 -0
- data/test/helper.rb +10 -0
- data/test/test_check.rb +55 -0
- metadata +86 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 82c9098875cd2f462c21ecdbbf7bd0271cd755a9
|
4
|
+
data.tar.gz: bb6c366865fb20255cf7892c71169d30c2a3c37c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 707d9b5a42b7a28bbaede44a53fd511c7f05bfeabfdf0bbc1c7ef5c7f04641095fbbb86fedcee25664aed794c579b582dad4d72dc7754867cdec199c08302472
|
7
|
+
data.tar.gz: 205c185befb544077cd32f659a9a60a3c740d928b58fdf7406035a02cb43df15fa99f553ce6ef0eb13b3c26c09ba50e57b20c79a7254c8aff522ce767936d4fa
|
data/CHANGELOG.md
ADDED
data/Manifest.txt
ADDED
data/README.md
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
# version-check gem - up-to-date? - helpers for checking for / reporting outdated gem / library versions
|
2
|
+
|
3
|
+
* home :: [github.com/feedreader/pluto](https://github.com/feedreader/pluto)
|
4
|
+
* bugs :: [github.com/feedreader/pluto/issues](https://github.com/feedreader/pluto/issues)
|
5
|
+
* gem :: [rubygems.org/gems/version-check](https://rubygems.org/gems/version-check)
|
6
|
+
* rdoc :: [rubydoc.info/gems/version-check](http://rubydoc.info/gems/version-check)
|
7
|
+
* forum :: [groups.google.com/group/wwwmake](http://groups.google.com/group/wwwmake)
|
8
|
+
|
9
|
+
|
10
|
+
## Usage
|
11
|
+
|
12
|
+
Up-to-date? Version check all your libraries / gems on start-up at runtime.
|
13
|
+
|
14
|
+
Let's say you have a script
|
15
|
+
that depends on many libraries / gems.
|
16
|
+
How can you make sure the minimum version requirements
|
17
|
+
are fulfilled?
|
18
|
+
|
19
|
+
|
20
|
+
Use the (global) `version_check` method in your script.
|
21
|
+
Example:
|
22
|
+
|
23
|
+
``` ruby
|
24
|
+
outdated = version_check(
|
25
|
+
['pakman', '1.1.0', Pakman::VERSION],
|
26
|
+
['fetcher', '0.4.5', Fetcher::VERSION],
|
27
|
+
['feedparser', '2.1.2', FeedParser::VERSION],
|
28
|
+
['feedfilter', '1.1.1', FeedFilter::VERSION],
|
29
|
+
['textutils', '1.4.0', TextUtils::VERSION],
|
30
|
+
['logutils', '0.6.1', LogKernel::VERSION],
|
31
|
+
['props', '1.2.0', Props::VERSION],
|
32
|
+
|
33
|
+
['pluto-models', '1.5.4', Pluto::VERSION],
|
34
|
+
['pluto-update', '1.6.3', PlutoUpdate::VERSION],
|
35
|
+
['pluto-merge', '1.1.0', PlutoMerge::VERSION] )
|
36
|
+
|
37
|
+
pp outdated
|
38
|
+
```
|
39
|
+
|
40
|
+
Pass along the version check records where the record items are 1) the name of the library / gem, 2) the minimum version requirement and 3) the "live" used version - for example,
|
41
|
+
`Pluto::VERSION` will become at runtime `1.5.3` or something - depending
|
42
|
+
on the installation / setup.
|
43
|
+
|
44
|
+
If all libraries / gems are up-to-date
|
45
|
+
this will result in an empty outdated list / array:
|
46
|
+
|
47
|
+
``` ruby
|
48
|
+
[]
|
49
|
+
```
|
50
|
+
|
51
|
+
And if some libraries / gems are NOT matching the minimum version requirement
|
52
|
+
the version record will get returned in the outdated list / array
|
53
|
+
resulting in, for example:
|
54
|
+
|
55
|
+
``` ruby
|
56
|
+
[['pluto-models', '1.5.4', '1.5.3'],
|
57
|
+
['pluto-update', '1.6.3', '1.4.1']]
|
58
|
+
```
|
59
|
+
|
60
|
+
Note: For now the version in use MUST always be greater or equal
|
61
|
+
to the minimum version requirement.
|
62
|
+
|
63
|
+
And the minimum requirement might be just a major (e.g. `2` same as `2.x.x`)
|
64
|
+
or a major plus minor (e.g. `2.1` same as `2.1.x`) version.
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
### Bonus: Sorry - Cannot continue; please update the outdated gem(s)
|
69
|
+
|
70
|
+
Use the (global) `version_check!` method (with a bang `!`) in your script
|
71
|
+
to automatically 1) check all versions, 2) report all outdated libraries / gems, 3) ask for an update and 4) exit. Example:
|
72
|
+
|
73
|
+
``` ruby
|
74
|
+
version_check!(
|
75
|
+
['pakman', '1.1.0', Pakman::VERSION],
|
76
|
+
['fetcher', '0.4.5', Fetcher::VERSION],
|
77
|
+
['feedparser', '2.1.2', FeedParser::VERSION],
|
78
|
+
['feedfilter', '1.1.1', FeedFilter::VERSION],
|
79
|
+
['textutils', '1.4.0', TextUtils::VERSION],
|
80
|
+
['logutils', '0.6.1', LogKernel::VERSION],
|
81
|
+
['props', '1.2.0', Props::VERSION],
|
82
|
+
|
83
|
+
['pluto-models', '1.5.4', Pluto::VERSION],
|
84
|
+
['pluto-update', '1.6.3', PlutoUpdate::VERSION],
|
85
|
+
['pluto-merge', '1.1.0', PlutoMerge::VERSION] )
|
86
|
+
```
|
87
|
+
|
88
|
+
Case 1: If all libraries / gems are up-to-date nothing happens.
|
89
|
+
|
90
|
+
Case 2: If some libraries / gems are NOT matching the minimum version requirement
|
91
|
+
this will result in, for example:
|
92
|
+
|
93
|
+
```
|
94
|
+
!!! ERROR: version check failed - 2 outdated gem(s):"
|
95
|
+
pluto-models - min version required 1.5.4 > used/installed version 1.5.3
|
96
|
+
pluto-update - min version required 1.6.3 > used/installed version 1.4.1
|
97
|
+
|
98
|
+
sorry - cannot continue; please update the outdated gem(s)
|
99
|
+
```
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
## License
|
104
|
+
|
105
|
+
The `version-check` scripts are dedicated to the public domain.
|
106
|
+
Use it as you please with no restrictions whatsoever.
|
107
|
+
|
108
|
+
## Questions? Comments?
|
109
|
+
|
110
|
+
Send them along to the [wwwmake Forum/Mailing List](http://groups.google.com/group/wwwmake).
|
111
|
+
Thanks!
|
data/Rakefile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'hoe'
|
2
|
+
require './lib/version/check/version.rb'
|
3
|
+
|
4
|
+
Hoe.spec 'version-check' do
|
5
|
+
|
6
|
+
self.version = VersionCheck::VERSION
|
7
|
+
|
8
|
+
self.summary = "version-check - up-to-date? - helpers for checking for / reporting outdated gem / library versions"
|
9
|
+
self.description = summary
|
10
|
+
|
11
|
+
self.urls = ['https://github.com/feedreader/pluto']
|
12
|
+
|
13
|
+
self.author = 'Gerald Bauer'
|
14
|
+
self.email = 'wwwmake@googlegroups.com'
|
15
|
+
|
16
|
+
|
17
|
+
# switch extension to .markdown for gihub formatting
|
18
|
+
self.readme_file = 'README.md'
|
19
|
+
self.history_file = 'CHANGELOG.md'
|
20
|
+
|
21
|
+
self.extra_deps = []
|
22
|
+
|
23
|
+
self.licenses = ['Public Domain']
|
24
|
+
|
25
|
+
self.spec_extras = {
|
26
|
+
required_ruby_version: '>= 2.2.2'
|
27
|
+
}
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'pp'
|
2
|
+
|
3
|
+
# our own code
|
4
|
+
require 'version/check/version' # note: let version always go first
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
#####
|
9
|
+
# simple version check
|
10
|
+
# used version MUST always be greater or equal than minimum requirement
|
11
|
+
|
12
|
+
def version_check( *versions )
|
13
|
+
|
14
|
+
outdated = [] ## list of outdated entries
|
15
|
+
|
16
|
+
versions.each do |rec|
|
17
|
+
name = rec[0]
|
18
|
+
## convert "2.0.17" to [2,0,17] or
|
19
|
+
## "2.1" to [2,1]
|
20
|
+
## note: use Integer and NOT to_i; will through exception if version is not a number
|
21
|
+
min_version = rec[1].split( '.' ).map { |part| Integer(part) }
|
22
|
+
used_version = rec[2].split( '.' ).map { |part| Integer(part) }
|
23
|
+
|
24
|
+
## check for minimum version requirement
|
25
|
+
min_version.zip( used_version ) do |part|
|
26
|
+
min_num = part[0]
|
27
|
+
used_num = part[1] || 0 ## support unlikley edge case (used_version has less version parts than min_version)
|
28
|
+
if used_num > min_num
|
29
|
+
## used version is greater; stop comparing
|
30
|
+
break
|
31
|
+
elsif used_num == min_num
|
32
|
+
## continue compare with next version number part
|
33
|
+
next
|
34
|
+
else
|
35
|
+
## used version is smaller; add and report outdated (!!) entry; stop comparing
|
36
|
+
outdated << rec
|
37
|
+
break
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
outdated
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
def version_check!( *versions )
|
47
|
+
outdated = version_check( *versions )
|
48
|
+
|
49
|
+
if outdated.size > 0 ## any outdated gems/libraries
|
50
|
+
puts "!!! error: version check failed - #{outdated.size} outdated gem(s):"
|
51
|
+
outdated.each do |rec|
|
52
|
+
name = rec[0]
|
53
|
+
min_version = rec[1]
|
54
|
+
used_version = rec[2]
|
55
|
+
puts " #{name} - min version required #{min_version} > used/installed version #{used_version}"
|
56
|
+
end
|
57
|
+
puts
|
58
|
+
puts "sorry - cannot continue; please update the outdated gem(s)"
|
59
|
+
|
60
|
+
exit 1
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
# say hello
|
67
|
+
puts VersionCheck.banner if $DEBUG || (defined?($RUBYLIBS_DEBUG) && $RUBYLIBS_DEBUG)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
module VersionCheck
|
3
|
+
MAJOR = 0 ## todo: namespace inside version or something - why? why not??
|
4
|
+
MINOR = 1
|
5
|
+
PATCH = 0
|
6
|
+
VERSION = [MAJOR,MINOR,PATCH].join('.')
|
7
|
+
|
8
|
+
def self.version
|
9
|
+
VERSION
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.banner
|
13
|
+
"version-check/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.root
|
17
|
+
"#{File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )}"
|
18
|
+
end
|
19
|
+
end # module VersionCheck
|
20
|
+
|
data/test/helper.rb
ADDED
data/test/test_check.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
###
|
2
|
+
# to run use
|
3
|
+
# ruby -I ./lib -I ./test test/test_check.rb
|
4
|
+
|
5
|
+
|
6
|
+
require 'helper'
|
7
|
+
|
8
|
+
|
9
|
+
class TestCheck < MiniTest::Test
|
10
|
+
|
11
|
+
|
12
|
+
def test_update_to_date
|
13
|
+
|
14
|
+
versions_a =
|
15
|
+
[['pakman', '1.1.0', '1.1.1'],
|
16
|
+
['fetcher', '0.4.5', '0.5.4'],
|
17
|
+
['feedparser', '2.1.2', '2.2.1'],
|
18
|
+
['feedfilter', '1.1', '1.1.14'],
|
19
|
+
['textutils', '2', '2.0.5'],
|
20
|
+
['logutils', '0.6', '0.6.0'],
|
21
|
+
['props', '1.2.1', '1.3.0'],
|
22
|
+
|
23
|
+
['pluto-models', '1.5.4', '1.5.7'],
|
24
|
+
['pluto-update', '1.6', '2.0.0'],
|
25
|
+
['pluto-merge', '1.1.0', '1.2.0']]
|
26
|
+
|
27
|
+
versions_a_outdated = []
|
28
|
+
|
29
|
+
assert_equal versions_a_outdated, version_check( *versions_a )
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_outdated
|
33
|
+
versions_b =
|
34
|
+
[['pakman', '1.1.0', '1.0.1'],
|
35
|
+
['fetcher', '0.4.5', '0.5.4'],
|
36
|
+
['feedparser', '2.1.2', '2.2.1'],
|
37
|
+
['feedfilter', '1.1', '1.1.1'],
|
38
|
+
['textutils', '2', '1.2.7'],
|
39
|
+
['logutils', '0.6', '0.6.0'],
|
40
|
+
['props', '1.2.1', '1.3.0'],
|
41
|
+
|
42
|
+
['pluto-models', '1.5.4', '1.5.7'],
|
43
|
+
['pluto-update', '1.6', '1.5.11'],
|
44
|
+
['pluto-merge', '1.1.0', '1.2.0']]
|
45
|
+
|
46
|
+
versions_b_outdated =
|
47
|
+
[['pakman', '1.1.0', '1.0.1'],
|
48
|
+
['textutils', '2', '1.2.7'],
|
49
|
+
['pluto-update', '1.6', '1.5.11']]
|
50
|
+
|
51
|
+
|
52
|
+
assert_equal versions_b_outdated, version_check( *versions_b )
|
53
|
+
end
|
54
|
+
|
55
|
+
end # class TestCheck
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: version-check
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gerald Bauer
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-02-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rdoc
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: hoe
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.16'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.16'
|
41
|
+
description: version-check - up-to-date? - helpers for checking for / reporting outdated
|
42
|
+
gem / library versions
|
43
|
+
email: wwwmake@googlegroups.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files:
|
47
|
+
- CHANGELOG.md
|
48
|
+
- Manifest.txt
|
49
|
+
- README.md
|
50
|
+
files:
|
51
|
+
- CHANGELOG.md
|
52
|
+
- Manifest.txt
|
53
|
+
- README.md
|
54
|
+
- Rakefile
|
55
|
+
- lib/version/check.rb
|
56
|
+
- lib/version/check/version.rb
|
57
|
+
- test/helper.rb
|
58
|
+
- test/test_check.rb
|
59
|
+
homepage: https://github.com/feedreader/pluto
|
60
|
+
licenses:
|
61
|
+
- Public Domain
|
62
|
+
metadata: {}
|
63
|
+
post_install_message:
|
64
|
+
rdoc_options:
|
65
|
+
- "--main"
|
66
|
+
- README.md
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 2.2.2
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
requirements: []
|
80
|
+
rubyforge_project:
|
81
|
+
rubygems_version: 2.5.2
|
82
|
+
signing_key:
|
83
|
+
specification_version: 4
|
84
|
+
summary: version-check - up-to-date? - helpers for checking for / reporting outdated
|
85
|
+
gem / library versions
|
86
|
+
test_files: []
|