Module: QB::Package::Version::From
- Defined in:
- lib/qb/package/version/from.rb
Overview
Module of factory methods to create QB::Package::Version instances from other objects (strings, QB::Package::Version, etc.)
Class Method Summary collapse
-
.class_for(**values) ⇒ Class<QB::Package::Version>
Get class to instantiate for prop values - either QB::Package::Version or a specialized subclass like Leveled.
-
.docker_tag(version) ⇒ QB::Package::Version
Parse Docker image tag version and create an instance.
-
.gemver(version) ⇒ QB::Package::Version
Create an instance from a Gem-style version.
- .object(object) ⇒ Object
-
.prop_values(**values) ⇒ QB::Package::Version
Instantiate an instance from prop values, using From.class_for to choose the possible specialized class.
- .semver(version) ⇒ Object
-
.string(string) ⇒ QB::Package::Version
Parse string version into an instance.
Class Method Details
.class_for(**values) ⇒ Class<QB::Package::Version>
Get class to instantiate for prop values - either QB::Package::Version or a specialized subclass like Leveled.
26 27 28 29 30 31 32 |
# File 'lib/qb/package/version/from.rb', line 26 def self.class_for **values if QB::Package::Version::Leveled.level_for **values QB::Package::Version::Leveled else QB::Package::Version end end |
.docker_tag(version) ⇒ QB::Package::Version
Parse Docker image tag version and create an instance.
119 120 121 |
# File 'lib/qb/package/version/from.rb', line 119 def self.docker_tag version string( version.gsub( '_', '+' ) ).merge raw: version end |
.gemver(version) ⇒ QB::Package::Version
Create an instance from a Gem-style version.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/qb/package/version/from.rb', line 54 def self.gemver version version = Gem::Version.new( version ) if version.is_a?( String ) # release segments are everything before a string release_segments = version.segments.take_while { |seg| !seg.is_a?(String) } # We don't support > 3 release segments to make life somewhat # reasonable. Yeah, I think I've seen projects do it. We'll cross that # bridge if and when we get to it. if release_segments.length > 3 raise ArgumentError, "We don't handle releases with more than 3 segments " + "(found #{ release_segments.inspect } in #{ version })" end prerelease_segments = version.segments[release_segments.length..-1] prop_values \ raw: version.to_s, major: release_segments[0] || 0, minor: release_segments[1] || 0, patch: release_segments[2] || 0, prerelease: prerelease_segments, build: [] end |
.object(object) ⇒ Object
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/qb/package/version/from.rb', line 145 def self.object object case object when String string object when Hash prop_values **object when Gem::Version gem_version object else raise TypeError.new binding.erb " `object` must be String, Hash or Gem::Version\n \n Found:\n \n <%= object.pretty_inspect %>\n \n END\n end\nend\n" |
.prop_values(**values) ⇒ QB::Package::Version
Instantiate an instance from prop values, using class_for to choose the possible specialized class.
43 44 45 |
# File 'lib/qb/package/version/from.rb', line 43 def self.prop_values **values class_for( **values ).new **values end |
.semver(version) ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/qb/package/version/from.rb', line 85 def self.semver version stmt = NRSER.squish " var Semver = require('semver');\n \n console.log(\n JSON.stringify(\n Semver(\#{ JSON.dump version })\n )\n );\n END\n \n parse = JSON.load Cmds.new(\n \"node --eval %s\", args: [stmt], chdir: QB::ROOT\n ).out!\n \n prop_values \\\n raw: version,\n major: parse['major'],\n minor: parse['minor'],\n patch: parse['patch'],\n prerelease: parse['prerelease'],\n build: parse['build']\nend\n" |
.string(string) ⇒ QB::Package::Version
Parse string version into an instance. Accept Semver, Ruby Gem and Docker image tag formats.
132 133 134 135 136 137 138 139 140 |
# File 'lib/qb/package/version/from.rb', line 132 def self.string string if string.include? '_' docker_tag string elsif string.include?( '-' ) || string.include?( '+' ) semver string else gem_version string end end |