gem_check_updates 0.3.0 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
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