aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/cask/lib/hbc/dsl.rb36
-rw-r--r--Library/Homebrew/cask/test/cask/dsl_test.rb6
2 files changed, 29 insertions, 13 deletions
diff --git a/Library/Homebrew/cask/lib/hbc/dsl.rb b/Library/Homebrew/cask/lib/hbc/dsl.rb
index 624d62a76..bae395726 100644
--- a/Library/Homebrew/cask/lib/hbc/dsl.rb
+++ b/Library/Homebrew/cask/lib/hbc/dsl.rb
@@ -101,27 +101,37 @@ module Hbc
def language(*args, &block)
if !args.empty? && block_given?
- args.each do |arg|
- MacOS.languages.each_with_index do |l, index|
- next unless arg == :default || l.match(arg)
- next unless @language.nil? || @language[:level].nil? || @language[:level] > index
- @language = {
- block: block,
- level: index,
- }
- end
- end
+ @language_blocks ||= {}
+ @language_blocks[args] = block
else
language_eval
@language
end
end
-
def language_eval
- if @language.is_a?(Hash) && @language.key?(:block)
- @language = @language[:block].call
+ return if instance_variable_defined?(:@language)
+
+ return unless instance_variable_defined?(:@language_blocks)
+
+ default_key = @language_blocks.keys.detect { |key| key.include?(:default) }
+
+ MacOS.languages.each do |language|
+ @language_blocks.each do |regexes_or_strings, block|
+ if regexes_or_strings.include?(:default)
+ regexes_or_strings = regexes_or_strings - [:default] + [%r{^en}]
+ end
+
+ case language
+ when *regexes_or_strings
+ @language = block.call
+ return
+ end
+ end
end
+
+ # fallback to :default
+ @language = default_key.nil? ? nil : @language_blocks[default_key].call
end
def url(*args, &block)
diff --git a/Library/Homebrew/cask/test/cask/dsl_test.rb b/Library/Homebrew/cask/test/cask/dsl_test.rb
index 1e13d49f3..f6fca3d2d 100644
--- a/Library/Homebrew/cask/test/cask/dsl_test.rb
+++ b/Library/Homebrew/cask/test/cask/dsl_test.rb
@@ -148,6 +148,12 @@ describe Hbc::DSL do
MacOS.stubs(languages: ["THIRD_LANGUAGE"])
cask.call.language.must_equal :default
+
+ MacOS.stubs(languages: ["THIRD_LANGUAGE", "SECOND_LANGUAGE", "FIRST_LANGUAGE"])
+ cask.call.language.must_equal :second
+
+ MacOS.stubs(languages: ["THIRD_LANGUAGE", "FIRST_LANGUAGE", "SECOND_LANGUAGE"])
+ cask.call.language.must_equal :first
end
end