Class: Cldr::Export::Data::Calendars::Gregorian
- Inherits:
-
Base
- Object
- Hash
- Base
- Cldr::Export::Data::Calendars::Gregorian
show all
- Defined in:
- lib/cldr/export/data/calendars/gregorian.rb
Instance Attribute Summary
Attributes inherited from Base
#locale
Instance Method Summary
collapse
-
#additional_formats ⇒ Object
-
#calendar ⇒ Object
-
#contexts(kind, options = {}) ⇒ Object
-
#default_format(type) ⇒ Object
-
#elements(node, kind, context, width, options = {}) ⇒ Object
-
#eras ⇒ Object
-
#extract(path, lambdas) ⇒ Object
-
#fields ⇒ Object
NOTE: As of CLDR 23, this data moved from inside each “calendar” tag to under its parent, the “dates” tag.
-
#formats(type) ⇒ Object
-
#initialize(locale) ⇒ Gregorian
constructor
A new instance of Gregorian.
-
#pattern(node, type) ⇒ Object
-
#periods ⇒ Object
-
#widths(node, kind, context, options = {}) ⇒ Object
-
#xpath_to_key(xpath, kind, context, width) ⇒ Object
-
#xpath_width ⇒ Object
Methods inherited from Base
#[]=, #update
Methods inherited from Hash
#deep_merge, #deep_stringify_keys, #symbolize_keys
Constructor Details
#initialize(locale) ⇒ Gregorian
Returns a new instance of Gregorian.
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 6
def initialize(locale)
super
update(
:months => contexts('month'),
:days => contexts('day'),
:eras => eras,
:quarters => contexts('quarter'),
:periods => contexts('dayPeriod', :group => "alt"),
:fields => fields,
:formats => {
:date => formats('date'),
:time => formats('time'),
:datetime => formats('dateTime')
},
:additional_formats => additional_formats
)
end
|
Instance Method Details
127
128
129
130
131
132
133
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 127
def additional_formats
select(calendar, "dateTimeFormats/availableFormats/dateFormatItem").inject({}) do |result, node|
key = node.attribute('id').value
result[key] = node.content
result
end
end
|
#calendar ⇒ Object
24
25
26
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 24
def calendar
@calendar ||= select('dates/calendars/calendar[@type="gregorian"]').first
end
|
#contexts(kind, options = {}) ⇒ Object
28
29
30
31
32
33
34
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 28
def contexts(kind, options = {})
select(calendar, "#{kind}s/#{kind}Context").inject({}) do |result, node|
context = node.attribute('type').value.to_sym
result[context] = widths(node, kind, context, options)
result
end
end
|
135
136
137
138
139
140
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 135
def default_format(type)
if node = select(calendar, "#{type}Formats/default").first
key = node.attribute('choice').value.to_sym
{ :default => :"calendars.gregorian.formats.#{type.downcase}.#{key}" }
end
end
|
#elements(node, kind, context, width, options = {}) ⇒ Object
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 44
def elements(node, kind, context, width, options = {})
aliased = select(node, 'alias').first
if aliased
xpath_to_key(aliased.attribute('path').value, kind, context, width)
else
select(node, kind).inject({}) do |result, node|
key = node.attribute('type').value
key = key =~ /^\d*$/ ? key.to_i : key.to_sym
if options[:group] && found_group = node.attribute(options[:group])
result[found_group.value] ||= {}
result[found_group.value][key] = node.content
else
result[key] = node.content
end
result
end
end
end
|
#eras ⇒ Object
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 86
def eras
if calendar
base_path = calendar.path.gsub('/ldml/', '') + '/eras'
keys = select("#{base_path}/*").map { |node| node.name }
keys.inject({}) do |result, name|
path = "#{base_path}/#{name}/*"
key = name.gsub('era', '').gsub(/s$/, '').downcase.to_sym
result[key] = select(path).inject({}) do |ret, node|
type = node.attribute('type').value.to_i rescue 0
ret[type] = node.content
ret
end
result
end
else
{}
end
end
|
106
107
108
109
110
111
112
113
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 106
def (path, lambdas)
nodes = select(path)
nodes.inject({}) do |ret, node|
key = lambdas[:key].call(node)
ret[key] = lambdas[:value].call(node)
ret
end
end
|
#fields ⇒ Object
NOTE: As of CLDR 23, this data moved from inside each “calendar” tag to under its parent, the “dates” tag. That probably means this ‘fields` method should be moved up to the parent as well.
153
154
155
156
157
158
159
160
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 153
def fields
select("dates/fields/field").inject({}) do |result, node|
key = node.attribute('type').value.to_sym
name = node.xpath('displayName').first
result[key] = name.content if name
result
end
end
|
115
116
117
118
119
120
121
122
123
124
125
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 115
def formats(type)
formats = select(calendar, "#{type}Formats/#{type}FormatLength").inject({}) do |result, node|
key = node.attribute('type').value.to_sym rescue :format
result[key] = pattern(node, type)
result
end
if default = default_format(type)
formats = default.merge(formats)
end
formats
end
|
#pattern(node, type) ⇒ Object
142
143
144
145
146
147
148
149
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 142
def pattern(node, type)
select(node, "#{type}Format/pattern").inject({}) do |result, node|
pattern = node.content
pattern = pattern.gsub('{0}', '{{time}}').gsub('{1}', '{{date}}') if type == 'dateTime'
result[:pattern] = pattern
result
end
end
|
#periods ⇒ Object
76
77
78
79
80
81
82
83
84
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 76
def periods
am = select(calendar, "am").first
pm = select(calendar, "pm").first
result = {}
result[:am] = am.content if am
result[:pm] = pm.content if pm
result
end
|
#widths(node, kind, context, options = {}) ⇒ Object
36
37
38
39
40
41
42
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 36
def widths(node, kind, context, options = {})
select(node, "#{kind}Width").inject({}) do |result, node|
width = node.attribute('type').value.to_sym
result[width] = elements(node, kind, context, width, options)
result
end
end
|
#xpath_to_key(xpath, kind, context, width) ⇒ Object
66
67
68
69
70
71
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 66
def xpath_to_key(xpath, kind, context, width)
kind = (xpath =~ %r(/([^\/]*)Width) && $1) || kind
context = (xpath =~ %r(Context\[@type='([^\/]*)'\]) && $1) || context
width = (xpath =~ %r(Width\[@type='([^\/]*)'\]) && $1) || width
:"calendars.gregorian.#{kind}s.#{context}.#{width}"
end
|
#xpath_width ⇒ Object
73
74
|
# File 'lib/cldr/export/data/calendars/gregorian.rb', line 73
def xpath_width
end
|