keep_up 0.11.0 → 0.12.1

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
  SHA256:
3
- metadata.gz: f982817574ba0a2dc2a74ea68776912ceb896a30a88461c7f5b89bd11d77dae7
4
- data.tar.gz: 8f4b736dd3f0389915b501c2c0de2f97d28719c9a9a5783b838604eb403e3a70
3
+ metadata.gz: ed5c16ea1ed8ecc539d89c938b5e542e744b47e2c12ee0f99e132788b3d62fab
4
+ data.tar.gz: 692eaba69bec68833f8f7c6878c170cf2481bcfe86c2a6c35504bdb9a5f0cd21
5
5
  SHA512:
6
- metadata.gz: b84d4c38eb78a3c2be0924d1e2ea2359b21748885e19f024bee5e8451454218b5e1023e54da6a28f7c096bf47ecc7e3aa2a51b96c7df3d90e04d8c1bf4ae3204
7
- data.tar.gz: '050589501a228b59a809b50f2a9d36e3df7aa479ef4411ce606cba6c119697d8f1c02d828a3535ab98e13adfb60efc3fd146dd8195486c157461a4cf2eb9ea14'
6
+ metadata.gz: 1a6f80d68a3e08515f6ae25e5225e471b0789a26fd875d16477bf27147ebfb6bb64a54affb0a942047c77201f619a7ecc7ecf8b9730dc23c8e43c0b5405b0eac
7
+ data.tar.gz: 6619f3875a4949bb12d08f8d9f89b4c20452eb5dab79dd8d31f79a009a0c011e60291dad8462106ea62e5574f47116df8fa913444edca2d69692cd24b7b04159
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.12.1 / 2026-01-30
4
+
5
+ * Support Ruby 4.0 and loosen Bundler dependency ([#128] by [mvz])
6
+
7
+ [#128]: https://github.com/mvz/keep_up/pull/128
8
+
9
+ ## 0.12.0 / 2025-10-24
10
+
11
+ * Support Ruby 3.2 through 3.4, dropping support for Ruby 2.7, 3.0 and 3.1
12
+ ([#107], [#117] and [#122] by [mvz])
13
+ * Drop support for Bundler 1.x ([#115] by [mvz])
14
+
15
+ [#107]: https://github.com/mvz/keep_up/pull/107
16
+ [#115]: https://github.com/mvz/keep_up/pull/115
17
+ [#117]: https://github.com/mvz/keep_up/pull/117
18
+ [#122]: https://github.com/mvz/keep_up/pull/122
19
+
3
20
  ## 0.11.0 / 2023-09-22
4
21
 
5
22
  * Drop support for Ruby 2.6 ([#102] by [mvz])
data/README.md CHANGED
@@ -7,7 +7,9 @@ Automatically update your dependencies.
7
7
  KeepUp is not intended to be part of your application's bundle. You should
8
8
  install it yourself as:
9
9
 
10
- $ gem install keep_up
10
+ ```bash
11
+ $ gem install keep_up
12
+ ```
11
13
 
12
14
  ## Basic Usage
13
15
 
@@ -19,7 +21,9 @@ Gemfile.lock is not up-to-date.
19
21
 
20
22
  Run `keep_up` in your project directory:
21
23
 
22
- $ keep_up
24
+ ```bash
25
+ $ keep_up
26
+ ```
23
27
 
24
28
  KeepUp will proceed to update your dependencies one by one, committing each
25
29
  change if updating the bundle is succesful.
@@ -72,5 +76,7 @@ the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
72
76
 
73
77
  ## License
74
78
 
79
+ Copyright © 2016–2026 [Matijs van Zuijlen](http://www.matijs.net)
80
+
75
81
  The gem is available as open source under the terms of the
76
82
  [MIT License](http://opensource.org/licenses/MIT).
@@ -3,23 +3,22 @@
3
3
  require_relative "gemfile_filter"
4
4
  require_relative "gemspec_filter"
5
5
  require_relative "dependency"
6
- require_relative "dependency_set"
7
6
 
8
7
  module KeepUp
9
8
  # A Gemfile with its current set of locked dependencies.
10
9
  class Bundle
11
10
  OUTDATED_MATCHER =
12
- /([^ ]*) \(newest ([^,]*), installed ([^,]*)(?:, requested (.*))?\)/.freeze
11
+ /([^ ]*) \(newest ([^,]*), installed ([^,]*)(?:, requested (.*))?\)/
13
12
  UPDATE_MATCHER =
14
- /(?:Using|Installing|Fetching) ([^ ]*) ([^ ]*)(?: \(was (.*)\))?/.freeze
13
+ /(?:Using|Installing|Fetching) ([^ ]*) ([^ ]*)(?: \(was (.*)\))?/
15
14
 
16
15
  def initialize(runner:, local:)
17
16
  @runner = runner
18
17
  @local = local
19
18
  end
20
19
 
21
- def dependencies
22
- @dependencies ||=
20
+ def outdated_dependencies
21
+ @outdated_dependencies ||=
23
22
  begin
24
23
  command = "bundle outdated --parseable#{" --local" if @local}"
25
24
  lines = run_filtered command, OUTDATED_MATCHER
@@ -29,27 +28,31 @@ module KeepUp
29
28
  end
30
29
  end
31
30
 
32
- def dependency_set
33
- @dependency_set ||= DependencySet.new(dependencies)
34
- end
35
-
36
31
  def check?
37
32
  _, status = @runner.run2 "bundle check"
38
33
  status == 0
39
34
  end
40
35
 
36
+ def update_dependency(dependency)
37
+ specification = updated_specification_for(dependency)
38
+ spec_update = find_specification_update(specification)
39
+ spec_result =
40
+ update_gemspec_contents(spec_update) ||
41
+ update_gemfile_contents(spec_update)
42
+ lock_result = update_lockfile(specification, dependency.locked_version)
43
+ [spec_result, lock_result]
44
+ end
45
+
46
+ private
47
+
41
48
  def update_gemfile_contents(update)
42
- update = dependency_set.find_specification_update(update)
43
49
  return unless update
44
50
 
45
51
  update if GemfileFilter.apply_to_file("Gemfile", update)
46
52
  end
47
53
 
48
54
  def update_gemspec_contents(update)
49
- return unless gemspec_name
50
-
51
- update = dependency_set.find_specification_update(update)
52
- return unless update
55
+ return unless update && gemspec_name
53
56
 
54
57
  update if GemspecFilter.apply_to_file(gemspec_name, update)
55
58
  end
@@ -69,23 +72,18 @@ module KeepUp
69
72
  nil
70
73
  end
71
74
 
72
- private
75
+ def updated_specification_for(dependency)
76
+ Gem::Specification.new(dependency.name, dependency.newest_version)
77
+ end
73
78
 
74
79
  def gemspec
75
- @gemspec ||=
76
- if gemspec_name
77
- gemspec_path = File.expand_path(gemspec_name)
78
- eval File.read(gemspec_name), nil, gemspec_path
79
- end
80
+ @gemspec ||= if gemspec_name
81
+ eval File.read(gemspec_name), nil, File.expand_path(gemspec_name)
82
+ end
80
83
  end
81
84
 
82
85
  def gemspec_dependencies
83
- @gemspec_dependencies ||=
84
- if gemspec
85
- gemspec.dependencies
86
- else
87
- []
88
- end
86
+ @gemspec_dependencies ||= gemspec&.dependencies || []
89
87
  end
90
88
 
91
89
  def build_dependency(name, newest, version, requirement)
@@ -102,7 +100,7 @@ module KeepUp
102
100
  end
103
101
 
104
102
  def fetch_gemspec_dependency_requirements(name)
105
- dep = gemspec_dependencies.find { |it| it.name == name }
103
+ dep = gemspec_dependencies.find { _1.name == name }
106
104
  return unless dep
107
105
 
108
106
  dep.requirements_list
@@ -112,6 +110,13 @@ module KeepUp
112
110
  @gemspec_name ||= Dir.glob("*.gemspec").first
113
111
  end
114
112
 
113
+ def find_specification_update(update)
114
+ current_dependency = outdated_dependencies.find { _1.name == update.name }
115
+ return if !current_dependency || current_dependency.matches_spec?(update)
116
+
117
+ current_dependency.generalize_specification(update)
118
+ end
119
+
115
120
  def run_filtered(command, regexp)
116
121
  result = @runner.run command
117
122
  lines = result.split("\n").reject(&:empty?)
@@ -16,9 +16,9 @@ module KeepUp
16
16
 
17
17
  def run
18
18
  possible_updates.each do |update|
19
- result = apply_updated_dependency update
20
- if result
21
- version_control.commit_changes result
19
+ updated_dependency = apply_updated_dependency update
20
+ if updated_dependency
21
+ version_control.commit_changes updated_dependency
22
22
  else
23
23
  version_control.revert_changes
24
24
  end
@@ -26,7 +26,7 @@ module KeepUp
26
26
  end
27
27
 
28
28
  def possible_updates
29
- bundle.dependencies
29
+ bundle.outdated_dependencies
30
30
  .select { |dep| filter.call dep }
31
31
  .select { |dep| updateable_dependency? dep }.uniq
32
32
  end
@@ -35,15 +35,11 @@ module KeepUp
35
35
 
36
36
  def apply_updated_dependency(dependency)
37
37
  report_intent dependency
38
+ spec_result, lock_result = *bundle.update_dependency(dependency)
39
+ final_result = spec_result || lock_result if lock_result
38
40
 
39
- specification = updated_specification_for(dependency)
40
-
41
- update = bundle.update_gemspec_contents(specification)
42
- update2 = bundle.update_gemfile_contents(specification)
43
- update ||= update2
44
- result = bundle.update_lockfile(specification, dependency.locked_version)
45
- report_result specification, result
46
- update || result if result
41
+ report_result dependency, lock_result
42
+ final_result
47
43
  end
48
44
 
49
45
  def report_intent(dependency)
@@ -54,7 +50,7 @@ module KeepUp
54
50
  if result
55
51
  @out.puts "Updated #{dependency.name} to #{result.version}"
56
52
  else
57
- @out.puts "Failed updating #{dependency.name} to #{dependency.version}"
53
+ @out.puts "Failed updating #{dependency.name} to #{dependency.newest_version}"
58
54
  end
59
55
  end
60
56
 
@@ -63,9 +59,5 @@ module KeepUp
63
59
  newest_version = dependency.newest_version
64
60
  newest_version > locked_version
65
61
  end
66
-
67
- def updated_specification_for(dependency)
68
- Gem::Specification.new(dependency.name, dependency.newest_version)
69
- end
70
62
  end
71
63
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KeepUp
4
- VERSION = "0.11.0"
4
+ VERSION = "0.12.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keep_up
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matijs van Zuijlen
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-09-22 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
@@ -16,48 +15,48 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '1.15'
18
+ version: '2.0'
20
19
  - - "<"
21
20
  - !ruby/object:Gem::Version
22
- version: '3.0'
21
+ version: '5.0'
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- version: '1.15'
28
+ version: '2.0'
30
29
  - - "<"
31
30
  - !ruby/object:Gem::Version
32
- version: '3.0'
31
+ version: '5.0'
33
32
  - !ruby/object:Gem::Dependency
34
33
  name: aruba
35
34
  requirement: !ruby/object:Gem::Requirement
36
35
  requirements:
37
36
  - - "~>"
38
37
  - !ruby/object:Gem::Version
39
- version: '2.0'
38
+ version: '2.3'
40
39
  type: :development
41
40
  prerelease: false
42
41
  version_requirements: !ruby/object:Gem::Requirement
43
42
  requirements:
44
43
  - - "~>"
45
44
  - !ruby/object:Gem::Version
46
- version: '2.0'
45
+ version: '2.3'
47
46
  - !ruby/object:Gem::Dependency
48
47
  name: cucumber
49
48
  requirement: !ruby/object:Gem::Requirement
50
49
  requirements:
51
50
  - - "~>"
52
51
  - !ruby/object:Gem::Version
53
- version: '9.0'
52
+ version: '10.0'
54
53
  type: :development
55
54
  prerelease: false
56
55
  version_requirements: !ruby/object:Gem::Requirement
57
56
  requirements:
58
57
  - - "~>"
59
58
  - !ruby/object:Gem::Version
60
- version: '9.0'
59
+ version: '10.0'
61
60
  - !ruby/object:Gem::Dependency
62
61
  name: rake
63
62
  requirement: !ruby/object:Gem::Requirement
@@ -106,56 +105,56 @@ dependencies:
106
105
  requirements:
107
106
  - - "~>"
108
107
  - !ruby/object:Gem::Version
109
- version: '1.52'
108
+ version: '1.80'
110
109
  type: :development
111
110
  prerelease: false
112
111
  version_requirements: !ruby/object:Gem::Requirement
113
112
  requirements:
114
113
  - - "~>"
115
114
  - !ruby/object:Gem::Version
116
- version: '1.52'
115
+ version: '1.80'
117
116
  - !ruby/object:Gem::Dependency
118
117
  name: rubocop-packaging
119
118
  requirement: !ruby/object:Gem::Requirement
120
119
  requirements:
121
120
  - - "~>"
122
121
  - !ruby/object:Gem::Version
123
- version: 0.5.2
122
+ version: 0.6.0
124
123
  type: :development
125
124
  prerelease: false
126
125
  version_requirements: !ruby/object:Gem::Requirement
127
126
  requirements:
128
127
  - - "~>"
129
128
  - !ruby/object:Gem::Version
130
- version: 0.5.2
129
+ version: 0.6.0
131
130
  - !ruby/object:Gem::Dependency
132
131
  name: rubocop-performance
133
132
  requirement: !ruby/object:Gem::Requirement
134
133
  requirements:
135
134
  - - "~>"
136
135
  - !ruby/object:Gem::Version
137
- version: '1.18'
136
+ version: '1.25'
138
137
  type: :development
139
138
  prerelease: false
140
139
  version_requirements: !ruby/object:Gem::Requirement
141
140
  requirements:
142
141
  - - "~>"
143
142
  - !ruby/object:Gem::Version
144
- version: '1.18'
143
+ version: '1.25'
145
144
  - !ruby/object:Gem::Dependency
146
145
  name: rubocop-rspec
147
146
  requirement: !ruby/object:Gem::Requirement
148
147
  requirements:
149
148
  - - "~>"
150
149
  - !ruby/object:Gem::Version
151
- version: '2.22'
150
+ version: '3.7'
152
151
  type: :development
153
152
  prerelease: false
154
153
  version_requirements: !ruby/object:Gem::Requirement
155
154
  requirements:
156
155
  - - "~>"
157
156
  - !ruby/object:Gem::Version
158
- version: '2.22'
157
+ version: '3.7'
159
158
  - !ruby/object:Gem::Dependency
160
159
  name: simplecov
161
160
  requirement: !ruby/object:Gem::Requirement
@@ -188,7 +187,6 @@ files:
188
187
  - lib/keep_up/application.rb
189
188
  - lib/keep_up/bundle.rb
190
189
  - lib/keep_up/dependency.rb
191
- - lib/keep_up/dependency_set.rb
192
190
  - lib/keep_up/file_filter.rb
193
191
  - lib/keep_up/gemfile_filter.rb
194
192
  - lib/keep_up/gemspec_filter.rb
@@ -204,7 +202,6 @@ licenses:
204
202
  metadata:
205
203
  homepage_uri: https://github.com/mvz/keep_up
206
204
  rubygems_mfa_required: 'true'
207
- post_install_message:
208
205
  rdoc_options: []
209
206
  require_paths:
210
207
  - lib
@@ -212,15 +209,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
212
209
  requirements:
213
210
  - - ">="
214
211
  - !ruby/object:Gem::Version
215
- version: 2.7.0
212
+ version: 3.2.0
216
213
  required_rubygems_version: !ruby/object:Gem::Requirement
217
214
  requirements:
218
215
  - - ">="
219
216
  - !ruby/object:Gem::Version
220
217
  version: '0'
221
218
  requirements: []
222
- rubygems_version: 3.4.19
223
- signing_key:
219
+ rubygems_version: 4.0.3
224
220
  specification_version: 4
225
221
  summary: Automatically update your dependencies
226
222
  test_files: []
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module KeepUp
4
- # Set of dependencies with their current locked versions.
5
- class DependencySet
6
- attr_reader :dependencies
7
-
8
- def initialize(dependencies)
9
- @dependencies = dependencies
10
- end
11
-
12
- def find_specification_update(update)
13
- current_dependency = dependencies.find { |it| it.name == update.name }
14
- return if !current_dependency || current_dependency.matches_spec?(update)
15
-
16
- current_dependency.generalize_specification(update)
17
- end
18
- end
19
- end