gem_check_updates 0.2.1 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f4277015e93572bdec12869bc5f829257e504e3a93f285756ead31aa03f30f8c
4
- data.tar.gz: 1c43b7b24d0d50900f76898622c5de1a9d8fd61398b3377080a1a381c1fd0350
3
+ metadata.gz: 609509feec0f6b3360d0dbc3a61def27427e66fac1e13c2753191d405cd477fa
4
+ data.tar.gz: fb487070cebcecd559f3d38b191bf6dc9d141ec438106f6d9269ee4dc8214956
5
5
  SHA512:
6
- metadata.gz: 1aed70a8e44034160046aaf5181acd3013247985fa929e7a927a0515c1edbf66ef494c624ab3f1c230081bf140f9a311f7f4e676fc2d73ce654066bc27ffa21e
7
- data.tar.gz: 496ba4576737d07ddbebd872dc1d659c2d4f350d2d4c16a4ce6a248752b7306f5bc77aef0ba84edd590ef03d229f2c1a33782ce839fb75006fd4c90e989b0aca
6
+ metadata.gz: 11f248b064c90ef50882525514d8befee01b5d5ace0ca0b69c6e68b991c2f731364edfe927c3cd8ddc14e1e50bc39bb043a760c035b32f2c18ce8c5e60ff14da
7
+ data.tar.gz: c9cdaa0f6814431b8aca28a91e5f4c00f73939f47bc0fd6becfcb19b40cbf7b1cb4a8c88f7701420efddde71d8df75a8b8a007091200b82e9527b2fc45273740
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gem_check_updates (0.2.1)
4
+ gem_check_updates (0.3.0)
5
5
  colored (~> 1.2)
6
- rest-client (~> 2.0)
6
+ em-http-request (~> 1.1)
7
+ em-synchrony (~> 1.0)
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
@@ -14,21 +15,26 @@ GEM
14
15
  codeclimate-test-reporter (1.0.8)
15
16
  simplecov (<= 0.13)
16
17
  colored (1.2)
18
+ cookiejar (0.3.3)
17
19
  crack (0.4.3)
18
20
  safe_yaml (~> 1.0.0)
19
21
  diff-lcs (1.3)
20
22
  docile (1.1.5)
21
- domain_name (0.5.20180417)
22
- unf (>= 0.0.5, < 1.0.0)
23
+ em-http-request (1.1.5)
24
+ addressable (>= 2.3.4)
25
+ cookiejar (!= 0.3.1)
26
+ em-socksify (>= 0.3)
27
+ eventmachine (>= 1.0.3)
28
+ http_parser.rb (>= 0.6.0)
29
+ em-socksify (0.3.2)
30
+ eventmachine (>= 1.0.0.beta.4)
31
+ em-synchrony (1.0.6)
32
+ eventmachine (>= 1.0.0.beta.1)
33
+ eventmachine (1.2.7)
23
34
  hashdiff (0.3.7)
24
- http-cookie (1.0.3)
25
- domain_name (~> 0.5)
35
+ http_parser.rb (0.6.0)
26
36
  jaro_winkler (1.5.1)
27
37
  json (2.1.0)
28
- mime-types (3.2.2)
29
- mime-types-data (~> 3.2015)
30
- mime-types-data (3.2018.0812)
31
- netrc (0.11.0)
32
38
  parallel (1.12.1)
33
39
  parser (2.5.1.2)
34
40
  ast (~> 2.4.0)
@@ -36,10 +42,6 @@ GEM
36
42
  public_suffix (3.0.3)
37
43
  rainbow (3.0.0)
38
44
  rake (12.3.1)
39
- rest-client (2.0.2)
40
- http-cookie (>= 1.0.2, < 2.0)
41
- mime-types (>= 1.16, < 4.0)
42
- netrc (~> 0.8)
43
45
  rspec (3.8.0)
44
46
  rspec-core (~> 3.8.0)
45
47
  rspec-expectations (~> 3.8.0)
