bosh_common 1.2583.0 → 1.2596.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,22 @@
1
+ require 'common/version/semi_semantic_version'
2
+
3
+ module Bosh::Common::Version
4
+ class BoshVersion < SemiSemanticVersion
5
+
6
+ def self.parse(version)
7
+ raise ArgumentError, 'Invalid Version: nil' if version.nil?
8
+ version = version.to_s
9
+
10
+ #discard anything after a space, including the space, to support compound bosh versions
11
+ version = version.split(' ', 2)[0] if version =~ / /
12
+
13
+ self.new(SemiSemantic::Version.parse(version))
14
+ end
15
+
16
+ private
17
+
18
+ def default_post_release_segment
19
+ raise NotImplementedError, 'Bosh post-release versions unsupported'
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,35 @@
1
+ require 'common/version/semi_semantic_version'
2
+
3
+ module Bosh::Common::Version
4
+ class ReleaseVersion < SemiSemanticVersion
5
+
6
+ DEFAULT_POST_RELEASE_SEGMENT = SemiSemantic::VersionSegment.parse('dev.1')
7
+
8
+ def self.parse(version)
9
+ raise ArgumentError, 'Invalid Version: nil' if version.nil?
10
+ version = version.to_s
11
+
12
+ #convert old-style dev version suffix to new dev post-release segment
13
+ matches = /\A(?<release>.*)(\.(?<dev>[0-9]+)-dev)\z/.match(version)
14
+ unless matches.nil?
15
+ version = matches[:release] + "+dev." + matches[:dev]
16
+ end
17
+
18
+ self.new(SemiSemantic::Version.parse(version))
19
+ end
20
+
21
+ def to_old_format
22
+ matches = /\A(?<release>.*)(\+dev\.(?<dev>[0-9]+))\z/.match(to_s)
23
+ if matches.nil?
24
+ return nil
25
+ end
26
+ matches[:release] + '.' + matches[:dev] + "-dev"
27
+ end
28
+
29
+ private
30
+
31
+ def default_post_release_segment
32
+ DEFAULT_POST_RELEASE_SEGMENT
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,34 @@
1
+ require 'semi_semantic/version'
2
+ require 'common/version/release_version'
3
+
4
+ module Bosh::Common::Version
5
+ class ReleaseVersionList < VersionList
6
+
7
+ # @param [Array<#version>] Collection of version strings
8
+ # @param [class] Version type to parse as (ex: SemiSemantic::Version, ReleaseVersion, StemcellVersion, BoshVersion)
9
+ def self.parse(versions)
10
+ self.new(VersionList.parse(versions, ReleaseVersion))
11
+ end
12
+
13
+ # @param [#version] ReleaseVersion from which to rebase the post-release segment
14
+ def rebase(version)
15
+ raise TypeError, "Failed to Rebase - Invalid Version Type: #{version.class}" unless version.is_a?(ReleaseVersion)
16
+
17
+ # Can only rebase versions with a post-release segment
18
+ if version.version.post_release.nil?
19
+ raise ArgumentError, "Failed to Rebase - Invalid Version: #{version.inspect}"
20
+ end
21
+
22
+ latest = latest_with_pre_release(version)
23
+ if latest
24
+ if latest.version.post_release.nil?
25
+ latest.default_post_release
26
+ else
27
+ latest.increment_post_release
28
+ end
29
+ else
30
+ version.default_post_release
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,62 @@
1
+ require 'semi_semantic/version'
2
+ require 'common/version/version_list'
3
+
4
+ module Bosh::Common::Version
5
+ class UnavailableMethodError < StandardError; end
6
+
7
+ class SemiSemanticVersion
8
+ include Comparable
9
+
10
+ DEFAULT_POST_RELEASE_SEGMENT = SemiSemantic::VersionSegment.parse('build.1')
11
+
12
+ attr_reader :version
13
+
14
+ def self.parse(version)
15
+ raise ArgumentError, 'Invalid Version: nil' if version.nil?
16
+ version = version.to_s
17
+
18
+ self.new(SemiSemantic::Version.parse(version))
19
+ end
20
+
21
+ def self.parse_list(versions)
22
+ VersionList.parse(versions, self)
23
+ end
24
+
25
+ def self.parse_and_compare(a, b)
26
+ self.parse(a) <=> self.parse(b)
27
+ end
28
+
29
+ def initialize(version)
30
+ raise ArgumentError, "Invalid Version Type: #{version.class}" unless version.is_a?(SemiSemantic::Version)
31
+ @version = version
32
+ @version.freeze
33
+ end
34
+
35
+ def default_post_release
36
+ self.class.new(SemiSemantic::Version.new(@version.release, @version.pre_release, default_post_release_segment))
37
+ end
38
+
39
+ def increment_post_release
40
+ raise UnavailableMethodError, 'Failed to increment: post-release is nil' if @version.post_release.nil?
41
+ self.class.new(SemiSemantic::Version.new(@version.release, @version.pre_release, @version.post_release.increment))
42
+ end
43
+
44
+ def increment_release
45
+ self.class.new(SemiSemantic::Version.new(@version.release.increment))
46
+ end
47
+
48
+ def <=>(other)
49
+ @version <=> other.version
50
+ end
51
+
52
+ def to_s
53
+ @version.to_s
54
+ end
55
+
56
+ private
57
+
58
+ def default_post_release_segment
59
+ DEFAULT_POST_RELEASE_SEGMENT
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,22 @@
1
+ require 'common/version/semi_semantic_version'
2
+
3
+ module Bosh::Common::Version
4
+ class StemcellVersion < SemiSemanticVersion
5
+
6
+ def self.parse(version)
7
+ raise ArgumentError, 'Invalid Version: nil' if version.nil?
8
+ version = version.to_s
9
+
10
+ #replace underscores with periods to maintain reverse compatibility with stemcell versions
11
+ version = version.gsub('_', '.')
12
+
13
+ self.new(SemiSemantic::Version.parse(version))
14
+ end
15
+
16
+ private
17
+
18
+ def default_post_release_segment
19
+ raise NotImplementedError, 'Stemcell post-release versions unsupported'
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,45 @@
1
+ require 'semi_semantic/version'
2
+
3
+ module Bosh::Common::Version
4
+ class VersionList
5
+ include Enumerable
6
+
7
+ attr_reader :versions
8
+
9
+ alias :latest :max
10
+
11
+ # @param [Array<#version>] Collection of version strings
12
+ # @param [class] Version type to parse as (ex: SemiSemanticVersion, ReleaseVersion, StemcellVersion, BoshVersion)
13
+ def self.parse(versions, version_type)
14
+ raise TypeError, "Failed to Parse - Invalid Version Type: '#{version_type.inspect}'" unless version_type <= SemiSemanticVersion
15
+ self.new(versions.map { |v| version_type.parse(v) })
16
+ end
17
+
18
+ # @param [Array<#version>] Collection of SemiSemanticVersion objects
19
+ def initialize(versions)
20
+ @versions = versions
21
+ end
22
+
23
+ # Gets the latest version with the same release and pre-release version as the specified version
24
+ # @param [#version] SemiSemanticVersion object
25
+ def latest_with_pre_release(version)
26
+ raise TypeError, "Invalid Version Type: #{version.class}" unless version.kind_of?(SemiSemanticVersion)
27
+ @versions.select { |v|
28
+ v.version.release == version.version.release && v.version.pre_release == version.version.pre_release
29
+ }.max
30
+ end
31
+
32
+ # Gets the latest version with the same release version as the specified version
33
+ # @param [#version] SemiSemanticVersion object
34
+ def latest_with_release(version)
35
+ raise TypeError, "Invalid Version Type: #{version.class}" unless version.kind_of?(SemiSemanticVersion)
36
+ @versions.select { |v|
37
+ v.version.release == version.version.release
38
+ }.max
39
+ end
40
+
41
+ def each(&block)
42
+ @versions.each(&block)
43
+ end
44
+ end
45
+ end
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Common
3
- VERSION = '1.2583.0'
3
+ VERSION = '1.2596.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh_common
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2583.0
4
+ version: 1.2596.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-30 00:00:00.000000000 Z
12
+ date: 2014-06-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: semi_semantic
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: 1.1.0
30
30
  description: ! 'BOSH common
