gem_check_updates 0.2.1 → 0.3.0

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: 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