@@ -68,9 +70,6 @@ GEM
68
70
  json (>= 1.8, < 3)
69
71
  simplecov-html (~> 0.10.0)
70
72
  simplecov-html (0.10.2)
71
- unf (0.1.4)
72
- unf_ext
73
- unf_ext (0.0.7.5)
74
73
  unicode-display_width (1.4.0)
75
74
  webmock (3.4.2)
76
75
  addressable (>= 2.3.6)
data/exe/gcu CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #! /usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require 'gem_check_updates'
@@ -32,5 +32,6 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency 'webmock', '~> 3.4.2'
33
33
 
34
34
  spec.add_dependency 'colored', '~> 1.2'
35
- spec.add_dependency 'rest-client', '~> 2.0'
35
+ spec.add_dependency 'em-http-request', '~> 1.1'
36
+ spec.add_dependency 'em-synchrony', '~> 1.0'
36
37
  end
@@ -2,23 +2,23 @@
2
2
 
3
3
  module GemCheckUpdates
4
4
  class Gem
5
- RUBYGEMS_API = 'https://rubygems.org/api/v1/versions'
5
+ DEFAULT_SCOPE = GemCheckUpdates::VersionScope::MAJOR
6
6
 
7
- attr_reader :name,
8
- :latest_version,
9
- :current_version,
10
- :version_range
7
+ attr_accessor :name
8
+ attr_accessor :latest_version
9
+ attr_accessor :current_version
10
+ attr_accessor :version_range
11
11
 
12
12
  def initialize(name: nil,
13
13
  current_version: nil,
14
14
  version_range: nil,
15
- update_scope: GemCheckUpdates::VersionScope::MAJOR)
15
+ latest_version: nil,
16
+ update_scope: DEFAULT_SCOPE)
16
17
  @name = name
17
18
  @current_version = current_version
18
19
  @version_range = version_range
19
- @latest_version = nil
20
-
21
- check_update!(update_scope)
20
+ @latest_version = latest_version
21
+ @update_scope = update_scope
22
22
  end
23
23
 
24
24
  def update_available?
@@ -28,20 +28,7 @@ module GemCheckUpdates
28
28
  @latest_version > @current_version
29
29
  end
30
30
 
31
- def check_update!(update_scope)
32
- response = RestClient.get("#{RUBYGEMS_API}/#{name}.json")
33
- versions = JSON.parse(response.body)
34
-
35
- @latest_version = scoped_latest_version(versions, update_scope)
36
-
37
- self
38
- rescue StandardError => e
39
- GemCheckUpdates::Message.out("Failed to check version \"#{@name}\".".red)
40
- GemCheckUpdates::Message.out("\n\n")
41
- GemCheckUpdates::Message.out(e.message.red)
42
- end
43
-
44
- def scoped_latest_version(versions, scope)
31
+ def scoped_latest_version(versions)
45
32
  # Ignore pre release version (ex. beta, rc), and sort desc
46
33
  numbers = versions.map { |v| v['number'] }
47
34
  .select { |v| v.split('.').size < 4 }
@@ -49,7 +36,7 @@ module GemCheckUpdates
49
36
  .reverse
50
37
  current_major, current_minor = @current_version.split('.')
51
38
 
52
- case scope
39
+ case @update_scope
53
40
  when GemCheckUpdates::VersionScope::MINOR
54
41
  numbers.select { |n| n.split('.').first == current_major }.first
55
42
  when GemCheckUpdates::VersionScope::PATCH
@@ -2,12 +2,19 @@
2
2
 
3
3
  module GemCheckUpdates
4
4
  class Gemfile
5
- attr_reader :option, :file_backup, :gems
5
+ RUBYGEMS_API = 'https://rubygems.org/api/v1/versions'
6
+ CONCURRENCY = 5
7
+
8
+ attr_reader :option
9
+ attr_reader :file_backup
10
+ attr_reader :gems
6
11
 
