diff --git a/Library/Homebrew/cask/lib/hbc/dsl.rb b/Library/Homebrew/cask/lib/hbc/dsl.rb index 624d62a7607e5f834e52af72706771df35cd9ee5..bae395726f3ca7859a329cb7a3f8a2d6378cc93b 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 1e13d49f323a14f5226c52dd75c28493dda91903..f6fca3d2d1b9e2d123a45c2ee5d1b7f7a0ece74b 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