31
31
 
32
- b96a92'
32
+ 3c1470'
33
33
  email: support@cloudfoundry.com
34
34
  executables: []
35
35
  extensions: []
@@ -50,7 +50,12 @@ files:
50
50
  - lib/common/thread_formatter.rb
51
51
  - lib/common/thread_pool.rb
52
52
  - lib/common/version.rb
53
- - lib/common/version_number.rb
53
+ - lib/common/version/bosh_version.rb
54
+ - lib/common/version/release_version.rb
55
+ - lib/common/version/release_version_list.rb
56
+ - lib/common/version/semi_semantic_version.rb
57
+ - lib/common/version/stemcell_version.rb
58
+ - lib/common/version/version_list.rb
54
59
  - README
55
60
  homepage: https://github.com/cloudfoundry/bosh
56
61
  licenses:
@@ -73,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
78
  version: '0'
74
79
  segments:
75
80
  - 0
76
- hash: 2863706142254409003
81
+ hash: -2801231138931334462
77
82
  requirements: []
78
83
  rubyforge_project:
79
84
  rubygems_version: 1.8.23.2
@@ -1,37 +0,0 @@
1
- require 'semi_semantic/version'
2
-
3
- module Bosh::Common
4
- class VersionNumber
5
- DEFAULT_DEV_RELEASE_SEGMENT = SemiSemantic::VersionSegment.parse('dev.1')
6
-
7
- def self.parse(version)
8
- raise ArgumentError, 'Invalid Version: nil' if version.nil?
9
- #raise ArgumentError, "Invalid Version Type: #{version.class}" if version.is_a?(String)
10
- version = version.to_s
11
-
12
- #discard anything after a space, including the space, to support compound bosh versions
13
- version = version.split(' ', 2)[0] if version =~ / /
14
-
15
- #convert old-style dev version suffix to new dev post-release segment
16
- matches = /\A(?<release>.*)(\.(?<dev>[0-9]+)-dev)\z/.match(version)
17
- unless matches.nil?
18
- version = matches[:release] + "+dev." + matches[:dev]
19
- end
20
-
21
- #replace underscores with periods to maintain reverse compatibility with stemcell versions
22
- version = version.gsub('_', '.')
23
-
24
- SemiSemantic::Version.parse(version)
25
- end
26
-
27
- # @param [Array<#version>] Collection of version strings
28
- def self.parse_list(versions)
29
- versions.map { |v| self.parse(v) }
30
- end
31
-
32
- # @param [Array<#version>] Collection of version strings
33
- def self.latest(versions)
34
- versions.max
35
- end
36
- end
37
- end