baan 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/.rspec +3 -0
- data/.rubocop.yml +26 -0
- data/.tool-versions +1 -0
- data/CHANGELOG.md +9 -0
- data/LICENSE.txt +21 -0
- data/README.md +142 -0
- data/Rakefile +10 -0
- data/data/provinces.yml +534 -0
- data/lib/baan/administrative_division.rb +23 -0
- data/lib/baan/cache.rb +26 -0
- data/lib/baan/district.rb +7 -0
- data/lib/baan/parser.rb +34 -0
- data/lib/baan/province.rb +7 -0
- data/lib/baan/version.rb +3 -0
- data/lib/baan.rb +9 -0
- data/release-please-config.json +16 -0
- metadata +60 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 978e5b79344757b5f895d9a1adc4a53c9875e95d39e033b391dda8b355742994
|
|
4
|
+
data.tar.gz: 96537f628d8d9d74efd73f8e57472e01936433f4ad686abad0f4edf8842f47cc
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 7fb7321f1ca241cf7e38d0772bca6214c71d5876b61c5aa62fb6b34f7dca5f8ee4d216ff9a00b2d7e445f827152f23a4f2823b1f9475c9e746b341a725dd1897
|
|
7
|
+
data.tar.gz: 9d66c05533a44d0c559e72d9713954964ae36c815ae53fbb28ba80d9c654d22f070a54ad7da2251aae3bf1788f79f8e640d9674e0455ba28890cc70f4d845b26
|
data/.rspec
ADDED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
plugins:
|
|
2
|
+
- rubocop-rspec
|
|
3
|
+
- rubocop-performance
|
|
4
|
+
|
|
5
|
+
# Omakase Ruby styling for Rails
|
|
6
|
+
inherit_gem:
|
|
7
|
+
rubocop-rails-omakase: rubocop.yml
|
|
8
|
+
|
|
9
|
+
AllCops:
|
|
10
|
+
NewCops: enable
|
|
11
|
+
TargetRubyVersion: 3.4
|
|
12
|
+
|
|
13
|
+
Lint:
|
|
14
|
+
Enabled: true
|
|
15
|
+
|
|
16
|
+
Style/FrozenStringLiteralComment:
|
|
17
|
+
Enabled: false
|
|
18
|
+
|
|
19
|
+
RSpec/DescribedClass:
|
|
20
|
+
Enabled: false
|
|
21
|
+
|
|
22
|
+
RSpec/ExampleLength:
|
|
23
|
+
Enabled: false
|
|
24
|
+
|
|
25
|
+
RSpec/MultipleExpectations:
|
|
26
|
+
Enabled: false
|
data/.tool-versions
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruby 3.4.4
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.2.0](https://github.com/open-ews/baan/compare/v0.1.0...v0.2.0) (2025-07-01)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* test release ([aef2b7f](https://github.com/open-ews/baan/commit/aef2b7fff55b5f0db829c94902fe0e865026df75))
|
|
9
|
+
* test release ([513fe11](https://github.com/open-ews/baan/commit/513fe1159fda1397cb1201e4a745c613cb7d8cb3))
|
data/LICENSE.txt
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 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
|
|
13
|
+
all 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
|
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Baan (ບ້ານ)
|
|
2
|
+
|
|
3
|
+
[](https://github.com/open-ews/baan/actions/workflows/build.yml) [](https://codecov.io/github/open-ews/baan)
|
|
4
|
+
|
|
5
|
+
**Baan** is a Ruby library that provides geodata for administrative regions in **Lao PDR**, including provinces and districts. The name *"Baan"* (ບ້ານ) means *"village"* in Lao, reflecting the project's aim to support geographic and community-based applications.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 📦 Installation
|
|
10
|
+
|
|
11
|
+
Add this line to your Gemfile:
|
|
12
|
+
|
|
13
|
+
```ruby
|
|
14
|
+
gem "baan"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Then run:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
bundle install
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Or install it manually:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
gem install baan
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 🗂️ Data Structure
|
|
32
|
+
|
|
33
|
+
The data is stored in YAML format under the `data/` directory:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
/baan
|
|
37
|
+
├── lib/
|
|
38
|
+
│ └── baan.rb
|
|
39
|
+
└── data/
|
|
40
|
+
├── provinces.yml
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Each record includes:
|
|
44
|
+
|
|
45
|
+
**Provinces**
|
|
46
|
+
|
|
47
|
+
* `code`: 3166-2:LA code
|
|
48
|
+
* `name_lo`: Lao name
|
|
49
|
+
* `name_en`: Romanized name
|
|
50
|
+
* `districts`: List of districts
|
|
51
|
+
|
|
52
|
+
**Districts**
|
|
53
|
+
|
|
54
|
+
* `code`: Administrative code
|
|
55
|
+
* `parent_division`: Parent province
|
|
56
|
+
* `name_lo`: Lao name
|
|
57
|
+
* `name_en`: Romanized name
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 🚀 Usage
|
|
62
|
+
|
|
63
|
+
```ruby
|
|
64
|
+
# Get all provinces
|
|
65
|
+
Baan::Province.all
|
|
66
|
+
=>
|
|
67
|
+
{"LA-VT" =>
|
|
68
|
+
#<data Baan::Province
|
|
69
|
+
code="LA-VT",
|
|
70
|
+
name_en="Vientiane Prefecture",
|
|
71
|
+
name_lo="ວຽງຈັນ",
|
|
72
|
+
subdivisions=
|
|
73
|
+
[#<data Baan::District code="0101", name_en="Chanthabuly", name_lo="ຈັນທະບູລີ", subdivisions=[], parent_division=#<data Baan::Province:...>>,],
|
|
74
|
+
parent_division=nil>,
|
|
75
|
+
# ...other provinces
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
# Get a province by its code
|
|
79
|
+
Baan::Province["LA-VT"]
|
|
80
|
+
=>
|
|
81
|
+
#<data Baan::Province
|
|
82
|
+
code="LA-VT",
|
|
83
|
+
name_en="Vientiane Prefecture",
|
|
84
|
+
name_lo="ວຽງຈັນ",
|
|
85
|
+
subdivisions=
|
|
86
|
+
[#<data Baan::District code="0101", name_en="Chanthabuly", name_lo="ຈັນທະບູລີ", subdivisions=[], parent_division=#<data Baan::Province:...>>,],
|
|
87
|
+
parent_division=nil>
|
|
88
|
+
|
|
89
|
+
# Get all districts
|
|
90
|
+
Baan::District.all
|
|
91
|
+
=>
|
|
92
|
+
{"0101" =>
|
|
93
|
+
#<data Baan::District
|
|
94
|
+
code="0101",
|
|
95
|
+
name_en="Chanthabuly",
|
|
96
|
+
name_lo="ຈັນທະບູລີ",
|
|
97
|
+
subdivisions=[],
|
|
98
|
+
parent_division=#<data Baan::Province:...>>,
|
|
99
|
+
# ...other districts
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
# Get a district by its code
|
|
103
|
+
Baan::District["0101"]
|
|
104
|
+
=>
|
|
105
|
+
#<data Baan::District
|
|
106
|
+
code="0101",
|
|
107
|
+
name_en="Chanthabuly",
|
|
108
|
+
name_lo="ຈັນທະບູລີ",
|
|
109
|
+
subdivisions=[],
|
|
110
|
+
parent_division=#<data Baan::Province:...>>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 📚 Use Cases
|
|
116
|
+
|
|
117
|
+
* Mapping and visualization of Lao administrative areas
|
|
118
|
+
* Disaster response and early warning systems
|
|
119
|
+
* Localized apps and services for Laos
|
|
120
|
+
* Statistical and demographic analysis
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 📄 License
|
|
125
|
+
|
|
126
|
+
This library is available as open source under the **MIT License**.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 🤝 Contributing
|
|
131
|
+
|
|
132
|
+
We welcome contributions, especially:
|
|
133
|
+
|
|
134
|
+
* Updated or corrected geodata
|
|
135
|
+
* Additional administrative levels (e.g. villages)
|
|
136
|
+
* Support for other output formats (e.g. JSON, CSV)
|
|
137
|
+
|
|
138
|
+
To contribute:
|
|
139
|
+
|
|
140
|
+
1. Fork the repository
|
|
141
|
+
2. Make your changes
|
|
142
|
+
3. Submit a pull request
|
data/Rakefile
ADDED
data/data/provinces.yml
ADDED
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
provinces:
|
|
2
|
+
- code: "LA-VT"
|
|
3
|
+
name_en: "Vientiane Prefecture"
|
|
4
|
+
name_lo: "ວຽງຈັນ"
|
|
5
|
+
districts:
|
|
6
|
+
- code: "0101"
|
|
7
|
+
name_en: "Chanthabuly"
|
|
8
|
+
name_lo: "ຈັນທະບູລີ"
|
|
9
|
+
- code: "0102"
|
|
10
|
+
name_en: "Sikhottabong"
|
|
11
|
+
name_lo: "ສີໂຄດຕະບອງ"
|
|
12
|
+
- code: "0103"
|
|
13
|
+
name_en: "Xaysetha"
|
|
14
|
+
name_lo: "ໄຊເສດຖາ"
|
|
15
|
+
- code: "0104"
|
|
16
|
+
name_en: "Sisattanak"
|
|
17
|
+
name_lo: "ສີສັດຕະນາກ"
|
|
18
|
+
- code: "0105"
|
|
19
|
+
name_en: "Naxaithong"
|
|
20
|
+
name_lo: "ນາຊາຍທອງ"
|
|
21
|
+
- code: "0106"
|
|
22
|
+
name_en: "Xaythany"
|
|
23
|
+
name_lo: "ໄຊທະນີ"
|
|
24
|
+
- code: "0107"
|
|
25
|
+
name_en: "Hadxayfong"
|
|
26
|
+
name_lo: "ຫາດຊາຍຟອງ"
|
|
27
|
+
- code: "0108"
|
|
28
|
+
name_en: "Sangthong"
|
|
29
|
+
name_lo: "ສັງທອງ"
|
|
30
|
+
- code: "0109"
|
|
31
|
+
name_en: "Mayparkngum"
|
|
32
|
+
name_lo: "ປາກງື່ມ"
|
|
33
|
+
|
|
34
|
+
- code: "LA-PH"
|
|
35
|
+
name_en: "Phongsaly"
|
|
36
|
+
name_lo: "ຜົ້ງສາລີ"
|
|
37
|
+
districts:
|
|
38
|
+
- code: "0201"
|
|
39
|
+
name_en: "Phongsaly"
|
|
40
|
+
name_lo: "ຜົ້ງສາລີ"
|
|
41
|
+
- code: "0202"
|
|
42
|
+
name_en: "May"
|
|
43
|
+
name_lo: "ໃໝ່"
|
|
44
|
+
- code: "0203"
|
|
45
|
+
name_en: "Khoua"
|
|
46
|
+
name_lo: "ຂວາ"
|
|
47
|
+
- code: "0204"
|
|
48
|
+
name_en: "Samphanh"
|
|
49
|
+
name_lo: "ສຳພັນ"
|
|
50
|
+
- code: "0205"
|
|
51
|
+
name_en: "Boun Neua"
|
|
52
|
+
name_lo: "ບຸນເໜືອ"
|
|
53
|
+
- code: "0206"
|
|
54
|
+
name_en: "Yot Ou"
|
|
55
|
+
name_lo: "ຍອດອູ"
|
|
56
|
+
- code: "0207"
|
|
57
|
+
name_en: "Boun Tay"
|
|
58
|
+
name_lo: "ບຸນໃຕ້"
|
|
59
|
+
|
|
60
|
+
- code: "LA-LM"
|
|
61
|
+
name_en: "Luang Namtha"
|
|
62
|
+
name_lo: "ຫລວງນໍ້າທາ"
|
|
63
|
+
districts:
|
|
64
|
+
- code: "0301"
|
|
65
|
+
name_en: "Namtha"
|
|
66
|
+
name_lo: "ນ້ຳທາ"
|
|
67
|
+
- code: "0302"
|
|
68
|
+
name_en: "Sing"
|
|
69
|
+
name_lo: "ສິງ"
|
|
70
|
+
- code: "0303"
|
|
71
|
+
name_en: "Long"
|
|
72
|
+
name_lo: "ລອງ"
|
|
73
|
+
- code: "0304"
|
|
74
|
+
name_en: "Viengphoukha"
|
|
75
|
+
name_lo: "ວຽງພູຄາ"
|
|
76
|
+
- code: "0305"
|
|
77
|
+
name_en: "Na Le"
|
|
78
|
+
name_lo: "ນາແລ"
|
|
79
|
+
|
|
80
|
+
- code: "LA-OU"
|
|
81
|
+
name_en: "Oudomxay"
|
|
82
|
+
name_lo: "ອຸດົມໄຊ"
|
|
83
|
+
districts:
|
|
84
|
+
- code: "0401"
|
|
85
|
+
name_en: "Xay"
|
|
86
|
+
name_lo: "ໄຊ"
|
|
87
|
+
- code: "0402"
|
|
88
|
+
name_en: "La"
|
|
89
|
+
name_lo: "ຫຼາ"
|
|
90
|
+
- code: "0403"
|
|
91
|
+
name_en: "Na Mo"
|
|
92
|
+
name_lo: "ນາໝໍ້"
|
|
93
|
+
- code: "0404"
|
|
94
|
+
name_en: "Nga"
|
|
95
|
+
name_lo: "ງາ"
|
|
96
|
+
- code: "0405"
|
|
97
|
+
name_en: "Beng"
|
|
98
|
+
name_lo: "ແບ່ງ"
|
|
99
|
+
- code: "0406"
|
|
100
|
+
name_en: "Houne"
|
|
101
|
+
name_lo: "ຮຸນ"
|
|
102
|
+
- code: "0407"
|
|
103
|
+
name_en: "Pak Beng"
|
|
104
|
+
name_lo: "ປາກແບ່ງ"
|
|
105
|
+
|
|
106
|
+
- code: "LA-BK"
|
|
107
|
+
name_en: "Bokeo"
|
|
108
|
+
name_lo: "ບໍ່ແກ້ວ"
|
|
109
|
+
districts:
|
|
110
|
+
- code: "0501"
|
|
111
|
+
name_en: "Houayxay"
|
|
112
|
+
name_lo: "ຫ້ວຍຊາຍ"
|
|
113
|
+
- code: "0502"
|
|
114
|
+
name_en: "Ton Pheung"
|
|
115
|
+
name_lo: "ຕົ້ນເຜິ້ງ"
|
|
116
|
+
- code: "0503"
|
|
117
|
+
name_en: "Meung"
|
|
118
|
+
name_lo: "ເມິງ"
|
|
119
|
+
- code: "0504"
|
|
120
|
+
name_en: "Pha Oudom"
|
|
121
|
+
name_lo: "ຜາອຸດົມ"
|
|
122
|
+
- code: "0505"
|
|
123
|
+
name_en: "Pak Tha"
|
|
124
|
+
name_lo: "ປາກທາ"
|
|
125
|
+
|
|
126
|
+
- code: "LA-LP"
|
|
127
|
+
name_en: "Luang Prabang"
|
|
128
|
+
name_lo: "ຫລວງພະບາງ"
|
|
129
|
+
districts:
|
|
130
|
+
- code: "0601"
|
|
131
|
+
name_en: "Luang Prabang"
|
|
132
|
+
name_lo: "ຫຼວງພະບາງ"
|
|
133
|
+
- code: "0602"
|
|
134
|
+
name_en: "Xiengngeun"
|
|
135
|
+
name_lo: "ຊຽງເງີນ"
|
|
136
|
+
- code: "0603"
|
|
137
|
+
name_en: "Nane"
|
|
138
|
+
name_lo: "ນານ"
|
|
139
|
+
- code: "0604"
|
|
140
|
+
name_en: "Pak Ou"
|
|
141
|
+
name_lo: "ປາກອູ"
|
|
142
|
+
- code: "0605"
|
|
143
|
+
name_en: "Nam Bak"
|
|
144
|
+
name_lo: "ນ້ຳບາກ"
|
|
145
|
+
- code: "0606"
|
|
146
|
+
name_en: "Ngoy"
|
|
147
|
+
name_lo: "ງອຍ"
|
|
148
|
+
- code: "0607"
|
|
149
|
+
name_en: "Pak Seng"
|
|
150
|
+
name_lo: "ປາກແຊງ"
|
|
151
|
+
- code: "0608"
|
|
152
|
+
name_en: "Phonxay"
|
|
153
|
+
name_lo: "ໂພນໄຊ"
|
|
154
|
+
- code: "0609"
|
|
155
|
+
name_en: "Chomphet"
|
|
156
|
+
name_lo: "ຈອມເພັດ"
|
|
157
|
+
- code: "0610"
|
|
158
|
+
name_en: "Viengkham"
|
|
159
|
+
name_lo: "ວຽງຄຳ"
|
|
160
|
+
- code: "0611"
|
|
161
|
+
name_en: "Phoukhoune"
|
|
162
|
+
name_lo: "ພູຄູນ"
|
|
163
|
+
- code: "0612"
|
|
164
|
+
name_en: "Phonthong"
|
|
165
|
+
name_lo: "ໂພນທອງ"
|
|
166
|
+
|
|
167
|
+
- code: "LA-HO"
|
|
168
|
+
name_en: "Houaphanh"
|
|
169
|
+
name_lo: "ຫົວພັນ"
|
|
170
|
+
districts:
|
|
171
|
+
- code: "0701"
|
|
172
|
+
name_en: "Xam Neua"
|
|
173
|
+
name_lo: "ຊຳເໜືອ"
|
|
174
|
+
- code: "0702"
|
|
175
|
+
name_en: "Xiengkho"
|
|
176
|
+
name_lo: "ຊຽງຄໍ້"
|
|
177
|
+
- code: "0703"
|
|
178
|
+
name_en: "Hiam"
|
|
179
|
+
name_lo: "ຮ້ຽມ"
|
|
180
|
+
- code: "0704"
|
|
181
|
+
name_en: "Viengxay"
|
|
182
|
+
name_lo: "ວຽງໄຊ"
|
|
183
|
+
- code: "0705"
|
|
184
|
+
name_en: "Houameuang"
|
|
185
|
+
name_lo: "ຫົວເມືອງ"
|
|
186
|
+
- code: "0706"
|
|
187
|
+
name_en: "Samtay"
|
|
188
|
+
name_lo: "ຊຳໃຕ້"
|
|
189
|
+
- code: "0707"
|
|
190
|
+
name_en: "Sop Bao"
|
|
191
|
+
name_lo: "ສົບເບົາ"
|
|
192
|
+
- code: "0708"
|
|
193
|
+
name_en: "Et"
|
|
194
|
+
name_lo: "ແອດ"
|
|
195
|
+
- code: "0709"
|
|
196
|
+
name_en: "Kone"
|
|
197
|
+
name_lo: "ກວັນ"
|
|
198
|
+
- code: "0710"
|
|
199
|
+
name_en: "Xon"
|
|
200
|
+
name_lo: "ຊ່ອນ"
|
|
201
|
+
|
|
202
|
+
- code: "LA-XA"
|
|
203
|
+
name_en: "Sainyabuli"
|
|
204
|
+
name_lo: "ໄຊຍະບູລີ"
|
|
205
|
+
districts:
|
|
206
|
+
- code: "0801"
|
|
207
|
+
name_en: "Sainyabuli"
|
|
208
|
+
name_lo: "ໄຊຍະບູລີ"
|
|
209
|
+
- code: "0802"
|
|
210
|
+
name_en: "Khop"
|
|
211
|
+
name_lo: "ຄອບ"
|
|
212
|
+
- code: "0803"
|
|
213
|
+
name_en: "Hongsa"
|
|
214
|
+
name_lo: "ຫົງສາ"
|
|
215
|
+
- code: "0804"
|
|
216
|
+
name_en: "Ngeun"
|
|
217
|
+
name_lo: "ເງີນ"
|
|
218
|
+
- code: "0805"
|
|
219
|
+
name_en: "Xienghone"
|
|
220
|
+
name_lo: "ຊຽງຮ່ອນ"
|
|
221
|
+
- code: "0806"
|
|
222
|
+
name_en: "Phiang"
|
|
223
|
+
name_lo: "ພຽງ"
|
|
224
|
+
- code: "0807"
|
|
225
|
+
name_en: "Parklai"
|
|
226
|
+
name_lo: "ປາກລາຍ"
|
|
227
|
+
- code: "0808"
|
|
228
|
+
name_en: "Kenethao"
|
|
229
|
+
name_lo: "ແກ່ນທ້າວ"
|
|
230
|
+
- code: "0809"
|
|
231
|
+
name_en: "Botene"
|
|
232
|
+
name_lo: "ບໍ່ແຕນ"
|
|
233
|
+
- code: "0810"
|
|
234
|
+
name_en: "Thongmyxay"
|
|
235
|
+
name_lo: "ທົ່ງມີໄຊ"
|
|
236
|
+
- code: "0811"
|
|
237
|
+
name_en: "Xaisathan"
|
|
238
|
+
name_lo: "ໄຊສະຖານ"
|
|
239
|
+
|
|
240
|
+
- code: "LA-XI"
|
|
241
|
+
name_en: "Xiangkhouang"
|
|
242
|
+
name_lo: "ຊຽງຂວາງ"
|
|
243
|
+
districts:
|
|
244
|
+
- code: "0901"
|
|
245
|
+
name_en: "Pek"
|
|
246
|
+
name_lo: "ແປກ"
|
|
247
|
+
- code: "0902"
|
|
248
|
+
name_en: "Kham"
|
|
249
|
+
name_lo: "ຄຳ"
|
|
250
|
+
- code: "0903"
|
|
251
|
+
name_en: "Nong Het"
|
|
252
|
+
name_lo: "ໜອງແຮດ"
|
|
253
|
+
- code: "0904"
|
|
254
|
+
name_en: "Khoune"
|
|
255
|
+
name_lo: "ຄູນ"
|
|
256
|
+
- code: "0905"
|
|
257
|
+
name_en: "Mok May"
|
|
258
|
+
name_lo: "ໝອກໄໝ່"
|
|
259
|
+
- code: "0906"
|
|
260
|
+
name_en: "Phou Kout"
|
|
261
|
+
name_lo: "ພູກູດ"
|
|
262
|
+
- code: "0907"
|
|
263
|
+
name_en: "Phaxay"
|
|
264
|
+
name_lo: "ຜາໄຊ"
|
|
265
|
+
|
|
266
|
+
- code: "LA-VI"
|
|
267
|
+
name_en: "Vientiane"
|
|
268
|
+
name_lo: "ວຽງຈັນ"
|
|
269
|
+
districts:
|
|
270
|
+
- code: "1001"
|
|
271
|
+
name_en: "Phonhong"
|
|
272
|
+
name_lo: "ໂພນໂຮງ"
|
|
273
|
+
- code: "1002"
|
|
274
|
+
name_en: "Thoulakhom"
|
|
275
|
+
name_lo: "ທຸລະຄົມ"
|
|
276
|
+
- code: "1003"
|
|
277
|
+
name_en: "Keo Oudom"
|
|
278
|
+
name_lo: "ແກ້ວອຸດົມ"
|
|
279
|
+
- code: "1004"
|
|
280
|
+
name_en: "Kasy"
|
|
281
|
+
name_lo: "ກາສີ"
|
|
282
|
+
- code: "1005"
|
|
283
|
+
name_en: "Vangvieng"
|
|
284
|
+
name_lo: "ວັງວຽງ"
|
|
285
|
+
- code: "1006"
|
|
286
|
+
name_en: "Feuang"
|
|
287
|
+
name_lo: "ເຟືອງ"
|
|
288
|
+
- code: "1007"
|
|
289
|
+
name_en: "Xanakharm"
|
|
290
|
+
name_lo: "ຊະນະຄາມ"
|
|
291
|
+
- code: "1008"
|
|
292
|
+
name_en: "Mad"
|
|
293
|
+
name_lo: "ແມດ"
|
|
294
|
+
- code: "1009"
|
|
295
|
+
name_en: "Viengkham"
|
|
296
|
+
name_lo: "ວຽງຄໍາ"
|
|
297
|
+
- code: "1010"
|
|
298
|
+
name_en: "Hinhurp"
|
|
299
|
+
name_lo: "ຫີນເຫີບ"
|
|
300
|
+
- code: "1011"
|
|
301
|
+
name_en: "Meun"
|
|
302
|
+
name_lo: "ໜື່ນ"
|
|
303
|
+
|
|
304
|
+
- code: "LA-BL"
|
|
305
|
+
name_en: "Bolikhamsai"
|
|
306
|
+
name_lo: "ບໍລິຄໍາໄຊ"
|
|
307
|
+
districts:
|
|
308
|
+
- code: "1101"
|
|
309
|
+
name_en: "Pakxan"
|
|
310
|
+
name_lo: "ປາກຊັນ"
|
|
311
|
+
- code: "1102"
|
|
312
|
+
name_en: "Thaphabat"
|
|
313
|
+
name_lo: "ທ່າພະບາດ"
|
|
314
|
+
- code: "1103"
|
|
315
|
+
name_en: "Pakkading"
|
|
316
|
+
name_lo: "ປາກກະດິງ"
|
|
317
|
+
- code: "1104"
|
|
318
|
+
name_en: "Borikhane"
|
|
319
|
+
name_lo: "ບໍລິຄັນ"
|
|
320
|
+
- code: "1105"
|
|
321
|
+
name_en: "Khamkeut"
|
|
322
|
+
name_lo: "ຄຳເກີດ"
|
|
323
|
+
- code: "1106"
|
|
324
|
+
name_en: "Viengthong"
|
|
325
|
+
name_lo: "ວຽງທອງ"
|
|
326
|
+
- code: "1107"
|
|
327
|
+
name_en: "Xaichamphon"
|
|
328
|
+
name_lo: "ໄຊຈຳພອນ"
|
|
329
|
+
|
|
330
|
+
- code: "LA-KH"
|
|
331
|
+
name_en: "Khammouane"
|
|
332
|
+
name_lo: "ຄໍາມ່ວນ"
|
|
333
|
+
districts:
|
|
334
|
+
- code: "1201"
|
|
335
|
+
name_en: "Thakhek"
|
|
336
|
+
name_lo: "ທ່າແຂກ"
|
|
337
|
+
- code: "1202"
|
|
338
|
+
name_en: "Mahaxay"
|
|
339
|
+
name_lo: "ມະຫາໄຊ"
|
|
340
|
+
- code: "1203"
|
|
341
|
+
name_en: "Nong Bok"
|
|
342
|
+
name_lo: "ໜອງບົກ"
|
|
343
|
+
- code: "1204"
|
|
344
|
+
name_en: "Hineboune"
|
|
345
|
+
name_lo: "ຫີນບູນ"
|
|
346
|
+
- code: "1205"
|
|
347
|
+
name_en: "Yommalath"
|
|
348
|
+
name_lo: "ຍົມມະລາດ"
|
|
349
|
+
- code: "1206"
|
|
350
|
+
name_en: "Boualapha"
|
|
351
|
+
name_lo: "ບົວລະພາ"
|
|
352
|
+
- code: "1207"
|
|
353
|
+
name_en: "Nakai"
|
|
354
|
+
name_lo: "ນາກາຍ"
|
|
355
|
+
- code: "1208"
|
|
356
|
+
name_en: "Sebangphay"
|
|
357
|
+
name_lo: "ເຊບັ້ງໄຟ"
|
|
358
|
+
- code: "1209"
|
|
359
|
+
name_en: "Xaibouathong"
|
|
360
|
+
name_lo: "ໄຊບົວທອງ"
|
|
361
|
+
- code: "1210"
|
|
362
|
+
name_en: "Kounkham"
|
|
363
|
+
name_lo: "ຄູນຄຳ"
|
|
364
|
+
|
|
365
|
+
- code: "LA-SV"
|
|
366
|
+
name_en: "Savannakhet"
|
|
367
|
+
name_lo: "ສະຫວັນນະເຂດ"
|
|
368
|
+
districts:
|
|
369
|
+
- code: "1301"
|
|
370
|
+
name_en: "Kaysone Phomvihane"
|
|
371
|
+
name_lo: "ໄກສອນ ພົມວິຫານ"
|
|
372
|
+
- code: "1302"
|
|
373
|
+
name_en: "Outhoumphone"
|
|
374
|
+
name_lo: "ອຸທຸມພອນ"
|
|
375
|
+
- code: "1303"
|
|
376
|
+
name_en: "Atsaphangthong"
|
|
377
|
+
name_lo: "ອາດສະພັງທອງ"
|
|
378
|
+
- code: "1304"
|
|
379
|
+
name_en: "Phine"
|
|
380
|
+
name_lo: "ພິນ"
|
|
381
|
+
- code: "1305"
|
|
382
|
+
name_en: "Seponh"
|
|
383
|
+
name_lo: "ເຊໂປນ"
|
|
384
|
+
- code: "1306"
|
|
385
|
+
name_en: "Nong"
|
|
386
|
+
name_lo: "ໜອງ"
|
|
387
|
+
- code: "1307"
|
|
388
|
+
name_en: "Thapangthong"
|
|
389
|
+
name_lo: "ທາພັງທອງ"
|
|
390
|
+
- code: "1308"
|
|
391
|
+
name_en: "Songkhone"
|
|
392
|
+
name_lo: "ສອງຄອນ"
|
|
393
|
+
- code: "1309"
|
|
394
|
+
name_en: "Champhone"
|
|
395
|
+
name_lo: "ຈຳພອນ"
|
|
396
|
+
- code: "1310"
|
|
397
|
+
name_en: "Xonaboury"
|
|
398
|
+
name_lo: "ຊົນນະບູລີ"
|
|
399
|
+
- code: "1311"
|
|
400
|
+
name_en: "Xayboury"
|
|
401
|
+
name_lo: "ໄຊບູລີ"
|
|
402
|
+
- code: "1312"
|
|
403
|
+
name_en: "Viraboury"
|
|
404
|
+
name_lo: "ວີລະບຸລີ"
|
|
405
|
+
- code: "1313"
|
|
406
|
+
name_en: "Assaphone"
|
|
407
|
+
name_lo: "ອາດສະພອນ"
|
|
408
|
+
- code: "1314"
|
|
409
|
+
name_en: "Xonboury"
|
|
410
|
+
name_lo: "ໄຊພູທອງ"
|
|
411
|
+
- code: "1315"
|
|
412
|
+
name_en: "Thaphalanxay"
|
|
413
|
+
name_lo: "ພະລານໄຊ"
|
|
414
|
+
|
|
415
|
+
- code: "LA-SL"
|
|
416
|
+
name_en: "Salavan"
|
|
417
|
+
name_lo: "ສາລະວັນ"
|
|
418
|
+
districts:
|
|
419
|
+
- code: "1401"
|
|
420
|
+
name_en: "Saravane"
|
|
421
|
+
name_lo: "ສາລະວັນ"
|
|
422
|
+
- code: "1402"
|
|
423
|
+
name_en: "Ta Oy"
|
|
424
|
+
name_lo: "ຕະໂອ້ຍ"
|
|
425
|
+
- code: "1403"
|
|
426
|
+
name_en: "Toumlane"
|
|
427
|
+
name_lo: "ຕຸ້ມລານ"
|
|
428
|
+
- code: "1404"
|
|
429
|
+
name_en: "Lakhonepheng"
|
|
430
|
+
name_lo: "ລະຄອນເພັງ"
|
|
431
|
+
- code: "1405"
|
|
432
|
+
name_en: "Vapy"
|
|
433
|
+
name_lo: "ວາປີ"
|
|
434
|
+
- code: "1406"
|
|
435
|
+
name_en: "Khongsedone"
|
|
436
|
+
name_lo: "ຄົງເຊໂດນ"
|
|
437
|
+
- code: "1407"
|
|
438
|
+
name_en: "Lao Ngam"
|
|
439
|
+
name_lo: "ເລົ່າງາມ"
|
|
440
|
+
- code: "1408"
|
|
441
|
+
name_en: "Sa Mouay"
|
|
442
|
+
name_lo: "ສະມ້ວຍ"
|
|
443
|
+
|
|
444
|
+
- code: "LA-XE"
|
|
445
|
+
name_en: "Sekong"
|
|
446
|
+
name_lo: "ເຊກອງ"
|
|
447
|
+
districts:
|
|
448
|
+
- code: "1501"
|
|
449
|
+
name_en: "La Mam"
|
|
450
|
+
name_lo: "ລະມາມ"
|
|
451
|
+
- code: "1502"
|
|
452
|
+
name_en: "Kaleum"
|
|
453
|
+
name_lo: "ກະເລິມ"
|
|
454
|
+
- code: "1503"
|
|
455
|
+
name_en: "Dak Cheung"
|
|
456
|
+
name_lo: "ດັກຈຶງ"
|
|
457
|
+
- code: "1504"
|
|
458
|
+
name_en: "Tha Teng"
|
|
459
|
+
name_lo: "ທ່າແຕງ"
|
|
460
|
+
|
|
461
|
+
- code: "LA-CH"
|
|
462
|
+
name_en: "Champasak"
|
|
463
|
+
name_lo: "ຈຳປາສັກ"
|
|
464
|
+
districts:
|
|
465
|
+
- code: "1601"
|
|
466
|
+
name_en: "Pakse"
|
|
467
|
+
name_lo: "ປາກເຊ"
|
|
468
|
+
- code: "1602"
|
|
469
|
+
name_en: "Sanasomboun"
|
|
470
|
+
name_lo: "ຊະນະສົມບູນ"
|
|
471
|
+
- code: "1603"
|
|
472
|
+
name_en: "Batiengchaleunsouk"
|
|
473
|
+
name_lo: "ບາຈຽງຈະເລີນສຸກ"
|
|
474
|
+
- code: "1604"
|
|
475
|
+
name_en: "Paksong"
|
|
476
|
+
name_lo: "ປາກຊ່ອງ"
|
|
477
|
+
- code: "1605"
|
|
478
|
+
name_en: "Pathouphone"
|
|
479
|
+
name_lo: "ປະທຸມພອນ"
|
|
480
|
+
- code: "1606"
|
|
481
|
+
name_en: "Phonthong"
|
|
482
|
+
name_lo: "ໂພນທອງ"
|
|
483
|
+
- code: "1607"
|
|
484
|
+
name_en: "Champassack"
|
|
485
|
+
name_lo: "ຈຳປາສັກ"
|
|
486
|
+
- code: "1608"
|
|
487
|
+
name_en: "Soukhoumma"
|
|
488
|
+
name_lo: "ສຸຂຸມາ"
|
|
489
|
+
- code: "1609"
|
|
490
|
+
name_en: "Mounlapamok"
|
|
491
|
+
name_lo: "ມູນລະປະໂມກ"
|
|
492
|
+
- code: "1610"
|
|
493
|
+
name_en: "Khong"
|
|
494
|
+
name_lo: "ໂຂງ"
|
|
495
|
+
|
|
496
|
+
- code: "LA-AT"
|
|
497
|
+
name_en: "Attapeu"
|
|
498
|
+
name_lo: "ອັດຕະປື"
|
|
499
|
+
districts:
|
|
500
|
+
- code: "1701"
|
|
501
|
+
name_en: "Saysetha"
|
|
502
|
+
name_lo: "ໄຊເສດຖາ"
|
|
503
|
+
- code: "1702"
|
|
504
|
+
name_en: "Samakkhixay"
|
|
505
|
+
name_lo: "ສາມັກຄີໄຊ"
|
|
506
|
+
- code: "1703"
|
|
507
|
+
name_en: "Sanamxay"
|
|
508
|
+
name_lo: "ສະໜາມໄຊ"
|
|
509
|
+
- code: "1704"
|
|
510
|
+
name_en: "Sanxay"
|
|
511
|
+
name_lo: "ສານໄຊ"
|
|
512
|
+
- code: "1705"
|
|
513
|
+
name_en: "Phouvong"
|
|
514
|
+
name_lo: "ພູວົງ"
|
|
515
|
+
|
|
516
|
+
- code: "LA-XS"
|
|
517
|
+
name_en: "Xaisomboun"
|
|
518
|
+
name_lo: "ໄຊສົມບູນ"
|
|
519
|
+
districts:
|
|
520
|
+
- code: "1801"
|
|
521
|
+
name_en: "Anouvong"
|
|
522
|
+
name_lo: "ອະນຸວົງ"
|
|
523
|
+
- code: "1802"
|
|
524
|
+
name_en: "Longchaeng"
|
|
525
|
+
name_lo: "ລ້ອງແຈ້ງ"
|
|
526
|
+
- code: "1803"
|
|
527
|
+
name_en: "Longxan"
|
|
528
|
+
name_lo: "ລ້ອງຊານ"
|
|
529
|
+
- code: "1804"
|
|
530
|
+
name_en: "Hom"
|
|
531
|
+
name_lo: "ຮົ່ມ"
|
|
532
|
+
- code: "1805"
|
|
533
|
+
name_en: "Thathom"
|
|
534
|
+
name_lo: "ທ່າໂທມ"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Baan
|
|
2
|
+
AdministrativeDivision = Data.define(:code, :name_en, :name_lo, :subdivisions, :parent_division) do
|
|
3
|
+
class << self
|
|
4
|
+
def all
|
|
5
|
+
data
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def [](code)
|
|
9
|
+
data[code]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
def data
|
|
15
|
+
@data ||= cache.data.fetch(self)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def cache
|
|
19
|
+
@cache ||= Cache.new
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
data/lib/baan/cache.rb
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Baan
|
|
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/baan/parser.rb
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require "yaml"
|
|
2
|
+
|
|
3
|
+
module Baan
|
|
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/baan/version.rb
ADDED
data/lib/baan.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"bootstrap-sha": "a5cb2c3881667534c63a973631295fbc7011c1fc",
|
|
3
|
+
"include-component-in-tag": false,
|
|
4
|
+
"version-file": "lib/baan/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
|
+
}
|
metadata
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: baan
|
|
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: A library containing Geodata for administrative regions in Laos
|
|
13
|
+
email:
|
|
14
|
+
- dwilkie@gmail.com
|
|
15
|
+
executables: []
|
|
16
|
+
extensions: []
|
|
17
|
+
extra_rdoc_files: []
|
|
18
|
+
files:
|
|
19
|
+
- ".release-please-manifest.json"
|
|
20
|
+
- ".rspec"
|
|
21
|
+
- ".rubocop.yml"
|
|
22
|
+
- ".tool-versions"
|
|
23
|
+
- CHANGELOG.md
|
|
24
|
+
- LICENSE.txt
|
|
25
|
+
- README.md
|
|
26
|
+
- Rakefile
|
|
27
|
+
- data/provinces.yml
|
|
28
|
+
- lib/baan.rb
|
|
29
|
+
- lib/baan/administrative_division.rb
|
|
30
|
+
- lib/baan/cache.rb
|
|
31
|
+
- lib/baan/district.rb
|
|
32
|
+
- lib/baan/parser.rb
|
|
33
|
+
- lib/baan/province.rb
|
|
34
|
+
- lib/baan/version.rb
|
|
35
|
+
- release-please-config.json
|
|
36
|
+
homepage: https://github.com/open-ews/baan
|
|
37
|
+
licenses:
|
|
38
|
+
- MIT
|
|
39
|
+
metadata:
|
|
40
|
+
homepage_uri: https://github.com/open-ews/baan
|
|
41
|
+
source_code_uri: https://github.com/open-ews/baan
|
|
42
|
+
changelog_uri: https://github.com/open-ews/baan/blob/main/CHANGELOG.md
|
|
43
|
+
rdoc_options: []
|
|
44
|
+
require_paths:
|
|
45
|
+
- lib
|
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
47
|
+
requirements:
|
|
48
|
+
- - ">="
|
|
49
|
+
- !ruby/object:Gem::Version
|
|
50
|
+
version: 3.4.0
|
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
52
|
+
requirements:
|
|
53
|
+
- - ">="
|
|
54
|
+
- !ruby/object:Gem::Version
|
|
55
|
+
version: '0'
|
|
56
|
+
requirements: []
|
|
57
|
+
rubygems_version: 3.6.7
|
|
58
|
+
specification_version: 4
|
|
59
|
+
summary: A library containing Geodata for administrative regions in Laos
|
|
60
|
+
test_files: []
|