ensure_version_bump 0.1.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.
@@ -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: []