libyear-bundler 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +6 -6
- data/.rubocop_todo.yml +0 -8
- data/CHANGELOG.md +20 -1
- data/CONTRIBUTING.md +1 -1
- data/README.md +32 -25
- data/bin/test +6 -0
- data/lib/libyear_bundler/bundle_outdated.rb +12 -0
- data/lib/libyear_bundler/models/ruby.rb +26 -15
- data/lib/libyear_bundler/report.rb +9 -6
- data/lib/libyear_bundler/version.rb +1 -1
- data/libyear-bundler.gemspec +3 -3
- metadata +22 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3b113205ec01de873ddfdb08d3f57bae32d490e7c8507fd1a66a1fb6b3eb908b
|
4
|
+
data.tar.gz: 6d8e7d769640f59408f32d348cbef9c3b0ac05afa4d599d1bf1263e6eb9c236c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0faaddd13daf54352167af88c80299210f4cdb7bae8509406058f8322e5a0d1eb637d8d75a22cebc0a9384b6c60c2e2b7166561f52c7dee9aa9f43e283ea7af
|
7
|
+
data.tar.gz: cbed8858a0ef38a2ce323354add6bd64035ffe43bd69cd41f0d381f5486c27b9d81d20e7e8e01424bd6eb5d5e5f93054a5ec3f6ed51a8d1581ffbad0eaae4859
|
data/.rubocop.yml
CHANGED
@@ -3,6 +3,12 @@ inherit_from: .rubocop_todo.yml
|
|
3
3
|
AllCops:
|
4
4
|
TargetRubyVersion: 2.1.10
|
5
5
|
|
6
|
+
Layout/IndentArray:
|
7
|
+
EnforcedStyle: consistent
|
8
|
+
|
9
|
+
Layout/MultilineMethodCallIndentation:
|
10
|
+
EnforcedStyle: indented
|
11
|
+
|
6
12
|
Metrics/AbcSize:
|
7
13
|
Max: 27
|
8
14
|
|
@@ -20,11 +26,5 @@ Metrics/LineLength:
|
|
20
26
|
Metrics/MethodLength:
|
21
27
|
Enabled: false
|
22
28
|
|
23
|
-
Style/IndentArray:
|
24
|
-
EnforcedStyle: consistent
|
25
|
-
|
26
|
-
Style/MultilineMethodCallIndentation:
|
27
|
-
EnforcedStyle: indented
|
28
|
-
|
29
29
|
Style/StringLiterals:
|
30
30
|
Enabled: false
|
data/.rubocop_todo.yml
CHANGED
@@ -6,14 +6,6 @@
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
-
# Offense count: 1
|
10
|
-
# Cop supports --auto-correct.
|
11
|
-
# Configuration parameters: Include, TreatCommentsAsGroupSeparators.
|
12
|
-
# Include: **/*.gemspec
|
13
|
-
Gemspec/OrderedDependencies:
|
14
|
-
Exclude:
|
15
|
-
- 'libyear-bundler.gemspec'
|
16
|
-
|
17
9
|
# Offense count: 1
|
18
10
|
# Cop supports --auto-correct.
|
19
11
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
data/CHANGELOG.md
CHANGED
@@ -17,7 +17,26 @@ Fixed:
|
|
17
17
|
|
18
18
|
- None
|
19
19
|
|
20
|
-
## 0.5.
|
20
|
+
## 0.5.1 (2019-05-09)
|
21
|
+
|
22
|
+
Breaking changes:
|
23
|
+
|
24
|
+
- None
|
25
|
+
|
26
|
+
Added:
|
27
|
+
|
28
|
+
- None
|
29
|
+
|
30
|
+
Fixed:
|
31
|
+
|
32
|
+
- Stable Ruby releases are no longer considered pre-releases (80534fa)
|
33
|
+
- Avoid crash due to malformed version strings by skipping those dependencies (7b0b2cf)
|
34
|
+
|
35
|
+
Dependencies:
|
36
|
+
|
37
|
+
- Support bundler 2
|
38
|
+
|
39
|
+
## 0.5.0 (2017-12-27)
|
21
40
|
|
22
41
|
Breaking changes:
|
23
42
|
|
data/CONTRIBUTING.md
CHANGED
@@ -12,7 +12,7 @@ bundle exec rspec
|
|
12
12
|
## Releases
|
13
13
|
|
14
14
|
1. Set the version in `lib/libyear_bundler/version.rb`
|
15
|
-
- Follow
|
15
|
+
- Follow SemVer
|
16
16
|
- Only use integer-dot-integer-dot-integer format, never "pre-releases"
|
17
17
|
1. In the changelog,
|
18
18
|
- Replace "Unreleased" with the date in ISO-8601 format
|
data/README.md
CHANGED
@@ -2,15 +2,16 @@
|
|
2
2
|
|
3
3
|
A simple measure of dependency freshness for ruby apps.
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
```bash
|
6
|
+
$ libyear-bundler Gemfile
|
7
|
+
activesupport 4.2.7.1 2016-08-10 5.1.3 2017-08-03 1.0
|
8
|
+
i18n 0.8.0 2017-01-31 0.8.6 2017-07-10 0.4
|
9
|
+
json 1.8.6 2017-01-13 2.1.0 2017-04-18 0.3
|
10
|
+
System is 1.7 libyears behind
|
11
|
+
```
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
dependency freshness outlined in the paper are available in libyear-bundler. See
|
13
|
-
the Usage section for details.
|
13
|
+
`libyear-bundler` tells you how out-of-date your Gemfile is, in *a single
|
14
|
+
number*.
|
14
15
|
|
15
16
|
# Install
|
16
17
|
|
@@ -20,31 +21,30 @@ gem install libyear-bundler
|
|
20
21
|
|
21
22
|
## Usage
|
22
23
|
|
23
|
-
Run `libyear-bundler` in a directory with a Gemfile.
|
24
|
-
For simpler output, see the `--grand-total` option.
|
24
|
+
Run `libyear-bundler` in a directory with a Gemfile.
|
25
25
|
|
26
|
-
###
|
26
|
+
### `--libyears` (default)
|
27
27
|
|
28
|
-
#### `--libyears` (default)
|
29
28
|
Measures the time between your dependencies' installed and newest versions, in
|
30
29
|
years.
|
31
30
|
|
32
31
|
```bash
|
33
32
|
$ libyear-bundler Gemfile
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
33
|
+
activesupport 4.2.7.1 2016-08-10 5.1.3 2017-08-03 1.0
|
34
|
+
i18n 0.8.0 2017-01-31 0.8.6 2017-07-10 0.4
|
35
|
+
json 1.8.6 2017-01-13 2.1.0 2017-04-18 0.3
|
36
|
+
minitest 5.10.1 2016-12-02 5.10.3 2017-07-21 0.6
|
37
|
+
minitest_to_rspec 0.6.0 2015-06-09 0.8.0 2017-01-02 1.6
|
38
|
+
ruby_parser 3.8.4 2017-01-13 3.10.1 2017-07-21 0.5
|
39
|
+
sexp_processor 4.8.0 2017-02-01 4.10.0 2017-07-17 0.5
|
40
|
+
thread_safe 0.3.5 2015-03-11 0.3.6 2017-02-22 2.0
|
41
|
+
tzinfo 1.2.2 2014-08-08 1.2.3 2017-03-25 2.6
|
43
42
|
System is 9.4 libyears behind
|
44
43
|
|
45
44
|
```
|
46
45
|
|
47
|
-
|
46
|
+
### `--releases`
|
47
|
+
|
48
48
|
Measures the number of releases between your dependencies' installed and newest
|
49
49
|
versions
|
50
50
|
|
@@ -63,8 +63,8 @@ Total releases behind: 70
|
|
63
63
|
|
64
64
|
```
|
65
65
|
|
66
|
+
### `--versions`
|
66
67
|
|
67
|
-
#### `--versions`
|
68
68
|
Measures the number of major, minor, and patch versions between your
|
69
69
|
dependencies' installed and newest versions
|
70
70
|
|
@@ -83,7 +83,8 @@ Major, minor, patch versions behind: 2, 6, 10
|
|
83
83
|
|
84
84
|
```
|
85
85
|
|
86
|
-
|
86
|
+
### `--all`
|
87
|
+
|
87
88
|
Returns relevant data for each outdated gem, including 'libyears', 'releases',
|
88
89
|
and 'versions' metrics
|
89
90
|
|
@@ -103,7 +104,8 @@ Total releases behind: 70
|
|
103
104
|
Major, minor, patch versions behind: 2, 6, 10
|
104
105
|
```
|
105
106
|
|
106
|
-
|
107
|
+
### `--grand-total`
|
108
|
+
|
107
109
|
With no other options, returns the grand-total of libyears. Used with other
|
108
110
|
flags, returns the associated grand-total.
|
109
111
|
|
@@ -127,6 +129,11 @@ $ libyear-bundler Gemfile --all --grand-total
|
|
127
129
|
|
128
130
|
See CONTRIBUTING.md
|
129
131
|
|
132
|
+
## Acknowledgements
|
133
|
+
|
134
|
+
The inspiration for libyear comes from the technical report “Measuring
|
135
|
+
Dependency Freshness in Software Systems”[1].
|
136
|
+
|
130
137
|
---
|
131
138
|
[1] J. Cox, E. Bouwers, M. van Eekelen and J. Visser, Measuring Dependency
|
132
139
|
Freshness in Software Systems. In Proceedings of the 37th International
|
data/bin/test
ADDED
@@ -19,6 +19,11 @@ module LibyearBundler
|
|
19
19
|
bundle_outdated.lines.each_with_object([]) do |line, gems|
|
20
20
|
match = BOP_FMT.match(line)
|
21
21
|
next if match.nil?
|
22
|
+
if malformed_version_strings?(match)
|
23
|
+
warn "Skipping #{match['name']} because of a malformed version string"
|
24
|
+
next
|
25
|
+
end
|
26
|
+
|
22
27
|
gem = ::LibyearBundler::Models::Gem.new(
|
23
28
|
match['name'],
|
24
29
|
match['installed'],
|
@@ -47,5 +52,12 @@ module LibyearBundler
|
|
47
52
|
end
|
48
53
|
stdout
|
49
54
|
end
|
55
|
+
|
56
|
+
# We rely on Gem::Version to handle version strings. If the string is malformed (usually because
|
57
|
+
# of a gem installed from git), then we won't be able to determine the dependency's freshness
|
58
|
+
def malformed_version_strings?(dependency)
|
59
|
+
!Gem::Version.correct?(dependency['installed']) ||
|
60
|
+
!Gem::Version.correct?(dependency['newest'])
|
61
|
+
end
|
50
62
|
end
|
51
63
|
end
|
@@ -43,7 +43,7 @@ module LibyearBundler
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def newest_version
|
46
|
-
::Gem::Version.new(
|
46
|
+
::Gem::Version.new(all_stable_versions.first)
|
47
47
|
end
|
48
48
|
|
49
49
|
def newest_version_release_date
|
@@ -70,9 +70,6 @@ module LibyearBundler
|
|
70
70
|
|
71
71
|
private
|
72
72
|
|
73
|
-
# We'll only consider non-prerelease versions when determining the
|
74
|
-
# newest version
|
75
|
-
#
|
76
73
|
# The following URL is the only official, easily-parseable document with
|
77
74
|
# Ruby version information that I'm aware of, but is not supported as such
|
78
75
|
# (https://github.com/ruby/www.ruby-lang.org/pull/1637#issuecomment-344934173).
|
@@ -87,29 +84,47 @@ module LibyearBundler
|
|
87
84
|
# The Date object is passed through here due to a bug in
|
88
85
|
# YAML#safe_load
|
89
86
|
# https://github.com/ruby/psych/issues/262
|
90
|
-
::YAML.safe_load(response.body, [Date])
|
91
|
-
::Gem::Version.new(version['version']).prerelease?
|
92
|
-
end
|
87
|
+
::YAML.safe_load(response.body, [Date])
|
93
88
|
end
|
94
89
|
end
|
95
90
|
|
91
|
+
# We'll only consider non-prerelease versions when analyzing ruby version,
|
92
|
+
# which we also implcitly do for gem versions because that's bundler's
|
93
|
+
# default behavior
|
94
|
+
def all_stable_versions
|
95
|
+
stable_releases = all_versions.reject do |version|
|
96
|
+
::Gem::Version.new(version['version']).prerelease?
|
97
|
+
end
|
98
|
+
stable_releases.map { |release| release['version'] }
|
99
|
+
end
|
100
|
+
|
96
101
|
def installed_version_sequence_index
|
97
|
-
|
102
|
+
all_stable_versions.index(installed_version.to_s)
|
98
103
|
end
|
99
104
|
|
100
105
|
def newest_version_sequence_index
|
101
|
-
|
106
|
+
all_stable_versions.index(newest_version.to_s)
|
102
107
|
end
|
103
108
|
|
104
109
|
def release_date(version)
|
105
|
-
v =
|
110
|
+
v = all_stable_versions.detect { |ver| ver['version'] == version }
|
106
111
|
# YAML#safe_load provides an already-parsed Date object, so the following
|
107
112
|
# is a Date object
|
108
113
|
v['date']
|
109
114
|
end
|
110
115
|
|
111
116
|
def shell_out_to_ruby
|
112
|
-
|
117
|
+
# ruby appends a 'p' followed by the patch level number
|
118
|
+
# to the version number for stable releases, which returns
|
119
|
+
# a false positive using `::Gem::Version#prerelease?`.
|
120
|
+
# Understandably, because ruby is not a gem, but we'd like
|
121
|
+
# to use `prerelease?`.
|
122
|
+
# Pre-releases are appended with 'dev', and so adhere to
|
123
|
+
# `::Gem::Version`'s definition of a pre-release.
|
124
|
+
# Sources:
|
125
|
+
# - https://github.com/ruby/ruby/blob/trunk/version.h#L37
|
126
|
+
# - https://ruby-doc.org/stdlib-1.9.3/libdoc/rubygems/rdoc/Version.html
|
127
|
+
`ruby --version`.split[1].gsub(/p\d/, '')
|
113
128
|
end
|
114
129
|
|
115
130
|
def version_from_bundler
|
@@ -130,10 +145,6 @@ module LibyearBundler
|
|
130
145
|
def version_from_ruby
|
131
146
|
::Gem::Version.new(shell_out_to_ruby)
|
132
147
|
end
|
133
|
-
|
134
|
-
def versions_sequence
|
135
|
-
all_versions.map { |version| version['version'] }
|
136
|
-
end
|
137
148
|
end
|
138
149
|
end
|
139
150
|
end
|
@@ -82,20 +82,23 @@ module LibyearBundler
|
|
82
82
|
|
83
83
|
def put_version_delta_summary(sum_major_version, sum_minor_version, sum_patch_version)
|
84
84
|
puts format(
|
85
|
-
"Major, minor, patch versions behind:
|
86
|
-
sum_major_version,
|
87
|
-
sum_minor_version,
|
88
|
-
sum_patch_version
|
85
|
+
"Major, minor, patch versions behind: %<major>d, %<minor>d, %<patch>d",
|
86
|
+
major: sum_major_version,
|
87
|
+
minor: sum_minor_version,
|
88
|
+
patch: sum_patch_version
|
89
89
|
)
|
90
90
|
end
|
91
91
|
|
92
92
|
def put_sum_seq_delta_summary(sum_seq_delta)
|
93
|
-
puts format(
|
93
|
+
puts format(
|
94
|
+
"Total releases behind: %<seq_delta>d",
|
95
|
+
seq_delta: sum_seq_delta
|
96
|
+
)
|
94
97
|
end
|
95
98
|
|
96
99
|
def put_summary(summary)
|
97
100
|
if [:libyears?, :releases?, :versions?].all? { |opt| @options.send(opt) }
|
98
|
-
put_libyear_summary(summary[:
|
101
|
+
put_libyear_summary(summary[:sum_libyears])
|
99
102
|
put_sum_seq_delta_summary(summary[:sum_seq_delta])
|
100
103
|
put_version_delta_summary(
|
101
104
|
summary[:sum_major_version],
|
data/libyear-bundler.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = ["libyear-bundler"]
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
spec.required_ruby_version = ">= 2.1"
|
22
|
-
spec.add_dependency "bundler", "
|
23
|
-
spec.add_development_dependency "
|
24
|
-
spec.add_development_dependency "
|
22
|
+
spec.add_dependency "bundler", ">= 1.14", "< 3"
|
23
|
+
spec.add_development_dependency "rspec", "~> 3.7"
|
24
|
+
spec.add_development_dependency "rubocop", "~> 0.52.1"
|
25
25
|
end
|
metadata
CHANGED
@@ -1,57 +1,63 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libyear-bundler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jared Beck
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.14'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '3'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '1.14'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
34
|
+
name: rspec
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- - "
|
37
|
+
- - "~>"
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
39
|
+
version: '3.7'
|
34
40
|
type: :development
|
35
41
|
prerelease: false
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
|
-
- - "
|
44
|
+
- - "~>"
|
39
45
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
46
|
+
version: '3.7'
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
48
|
+
name: rubocop
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
|
-
- - "
|
51
|
+
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
53
|
+
version: 0.52.1
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
|
-
- - "
|
58
|
+
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
60
|
+
version: 0.52.1
|
55
61
|
description:
|
56
62
|
email:
|
57
63
|
- jared@jaredbeck.com
|
@@ -70,6 +76,7 @@ files:
|
|
70
76
|
- LICENSE.txt
|
71
77
|
- README.md
|
72
78
|
- bin/libyear-bundler
|
79
|
+
- bin/test
|
73
80
|
- lib/libyear_bundler.rb
|
74
81
|
- lib/libyear_bundler/bundle_outdated.rb
|
75
82
|
- lib/libyear_bundler/calculators/libyear.rb
|
@@ -101,8 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
108
|
- !ruby/object:Gem::Version
|
102
109
|
version: '0'
|
103
110
|
requirements: []
|
104
|
-
|
105
|
-
rubygems_version: 2.6.13
|
111
|
+
rubygems_version: 3.0.3
|
106
112
|
signing_key:
|
107
113
|
specification_version: 4
|
108
114
|
summary: A simple measure of dependency freshness
|