jma_code 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/jma_code/area_forecast_local.rb +75 -1
- data/lib/jma_code/area_information_city.rb +46 -20
- data/lib/jma_code/prefecture.rb +1 -1
- data/lib/jma_code/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bbdf42a7d23265f5ef359b28bf5c6d44fe2effb7d73cd620b3a6f38c1339ebd2
|
4
|
+
data.tar.gz: 269adeeb6213bf011b44a35c20872e7cde18600f4e038d8c2d60cbb5380d65a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b24c689d7f69eb67e27b04a460895104e7a18a32afce639dbbc9788a224a20fd7c6f7a2e5ec0bdac16e5c45da4ca2452c3ebe3c4b8b246e89451513424bfdff
|
7
|
+
data.tar.gz: acd1941675e1c09ec4d8f8e47707586a53f41d2d95bfd4bd9f4b447252d7f32d0ac46d18ad650b10fbffc5dfcf98db93d09df1f6256a5f35ac3a37472360915d
|
@@ -92,6 +92,67 @@ module JMACode
|
|
92
92
|
used_by: used_by_fields.select{|f| row[f] == '1'}.map{|f| f.to_s.sub(/\Aused_by_/, '').to_sym}
|
93
93
|
)
|
94
94
|
end
|
95
|
+
|
96
|
+
def build_tree(areas=nil, cities=nil)
|
97
|
+
areas ||= get
|
98
|
+
cities ||= JMACode::AreaInformationCity.get
|
99
|
+
|
100
|
+
toplevels, areas = areas.partition{|a| a.any_belonging_locals.blank?}
|
101
|
+
pref_areas = areas.group_by(&:prefecture_code)
|
102
|
+
pref_cities = cities.group_by(&:prefecture_code)
|
103
|
+
toplevels.group_by(&:prefecture).map{|pref, pref_toplevels|
|
104
|
+
current_areas = pref_areas[pref.code]
|
105
|
+
current_cities = pref_cities[pref.code]
|
106
|
+
|
107
|
+
[
|
108
|
+
block_given? ? yield(pref) : pref,
|
109
|
+
pref_toplevels.map{|t|
|
110
|
+
secondlevels = (current_areas+current_cities).select{|a| a.child_of?(t)}
|
111
|
+
secondlevels_children = secondlevels.map{|s|
|
112
|
+
thirdlevels = (current_areas+current_cities).select{|a| a.child_of?(s)}
|
113
|
+
thirdlevels_children = thirdlevels.map{|th|
|
114
|
+
forthlevels = current_cities.select{|c| c.child_of?(th)}
|
115
|
+
[
|
116
|
+
block_given? ? yield(th) : th,
|
117
|
+
forthlevels.map{|f|
|
118
|
+
[block_given? ? yield(f) : f, nil]
|
119
|
+
}
|
120
|
+
]
|
121
|
+
}
|
122
|
+
[
|
123
|
+
block_given? ? yield(s) : s,
|
124
|
+
thirdlevels_children
|
125
|
+
]
|
126
|
+
}
|
127
|
+
[
|
128
|
+
block_given? ? yield(t) : t,
|
129
|
+
secondlevels_children
|
130
|
+
]
|
131
|
+
}
|
132
|
+
]
|
133
|
+
|
134
|
+
}
|
135
|
+
end
|
136
|
+
|
137
|
+
def walk_tree(tree, &block)
|
138
|
+
tree.map do |area, children|
|
139
|
+
a = block.call(area)
|
140
|
+
c = if children.is_a?(Array) and children.present?
|
141
|
+
walk_tree(children, &block)
|
142
|
+
else
|
143
|
+
children
|
144
|
+
end
|
145
|
+
[a, c]
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def prefecture_code
|
151
|
+
@prefecture_code ||= code[0, 2]
|
152
|
+
end
|
153
|
+
|
154
|
+
def prefecture
|
155
|
+
@prefecture ||= Prefecture.get.find{|pref| pref.code == prefecture_code}
|
95
156
|
end
|
96
157
|
|
97
158
|
def area_information_cities
|
@@ -113,7 +174,20 @@ module JMACode
|
|
113
174
|
end
|
114
175
|
|
115
176
|
def any_belonging_locals
|
116
|
-
[belonging_local_in_weather_alert, belonging_local_in_tornado_alert].compact.uniq(&:code)
|
177
|
+
@any_belonging_locals ||= [belonging_local_in_weather_alert, belonging_local_in_tornado_alert].compact.uniq(&:code)
|
178
|
+
end
|
179
|
+
|
180
|
+
def any_ancestry_locals
|
181
|
+
@any_ancestry_locals ||= [
|
182
|
+
belonging_local_in_weather_alert,
|
183
|
+
belonging_local_in_tornado_alert,
|
184
|
+
belonging_local_in_weather_alert&.belonging_local_in_weather_alert,
|
185
|
+
belonging_local_in_tornado_alert&.belonging_local_in_tornado_alert,
|
186
|
+
].compact.uniq(&:code)
|
187
|
+
end
|
188
|
+
|
189
|
+
def child_of?(area_or_city)
|
190
|
+
any_belonging_locals.map(&:code).include?(area_or_city.code)
|
117
191
|
end
|
118
192
|
|
119
193
|
def to_csv_row
|
@@ -3,7 +3,7 @@ module JMACode
|
|
3
3
|
using Blank
|
4
4
|
|
5
5
|
class AreaInformationCity < Struct.new(
|
6
|
-
:code, :
|
6
|
+
:code, :long_name, :alt_name, :alt_name_phonetic,
|
7
7
|
:area_forecast_local_code, :used_by,
|
8
8
|
keyword_init: true
|
9
9
|
)
|
@@ -11,24 +11,24 @@ module JMACode
|
|
11
11
|
NUM_HEADER_ROWS = 3
|
12
12
|
HEADERS = %i(
|
13
13
|
code
|
14
|
-
|
14
|
+
long_name
|
15
15
|
name_used_by_weather
|
16
16
|
name_phonetic_used_by_weather
|
17
17
|
area_forecast_local_code
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
used_by_weather
|
19
|
+
used_by_tornado
|
20
|
+
used_by_storm_surge
|
21
|
+
used_by_high_wave
|
22
|
+
used_by_landslide
|
23
|
+
used_by_flood
|
24
24
|
name_used_by_earthquake
|
25
25
|
name_phonetic_used_by_earthquake
|
26
26
|
name_used_by_volcano
|
27
27
|
name_phonetic_used_by_volcano
|
28
28
|
name_used_by_uv
|
29
29
|
name_phonetic_used_by_uv
|
30
|
-
|
31
|
-
|
30
|
+
name_used_by_rainstorm
|
31
|
+
name_phonetic_used_by_rainstorm
|
32
32
|
)
|
33
33
|
|
34
34
|
class << self
|
@@ -63,36 +63,62 @@ module JMACode
|
|
63
63
|
[row[:name_used_by_volcano], row[:name_phonetic_used_by_volcano]]
|
64
64
|
elsif row[:name_used_by_uv].present?
|
65
65
|
[row[:name_used_by_uv], row[:name_phonetic_used_by_uv]]
|
66
|
-
elsif row[:
|
67
|
-
[row[:
|
66
|
+
elsif row[:name_used_by_rainstorm].present?
|
67
|
+
[row[:name_used_by_rainstorm], row[:name_phonetic_used_by_rainstorm]]
|
68
68
|
else
|
69
69
|
[]
|
70
70
|
end
|
71
71
|
|
72
72
|
new(
|
73
73
|
code: row[:code],
|
74
|
-
|
74
|
+
long_name: row[:long_name],
|
75
75
|
alt_name: alt_name,
|
76
76
|
alt_name_phonetic: alt_name_phonetic,
|
77
77
|
area_forecast_local_code: row[:area_forecast_local_code],
|
78
78
|
used_by: [
|
79
|
-
row[:
|
80
|
-
row[:
|
81
|
-
row[:
|
82
|
-
row[:
|
83
|
-
row[:
|
84
|
-
row[:
|
79
|
+
row[:used_by_weather] == '1' ? :weather : nil,
|
80
|
+
row[:used_by_tornado] == '1' ? :tornado : nil,
|
81
|
+
row[:used_by_storm_surge] == '1' ? :storm_surge : nil,
|
82
|
+
row[:used_by_high_wave] == '1' ? :high_wave : nil,
|
83
|
+
row[:used_by_landslide] == '1' ? :landslide : nil,
|
84
|
+
row[:used_by_flood] == '1' ? :flood : nil,
|
85
85
|
row[:name_used_by_earthquake].present? ? :earthquake : nil,
|
86
86
|
row[:name_used_by_volcano].present? ? :volcano : nil,
|
87
87
|
row[:name_used_by_uv].present? ? :uv : nil,
|
88
|
-
row[:
|
88
|
+
row[:name_used_by_rainstorm].present? ? :rainstorm : nil,
|
89
89
|
].compact
|
90
90
|
)
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
+
def name
|
95
|
+
alt_name.presence || long_name
|
96
|
+
end
|
97
|
+
|
98
|
+
def name_phonetic
|
99
|
+
alt_name_phonetic
|
100
|
+
end
|
101
|
+
|
102
|
+
def prefecture_code
|
103
|
+
@prefecture_code ||= code[0, 2]
|
104
|
+
end
|
105
|
+
|
94
106
|
def area_forecast_local
|
95
107
|
@area_forecast_local ||= AreaForecastLocal.get.find{|x| x.code == area_forecast_local_code}
|
96
108
|
end
|
109
|
+
|
110
|
+
def child_of?(area_or_city)
|
111
|
+
area_forecast_local_code == area_or_city.code
|
112
|
+
end
|
113
|
+
|
114
|
+
def to_h
|
115
|
+
{
|
116
|
+
code: code,
|
117
|
+
name: name,
|
118
|
+
name_phonetic: name_phonetic,
|
119
|
+
area_forecast_local_code: area_forecast_local_code,
|
120
|
+
used_by: used_by,
|
121
|
+
}
|
122
|
+
end
|
97
123
|
end
|
98
124
|
end
|
data/lib/jma_code/prefecture.rb
CHANGED
@@ -24,7 +24,7 @@ module JMACode
|
|
24
24
|
[18, '福井県', '福井', 'fukui'],
|
25
25
|
[19, '山梨県', '山梨', 'yamanashi'],
|
26
26
|
[20, '長野県', '長野', 'nagano'],
|
27
|
-
[
|
27
|
+
[21, '岐阜県', '岐阜', 'gifu'],
|
28
28
|
[22, '静岡県', '静岡', 'shizuoka'],
|
29
29
|
[23, '愛知県', '愛知', 'aichi'],
|
30
30
|
[24, '三重県', '三重', 'mie'],
|
data/lib/jma_code/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jma_code
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- metheglin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-08-
|
11
|
+
date: 2024-08-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|