Class: Locale

Inherits:
Object
  • Object
show all
Defined in:
Library/Homebrew/locale.rb

Defined Under Namespace

Classes: ParserError

Constant Summary collapse

LANGUAGE_REGEX =

ISO 639-1 or ISO 639-2

/(?:[a-z]{2,3})/
REGION_REGEX =

ISO 3166-1 or UN M.49

/(?:[A-Z]{2}|\d{3})/
SCRIPT_REGEX =

ISO 15924

/(?:[A-Z][a-z]{3})/
LOCALE_REGEX =
/\A((?:#{LANGUAGE_REGEX}|#{REGION_REGEX}|#{SCRIPT_REGEX})(?:\-|$)){1,3}\Z/

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(language, region, script) ⇒ Locale

Returns a new instance of Locale



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'Library/Homebrew/locale.rb', line 31

def initialize(language, region, script)
  if language.nil? && region.nil? && script.nil?
    raise ArgumentError, "#{self.class} cannot be empty"
  end

  {
    language: language,
    region:   region,
    script:   script,
  }.each do |key, value|
    next if value.nil?

    regex = self.class.const_get("#{key.upcase}_REGEX")
    raise ParserError, "'#{value}' does not match #{regex}" unless value =~ regex
    instance_variable_set(:"@#{key}", value)
  end
end

Instance Attribute Details

#languageObject (readonly)

Returns the value of attribute language



29
30
31
# File 'Library/Homebrew/locale.rb', line 29

def language
  @language
end

#regionObject (readonly)

Returns the value of attribute region



29
30
31
# File 'Library/Homebrew/locale.rb', line 29

def region
  @region
end

#scriptObject (readonly)

Returns the value of attribute script



29
30
31
# File 'Library/Homebrew/locale.rb', line 29

def script
  @script
end

Class Method Details

.parse(string) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'Library/Homebrew/locale.rb', line 11

def self.parse(string)
  string = string.to_s

  if string !~ LOCALE_REGEX
    raise ParserError, "'#{string}' cannot be parsed to a #{self}"
  end

  scan = proc do |regex|
    string.scan(/(?:\-|^)(#{regex})(?:\-|$)/).flatten.first
  end

  language = scan.call(LANGUAGE_REGEX)
  region   = scan.call(REGION_REGEX)
  script   = scan.call(SCRIPT_REGEX)

  new(language, region, script)
end

Instance Method Details

#eql?(other) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


61
62
63
64
65
66
67
68
# File 'Library/Homebrew/locale.rb', line 61

def eql?(other)
  other = self.class.parse(other) unless other.is_a?(self.class)
  [:language, :region, :script].all? do |var|
    public_send(var) == other.public_send(var)
  end
rescue ParserError
  false
end

#include?(other) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
52
53
54
55
56
57
58
59
# File 'Library/Homebrew/locale.rb', line 49

def include?(other)
  other = self.class.parse(other) unless other.is_a?(self.class)

  [:language, :region, :script].all? do |var|
    if other.public_send(var).nil?
      true
    else
      public_send(var) == other.public_send(var)
    end
  end
end

#to_sObject



71
72
73
# File 'Library/Homebrew/locale.rb', line 71

def to_s
  [@language, @region, @script].compact.join("-")
end