Skip to content

Commit 013f33b

Browse files
committed
Change language DSL to only allow strings.
1 parent b5531e8 commit 013f33b

File tree

2 files changed

+48
-45
lines changed

2 files changed

+48
-45
lines changed

Library/Homebrew/cask/lib/hbc/dsl.rb

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require "set"
2+
require "locale"
23

34
require "hbc/dsl/appcast"
45
require "hbc/dsl/base"
@@ -99,9 +100,10 @@ def homepage(homepage = nil)
99100
@homepage ||= homepage
100101
end
101102

102-
def language(*args, &block)
103+
def language(*args, default: false, &block)
103104
if !args.empty? && block_given?
104105
@language_blocks ||= {}
106+
@language_blocks.default = block if default
105107
@language_blocks[args] = block
106108
else
107109
language_eval
@@ -114,29 +116,15 @@ def language_eval
114116

115117
return unless instance_variable_defined?(:@language_blocks)
116118

117-
default_key = @language_blocks.keys.detect { |key| key.include?(:default) }
119+
MacOS.languages.map(&Locale.method(:parse)).any? { |locale|
120+
key = @language_blocks.keys.detect { |strings|
121+
strings.any? { |string| locale.include?(string) }
122+
}
118123

119-
MacOS.languages.each do |language|
120-
@language_blocks.each do |regexes_or_strings, block|
121-
if regexes_or_strings.include?(:default)
122-
regexes_or_strings = regexes_or_strings - [:default] + [%r{^en}]
123-
end
124+
return @language = @language_blocks[key].call unless key.nil?
125+
}
124126

125-
regexes_or_strings.each do |regex_or_string|
126-
if regex_or_string.class == language.class
127-
next unless regex_or_string == language
128-
else
129-
next unless regex_or_string =~ language
130-
end
131-
132-
@language = block.call
133-
return
134-
end
135-
end
136-
end
137-
138-
# fallback to :default
139-
@language = default_key.nil? ? nil : @language_blocks[default_key].call
127+
@language = @language_blocks.default.call
140128
end
141129

142130
def url(*args, &block)

Library/Homebrew/cask/test/cask/dsl_test.rb

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -124,36 +124,51 @@
124124

125125
describe "language stanza" do
126126
it "allows multilingual casks" do
127-
cask = lambda {
127+
cask = lambda do
128128
Hbc::Cask.new("cask-with-apps") do
129-
language "FIRST_LANGUAGE" do
130-
:first
129+
language "zh" do
130+
sha256 "abc123"
131+
"zh-CN"
131132
end
132133

133-
language %r{SECOND_LANGUAGE} do
134-
:second
134+
language "en-US", default: true do
135+
sha256 "xyz789"
136+
"en-US"
135137
end
136138

137-
language :default do
138-
:default
139-
end
139+
url "https://example.org/#{language}.zip"
140140
end
141-
}
142-
143-
MacOS.stubs(languages: ["FIRST_LANGUAGE"])
144-
cask.call.language.must_equal :first
145-
146-
MacOS.stubs(languages: ["SECOND_LANGUAGE"])
147-
cask.call.language.must_equal :second
148-
149-
MacOS.stubs(languages: ["THIRD_LANGUAGE"])
150-
cask.call.language.must_equal :default
151-
152-
MacOS.stubs(languages: ["THIRD_LANGUAGE", "SECOND_LANGUAGE", "FIRST_LANGUAGE"])
153-
cask.call.language.must_equal :second
141+
end
154142

155-
MacOS.stubs(languages: ["THIRD_LANGUAGE", "FIRST_LANGUAGE", "SECOND_LANGUAGE"])
156-
cask.call.language.must_equal :first
143+
MacOS.stubs(languages: ["zh"])
144+
cask.call.language.must_equal "zh-CN"
145+
cask.call.sha256.must_equal "abc123"
146+
cask.call.url.to_s.must_equal "https://example.org/zh-CN.zip"
147+
148+
MacOS.stubs(languages: ["zh-XX"])
149+
cask.call.language.must_equal "zh-CN"
150+
cask.call.sha256.must_equal "abc123"
151+
cask.call.url.to_s.must_equal "https://example.org/zh-CN.zip"
152+
153+
MacOS.stubs(languages: ["en"])
154+
cask.call.language.must_equal "en-US"
155+
cask.call.sha256.must_equal "xyz789"
156+
cask.call.url.to_s.must_equal "https://example.org/en-US.zip"
157+
158+
MacOS.stubs(languages: ["xx-XX"])
159+
cask.call.language.must_equal "en-US"
160+
cask.call.sha256.must_equal "xyz789"
161+
cask.call.url.to_s.must_equal "https://example.org/en-US.zip"
162+
163+
MacOS.stubs(languages: ["xx-XX", "zh", "en"])
164+
cask.call.language.must_equal "zh-CN"
165+
cask.call.sha256.must_equal "abc123"
166+
cask.call.url.to_s.must_equal "https://example.org/zh-CN.zip"
167+
168+
MacOS.stubs(languages: ["xx-XX", "en-US", "zh"])
169+
cask.call.language.must_equal "en-US"
170+
cask.call.sha256.must_equal "xyz789"
171+
cask.call.url.to_s.must_equal "https://example.org/en-US.zip"
157172
end
158173
end
159174

0 commit comments

Comments
 (0)