Change language DSL to only allow strings.
This commit is contained in:
parent
b5531e8ec1
commit
013f33be44
@ -1,4 +1,5 @@
|
|||||||
require "set"
|
require "set"
|
||||||
|
require "locale"
|
||||||
|
|
||||||
require "hbc/dsl/appcast"
|
require "hbc/dsl/appcast"
|
||||||
require "hbc/dsl/base"
|
require "hbc/dsl/base"
|
||||||
@ -99,9 +100,10 @@ module Hbc
|
|||||||
@homepage ||= homepage
|
@homepage ||= homepage
|
||||||
end
|
end
|
||||||
|
|
||||||
def language(*args, &block)
|
def language(*args, default: false, &block)
|
||||||
if !args.empty? && block_given?
|
if !args.empty? && block_given?
|
||||||
@language_blocks ||= {}
|
@language_blocks ||= {}
|
||||||
|
@language_blocks.default = block if default
|
||||||
@language_blocks[args] = block
|
@language_blocks[args] = block
|
||||||
else
|
else
|
||||||
language_eval
|
language_eval
|
||||||
@ -114,29 +116,15 @@ module Hbc
|
|||||||
|
|
||||||
return unless instance_variable_defined?(:@language_blocks)
|
return unless instance_variable_defined?(:@language_blocks)
|
||||||
|
|
||||||
default_key = @language_blocks.keys.detect { |key| key.include?(:default) }
|
MacOS.languages.map(&Locale.method(:parse)).any? { |locale|
|
||||||
|
key = @language_blocks.keys.detect { |strings|
|
||||||
|
strings.any? { |string| locale.include?(string) }
|
||||||
|
}
|
||||||
|
|
||||||
MacOS.languages.each do |language|
|
return @language = @language_blocks[key].call unless key.nil?
|
||||||
@language_blocks.each do |regexes_or_strings, block|
|
}
|
||||||
if regexes_or_strings.include?(:default)
|
|
||||||
regexes_or_strings = regexes_or_strings - [:default] + [%r{^en}]
|
|
||||||
end
|
|
||||||
|
|
||||||
regexes_or_strings.each do |regex_or_string|
|
@language = @language_blocks.default.call
|
||||||
if regex_or_string.class == language.class
|
|
||||||
next unless regex_or_string == language
|
|
||||||
else
|
|
||||||
next unless regex_or_string =~ language
|
|
||||||
end
|
|
||||||
|
|
||||||
@language = block.call
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# fallback to :default
|
|
||||||
@language = default_key.nil? ? nil : @language_blocks[default_key].call
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def url(*args, &block)
|
def url(*args, &block)
|
||||||
|
|||||||
@ -124,36 +124,51 @@ describe Hbc::DSL do
|
|||||||
|
|
||||||
describe "language stanza" do
|
describe "language stanza" do
|
||||||
it "allows multilingual casks" do
|
it "allows multilingual casks" do
|
||||||
cask = lambda {
|
cask = lambda do
|
||||||
Hbc::Cask.new("cask-with-apps") do
|
Hbc::Cask.new("cask-with-apps") do
|
||||||
language "FIRST_LANGUAGE" do
|
language "zh" do
|
||||||
:first
|
sha256 "abc123"
|
||||||
|
"zh-CN"
|
||||||
end
|
end
|
||||||
|
|
||||||
language %r{SECOND_LANGUAGE} do
|
language "en-US", default: true do
|
||||||
:second
|
sha256 "xyz789"
|
||||||
|
"en-US"
|
||||||
end
|
end
|
||||||
|
|
||||||
language :default do
|
url "https://example.org/#{language}.zip"
|
||||||
:default
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
}
|
end
|
||||||
|
|
||||||
MacOS.stubs(languages: ["FIRST_LANGUAGE"])
|
MacOS.stubs(languages: ["zh"])
|
||||||
cask.call.language.must_equal :first
|
cask.call.language.must_equal "zh-CN"
|
||||||
|
cask.call.sha256.must_equal "abc123"
|
||||||
|
cask.call.url.to_s.must_equal "https://example.org/zh-CN.zip"
|
||||||
|
|
||||||
MacOS.stubs(languages: ["SECOND_LANGUAGE"])
|
MacOS.stubs(languages: ["zh-XX"])
|
||||||
cask.call.language.must_equal :second
|
cask.call.language.must_equal "zh-CN"
|
||||||
|
cask.call.sha256.must_equal "abc123"
|
||||||
|
cask.call.url.to_s.must_equal "https://example.org/zh-CN.zip"
|
||||||
|
|
||||||
MacOS.stubs(languages: ["THIRD_LANGUAGE"])
|
MacOS.stubs(languages: ["en"])
|
||||||
cask.call.language.must_equal :default
|
cask.call.language.must_equal "en-US"
|
||||||
|
cask.call.sha256.must_equal "xyz789"
|
||||||
|
cask.call.url.to_s.must_equal "https://example.org/en-US.zip"
|
||||||
|
|
||||||
MacOS.stubs(languages: ["THIRD_LANGUAGE", "SECOND_LANGUAGE", "FIRST_LANGUAGE"])
|
MacOS.stubs(languages: ["xx-XX"])
|
||||||
cask.call.language.must_equal :second
|
cask.call.language.must_equal "en-US"
|
||||||
|
cask.call.sha256.must_equal "xyz789"
|
||||||
|
cask.call.url.to_s.must_equal "https://example.org/en-US.zip"
|
||||||
|
|
||||||
MacOS.stubs(languages: ["THIRD_LANGUAGE", "FIRST_LANGUAGE", "SECOND_LANGUAGE"])
|
MacOS.stubs(languages: ["xx-XX", "zh", "en"])
|
||||||
cask.call.language.must_equal :first
|
cask.call.language.must_equal "zh-CN"
|
||||||
|
cask.call.sha256.must_equal "abc123"
|
||||||
|
cask.call.url.to_s.must_equal "https://example.org/zh-CN.zip"
|
||||||
|
|
||||||
|
MacOS.stubs(languages: ["xx-XX", "en-US", "zh"])
|
||||||
|
cask.call.language.must_equal "en-US"
|
||||||
|
cask.call.sha256.must_equal "xyz789"
|
||||||
|
cask.call.url.to_s.must_equal "https://example.org/en-US.zip"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user