gem_check_updates 0.3.0 → 0.3.2

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: 609509feec0f6b3360d0dbc3a61def27427e66fac1e13c2753191d405cd477fa
4
- data.tar.gz: fb487070cebcecd559f3d38b191bf6dc9d141ec438106f6d9269ee4dc8214956
3
+ metadata.gz: c9b7dc3e55d98f1c024b2a1534bfdd13927a52d06027dacce23f22c987941f7f
4
+ data.tar.gz: 30d9ae7118f8eda037aa8a515bb022ed89134c11b526003004bb47da955ad7de
5
5
  SHA512:
6
- metadata.gz: 11f248b064c90ef50882525514d8befee01b5d5ace0ca0b69c6e68b991c2f731364edfe927c3cd8ddc14e1e50bc39bb043a760c035b32f2c18ce8c5e60ff14da
7
- data.tar.gz: c9cdaa0f6814431b8aca28a91e5f4c00f73939f47bc0fd6becfcb19b40cbf7b1cb4a8c88f7701420efddde71d8df75a8b8a007091200b82e9527b2fc45273740
6
+ metadata.gz: d12db39ebe1710a825e147f2ea663b63bd45128ac3da0cecc9750c7c7bab6a83d386264f89519bdf15276d361a1a7dfc1ff42bb874b4746edec8589dbe8e3bdb
7
+ data.tar.gz: f0c9ef650359607c43280a2ad691d039c7a4fefb847e3ef81e5b042f2bd87e2d438fd69fc841390c693cf42411a5a995367eb108165808106f4199287f344ffa
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gem_check_updates (0.3.0)
4
+ gem_check_updates (0.3.2)
5
5
  colored (~> 1.2)
6
6
  em-http-request (~> 1.1)
7
7
  em-synchrony (~> 1.0)
@@ -55,7 +55,7 @@ GEM
55
55
  diff-lcs (>= 1.2.0, < 2.0)
56
56
  rspec-support (~> 3.8.0)
57
57
  rspec-support (3.8.0)
58
- rubocop (0.59.1)
58
+ rubocop (0.59.2)
59
59
  jaro_winkler (~> 1.5.1)
60
60
  parallel (~> 1.10)
61
61
  parser (>= 2.5, != 2.5.1.1)
@@ -5,58 +5,54 @@ module GemCheckUpdates
5
5
  DEFAULT_SCOPE = GemCheckUpdates::VersionScope::MAJOR
6
6
 
7
7
  attr_accessor :name
8
- attr_accessor :latest_version
9
8
  attr_accessor :current_version
9
+ attr_accessor :versions
10
10
  attr_accessor :version_range
11
11
 
12
12
  def initialize(name: nil,
13
13
  current_version: nil,
14
+ versions: [],
14
15
  version_range: nil,
15
- latest_version: nil,
16
16
  update_scope: DEFAULT_SCOPE)
17
17
  @name = name
18
18
  @current_version = current_version
19
+ @versions = versions
19
20
  @version_range = version_range
20
- @latest_version = latest_version
21
21
  @update_scope = update_scope
22
22
  end
23
23
 
24
24
  def update_available?
25
- !@latest_version.nil? &&
25
+ !latest_version.nil? &&
26
26
  !@current_version.nil? &&
27
- @current_version != '0' &&
28
- @latest_version > @current_version
27
+ @current_version.version_specified? &&
28
+ latest_version > @current_version
29
29
  end
30
30
 
31
- def scoped_latest_version(versions)
31
+ def latest_version
32
32
  # Ignore pre release version (ex. beta, rc), and sort desc
33
- numbers = versions.map { |v| v['number'] }
34
- .select { |v| v.split('.').size < 4 }
35
- .sort_by { |v| v.split('.').map(&:to_i)[0, 3] }
36
- .reverse
37
- current_major, current_minor = @current_version.split('.')
33
+ versions = @versions.reject(&:pre_release)
34
+ .sort_by { |v| [v.major, v.minor, v.patch] }
35
+ .reverse
38
36
 
39
37
  case @update_scope
40
38
  when GemCheckUpdates::VersionScope::MINOR
41
- numbers.select { |n| n.split('.').first == current_major }.first
39
+ versions.select { |v| v.major == @current_version.major }.first
42
40
  when GemCheckUpdates::VersionScope::PATCH
43
- numbers.select do |n|
44
- major, minor = n.split('.')
45
- major == current_major && minor == current_minor
41
+ versions.select do |v|
42
+ v.major == @current_version.major && v.minor == @current_version.minor
46
43
  end.first
47
44
  else
48
45
  # This branch is equal to specifying major updates
49
- numbers.first
46
+ versions.first
50
47
  end
51
48
  end
52
49
 
53
50
  def highlighted_latest_version
54
- Array.new(3) do |i|
55
- c = @current_version.split('.')[i]
56
- l = @latest_version.split('.')[i]
51
+ major = @current_version.major == latest_version.major ? latest_version.major : latest_version.major.green
52
+ minor = @current_version.minor == latest_version.minor ? latest_version.minor : latest_version.minor.green
53
+ patch = @current_version.patch == latest_version.patch ? latest_version.patch : latest_version.patch.green
57
54
 
58
- c == l ? l : l.green
59
- end.join('.')
55
+ [major, minor, patch].join('.')
60
56
  end
61
57
  end
