ensure_version_bump 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bca19b1f3c05c6149c6adeaaef4b74c1b83172d7
4
+ data.tar.gz: 69e8ba59000eff636f49d1643310daca64569173
5
+ SHA512:
6
+ metadata.gz: 0df9e0f8a9b758b0bef279278e02cd96b986548370ef7749f9ab1ae7adf7f7362c0d2c105850f1854a5a0f0a69227a2d5b0ced04bf634471b8d67003b1728b62
7
+ data.tar.gz: afe97b114397c74d772999c8c3488d2ebc3aa50801d40e85de8cacbcefa717ddd261a1652f7ad3d133e81ddd5ba3134ad82c5faf0d702c01130dd8e763d609bd
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'colorize'
4
+ require 'forwardable'
5
+
6
+ require_relative '../lib/ensure_version_bump'
7
+
8
+ module CLI
9
+ def run(gem_name)
10
+ state = EnsureVersionBump.new(gem_name)
11
+ (state.success? ? Success.new(state) : Failure.new(state)).run
12
+ end
13
+ module_function :run
14
+
15
+ class Outcome
16
+ extend Forwardable
17
+ def_delegators :@state, :local, :remote
18
+
19
+ def initialize(state)
20
+ @state = state
21
+ end
22
+
23
+ def run
24
+ puts message
25
+ Kernel.exit(exit_code)
26
+ end
27
+
28
+ private
29
+
30
+ def message
31
+ "#{status} Local version (#{local.version}) #{comparison} than remote " \
32
+ "(#{remote.version})."
33
+ end
34
+ end # class Outcome
35
+ private_constant :Outcome
36
+
37
+ class Success < Outcome
38
+ private
39
+
40
+ def status
41
+ '[OK]'.green
42
+ end
43
+
44
+ def comparison
45
+ 'higher'
46
+ end
47
+
48
+ def exit_code
49
+ 0
50
+ end
51
+ end # class Success
52
+
53
+ class Failure < Outcome
54
+ def status
55
+ '[FAIL]'.red
56
+ end
57
+
58
+ def comparison
59
+ 'not higher'
60
+ end
61
+
62
+ def exit_code
63
+ 1
64
+ end
65
+ end # class Failure
66
+ end # module CLI
67
+
68
+ if ARGV.count != 1
69
+ puts 'Usage: bundle exec ensure_version_bump CURRENT_GEM_NAME'
70
+ Kernel.exit(2)
71
+ end
72
+ CLI.run(ARGV[0])
@@ -0,0 +1,69 @@
1
+ require 'forwardable'
2
+ require 'json'
3
+ require 'net/http'
4
+
5
+ class EnsureVersionBump
6
+ attr_reader :local, :remote
7
+
8
+ def initialize(gem_name)
9
+ @local = Local.new(gem_name)
10
+ @remote = Remote.new(gem_name)
11
+ end
12
+
13
+ def success?
14
+ local.version > remote.version
15
+ end
16
+
17
+ private
18
+
19
+ def compare
20
+ local_version > remote_version
21
+ end
22
+
23
+ def local_version
24
+ Gem.loaded_specs[name].version
25
+ end
26
+
27
+ class Base
28
+ attr_reader :gem_name
29
+
30
+ def initialize(gem_name)
31
+ @gem_name = gem_name
32
+ end
33
+ end # class Base
34
+ private_constant :Base
35
+
36
+ class Local < Base
37
+ def version
38
+ Gem.loaded_specs[gem_name].version
39
+ end
40
+ end # class Local
41
+
42
+ class Remote < Base
43
+ extend Forwardable
44
+ def_delegators :url, :host, :port
45
+
46
+ def version
47
+ @version ||= begin
48
+ response_version = JSON.parse(api_response.body).fetch('version')
49
+ Gem::Version.new(response_version == 'unknown' ? 0 : response_version)
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ def api_response
56
+ Net::HTTP.start(host, port, use_ssl: true) do |http|
57
+ http.request(Net::HTTP::Get.new(api_endpoint))
58
+ end
59
+ end
60
+
61
+ def url
62
+ @url ||= URI.parse(api_endpoint)
63
+ end
64
+
65
+ def api_endpoint
66
+ "https://rubygems.org/api/v1/versions/#{gem_name}/latest.json"
67
+ end
68
+ end # class Remote
69
+ end # class EnsureVersionBump
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ensure_version_bump
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Marcin Wyszynski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.8'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.8.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.8'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.8.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: bundler
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.14'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.14.6
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.14'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.14.6
53
+ - !ruby/object:Gem::Dependency
54
+ name: rake
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '12.0'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '12.0'
67
+ description: CI helper for Ruby gems to ensure version bump
68
+ email:
69
+ executables:
70
+ - ensure_version_bump
71
+ extensions: []
72
+ extra_rdoc_files: []
73
+ files:
74
+ - bin/ensure_version_bump
75
+ - lib/ensure_version_bump.rb
76
+ homepage: https://github.com/marcinwyszynski/ensure_version_bump
77
+ licenses:
78
+ - MIT
79
+ metadata: {}
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubyforge_project:
96
+ rubygems_version: 2.6.12
97
+ signing_key:
98
+ specification_version: 4
99
+ summary: CI helper for Ruby gems to ensure version bump
100
+ test_files: []