Simplify custom version scheme handling

This commit is contained in:
Jack Nagel 2013-06-28 21:17:12 -05:00
parent edbc0fadd1
commit 74b60a561c
2 changed files with 13 additions and 28 deletions

View File

@ -52,13 +52,11 @@ class SoftwareSpec
end end
def version val=nil def version val=nil
@version ||= case val @version ||=
when nil then Version.parse(@url) case val
when Hash when nil then Version.parse(@url)
key, value = val.shift when Hash then Version.new_with_scheme(*val.shift)
scheme = VersionSchemeDetector.new(value).detect else Version.new(val)
scheme.new(key)
else Version.new(val)
end end
end end

View File

@ -146,6 +146,14 @@ class Version
end end
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) def initialize(val, detected=false)
@version = val.to_s @version = val.to_s
@detected_from_url = detected @detected_from_url = detected
@ -295,24 +303,3 @@ class Version
return m.captures.first unless m.nil? return m.captures.first unless m.nil?
end end
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