62
58
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GemCheckUpdates
4
+ class GemVersion
5
+ include Comparable
6
+
7
+ attr_accessor :number
8
+ attr_accessor :major
9
+ attr_accessor :minor
10
+ attr_accessor :patch
11
+ attr_accessor :pre
12
+ attr_accessor :pre_release
13
+
14
+ def initialize(number: '0', pre_release: false)
15
+ @number = number
16
+ @major, @minor, @patch, @pre = number.split('.')
17
+ @pre_release = pre_release
18
+ end
19
+
20
+ def version_specified?
21
+ @number != '0'
22
+ end
23
+
24
+ def <=>(other)
25
+ weighted_version <=> other.weighted_version
26
+ end
27
+
28
+ def to_s
29
+ @number
30
+ end
31
+
32
+ def weighted_version
33
+ weights = [100, 10, 1]
34
+
35
+ [@major, @minor, @patch].map(&:to_i)
36
+ .map.with_index { |n, i| n * weights[i] }
37
+ end
38
+ end
39
+ end
@@ -3,7 +3,7 @@
3
3
  module GemCheckUpdates
4
4
  class Gemfile
5
5
  RUBYGEMS_API = 'https://rubygems.org/api/v1/versions'
6
- CONCURRENCY = 5
6
+ CONCURRENCY = 3
7
7
 
8
8
  attr_reader :option
9
9
  attr_reader :file_backup
@@ -32,7 +32,8 @@ module GemCheckUpdates
32
32
  def parse(update_scope)
33
33
  Bundler::Definition.build(@option.file, nil, nil).dependencies.map do |gem|
34
34
  name = gem.name
35
- version_range, version = gem.requirements_list.first.split(' ')
35
+ version_range, version_number = gem.requirements_list.first.split(' ')
36
+ version = GemCheckUpdates::GemVersion.new(number: version_number)
36
37
 
37
38
  Gem.new(name: name,
38
39
  current_version: version,
@@ -44,10 +45,16 @@ module GemCheckUpdates
44
45
  def check_updates!
45
46
  EventMachine.synchrony do
46
47
  EventMachine::Synchrony::FiberIterator.new(@gems, CONCURRENCY).each do |gem|
47
- http = EM::HttpRequest.new("#{RUBYGEMS_API}/#{gem.name}.json").get
48
- versions = JSON.parse(http.response)
48
+ http = EventMachine::HttpRequest.new("#{RUBYGEMS_API}/#{gem.name}.json").get
49
+ response = JSON.parse(http.response)
50
+ versions = response.map do |v|
51
+ number = v['number']
52
+ pre_release = v['prerelease']
49
53
 
50
- gem.latest_version = gem.scoped_latest_version(versions)
54
+ GemCheckUpdates::GemVersion.new(number: number, pre_release: pre_release)
55
+ end
56
+
57
+ gem.versions = versions
51
58
  GemCheckUpdates::Message.out('.')
52
59
  end
53
60
 
@@ -75,7 +82,7 @@ module GemCheckUpdates
75
82
  _, name, old_version = *matcher
76
83
  target = @gems.find { |gem| gem.name == name }
77
84
 
78
- line.gsub!(old_version, target.latest_version) unless target.nil?
85
+ line.gsub!(old_version, target.latest_version.to_s) unless target.nil?
79
86
  end
80
87
 
81
88
  updated.puts(line)
@@ -7,20 +7,19 @@ module GemCheckUpdates
7
7
  gemfile = Gemfile.new(option)
8
8
 
9
9
  if option.apply
10
- begin
11
- gemfile.backup
12
- gemfile.update
13
- gemfile.remove_backup
10
+ gemfile.backup
11
+ gemfile.update
12
+ gemfile.remove_backup
14
13
 
15
- GemCheckUpdates::Message.update_completed(gemfile)
16
- rescue StandardError => e
17
- gemfile.restore
18
-
19
- GemCheckUpdates::Message.out(e.message.red)
20
- end
14
+ GemCheckUpdates::Message.update_completed(gemfile)
21
15
  else
22
16
  GemCheckUpdates::Message.updatable_gems(gemfile)
23
17
  end
18
+ rescue StandardError => e
19
+ gemfile&.restore
20
+
21
+ GemCheckUpdates::Message.out(e.message.red)
22
+ exit(1)
24
23
  end
25
24
  end
26
25
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GemCheckUpdates
4
- VERSION = '0.3.0'
4
+ VERSION = '0.3.2'
5
5
  end
@@ -17,8 +17,6 @@ require 'gem_check_updates/version_scope'
17
17
  require 'gem_check_updates/option'
18
18
  require 'gem_check_updates/message'
19
19
  require 'gem_check_updates/gemfile'
20
+ require 'gem_check_updates/gem_version'
20
21
  require 'gem_check_updates/gem'
21
22
  require 'gem_check_updates/runner'
22
-
23
- module GemCheckUpdates
24
- end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gem_check_updates
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yusuke Mukai
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-30 00:00:00.000000000 Z
11
+ date: 2018-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -161,6 +161,7 @@ files:
161
161
  - gem_check_updates.gemspec
162
162
  - lib/gem_check_updates.rb
163
163
  - lib/gem_check_updates/gem.rb
164
+ - lib/gem_check_updates/gem_version.rb
164
165
  - lib/gem_check_updates/gemfile.rb
165
166
  - lib/gem_check_updates/message.rb
166
167
  - lib/gem_check_updates/option.rb