gaun 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.release-please-manifest.json +3 -0
- data/.tool-versions +1 -0
- data/CHANGELOG.md +9 -0
- data/LICENSE +21 -0
- data/README.md +130 -0
- data/Rakefile +12 -0
- data/lib/data/provinces.yml +260 -0
- data/lib/gaun/administrative_division.rb +31 -0
- data/lib/gaun/cache.rb +26 -0
- data/lib/gaun/district.rb +7 -0
- data/lib/gaun/parser.rb +34 -0
- data/lib/gaun/province.rb +7 -0
- data/lib/gaun/version.rb +3 -0
- data/lib/gaun.rb +9 -0
- data/release-please-config.json +16 -0
- data/sig/gaun.rbs +4 -0
- metadata +62 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 88b84d5cbf0cef43c15e08df26b16612e43b93179efc25feb17b2f1396dfc964
|
|
4
|
+
data.tar.gz: ef7fee6cb9d2ff07eafaef78c0be8385933038c1b8eec3388b1b42bb61b1744a
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: dbadbd65d1bfc08c3f8038aa89135e26b85dd9cfacdbece309b8b37c55c1299d56071f2ae69a2cd868151cad4c9ac515226371d939dc9be367c19f558f843435
|
|
7
|
+
data.tar.gz: 163688126b4cd6b1ebe78767b168fdcd422691ad66fb5fbd199e51eece85f9ce97d0928acd54ddc706a9c74922269fabdd3cd5fa7944e80e03f665fa8721e0a5
|
data/.tool-versions
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruby 4.0.1
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.2.0](https://github.com/open-ews/gaun/compare/v0.1.0...v0.2.0) (2026-03-03)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* Update data ([c8e5790](https://github.com/open-ews/gaun/commit/c8e579075cd7289c9d691320c2a5839fad69e7dc))
|
|
9
|
+
* Update data ([60c5897](https://github.com/open-ews/gaun/commit/60c58974581441a5d2e724b13a9debe4f703bcc1))
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OpenEWS
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# gaun (गाउँ)
|
|
2
|
+
|
|
3
|
+
[](https://github.com/open-ews/gaun/actions/workflows/build.yml)
|
|
4
|
+
|
|
5
|
+
**Gaun** is a Ruby library providing structured **geographical and administrative data for Nepal**, including provinces and districts.
|
|
6
|
+
|
|
7
|
+
> *गाउँ (Gaun)* means **village** in Nepali.
|
|
8
|
+
|
|
9
|
+
This gem is designed to be lightweight, easy to use, and suitable for applications that need reliable administrative region data—such as Early Warning Systems, humanitarian platforms, civic tech, and data validation pipelines.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Features
|
|
14
|
+
|
|
15
|
+
* 📍 Administrative geodata for **Nepal**
|
|
16
|
+
* 🗺️ Hierarchical structure (Province → District)
|
|
17
|
+
* 🧩 Easy Ruby API
|
|
18
|
+
* 🚀 No external API dependencies
|
|
19
|
+
* 📦 Designed for offline and embedded use
|
|
20
|
+
* 🧑💻 Open source and extensible
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Installation
|
|
25
|
+
|
|
26
|
+
Add this line to your application's `Gemfile`:
|
|
27
|
+
|
|
28
|
+
```ruby
|
|
29
|
+
gem "gaun"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Then execute:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
bundle install
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Or install it directly:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
gem install gaun
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Usage
|
|
47
|
+
|
|
48
|
+
### Provinces
|
|
49
|
+
|
|
50
|
+
```ruby
|
|
51
|
+
Gaun::Province.all
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
```ruby
|
|
55
|
+
province = Gaun::Province.first
|
|
56
|
+
province.name_en
|
|
57
|
+
province.name_ne
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Districts
|
|
61
|
+
|
|
62
|
+
```ruby
|
|
63
|
+
Gaun::District.all
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```ruby
|
|
67
|
+
district = Gaun::District.find { |d| d.name_en == "Bhojpur" }
|
|
68
|
+
district.name_en
|
|
69
|
+
district.name_ne
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Use Cases
|
|
73
|
+
|
|
74
|
+
* Early warning and disaster response systems
|
|
75
|
+
* Address normalization and validation
|
|
76
|
+
* Beneficiary management systems
|
|
77
|
+
* Government and NGO platforms
|
|
78
|
+
* Offline-first applications
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Data Sources
|
|
83
|
+
|
|
84
|
+
The data in **gaun** is compiled from publicly available Government of Nepal administrative sources and verified datasets where possible.
|
|
85
|
+
|
|
86
|
+
If you find inaccuracies or updates (e.g. administrative changes), contributions are very welcome.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Development
|
|
91
|
+
|
|
92
|
+
Clone the repository and install dependencies:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
git clone https://github.com/open-ews/gaun.git
|
|
96
|
+
cd gaun
|
|
97
|
+
bundle install
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Run tests:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
bundle exec rspec
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Contributing
|
|
109
|
+
|
|
110
|
+
Contributions are welcome!
|
|
111
|
+
|
|
112
|
+
* Bug reports
|
|
113
|
+
* Data corrections
|
|
114
|
+
* New administrative layers
|
|
115
|
+
* Performance or API improvements
|
|
116
|
+
|
|
117
|
+
Please open an issue or submit a pull request.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## License
|
|
122
|
+
|
|
123
|
+
This gem is released under the **MIT License**.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Related Projects
|
|
128
|
+
|
|
129
|
+
* **[baan](https://github.com/open-ews/baan)** – A library containing Geodata for administrative regions in Laos
|
|
130
|
+
* **[pumi](https://github.com/dwilkie/pumi)**– A library containing Geodata for administrative regions in Cambodia
|
data/Rakefile
ADDED
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
provinces:
|
|
2
|
+
- code: "NP-P1"
|
|
3
|
+
name_en: "Koshi"
|
|
4
|
+
name_ne: "कोशी"
|
|
5
|
+
districts:
|
|
6
|
+
- code: "0101"
|
|
7
|
+
name_en: "Bhojpur"
|
|
8
|
+
name_ne: "भोजपुर"
|
|
9
|
+
- code: "0102"
|
|
10
|
+
name_en: "Dhankuta"
|
|
11
|
+
name_ne: "धनकुटा"
|
|
12
|
+
- code: "0103"
|
|
13
|
+
name_en: "Ilam"
|
|
14
|
+
name_ne: "इलाम"
|
|
15
|
+
- code: "0104"
|
|
16
|
+
name_en: "Jhapa"
|
|
17
|
+
name_ne: "झापा"
|
|
18
|
+
- code: "0105"
|
|
19
|
+
name_en: "Khotang"
|
|
20
|
+
name_ne: "खोटाङ"
|
|
21
|
+
- code: "0106"
|
|
22
|
+
name_en: "Morang"
|
|
23
|
+
name_ne: "मोरङ"
|
|
24
|
+
- code: "0107"
|
|
25
|
+
name_en: "Okhaldhunga"
|
|
26
|
+
name_ne: "ओखलढुङ्गा"
|
|
27
|
+
- code: "0108"
|
|
28
|
+
name_en: "Panchthar"
|
|
29
|
+
name_ne: "पाँचथर"
|
|
30
|
+
- code: "0109"
|
|
31
|
+
name_en: "Sankhuwasabha"
|
|
32
|
+
name_ne: "सङ्खुवासभा"
|
|
33
|
+
- code: "0110"
|
|
34
|
+
name_en: "Solukhumbu"
|
|
35
|
+
name_ne: "सोलुखुम्बु"
|
|
36
|
+
- code: "0111"
|
|
37
|
+
name_en: "Sunsari"
|
|
38
|
+
name_ne: "सुनसरी"
|
|
39
|
+
- code: "0112"
|
|
40
|
+
name_en: "Taplejung"
|
|
41
|
+
name_ne: "ताप्लेजुङ"
|
|
42
|
+
- code: "0113"
|
|
43
|
+
name_en: "Terhathum"
|
|
44
|
+
name_ne: "तेह्रथुम"
|
|
45
|
+
- code: "0114"
|
|
46
|
+
name_en: "Udayapur"
|
|
47
|
+
name_ne: "उदयपुर"
|
|
48
|
+
- code: "NP-P2"
|
|
49
|
+
name_en: "Madhesh"
|
|
50
|
+
name_ne: "मधेश"
|
|
51
|
+
districts:
|
|
52
|
+
- code: "0201"
|
|
53
|
+
name_en: "Parsa"
|
|
54
|
+
name_ne: "पर्सा"
|
|
55
|
+
- code: "0202"
|
|
56
|
+
name_en: "Bara"
|
|
57
|
+
name_ne: "बारा"
|
|
58
|
+
- code: "0203"
|
|
59
|
+
name_en: "Rautahat"
|
|
60
|
+
name_ne: "रौतहट"
|
|
61
|
+
- code: "0204"
|
|
62
|
+
name_en: "Sarlahi"
|
|
63
|
+
name_ne: "सर्लाही"
|
|
64
|
+
- code: "0205"
|
|
65
|
+
name_en: "Dhanusha"
|
|
66
|
+
name_ne: "धनुषा"
|
|
67
|
+
- code: "0206"
|
|
68
|
+
name_en: "Siraha"
|
|
69
|
+
name_ne: "सिराहा"
|
|
70
|
+
- code: "0207"
|
|
71
|
+
name_en: "Mahottari"
|
|
72
|
+
name_ne: "महोत्तरी"
|
|
73
|
+
- code: "0208"
|
|
74
|
+
name_en: "Saptari"
|
|
75
|
+
name_ne: "सप्तरी"
|
|
76
|
+
- code: "NP-P3"
|
|
77
|
+
name_en: "Bagmati"
|
|
78
|
+
name_ne: "बागमती"
|
|
79
|
+
districts:
|
|
80
|
+
- code: "0301"
|
|
81
|
+
name_en: "Sindhuli"
|
|
82
|
+
name_ne: "सिन्धुली"
|
|
83
|
+
- code: "0302"
|
|
84
|
+
name_en: "Ramechhap"
|
|
85
|
+
name_ne: "रामेछाप"
|
|
86
|
+
- code: "0303"
|
|
87
|
+
name_en: "Dolakha"
|
|
88
|
+
name_ne: "दोलखा"
|
|
89
|
+
- code: "0304"
|
|
90
|
+
name_en: "Bhaktapur"
|
|
91
|
+
name_ne: "भक्तपुर"
|
|
92
|
+
- code: "0305"
|
|
93
|
+
name_en: "Dhading"
|
|
94
|
+
name_ne: "धादिङ"
|
|
95
|
+
- code: "0306"
|
|
96
|
+
name_en: "Kathmandu"
|
|
97
|
+
name_ne: "काठमाडौं"
|
|
98
|
+
- code: "0307"
|
|
99
|
+
name_en: "Kavrepalanchok"
|
|
100
|
+
name_ne: "काभ्रेपलाञ्चोक"
|
|
101
|
+
- code: "0308"
|
|
102
|
+
name_en: "Lalitpur"
|
|
103
|
+
name_ne: "ललितपुर"
|
|
104
|
+
- code: "0309"
|
|
105
|
+
name_en: "Nuwakot"
|
|
106
|
+
name_ne: "नुवाकोट"
|
|
107
|
+
- code: "0310"
|
|
108
|
+
name_en: "Rasuwa"
|
|
109
|
+
name_ne: "रसुवा"
|
|
110
|
+
- code: "0311"
|
|
111
|
+
name_en: "Sindhupalchok"
|
|
112
|
+
name_ne: "सिन्धुपाल्चोक"
|
|
113
|
+
- code: "0312"
|
|
114
|
+
name_en: "Chitwan"
|
|
115
|
+
name_ne: "चितवन"
|
|
116
|
+
- code: "0313"
|
|
117
|
+
name_en: "Makwanpur"
|
|
118
|
+
name_ne: "मकवानपुर"
|
|
119
|
+
- code: "NP-P4"
|
|
120
|
+
name_en: "Gandaki"
|
|
121
|
+
name_ne: "गण्डकी"
|
|
122
|
+
districts:
|
|
123
|
+
- code: "0401"
|
|
124
|
+
name_en: "Baglung"
|
|
125
|
+
name_ne: "बागलुङ"
|
|
126
|
+
- code: "0402"
|
|
127
|
+
name_en: "Gorkha"
|
|
128
|
+
name_ne: "गोरखा"
|
|
129
|
+
- code: "0403"
|
|
130
|
+
name_en: "Kaski"
|
|
131
|
+
name_ne: "कास्की"
|
|
132
|
+
- code: "0404"
|
|
133
|
+
name_en: "Lamjung"
|
|
134
|
+
name_ne: "लमजुङ"
|
|
135
|
+
- code: "0405"
|
|
136
|
+
name_en: "Manang"
|
|
137
|
+
name_ne: "मनाङ"
|
|
138
|
+
- code: "0406"
|
|
139
|
+
name_en: "Mustang"
|
|
140
|
+
name_ne: "मुस्ताङ"
|
|
141
|
+
- code: "0407"
|
|
142
|
+
name_en: "Myagdi"
|
|
143
|
+
name_ne: "म्याग्दी"
|
|
144
|
+
- code: "0408"
|
|
145
|
+
name_en: "Nawalpur"
|
|
146
|
+
name_ne: "नवलपुर"
|
|
147
|
+
- code: "0409"
|
|
148
|
+
name_en: "Parbat"
|
|
149
|
+
name_ne: "पर्वत"
|
|
150
|
+
- code: "0410"
|
|
151
|
+
name_en: "Syangja"
|
|
152
|
+
name_ne: "स्याङ्जा"
|
|
153
|
+
- code: "0411"
|
|
154
|
+
name_en: "Tanahun"
|
|
155
|
+
name_ne: "तनहुँ"
|
|
156
|
+
- code: "NP-P5"
|
|
157
|
+
name_en: "Lumbini"
|
|
158
|
+
name_ne: "लुम्बिनी"
|
|
159
|
+
districts:
|
|
160
|
+
- code: "0501"
|
|
161
|
+
name_en: "Kapilvastu"
|
|
162
|
+
name_ne: "कपिलवस्तु"
|
|
163
|
+
- code: "0502"
|
|
164
|
+
name_en: "Parasi"
|
|
165
|
+
name_ne: "परासी"
|
|
166
|
+
- code: "0503"
|
|
167
|
+
name_en: "Rupandehi"
|
|
168
|
+
name_ne: "रूपन्देही"
|
|
169
|
+
- code: "0504"
|
|
170
|
+
name_en: "Arghakhanchi"
|
|
171
|
+
name_ne: "अर्घाखाँची"
|
|
172
|
+
- code: "0505"
|
|
173
|
+
name_en: "Gulmi"
|
|
174
|
+
name_ne: "गुल्मी"
|
|
175
|
+
- code: "0506"
|
|
176
|
+
name_en: "Palpa"
|
|
177
|
+
name_ne: "पाल्पा"
|
|
178
|
+
- code: "0507"
|
|
179
|
+
name_en: "Dang"
|
|
180
|
+
name_ne: "दाङ"
|
|
181
|
+
- code: "0508"
|
|
182
|
+
name_en: "Pyuthan"
|
|
183
|
+
name_ne: "प्युठान"
|
|
184
|
+
- code: "0509"
|
|
185
|
+
name_en: "Rolpa"
|
|
186
|
+
name_ne: "रोल्पा"
|
|
187
|
+
- code: "0510"
|
|
188
|
+
name_en: "Eastern Rukum"
|
|
189
|
+
name_ne: "पूर्वी रुकुम"
|
|
190
|
+
- code: "0511"
|
|
191
|
+
name_en: "Banke"
|
|
192
|
+
name_ne: "बाँके"
|
|
193
|
+
- code: "0512"
|
|
194
|
+
name_en: "Bardiya"
|
|
195
|
+
name_ne: "बर्दिया"
|
|
196
|
+
- code: "NP-P6"
|
|
197
|
+
name_en: "Karnali"
|
|
198
|
+
name_ne: "कर्णाली"
|
|
199
|
+
districts:
|
|
200
|
+
- code: "0601"
|
|
201
|
+
name_en: "Western Rukum"
|
|
202
|
+
name_ne: "पश्चिमी रुकुम"
|
|
203
|
+
- code: "0602"
|
|
204
|
+
name_en: "Salyan"
|
|
205
|
+
name_ne: "सल्यान"
|
|
206
|
+
- code: "0603"
|
|
207
|
+
name_en: "Dolpa"
|
|
208
|
+
name_ne: "डोल्पा"
|
|
209
|
+
- code: "0604"
|
|
210
|
+
name_en: "Humla"
|
|
211
|
+
name_ne: "हुम्ला"
|
|
212
|
+
- code: "0605"
|
|
213
|
+
name_en: "Jumla"
|
|
214
|
+
name_ne: "जुम्ला"
|
|
215
|
+
- code: "0606"
|
|
216
|
+
name_en: "Kalikot"
|
|
217
|
+
name_ne: "कालिकोट"
|
|
218
|
+
- code: "0607"
|
|
219
|
+
name_en: "Mugu"
|
|
220
|
+
name_ne: "मुगु"
|
|
221
|
+
- code: "0608"
|
|
222
|
+
name_en: "Surkhet"
|
|
223
|
+
name_ne: "सुर्खेत"
|
|
224
|
+
- code: "0609"
|
|
225
|
+
name_en: "Dailekh"
|
|
226
|
+
name_ne: "दैलेख"
|
|
227
|
+
- code: "0610"
|
|
228
|
+
name_en: "Jajarkot"
|
|
229
|
+
name_ne: "जाजरकोट"
|
|
230
|
+
- code: "NP-P7"
|
|
231
|
+
name_en: "Sudurpashchim"
|
|
232
|
+
name_ne: "सुदूर-पश्चिम"
|
|
233
|
+
districts:
|
|
234
|
+
- code: "0701"
|
|
235
|
+
name_en: "Kailali"
|
|
236
|
+
name_ne: "कैलाली"
|
|
237
|
+
- code: "0702"
|
|
238
|
+
name_en: "Achham"
|
|
239
|
+
name_ne: "अछाम"
|
|
240
|
+
- code: "0703"
|
|
241
|
+
name_en: "Doti"
|
|
242
|
+
name_ne: "डोटी"
|
|
243
|
+
- code: "0704"
|
|
244
|
+
name_en: "Bajhang"
|
|
245
|
+
name_ne: "बझाङ"
|
|
246
|
+
- code: "0705"
|
|
247
|
+
name_en: "Bajura"
|
|
248
|
+
name_ne: "बाजुरा"
|
|
249
|
+
- code: "0706"
|
|
250
|
+
name_en: "Kanchanpur"
|
|
251
|
+
name_ne: "कञ्चनपुर"
|
|
252
|
+
- code: "0707"
|
|
253
|
+
name_en: "Dadeldhura"
|
|
254
|
+
name_ne: "डडेल्धुरा"
|
|
255
|
+
- code: "0708"
|
|
256
|
+
name_en: "Baitadi"
|
|
257
|
+
name_ne: "बैतडी"
|
|
258
|
+
- code: "0709"
|
|
259
|
+
name_en: "Darchula"
|
|
260
|
+
name_ne: "दार्चुला"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Gaun
|
|
2
|
+
AdministrativeDivision = Data.define(:code, :name_en, :name_ne, :subdivisions, :parent_division) do
|
|
3
|
+
class << self
|
|
4
|
+
def all
|
|
5
|
+
data.values
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def first
|
|
9
|
+
all.first
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def find(...)
|
|
13
|
+
all.find(...)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def [](code)
|
|
17
|
+
data[code]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
def data
|
|
23
|
+
@data ||= cache.data.fetch(self)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def cache
|
|
27
|
+
@cache ||= Cache.new
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
data/lib/gaun/cache.rb
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Gaun
|
|
2
|
+
class Cache
|
|
3
|
+
attr_reader :parser
|
|
4
|
+
|
|
5
|
+
def initialize(parser: Parser.new)
|
|
6
|
+
@parser = parser
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def data
|
|
10
|
+
@data ||= begin
|
|
11
|
+
dataset.each_with_object(Hash.new { |h, k| h[k] = {} }) do |(key, dataset), result|
|
|
12
|
+
dataset.each { result[key][it.code] = it }
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def dataset
|
|
20
|
+
@dataset ||= begin
|
|
21
|
+
data = parser.parse
|
|
22
|
+
{ Province => data.provinces, District => data.districts }
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
data/lib/gaun/parser.rb
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require "yaml"
|
|
2
|
+
|
|
3
|
+
module Gaun
|
|
4
|
+
class Parser
|
|
5
|
+
DEFAULT_DATA_FILE = Pathname(File.join(__dir__, "..", "data", "provinces.yml")).freeze
|
|
6
|
+
DEFAULT_ROOT_KEY = "provinces".freeze
|
|
7
|
+
Result = Data.define(:provinces, :districts)
|
|
8
|
+
|
|
9
|
+
attr_reader :data_file, :root_key
|
|
10
|
+
|
|
11
|
+
def initialize(**options)
|
|
12
|
+
@data_file = options.fetch(:data_file) { DEFAULT_DATA_FILE }
|
|
13
|
+
@root_key = options.fetch(:root_key) { DEFAULT_ROOT_KEY }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def parse
|
|
17
|
+
data = YAML.load_file(data_file).fetch(root_key)
|
|
18
|
+
districts = []
|
|
19
|
+
provinces = data.map do |province_data|
|
|
20
|
+
province = Province.new(parent_division: nil, subdivisions: [], **province_data.transform_keys(&:to_sym).except(:districts))
|
|
21
|
+
|
|
22
|
+
province_data.fetch("districts").map do |district_data|
|
|
23
|
+
district = District.new(parent_division: province, subdivisions: [], **district_data.transform_keys(&:to_sym))
|
|
24
|
+
province.subdivisions << district
|
|
25
|
+
districts << district
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
province
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
Result.new(provinces:, districts:)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
data/lib/gaun/version.rb
ADDED
data/lib/gaun.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"bootstrap-sha": "96e184a0cb4a3de5aa9ab838c8d0b90b59474f5d",
|
|
3
|
+
"include-component-in-tag": false,
|
|
4
|
+
"version-file": "lib/gaun/version.rb",
|
|
5
|
+
"packages": {
|
|
6
|
+
".": {
|
|
7
|
+
"changelog-path": "CHANGELOG.md",
|
|
8
|
+
"release-type": "ruby",
|
|
9
|
+
"bump-minor-pre-major": true,
|
|
10
|
+
"bump-patch-for-minor-pre-major": false,
|
|
11
|
+
"draft": false,
|
|
12
|
+
"prerelease": false
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json"
|
|
16
|
+
}
|
data/sig/gaun.rbs
ADDED
metadata
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: gaun
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.2.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- David Wilkie
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies: []
|
|
12
|
+
description: |
|
|
13
|
+
Gaun is a Ruby library providing structured geographical and administrative
|
|
14
|
+
data for Nepal, including provinces and districts.
|
|
15
|
+
It is designed for offline use in civic tech, humanitarian, and early warning systems.
|
|
16
|
+
email:
|
|
17
|
+
- dwilkie@gmail.com
|
|
18
|
+
executables: []
|
|
19
|
+
extensions: []
|
|
20
|
+
extra_rdoc_files: []
|
|
21
|
+
files:
|
|
22
|
+
- ".release-please-manifest.json"
|
|
23
|
+
- ".tool-versions"
|
|
24
|
+
- CHANGELOG.md
|
|
25
|
+
- LICENSE
|
|
26
|
+
- README.md
|
|
27
|
+
- Rakefile
|
|
28
|
+
- lib/data/provinces.yml
|
|
29
|
+
- lib/gaun.rb
|
|
30
|
+
- lib/gaun/administrative_division.rb
|
|
31
|
+
- lib/gaun/cache.rb
|
|
32
|
+
- lib/gaun/district.rb
|
|
33
|
+
- lib/gaun/parser.rb
|
|
34
|
+
- lib/gaun/province.rb
|
|
35
|
+
- lib/gaun/version.rb
|
|
36
|
+
- release-please-config.json
|
|
37
|
+
- sig/gaun.rbs
|
|
38
|
+
homepage: https://github.com/open-ews/gaun
|
|
39
|
+
licenses:
|
|
40
|
+
- MIT
|
|
41
|
+
metadata:
|
|
42
|
+
homepage_uri: https://github.com/open-ews/gaun
|
|
43
|
+
source_code_uri: https://github.com/open-ews/gaun
|
|
44
|
+
changelog_uri: https://github.com/open-ews/gaun/blob/main/CHANGELOG.md
|
|
45
|
+
rdoc_options: []
|
|
46
|
+
require_paths:
|
|
47
|
+
- lib
|
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
49
|
+
requirements:
|
|
50
|
+
- - ">="
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: 3.2.0
|
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
54
|
+
requirements:
|
|
55
|
+
- - ">="
|
|
56
|
+
- !ruby/object:Gem::Version
|
|
57
|
+
version: '0'
|
|
58
|
+
requirements: []
|
|
59
|
+
rubygems_version: 4.0.3
|
|
60
|
+
specification_version: 4
|
|
61
|
+
summary: Geographical and administrative data for Nepal
|
|
62
|
+
test_files: []
|