Simplify custom version scheme handling
This commit is contained in:
parent
edbc0fadd1
commit
74b60a561c
@ -52,13 +52,11 @@ class SoftwareSpec
|
||||
end
|
||||
|
||||
def version val=nil
|
||||
@version ||= case val
|
||||
when nil then Version.parse(@url)
|
||||
when Hash
|
||||
key, value = val.shift
|
||||
scheme = VersionSchemeDetector.new(value).detect
|
||||
scheme.new(key)
|
||||
else Version.new(val)
|
||||
@version ||=
|
||||
case val
|
||||
when nil then Version.parse(@url)
|
||||
when Hash then Version.new_with_scheme(*val.shift)
|
||||
else Version.new(val)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -146,6 +146,14 @@ class Version
|
||||
end
|
||||
end
|
||||
|
||||
def self.new_with_scheme(value, scheme)
|
||||
if Class === scheme && scheme.ancestors.include?(Version)
|
||||
scheme.new(value)
|
||||
else
|
||||
raise TypeError, "Unknown version scheme #{scheme.inspect}"
|
||||
end
|
||||
end
|
||||
|
||||
def initialize(val, detected=false)
|
||||
@version = val.to_s
|
||||
@detected_from_url = detected
|
||||
@ -295,24 +303,3 @@ class Version
|
||||
return m.captures.first unless m.nil?
|
||||
end
|
||||
end
|
||||
|
||||
class VersionSchemeDetector
|
||||
def initialize scheme
|
||||
@scheme = scheme
|
||||
end
|
||||
|
||||
def detect
|
||||
if @scheme.is_a? Class and @scheme.ancestors.include? Version
|
||||
@scheme
|
||||
elsif @scheme.is_a? Symbol then detect_from_symbol
|
||||
else
|
||||
raise "Unknown version scheme #{@scheme} was requested."
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def detect_from_symbol
|
||||
raise "Unknown version scheme #{@scheme} was requested."
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user