diff options
| author | Jack Nagel | 2012-07-10 21:45:17 -0500 |
|---|---|---|
| committer | Jack Nagel | 2012-08-18 11:12:09 -0500 |
| commit | db7a800130a0fdfb0fa325d73846a7af207286a2 (patch) | |
| tree | 9ef71407041c9425783164caead13e465de64581 /Library | |
| parent | e53bb4f18bf932fa14f0187ecdf115bc35c82145 (diff) | |
| download | homebrew-db7a800130a0fdfb0fa325d73846a7af207286a2.tar.bz2 | |
Add support for custom version schemes
A version scheme is a class that inherits from Version and reimplements
Version#<=>. This will allow formulae to specify a custom comparison
method that will be used instead of the default, for cases where the
default is insufficient.
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/formula_support.rb | 13 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_formula.rb | 7 | ||||
| -rw-r--r-- | Library/Homebrew/test/testball.rb | 14 | ||||
| -rw-r--r-- | Library/Homebrew/version.rb | 21 |
4 files changed, 50 insertions, 5 deletions
diff --git a/Library/Homebrew/formula_support.rb b/Library/Homebrew/formula_support.rb index 5c957f422..ec47639e3 100644 --- a/Library/Homebrew/formula_support.rb +++ b/Library/Homebrew/formula_support.rb @@ -52,11 +52,14 @@ class SoftwareSpec end def version val=nil - if val.nil? - @version ||= Version.parse(@url) - else - @version = Version.new(val) - end + @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) + end end def mirror val diff --git a/Library/Homebrew/test/test_formula.rb b/Library/Homebrew/test/test_formula.rb index 4f9bb3930..5c6b78772 100644 --- a/Library/Homebrew/test/test_formula.rb +++ b/Library/Homebrew/test/test_formula.rb @@ -278,4 +278,11 @@ class FormulaTests < Test::Unit::TestCase when :mountainlion then '8badf00d8badf00d8badf00d8badf00d8badf00d' end, f.bottle.checksum.hexdigest end + + def test_custom_version_scheme + f = CustomVersionSchemeTestBall.new + + assert_version_equal '1.0', f.version + assert_instance_of CustomVersionScheme, f.version + end end diff --git a/Library/Homebrew/test/testball.rb b/Library/Homebrew/test/testball.rb index c7118d3ee..8e4c745d3 100644 --- a/Library/Homebrew/test/testball.rb +++ b/Library/Homebrew/test/testball.rb @@ -271,3 +271,17 @@ class RevisedBottleSpecTestBall < Formula super "revisedbottlespectestball" end end + +class CustomVersionScheme < Version +end + +class CustomVersionSchemeTestBall < Formula + homepage 'http://example.com' + url 'file:///foo.com/testball-0.1.tbz' + sha1 '482e737739d946b7c8cbaf127d9ee9c148b999f5' + version '1.0' => CustomVersionScheme + + def initialize name=nil + super "customversionschemetestball" + end +end diff --git a/Library/Homebrew/version.rb b/Library/Homebrew/version.rb index 878832f67..2591f74e3 100644 --- a/Library/Homebrew/version.rb +++ b/Library/Homebrew/version.rb @@ -126,3 +126,24 @@ 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 |