7
12
  def initialize(option = GemCheckUpdates::Option.new)
8
13
  @option = option
9
14
  @file_backup = "#{option.file}.backup"
10
15
  @gems = parse(option.update_scope)
16
+
17
+ check_updates!
11
18
  end
12
19
 
13
20
  def backup
@@ -23,9 +30,7 @@ module GemCheckUpdates
23
30
  end
24
31
 
25
32
  def parse(update_scope)
26
- gems = Bundler::Definition.build(@option.file, nil, nil).dependencies.map do |gem|
27
- GemCheckUpdates::Message.out('.')
28
-
33
+ Bundler::Definition.build(@option.file, nil, nil).dependencies.map do |gem|
29
34
  name = gem.name
30
35
  version_range, version = gem.requirements_list.first.split(' ')
31
36
 
@@ -34,14 +39,28 @@ module GemCheckUpdates
34
39
  version_range: version_range,
35
40
  update_scope: update_scope)
36
41
  end
42
+ end
37
43
 
38
- GemCheckUpdates::Message.out("\n\n")
44
+ def check_updates!
45
+ EventMachine.synchrony do
46
+ 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)
39
49
 
40
- gems
50
+ gem.latest_version = gem.scoped_latest_version(versions)
51
+ GemCheckUpdates::Message.out('.')
52
+ end
53
+
54
+ GemCheckUpdates::Message.out("\n\n")
55
+ EventMachine.stop
56
+ end
57
+
58
+ @gems
41
59
  end
42
60
 
43
61
  def update
44
62
  gemfile_lines = []
63
+
45
64
  File.open(@option.file) do |current|
46
65
  current.each_line do |line|
47
66
  gemfile_lines << line
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module GemCheckUpdates
4
+ class RakeTask < Rake::TaskLib
5
+ attr_accessor :name
6
+ attr_accessor :argv
7
+
8
+ def initialize
9
+ @name = :gcu
10
+ @argv = []
11
+
12
+ define
13
+ end
14
+
15
+ def define
16
+ desc 'Check major updates of rubygems, and apply to Gemfile'
17
+ task(name) { run_task }
18
+ end
19
+
20
+ def run_task
21
+ GemCheckUpdates::Runner.run(argv)
22
+ end
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GemCheckUpdates
4
- VERSION = '0.2.1'
4
+ VERSION = '0.3.0'
5
5
  end
@@ -3,9 +3,14 @@
3
3
  require 'bundler'
4
4
  require 'fileutils'
5
5
  require 'optparse'
6
- require 'rest-client'
7
6
  require 'colored'
8
7
  require 'json'
8
+ require 'rake'
9
+ require 'rake/tasklib'
10
+ require 'em-http-request'
11
+ require 'em-synchrony'
12
+ require 'em-synchrony/em-http'
13
+ require 'em-synchrony/fiber_iterator'
9
14
 
10
15
  require 'gem_check_updates/version'
11
16
  require 'gem_check_updates/version_scope'
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.2.1
4
+ version: 0.3.0
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-23 00:00:00.000000000 Z
11
+ date: 2018-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -109,19 +109,33 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.2'
111
111
  - !ruby/object:Gem::Dependency
112
- name: rest-client
112
+ name: em-http-request
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '2.0'
117
+ version: '1.1'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '2.0'
124
+ version: '1.1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: em-synchrony
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.0'
125
139
  description: Automatically update and overwrite version of gems in Gemfile
126
140
  email:
127
141
  - mukopikmin@gmail.com
@@ -150,6 +164,7 @@ files:
150
164
  - lib/gem_check_updates/gemfile.rb
151
165
  - lib/gem_check_updates/message.rb
152
166
  - lib/gem_check_updates/option.rb
167
+ - lib/gem_check_updates/rake_task.rb
153
168
  - lib/gem_check_updates/runner.rb
154
169
  - lib/gem_check_updates/version.rb
155
170
  - lib/gem_check_updates/version_scope.rb