basho 0.1.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.
Files changed (1022) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +23 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +311 -0
  5. data/Rakefile +12 -0
  6. data/app/assets/javascripts/controllers/basho/auto_fill_controller.js +34 -0
  7. data/app/assets/javascripts/controllers/basho/cascade_select_controller.js +77 -0
  8. data/app/controllers/basho/postal_codes_controller.rb +13 -0
  9. data/app/controllers/basho/prefectures_controller.rb +34 -0
  10. data/app/helpers/basho/form_helper.rb +22 -0
  11. data/app/views/basho/postal_codes/lookup.html.erb +9 -0
  12. data/config/importmap.rb +4 -0
  13. data/config/routes.rb +8 -0
  14. data/data/cities/01.json +1367 -0
  15. data/data/cities/02.json +282 -0
  16. data/data/cities/03.json +233 -0
  17. data/data/cities/04.json +282 -0
  18. data/data/cities/05.json +177 -0
  19. data/data/cities/06.json +247 -0
  20. data/data/cities/07.json +415 -0
  21. data/data/cities/08.json +310 -0
  22. data/data/cities/09.json +177 -0
  23. data/data/cities/10.json +247 -0
  24. data/data/cities/11.json +513 -0
  25. data/data/cities/12.json +422 -0
  26. data/data/cities/13.json +436 -0
  27. data/data/cities/14.json +429 -0
  28. data/data/cities/15.json +268 -0
  29. data/data/cities/16.json +107 -0
  30. data/data/cities/17.json +135 -0
  31. data/data/cities/18.json +121 -0
  32. data/data/cities/19.json +191 -0
  33. data/data/cities/20.json +541 -0
  34. data/data/cities/21.json +296 -0
  35. data/data/cities/22.json +289 -0
  36. data/data/cities/23.json +492 -0
  37. data/data/cities/24.json +205 -0
  38. data/data/cities/25.json +135 -0
  39. data/data/cities/26.json +261 -0
  40. data/data/cities/27.json +520 -0
  41. data/data/cities/28.json +352 -0
  42. data/data/cities/29.json +275 -0
  43. data/data/cities/30.json +212 -0
  44. data/data/cities/31.json +135 -0
  45. data/data/cities/32.json +135 -0
  46. data/data/cities/33.json +219 -0
  47. data/data/cities/34.json +219 -0
  48. data/data/cities/35.json +135 -0
  49. data/data/cities/36.json +170 -0
  50. data/data/cities/37.json +121 -0
  51. data/data/cities/38.json +142 -0
  52. data/data/cities/39.json +240 -0
  53. data/data/cities/40.json +520 -0
  54. data/data/cities/41.json +142 -0
  55. data/data/cities/42.json +149 -0
  56. data/data/cities/43.json +352 -0
  57. data/data/cities/44.json +128 -0
  58. data/data/cities/45.json +184 -0
  59. data/data/cities/46.json +303 -0
  60. data/data/cities/47.json +289 -0
  61. data/data/postal_codes/001.json +1 -0
  62. data/data/postal_codes/002.json +1 -0
  63. data/data/postal_codes/003.json +1 -0
  64. data/data/postal_codes/004.json +1 -0
  65. data/data/postal_codes/005.json +1 -0
  66. data/data/postal_codes/006.json +1 -0
  67. data/data/postal_codes/007.json +1 -0
  68. data/data/postal_codes/010.json +1 -0
  69. data/data/postal_codes/011.json +1 -0
  70. data/data/postal_codes/012.json +1 -0
  71. data/data/postal_codes/013.json +1 -0
  72. data/data/postal_codes/014.json +1 -0
  73. data/data/postal_codes/015.json +1 -0
  74. data/data/postal_codes/016.json +1 -0
  75. data/data/postal_codes/017.json +1 -0
  76. data/data/postal_codes/018.json +1 -0
  77. data/data/postal_codes/019.json +1 -0
  78. data/data/postal_codes/020.json +1 -0
  79. data/data/postal_codes/021.json +1 -0
  80. data/data/postal_codes/022.json +1 -0
  81. data/data/postal_codes/023.json +1 -0
  82. data/data/postal_codes/024.json +1 -0
  83. data/data/postal_codes/025.json +1 -0
  84. data/data/postal_codes/026.json +1 -0
  85. data/data/postal_codes/027.json +1 -0
  86. data/data/postal_codes/028.json +1 -0
  87. data/data/postal_codes/029.json +1 -0
  88. data/data/postal_codes/030.json +1 -0
  89. data/data/postal_codes/031.json +1 -0
  90. data/data/postal_codes/033.json +1 -0
  91. data/data/postal_codes/034.json +1 -0
  92. data/data/postal_codes/035.json +1 -0
  93. data/data/postal_codes/036.json +1 -0
  94. data/data/postal_codes/037.json +1 -0
  95. data/data/postal_codes/038.json +1 -0
  96. data/data/postal_codes/039.json +1 -0
  97. data/data/postal_codes/040.json +1 -0
  98. data/data/postal_codes/041.json +1 -0
  99. data/data/postal_codes/042.json +1 -0
  100. data/data/postal_codes/043.json +1 -0
  101. data/data/postal_codes/044.json +1 -0
  102. data/data/postal_codes/045.json +1 -0
  103. data/data/postal_codes/046.json +1 -0
  104. data/data/postal_codes/047.json +1 -0
  105. data/data/postal_codes/048.json +1 -0
  106. data/data/postal_codes/049.json +1 -0
  107. data/data/postal_codes/050.json +1 -0
  108. data/data/postal_codes/051.json +1 -0
  109. data/data/postal_codes/052.json +1 -0
  110. data/data/postal_codes/053.json +1 -0
  111. data/data/postal_codes/054.json +1 -0
  112. data/data/postal_codes/055.json +1 -0
  113. data/data/postal_codes/056.json +1 -0
  114. data/data/postal_codes/057.json +1 -0
  115. data/data/postal_codes/058.json +1 -0
  116. data/data/postal_codes/059.json +1 -0
  117. data/data/postal_codes/060.json +1 -0
  118. data/data/postal_codes/061.json +1 -0
  119. data/data/postal_codes/062.json +1 -0
  120. data/data/postal_codes/063.json +1 -0
  121. data/data/postal_codes/064.json +1 -0
  122. data/data/postal_codes/065.json +1 -0
  123. data/data/postal_codes/066.json +1 -0
  124. data/data/postal_codes/067.json +1 -0
  125. data/data/postal_codes/068.json +1 -0
  126. data/data/postal_codes/069.json +1 -0
  127. data/data/postal_codes/070.json +1 -0
  128. data/data/postal_codes/071.json +1 -0
  129. data/data/postal_codes/072.json +1 -0
  130. data/data/postal_codes/073.json +1 -0
  131. data/data/postal_codes/074.json +1 -0
  132. data/data/postal_codes/075.json +1 -0
  133. data/data/postal_codes/076.json +1 -0
  134. data/data/postal_codes/077.json +1 -0
  135. data/data/postal_codes/078.json +1 -0
  136. data/data/postal_codes/079.json +1 -0
  137. data/data/postal_codes/080.json +1 -0
  138. data/data/postal_codes/081.json +1 -0
  139. data/data/postal_codes/082.json +1 -0
  140. data/data/postal_codes/083.json +1 -0
  141. data/data/postal_codes/084.json +1 -0
  142. data/data/postal_codes/085.json +1 -0
  143. data/data/postal_codes/086.json +1 -0
  144. data/data/postal_codes/087.json +1 -0
  145. data/data/postal_codes/088.json +1 -0
  146. data/data/postal_codes/089.json +1 -0
  147. data/data/postal_codes/090.json +1 -0
  148. data/data/postal_codes/091.json +1 -0
  149. data/data/postal_codes/092.json +1 -0
  150. data/data/postal_codes/093.json +1 -0
  151. data/data/postal_codes/094.json +1 -0
  152. data/data/postal_codes/095.json +1 -0
  153. data/data/postal_codes/096.json +1 -0
  154. data/data/postal_codes/097.json +1 -0
  155. data/data/postal_codes/098.json +1 -0
  156. data/data/postal_codes/099.json +1 -0
  157. data/data/postal_codes/100.json +1 -0
  158. data/data/postal_codes/101.json +1 -0
  159. data/data/postal_codes/102.json +1 -0
  160. data/data/postal_codes/103.json +1 -0
  161. data/data/postal_codes/104.json +1 -0
  162. data/data/postal_codes/105.json +1 -0
  163. data/data/postal_codes/106.json +1 -0
  164. data/data/postal_codes/107.json +1 -0
  165. data/data/postal_codes/108.json +1 -0
  166. data/data/postal_codes/110.json +1 -0
  167. data/data/postal_codes/111.json +1 -0
  168. data/data/postal_codes/112.json +1 -0
  169. data/data/postal_codes/113.json +1 -0
  170. data/data/postal_codes/114.json +1 -0
  171. data/data/postal_codes/115.json +1 -0
  172. data/data/postal_codes/116.json +1 -0
  173. data/data/postal_codes/120.json +1 -0
  174. data/data/postal_codes/121.json +1 -0
  175. data/data/postal_codes/123.json +1 -0
  176. data/data/postal_codes/124.json +1 -0
  177. data/data/postal_codes/125.json +1 -0
  178. data/data/postal_codes/130.json +1 -0
  179. data/data/postal_codes/131.json +1 -0
  180. data/data/postal_codes/132.json +1 -0
  181. data/data/postal_codes/133.json +1 -0
  182. data/data/postal_codes/134.json +1 -0
  183. data/data/postal_codes/135.json +1 -0
  184. data/data/postal_codes/136.json +1 -0
  185. data/data/postal_codes/140.json +1 -0
  186. data/data/postal_codes/141.json +1 -0
  187. data/data/postal_codes/142.json +1 -0
  188. data/data/postal_codes/143.json +1 -0
  189. data/data/postal_codes/144.json +1 -0
  190. data/data/postal_codes/145.json +1 -0
  191. data/data/postal_codes/146.json +1 -0
  192. data/data/postal_codes/150.json +1 -0
  193. data/data/postal_codes/151.json +1 -0
  194. data/data/postal_codes/152.json +1 -0
  195. data/data/postal_codes/153.json +1 -0
  196. data/data/postal_codes/154.json +1 -0
  197. data/data/postal_codes/155.json +1 -0
  198. data/data/postal_codes/156.json +1 -0
  199. data/data/postal_codes/157.json +1 -0
  200. data/data/postal_codes/158.json +1 -0
  201. data/data/postal_codes/160.json +1 -0
  202. data/data/postal_codes/161.json +1 -0
  203. data/data/postal_codes/162.json +1 -0
  204. data/data/postal_codes/163.json +1 -0
  205. data/data/postal_codes/164.json +1 -0
  206. data/data/postal_codes/165.json +1 -0
  207. data/data/postal_codes/166.json +1 -0
  208. data/data/postal_codes/167.json +1 -0
  209. data/data/postal_codes/168.json +1 -0
  210. data/data/postal_codes/169.json +1 -0
  211. data/data/postal_codes/170.json +1 -0
  212. data/data/postal_codes/171.json +1 -0
  213. data/data/postal_codes/173.json +1 -0
  214. data/data/postal_codes/174.json +1 -0
  215. data/data/postal_codes/175.json +1 -0
  216. data/data/postal_codes/176.json +1 -0
  217. data/data/postal_codes/177.json +1 -0
  218. data/data/postal_codes/178.json +1 -0
  219. data/data/postal_codes/179.json +1 -0
  220. data/data/postal_codes/180.json +1 -0
  221. data/data/postal_codes/181.json +1 -0
  222. data/data/postal_codes/182.json +1 -0
  223. data/data/postal_codes/183.json +1 -0
  224. data/data/postal_codes/184.json +1 -0
  225. data/data/postal_codes/185.json +1 -0
  226. data/data/postal_codes/186.json +1 -0
  227. data/data/postal_codes/187.json +1 -0
  228. data/data/postal_codes/188.json +1 -0
  229. data/data/postal_codes/189.json +1 -0
  230. data/data/postal_codes/190.json +1 -0
  231. data/data/postal_codes/191.json +1 -0
  232. data/data/postal_codes/192.json +1 -0
  233. data/data/postal_codes/193.json +1 -0
  234. data/data/postal_codes/194.json +1 -0
  235. data/data/postal_codes/195.json +1 -0
  236. data/data/postal_codes/196.json +1 -0
  237. data/data/postal_codes/197.json +1 -0
  238. data/data/postal_codes/198.json +1 -0
  239. data/data/postal_codes/201.json +1 -0
  240. data/data/postal_codes/202.json +1 -0
  241. data/data/postal_codes/203.json +1 -0
  242. data/data/postal_codes/204.json +1 -0
  243. data/data/postal_codes/205.json +1 -0
  244. data/data/postal_codes/206.json +1 -0
  245. data/data/postal_codes/207.json +1 -0
  246. data/data/postal_codes/208.json +1 -0
  247. data/data/postal_codes/210.json +1 -0
  248. data/data/postal_codes/211.json +1 -0
  249. data/data/postal_codes/212.json +1 -0
  250. data/data/postal_codes/213.json +1 -0
  251. data/data/postal_codes/214.json +1 -0
  252. data/data/postal_codes/215.json +1 -0
  253. data/data/postal_codes/216.json +1 -0
  254. data/data/postal_codes/220.json +1 -0
  255. data/data/postal_codes/221.json +1 -0
  256. data/data/postal_codes/222.json +1 -0
  257. data/data/postal_codes/223.json +1 -0
  258. data/data/postal_codes/224.json +1 -0
  259. data/data/postal_codes/225.json +1 -0
  260. data/data/postal_codes/226.json +1 -0
  261. data/data/postal_codes/227.json +1 -0
  262. data/data/postal_codes/230.json +1 -0
  263. data/data/postal_codes/231.json +1 -0
  264. data/data/postal_codes/232.json +1 -0
  265. data/data/postal_codes/233.json +1 -0
  266. data/data/postal_codes/234.json +1 -0
  267. data/data/postal_codes/235.json +1 -0
  268. data/data/postal_codes/236.json +1 -0
  269. data/data/postal_codes/237.json +1 -0
  270. data/data/postal_codes/238.json +1 -0
  271. data/data/postal_codes/239.json +1 -0
  272. data/data/postal_codes/240.json +1 -0
  273. data/data/postal_codes/241.json +1 -0
  274. data/data/postal_codes/242.json +1 -0
  275. data/data/postal_codes/243.json +1 -0
  276. data/data/postal_codes/244.json +1 -0
  277. data/data/postal_codes/245.json +1 -0
  278. data/data/postal_codes/246.json +1 -0
  279. data/data/postal_codes/247.json +1 -0
  280. data/data/postal_codes/248.json +1 -0
  281. data/data/postal_codes/249.json +1 -0
  282. data/data/postal_codes/250.json +1 -0
  283. data/data/postal_codes/251.json +1 -0
  284. data/data/postal_codes/252.json +1 -0
  285. data/data/postal_codes/253.json +1 -0
  286. data/data/postal_codes/254.json +1 -0
  287. data/data/postal_codes/255.json +1 -0
  288. data/data/postal_codes/256.json +1 -0
  289. data/data/postal_codes/257.json +1 -0
  290. data/data/postal_codes/258.json +1 -0
  291. data/data/postal_codes/259.json +1 -0
  292. data/data/postal_codes/260.json +1 -0
  293. data/data/postal_codes/261.json +1 -0
  294. data/data/postal_codes/262.json +1 -0
  295. data/data/postal_codes/263.json +1 -0
  296. data/data/postal_codes/264.json +1 -0
  297. data/data/postal_codes/265.json +1 -0
  298. data/data/postal_codes/266.json +1 -0
  299. data/data/postal_codes/267.json +1 -0
  300. data/data/postal_codes/270.json +1 -0
  301. data/data/postal_codes/271.json +1 -0
  302. data/data/postal_codes/272.json +1 -0
  303. data/data/postal_codes/273.json +1 -0
  304. data/data/postal_codes/274.json +1 -0
  305. data/data/postal_codes/275.json +1 -0
  306. data/data/postal_codes/276.json +1 -0
  307. data/data/postal_codes/277.json +1 -0
  308. data/data/postal_codes/278.json +1 -0
  309. data/data/postal_codes/279.json +1 -0
  310. data/data/postal_codes/282.json +1 -0
  311. data/data/postal_codes/283.json +1 -0
  312. data/data/postal_codes/284.json +1 -0
  313. data/data/postal_codes/285.json +1 -0
  314. data/data/postal_codes/286.json +1 -0
  315. data/data/postal_codes/287.json +1 -0
  316. data/data/postal_codes/288.json +1 -0
  317. data/data/postal_codes/289.json +1 -0
  318. data/data/postal_codes/290.json +1 -0
  319. data/data/postal_codes/292.json +1 -0
  320. data/data/postal_codes/293.json +1 -0
  321. data/data/postal_codes/294.json +1 -0
  322. data/data/postal_codes/295.json +1 -0
  323. data/data/postal_codes/296.json +1 -0
  324. data/data/postal_codes/297.json +1 -0
  325. data/data/postal_codes/298.json +1 -0
  326. data/data/postal_codes/299.json +1 -0
  327. data/data/postal_codes/300.json +1 -0
  328. data/data/postal_codes/301.json +1 -0
  329. data/data/postal_codes/302.json +1 -0
  330. data/data/postal_codes/303.json +1 -0
  331. data/data/postal_codes/304.json +1 -0
  332. data/data/postal_codes/305.json +1 -0
  333. data/data/postal_codes/306.json +1 -0
  334. data/data/postal_codes/307.json +1 -0
  335. data/data/postal_codes/308.json +1 -0
  336. data/data/postal_codes/309.json +1 -0
  337. data/data/postal_codes/310.json +1 -0
  338. data/data/postal_codes/311.json +1 -0
  339. data/data/postal_codes/312.json +1 -0
  340. data/data/postal_codes/313.json +1 -0
  341. data/data/postal_codes/314.json +1 -0
  342. data/data/postal_codes/315.json +1 -0
  343. data/data/postal_codes/316.json +1 -0
  344. data/data/postal_codes/317.json +1 -0
  345. data/data/postal_codes/318.json +1 -0
  346. data/data/postal_codes/319.json +1 -0
  347. data/data/postal_codes/320.json +1 -0
  348. data/data/postal_codes/321.json +1 -0
  349. data/data/postal_codes/322.json +1 -0
  350. data/data/postal_codes/323.json +1 -0
  351. data/data/postal_codes/324.json +1 -0
  352. data/data/postal_codes/325.json +1 -0
  353. data/data/postal_codes/326.json +1 -0
  354. data/data/postal_codes/327.json +1 -0
  355. data/data/postal_codes/328.json +1 -0
  356. data/data/postal_codes/329.json +1 -0
  357. data/data/postal_codes/330.json +1 -0
  358. data/data/postal_codes/331.json +1 -0
  359. data/data/postal_codes/332.json +1 -0
  360. data/data/postal_codes/333.json +1 -0
  361. data/data/postal_codes/334.json +1 -0
  362. data/data/postal_codes/335.json +1 -0
  363. data/data/postal_codes/336.json +1 -0
  364. data/data/postal_codes/337.json +1 -0
  365. data/data/postal_codes/338.json +1 -0
  366. data/data/postal_codes/339.json +1 -0
  367. data/data/postal_codes/340.json +1 -0
  368. data/data/postal_codes/341.json +1 -0
  369. data/data/postal_codes/342.json +1 -0
  370. data/data/postal_codes/343.json +1 -0
  371. data/data/postal_codes/344.json +1 -0
  372. data/data/postal_codes/345.json +1 -0
  373. data/data/postal_codes/346.json +1 -0
  374. data/data/postal_codes/347.json +1 -0
  375. data/data/postal_codes/348.json +1 -0
  376. data/data/postal_codes/349.json +1 -0
  377. data/data/postal_codes/350.json +1 -0
  378. data/data/postal_codes/351.json +1 -0
  379. data/data/postal_codes/352.json +1 -0
  380. data/data/postal_codes/353.json +1 -0
  381. data/data/postal_codes/354.json +1 -0
  382. data/data/postal_codes/355.json +1 -0
  383. data/data/postal_codes/356.json +1 -0
  384. data/data/postal_codes/357.json +1 -0
  385. data/data/postal_codes/358.json +1 -0
  386. data/data/postal_codes/359.json +1 -0
  387. data/data/postal_codes/360.json +1 -0
  388. data/data/postal_codes/361.json +1 -0
  389. data/data/postal_codes/362.json +1 -0
  390. data/data/postal_codes/363.json +1 -0
  391. data/data/postal_codes/364.json +1 -0
  392. data/data/postal_codes/365.json +1 -0
  393. data/data/postal_codes/366.json +1 -0
  394. data/data/postal_codes/367.json +1 -0
  395. data/data/postal_codes/368.json +1 -0
  396. data/data/postal_codes/369.json +1 -0
  397. data/data/postal_codes/370.json +1 -0
  398. data/data/postal_codes/371.json +1 -0
  399. data/data/postal_codes/372.json +1 -0
  400. data/data/postal_codes/373.json +1 -0
  401. data/data/postal_codes/374.json +1 -0
  402. data/data/postal_codes/375.json +1 -0
  403. data/data/postal_codes/376.json +1 -0
  404. data/data/postal_codes/377.json +1 -0
  405. data/data/postal_codes/378.json +1 -0
  406. data/data/postal_codes/379.json +1 -0
  407. data/data/postal_codes/380.json +1 -0
  408. data/data/postal_codes/381.json +1 -0
  409. data/data/postal_codes/382.json +1 -0
  410. data/data/postal_codes/383.json +1 -0
  411. data/data/postal_codes/384.json +1 -0
  412. data/data/postal_codes/385.json +1 -0
  413. data/data/postal_codes/386.json +1 -0
  414. data/data/postal_codes/387.json +1 -0
  415. data/data/postal_codes/388.json +1 -0
  416. data/data/postal_codes/389.json +1 -0
  417. data/data/postal_codes/390.json +1 -0
  418. data/data/postal_codes/391.json +1 -0
  419. data/data/postal_codes/392.json +1 -0
  420. data/data/postal_codes/393.json +1 -0
  421. data/data/postal_codes/394.json +1 -0
  422. data/data/postal_codes/395.json +1 -0
  423. data/data/postal_codes/396.json +1 -0
  424. data/data/postal_codes/397.json +1 -0
  425. data/data/postal_codes/398.json +1 -0
  426. data/data/postal_codes/399.json +1 -0
  427. data/data/postal_codes/400.json +1 -0
  428. data/data/postal_codes/401.json +1 -0
  429. data/data/postal_codes/402.json +1 -0
  430. data/data/postal_codes/403.json +1 -0
  431. data/data/postal_codes/404.json +1 -0
  432. data/data/postal_codes/405.json +1 -0
  433. data/data/postal_codes/406.json +1 -0
  434. data/data/postal_codes/407.json +1 -0
  435. data/data/postal_codes/408.json +1 -0
  436. data/data/postal_codes/409.json +1 -0
  437. data/data/postal_codes/410.json +1 -0
  438. data/data/postal_codes/411.json +1 -0
  439. data/data/postal_codes/412.json +1 -0
  440. data/data/postal_codes/413.json +1 -0
  441. data/data/postal_codes/414.json +1 -0
  442. data/data/postal_codes/415.json +1 -0
  443. data/data/postal_codes/416.json +1 -0
  444. data/data/postal_codes/417.json +1 -0
  445. data/data/postal_codes/418.json +1 -0
  446. data/data/postal_codes/419.json +1 -0
  447. data/data/postal_codes/420.json +1 -0
  448. data/data/postal_codes/421.json +1 -0
  449. data/data/postal_codes/422.json +1 -0
  450. data/data/postal_codes/424.json +1 -0
  451. data/data/postal_codes/425.json +1 -0
  452. data/data/postal_codes/426.json +1 -0
  453. data/data/postal_codes/427.json +1 -0
  454. data/data/postal_codes/428.json +1 -0
  455. data/data/postal_codes/430.json +1 -0
  456. data/data/postal_codes/431.json +1 -0
  457. data/data/postal_codes/432.json +1 -0
  458. data/data/postal_codes/433.json +1 -0
  459. data/data/postal_codes/434.json +1 -0
  460. data/data/postal_codes/435.json +1 -0
  461. data/data/postal_codes/436.json +1 -0
  462. data/data/postal_codes/437.json +1 -0
  463. data/data/postal_codes/438.json +1 -0
  464. data/data/postal_codes/439.json +1 -0
  465. data/data/postal_codes/440.json +1 -0
  466. data/data/postal_codes/441.json +1 -0
  467. data/data/postal_codes/442.json +1 -0
  468. data/data/postal_codes/443.json +1 -0
  469. data/data/postal_codes/444.json +1 -0
  470. data/data/postal_codes/445.json +1 -0
  471. data/data/postal_codes/446.json +1 -0
  472. data/data/postal_codes/447.json +1 -0
  473. data/data/postal_codes/448.json +1 -0
  474. data/data/postal_codes/449.json +1 -0
  475. data/data/postal_codes/450.json +1 -0
  476. data/data/postal_codes/451.json +1 -0
  477. data/data/postal_codes/452.json +1 -0
  478. data/data/postal_codes/453.json +1 -0
  479. data/data/postal_codes/454.json +1 -0
  480. data/data/postal_codes/455.json +1 -0
  481. data/data/postal_codes/456.json +1 -0
  482. data/data/postal_codes/457.json +1 -0
  483. data/data/postal_codes/458.json +1 -0
  484. data/data/postal_codes/459.json +1 -0
  485. data/data/postal_codes/460.json +1 -0
  486. data/data/postal_codes/461.json +1 -0
  487. data/data/postal_codes/462.json +1 -0
  488. data/data/postal_codes/463.json +1 -0
  489. data/data/postal_codes/464.json +1 -0
  490. data/data/postal_codes/465.json +1 -0
  491. data/data/postal_codes/466.json +1 -0
  492. data/data/postal_codes/467.json +1 -0
  493. data/data/postal_codes/468.json +1 -0
  494. data/data/postal_codes/470.json +1 -0
  495. data/data/postal_codes/471.json +1 -0
  496. data/data/postal_codes/472.json +1 -0
  497. data/data/postal_codes/473.json +1 -0
  498. data/data/postal_codes/474.json +1 -0
  499. data/data/postal_codes/475.json +1 -0
  500. data/data/postal_codes/476.json +1 -0
  501. data/data/postal_codes/477.json +1 -0
  502. data/data/postal_codes/478.json +1 -0
  503. data/data/postal_codes/479.json +1 -0
  504. data/data/postal_codes/480.json +1 -0
  505. data/data/postal_codes/481.json +1 -0
  506. data/data/postal_codes/482.json +1 -0
  507. data/data/postal_codes/483.json +1 -0
  508. data/data/postal_codes/484.json +1 -0
  509. data/data/postal_codes/485.json +1 -0
  510. data/data/postal_codes/486.json +1 -0
  511. data/data/postal_codes/487.json +1 -0
  512. data/data/postal_codes/488.json +1 -0
  513. data/data/postal_codes/489.json +1 -0
  514. data/data/postal_codes/490.json +1 -0
  515. data/data/postal_codes/491.json +1 -0
  516. data/data/postal_codes/492.json +1 -0
  517. data/data/postal_codes/493.json +1 -0
  518. data/data/postal_codes/494.json +1 -0
  519. data/data/postal_codes/495.json +1 -0
  520. data/data/postal_codes/496.json +1 -0
  521. data/data/postal_codes/497.json +1 -0
  522. data/data/postal_codes/498.json +1 -0
  523. data/data/postal_codes/500.json +1 -0
  524. data/data/postal_codes/501.json +1 -0
  525. data/data/postal_codes/502.json +1 -0
  526. data/data/postal_codes/503.json +1 -0
  527. data/data/postal_codes/504.json +1 -0
  528. data/data/postal_codes/505.json +1 -0
  529. data/data/postal_codes/506.json +1 -0
  530. data/data/postal_codes/507.json +1 -0
  531. data/data/postal_codes/508.json +1 -0
  532. data/data/postal_codes/509.json +1 -0
  533. data/data/postal_codes/510.json +1 -0
  534. data/data/postal_codes/511.json +1 -0
  535. data/data/postal_codes/512.json +1 -0
  536. data/data/postal_codes/513.json +1 -0
  537. data/data/postal_codes/514.json +1 -0
  538. data/data/postal_codes/515.json +1 -0
  539. data/data/postal_codes/516.json +1 -0
  540. data/data/postal_codes/517.json +1 -0
  541. data/data/postal_codes/518.json +1 -0
  542. data/data/postal_codes/519.json +1 -0
  543. data/data/postal_codes/520.json +1 -0
  544. data/data/postal_codes/521.json +1 -0
  545. data/data/postal_codes/522.json +1 -0
  546. data/data/postal_codes/523.json +1 -0
  547. data/data/postal_codes/524.json +1 -0
  548. data/data/postal_codes/525.json +1 -0
  549. data/data/postal_codes/526.json +1 -0
  550. data/data/postal_codes/527.json +1 -0
  551. data/data/postal_codes/528.json +1 -0
  552. data/data/postal_codes/529.json +1 -0
  553. data/data/postal_codes/530.json +1 -0
  554. data/data/postal_codes/531.json +1 -0
  555. data/data/postal_codes/532.json +1 -0
  556. data/data/postal_codes/533.json +1 -0
  557. data/data/postal_codes/534.json +1 -0
  558. data/data/postal_codes/535.json +1 -0
  559. data/data/postal_codes/536.json +1 -0
  560. data/data/postal_codes/537.json +1 -0
  561. data/data/postal_codes/538.json +1 -0
  562. data/data/postal_codes/539.json +1 -0
  563. data/data/postal_codes/540.json +1 -0
  564. data/data/postal_codes/541.json +1 -0
  565. data/data/postal_codes/542.json +1 -0
  566. data/data/postal_codes/543.json +1 -0
  567. data/data/postal_codes/544.json +1 -0
  568. data/data/postal_codes/545.json +1 -0
  569. data/data/postal_codes/546.json +1 -0
  570. data/data/postal_codes/547.json +1 -0
  571. data/data/postal_codes/549.json +1 -0
  572. data/data/postal_codes/550.json +1 -0
  573. data/data/postal_codes/551.json +1 -0
  574. data/data/postal_codes/552.json +1 -0
  575. data/data/postal_codes/553.json +1 -0
  576. data/data/postal_codes/554.json +1 -0
  577. data/data/postal_codes/555.json +1 -0
  578. data/data/postal_codes/556.json +1 -0
  579. data/data/postal_codes/557.json +1 -0
  580. data/data/postal_codes/558.json +1 -0
  581. data/data/postal_codes/559.json +1 -0
  582. data/data/postal_codes/560.json +1 -0
  583. data/data/postal_codes/561.json +1 -0
  584. data/data/postal_codes/562.json +1 -0
  585. data/data/postal_codes/563.json +1 -0
  586. data/data/postal_codes/564.json +1 -0
  587. data/data/postal_codes/565.json +1 -0
  588. data/data/postal_codes/566.json +1 -0
  589. data/data/postal_codes/567.json +1 -0
  590. data/data/postal_codes/568.json +1 -0
  591. data/data/postal_codes/569.json +1 -0
  592. data/data/postal_codes/570.json +1 -0
  593. data/data/postal_codes/571.json +1 -0
  594. data/data/postal_codes/572.json +1 -0
  595. data/data/postal_codes/573.json +1 -0
  596. data/data/postal_codes/574.json +1 -0
  597. data/data/postal_codes/575.json +1 -0
  598. data/data/postal_codes/576.json +1 -0
  599. data/data/postal_codes/577.json +1 -0
  600. data/data/postal_codes/578.json +1 -0
  601. data/data/postal_codes/579.json +1 -0
  602. data/data/postal_codes/580.json +1 -0
  603. data/data/postal_codes/581.json +1 -0
  604. data/data/postal_codes/582.json +1 -0
  605. data/data/postal_codes/583.json +1 -0
  606. data/data/postal_codes/584.json +1 -0
  607. data/data/postal_codes/585.json +1 -0
  608. data/data/postal_codes/586.json +1 -0
  609. data/data/postal_codes/587.json +1 -0
  610. data/data/postal_codes/589.json +1 -0
  611. data/data/postal_codes/590.json +1 -0
  612. data/data/postal_codes/591.json +1 -0
  613. data/data/postal_codes/592.json +1 -0
  614. data/data/postal_codes/593.json +1 -0
  615. data/data/postal_codes/594.json +1 -0
  616. data/data/postal_codes/595.json +1 -0
  617. data/data/postal_codes/596.json +1 -0
  618. data/data/postal_codes/597.json +1 -0
  619. data/data/postal_codes/598.json +1 -0
  620. data/data/postal_codes/599.json +1 -0
  621. data/data/postal_codes/600.json +1 -0
  622. data/data/postal_codes/601.json +1 -0
  623. data/data/postal_codes/602.json +1 -0
  624. data/data/postal_codes/603.json +1 -0
  625. data/data/postal_codes/604.json +1 -0
  626. data/data/postal_codes/605.json +1 -0
  627. data/data/postal_codes/606.json +1 -0
  628. data/data/postal_codes/607.json +1 -0
  629. data/data/postal_codes/610.json +1 -0
  630. data/data/postal_codes/611.json +1 -0
  631. data/data/postal_codes/612.json +1 -0
  632. data/data/postal_codes/613.json +1 -0
  633. data/data/postal_codes/614.json +1 -0
  634. data/data/postal_codes/615.json +1 -0
  635. data/data/postal_codes/616.json +1 -0
  636. data/data/postal_codes/617.json +1 -0
  637. data/data/postal_codes/618.json +1 -0
  638. data/data/postal_codes/619.json +1 -0
  639. data/data/postal_codes/620.json +1 -0
  640. data/data/postal_codes/621.json +1 -0
  641. data/data/postal_codes/622.json +1 -0
  642. data/data/postal_codes/623.json +1 -0
  643. data/data/postal_codes/624.json +1 -0
  644. data/data/postal_codes/625.json +1 -0
  645. data/data/postal_codes/626.json +1 -0
  646. data/data/postal_codes/627.json +1 -0
  647. data/data/postal_codes/629.json +1 -0
  648. data/data/postal_codes/630.json +1 -0
  649. data/data/postal_codes/631.json +1 -0
  650. data/data/postal_codes/632.json +1 -0
  651. data/data/postal_codes/633.json +1 -0
  652. data/data/postal_codes/634.json +1 -0
  653. data/data/postal_codes/635.json +1 -0
  654. data/data/postal_codes/636.json +1 -0
  655. data/data/postal_codes/637.json +1 -0
  656. data/data/postal_codes/638.json +1 -0
  657. data/data/postal_codes/639.json +1 -0
  658. data/data/postal_codes/640.json +1 -0
  659. data/data/postal_codes/641.json +1 -0
  660. data/data/postal_codes/642.json +1 -0
  661. data/data/postal_codes/643.json +1 -0
  662. data/data/postal_codes/644.json +1 -0
  663. data/data/postal_codes/645.json +1 -0
  664. data/data/postal_codes/646.json +1 -0
  665. data/data/postal_codes/647.json +1 -0
  666. data/data/postal_codes/648.json +1 -0
  667. data/data/postal_codes/649.json +1 -0
  668. data/data/postal_codes/650.json +1 -0
  669. data/data/postal_codes/651.json +1 -0
  670. data/data/postal_codes/652.json +1 -0
  671. data/data/postal_codes/653.json +1 -0
  672. data/data/postal_codes/654.json +1 -0
  673. data/data/postal_codes/655.json +1 -0
  674. data/data/postal_codes/656.json +1 -0
  675. data/data/postal_codes/657.json +1 -0
  676. data/data/postal_codes/658.json +1 -0
  677. data/data/postal_codes/659.json +1 -0
  678. data/data/postal_codes/660.json +1 -0
  679. data/data/postal_codes/661.json +1 -0
  680. data/data/postal_codes/662.json +1 -0
  681. data/data/postal_codes/663.json +1 -0
  682. data/data/postal_codes/664.json +1 -0
  683. data/data/postal_codes/665.json +1 -0
  684. data/data/postal_codes/666.json +1 -0
  685. data/data/postal_codes/667.json +1 -0
  686. data/data/postal_codes/668.json +1 -0
  687. data/data/postal_codes/669.json +1 -0
  688. data/data/postal_codes/670.json +1 -0
  689. data/data/postal_codes/671.json +1 -0
  690. data/data/postal_codes/672.json +1 -0
  691. data/data/postal_codes/673.json +1 -0
  692. data/data/postal_codes/674.json +1 -0
  693. data/data/postal_codes/675.json +1 -0
  694. data/data/postal_codes/676.json +1 -0
  695. data/data/postal_codes/677.json +1 -0
  696. data/data/postal_codes/678.json +1 -0
  697. data/data/postal_codes/679.json +1 -0
  698. data/data/postal_codes/680.json +1 -0
  699. data/data/postal_codes/681.json +1 -0
  700. data/data/postal_codes/682.json +1 -0
  701. data/data/postal_codes/683.json +1 -0
  702. data/data/postal_codes/684.json +1 -0
  703. data/data/postal_codes/685.json +1 -0
  704. data/data/postal_codes/689.json +1 -0
  705. data/data/postal_codes/690.json +1 -0
  706. data/data/postal_codes/691.json +1 -0
  707. data/data/postal_codes/692.json +1 -0
  708. data/data/postal_codes/693.json +1 -0
  709. data/data/postal_codes/694.json +1 -0
  710. data/data/postal_codes/695.json +1 -0
  711. data/data/postal_codes/696.json +1 -0
  712. data/data/postal_codes/697.json +1 -0
  713. data/data/postal_codes/698.json +1 -0
  714. data/data/postal_codes/699.json +1 -0
  715. data/data/postal_codes/700.json +1 -0
  716. data/data/postal_codes/701.json +1 -0
  717. data/data/postal_codes/702.json +1 -0
  718. data/data/postal_codes/703.json +1 -0
  719. data/data/postal_codes/704.json +1 -0
  720. data/data/postal_codes/705.json +1 -0
  721. data/data/postal_codes/706.json +1 -0
  722. data/data/postal_codes/707.json +1 -0
  723. data/data/postal_codes/708.json +1 -0
  724. data/data/postal_codes/709.json +1 -0
  725. data/data/postal_codes/710.json +1 -0
  726. data/data/postal_codes/711.json +1 -0
  727. data/data/postal_codes/712.json +1 -0
  728. data/data/postal_codes/713.json +1 -0
  729. data/data/postal_codes/714.json +1 -0
  730. data/data/postal_codes/715.json +1 -0
  731. data/data/postal_codes/716.json +1 -0
  732. data/data/postal_codes/717.json +1 -0
  733. data/data/postal_codes/718.json +1 -0
  734. data/data/postal_codes/719.json +1 -0
  735. data/data/postal_codes/720.json +1 -0
  736. data/data/postal_codes/721.json +1 -0
  737. data/data/postal_codes/722.json +1 -0
  738. data/data/postal_codes/723.json +1 -0
  739. data/data/postal_codes/725.json +1 -0
  740. data/data/postal_codes/726.json +1 -0
  741. data/data/postal_codes/727.json +1 -0
  742. data/data/postal_codes/728.json +1 -0
  743. data/data/postal_codes/729.json +1 -0
  744. data/data/postal_codes/730.json +1 -0
  745. data/data/postal_codes/731.json +1 -0
  746. data/data/postal_codes/732.json +1 -0
  747. data/data/postal_codes/733.json +1 -0
  748. data/data/postal_codes/734.json +1 -0
  749. data/data/postal_codes/735.json +1 -0
  750. data/data/postal_codes/736.json +1 -0
  751. data/data/postal_codes/737.json +1 -0
  752. data/data/postal_codes/738.json +1 -0
  753. data/data/postal_codes/739.json +1 -0
  754. data/data/postal_codes/740.json +1 -0
  755. data/data/postal_codes/741.json +1 -0
  756. data/data/postal_codes/742.json +1 -0
  757. data/data/postal_codes/743.json +1 -0
  758. data/data/postal_codes/744.json +1 -0
  759. data/data/postal_codes/745.json +1 -0
  760. data/data/postal_codes/746.json +1 -0
  761. data/data/postal_codes/747.json +1 -0
  762. data/data/postal_codes/749.json +1 -0
  763. data/data/postal_codes/750.json +1 -0
  764. data/data/postal_codes/751.json +1 -0
  765. data/data/postal_codes/752.json +1 -0
  766. data/data/postal_codes/753.json +1 -0
  767. data/data/postal_codes/754.json +1 -0
  768. data/data/postal_codes/755.json +1 -0
  769. data/data/postal_codes/756.json +1 -0
  770. data/data/postal_codes/757.json +1 -0
  771. data/data/postal_codes/758.json +1 -0
  772. data/data/postal_codes/759.json +1 -0
  773. data/data/postal_codes/760.json +1 -0
  774. data/data/postal_codes/761.json +1 -0
  775. data/data/postal_codes/762.json +1 -0
  776. data/data/postal_codes/763.json +1 -0
  777. data/data/postal_codes/764.json +1 -0
  778. data/data/postal_codes/765.json +1 -0
  779. data/data/postal_codes/766.json +1 -0
  780. data/data/postal_codes/767.json +1 -0
  781. data/data/postal_codes/768.json +1 -0
  782. data/data/postal_codes/769.json +1 -0
  783. data/data/postal_codes/770.json +1 -0
  784. data/data/postal_codes/771.json +1 -0
  785. data/data/postal_codes/772.json +1 -0
  786. data/data/postal_codes/773.json +1 -0
  787. data/data/postal_codes/774.json +1 -0
  788. data/data/postal_codes/775.json +1 -0
  789. data/data/postal_codes/776.json +1 -0
  790. data/data/postal_codes/777.json +1 -0
  791. data/data/postal_codes/778.json +1 -0
  792. data/data/postal_codes/779.json +1 -0
  793. data/data/postal_codes/780.json +1 -0
  794. data/data/postal_codes/781.json +1 -0
  795. data/data/postal_codes/782.json +1 -0
  796. data/data/postal_codes/783.json +1 -0
  797. data/data/postal_codes/784.json +1 -0
  798. data/data/postal_codes/785.json +1 -0
  799. data/data/postal_codes/786.json +1 -0
  800. data/data/postal_codes/787.json +1 -0
  801. data/data/postal_codes/788.json +1 -0
  802. data/data/postal_codes/789.json +1 -0
  803. data/data/postal_codes/790.json +1 -0
  804. data/data/postal_codes/791.json +1 -0
  805. data/data/postal_codes/792.json +1 -0
  806. data/data/postal_codes/793.json +1 -0
  807. data/data/postal_codes/794.json +1 -0
  808. data/data/postal_codes/795.json +1 -0
  809. data/data/postal_codes/796.json +1 -0
  810. data/data/postal_codes/797.json +1 -0
  811. data/data/postal_codes/798.json +1 -0
  812. data/data/postal_codes/799.json +1 -0
  813. data/data/postal_codes/800.json +1 -0
  814. data/data/postal_codes/801.json +1 -0
  815. data/data/postal_codes/802.json +1 -0
  816. data/data/postal_codes/803.json +1 -0
  817. data/data/postal_codes/804.json +1 -0
  818. data/data/postal_codes/805.json +1 -0
  819. data/data/postal_codes/806.json +1 -0
  820. data/data/postal_codes/807.json +1 -0
  821. data/data/postal_codes/808.json +1 -0
  822. data/data/postal_codes/809.json +1 -0
  823. data/data/postal_codes/810.json +1 -0
  824. data/data/postal_codes/811.json +1 -0
  825. data/data/postal_codes/812.json +1 -0
  826. data/data/postal_codes/813.json +1 -0
  827. data/data/postal_codes/814.json +1 -0
  828. data/data/postal_codes/815.json +1 -0
  829. data/data/postal_codes/816.json +1 -0
  830. data/data/postal_codes/817.json +1 -0
  831. data/data/postal_codes/818.json +1 -0
  832. data/data/postal_codes/819.json +1 -0
  833. data/data/postal_codes/820.json +1 -0
  834. data/data/postal_codes/821.json +1 -0
  835. data/data/postal_codes/822.json +1 -0
  836. data/data/postal_codes/823.json +1 -0
  837. data/data/postal_codes/824.json +1 -0
  838. data/data/postal_codes/825.json +1 -0
  839. data/data/postal_codes/826.json +1 -0
  840. data/data/postal_codes/827.json +1 -0
  841. data/data/postal_codes/828.json +1 -0
  842. data/data/postal_codes/829.json +1 -0
  843. data/data/postal_codes/830.json +1 -0
  844. data/data/postal_codes/831.json +1 -0
  845. data/data/postal_codes/832.json +1 -0
  846. data/data/postal_codes/833.json +1 -0
  847. data/data/postal_codes/834.json +1 -0
  848. data/data/postal_codes/835.json +1 -0
  849. data/data/postal_codes/836.json +1 -0
  850. data/data/postal_codes/837.json +1 -0
  851. data/data/postal_codes/838.json +1 -0
  852. data/data/postal_codes/839.json +1 -0
  853. data/data/postal_codes/840.json +1 -0
  854. data/data/postal_codes/841.json +1 -0
  855. data/data/postal_codes/842.json +1 -0
  856. data/data/postal_codes/843.json +1 -0
  857. data/data/postal_codes/844.json +1 -0
  858. data/data/postal_codes/845.json +1 -0
  859. data/data/postal_codes/846.json +1 -0
  860. data/data/postal_codes/847.json +1 -0
  861. data/data/postal_codes/848.json +1 -0
  862. data/data/postal_codes/849.json +1 -0
  863. data/data/postal_codes/850.json +1 -0
  864. data/data/postal_codes/851.json +1 -0
  865. data/data/postal_codes/852.json +1 -0
  866. data/data/postal_codes/853.json +1 -0
  867. data/data/postal_codes/854.json +1 -0
  868. data/data/postal_codes/855.json +1 -0
  869. data/data/postal_codes/856.json +1 -0
  870. data/data/postal_codes/857.json +1 -0
  871. data/data/postal_codes/858.json +1 -0
  872. data/data/postal_codes/859.json +1 -0
  873. data/data/postal_codes/860.json +1 -0
  874. data/data/postal_codes/861.json +1 -0
  875. data/data/postal_codes/862.json +1 -0
  876. data/data/postal_codes/863.json +1 -0
  877. data/data/postal_codes/864.json +1 -0
  878. data/data/postal_codes/865.json +1 -0
  879. data/data/postal_codes/866.json +1 -0
  880. data/data/postal_codes/867.json +1 -0
  881. data/data/postal_codes/868.json +1 -0
  882. data/data/postal_codes/869.json +1 -0
  883. data/data/postal_codes/870.json +1 -0
  884. data/data/postal_codes/871.json +1 -0
  885. data/data/postal_codes/872.json +1 -0
  886. data/data/postal_codes/873.json +1 -0
  887. data/data/postal_codes/874.json +1 -0
  888. data/data/postal_codes/875.json +1 -0
  889. data/data/postal_codes/876.json +1 -0
  890. data/data/postal_codes/877.json +1 -0
  891. data/data/postal_codes/878.json +1 -0
  892. data/data/postal_codes/879.json +1 -0
  893. data/data/postal_codes/880.json +1 -0
  894. data/data/postal_codes/881.json +1 -0
  895. data/data/postal_codes/882.json +1 -0
  896. data/data/postal_codes/883.json +1 -0
  897. data/data/postal_codes/884.json +1 -0
  898. data/data/postal_codes/885.json +1 -0
  899. data/data/postal_codes/886.json +1 -0
  900. data/data/postal_codes/887.json +1 -0
  901. data/data/postal_codes/888.json +1 -0
  902. data/data/postal_codes/889.json +1 -0
  903. data/data/postal_codes/890.json +1 -0
  904. data/data/postal_codes/891.json +1 -0
  905. data/data/postal_codes/892.json +1 -0
  906. data/data/postal_codes/893.json +1 -0
  907. data/data/postal_codes/894.json +1 -0
  908. data/data/postal_codes/895.json +1 -0
  909. data/data/postal_codes/896.json +1 -0
  910. data/data/postal_codes/897.json +1 -0
  911. data/data/postal_codes/898.json +1 -0
  912. data/data/postal_codes/899.json +1 -0
  913. data/data/postal_codes/900.json +1 -0
  914. data/data/postal_codes/901.json +1 -0
  915. data/data/postal_codes/902.json +1 -0
  916. data/data/postal_codes/903.json +1 -0
  917. data/data/postal_codes/904.json +1 -0
  918. data/data/postal_codes/905.json +1 -0
  919. data/data/postal_codes/906.json +1 -0
  920. data/data/postal_codes/907.json +1 -0
  921. data/data/postal_codes/910.json +1 -0
  922. data/data/postal_codes/911.json +1 -0
  923. data/data/postal_codes/912.json +1 -0
  924. data/data/postal_codes/913.json +1 -0
  925. data/data/postal_codes/914.json +1 -0
  926. data/data/postal_codes/915.json +1 -0
  927. data/data/postal_codes/916.json +1 -0
  928. data/data/postal_codes/917.json +1 -0
  929. data/data/postal_codes/918.json +1 -0
  930. data/data/postal_codes/919.json +1 -0
  931. data/data/postal_codes/920.json +1 -0
  932. data/data/postal_codes/921.json +1 -0
  933. data/data/postal_codes/922.json +1 -0
  934. data/data/postal_codes/923.json +1 -0
  935. data/data/postal_codes/924.json +1 -0
  936. data/data/postal_codes/925.json +1 -0
  937. data/data/postal_codes/926.json +1 -0
  938. data/data/postal_codes/927.json +1 -0
  939. data/data/postal_codes/928.json +1 -0
  940. data/data/postal_codes/929.json +1 -0
  941. data/data/postal_codes/930.json +1 -0
  942. data/data/postal_codes/931.json +1 -0
  943. data/data/postal_codes/932.json +1 -0
  944. data/data/postal_codes/933.json +1 -0
  945. data/data/postal_codes/934.json +1 -0
  946. data/data/postal_codes/935.json +1 -0
  947. data/data/postal_codes/936.json +1 -0
  948. data/data/postal_codes/937.json +1 -0
  949. data/data/postal_codes/938.json +1 -0
  950. data/data/postal_codes/939.json +1 -0
  951. data/data/postal_codes/940.json +1 -0
  952. data/data/postal_codes/941.json +1 -0
  953. data/data/postal_codes/942.json +1 -0
  954. data/data/postal_codes/943.json +1 -0
  955. data/data/postal_codes/944.json +1 -0
  956. data/data/postal_codes/945.json +1 -0
  957. data/data/postal_codes/946.json +1 -0
  958. data/data/postal_codes/947.json +1 -0
  959. data/data/postal_codes/948.json +1 -0
  960. data/data/postal_codes/949.json +1 -0
  961. data/data/postal_codes/950.json +1 -0
  962. data/data/postal_codes/951.json +1 -0
  963. data/data/postal_codes/952.json +1 -0
  964. data/data/postal_codes/953.json +1 -0
  965. data/data/postal_codes/954.json +1 -0
  966. data/data/postal_codes/955.json +1 -0
  967. data/data/postal_codes/956.json +1 -0
  968. data/data/postal_codes/957.json +1 -0
  969. data/data/postal_codes/958.json +1 -0
  970. data/data/postal_codes/959.json +1 -0
  971. data/data/postal_codes/960.json +1 -0
  972. data/data/postal_codes/961.json +1 -0
  973. data/data/postal_codes/962.json +1 -0
  974. data/data/postal_codes/963.json +1 -0
  975. data/data/postal_codes/964.json +1 -0
  976. data/data/postal_codes/965.json +1 -0
  977. data/data/postal_codes/966.json +1 -0
  978. data/data/postal_codes/967.json +1 -0
  979. data/data/postal_codes/968.json +1 -0
  980. data/data/postal_codes/969.json +1 -0
  981. data/data/postal_codes/970.json +1 -0
  982. data/data/postal_codes/971.json +1 -0
  983. data/data/postal_codes/972.json +1 -0
  984. data/data/postal_codes/973.json +1 -0
  985. data/data/postal_codes/974.json +1 -0
  986. data/data/postal_codes/975.json +1 -0
  987. data/data/postal_codes/976.json +1 -0
  988. data/data/postal_codes/979.json +1 -0
  989. data/data/postal_codes/980.json +1 -0
  990. data/data/postal_codes/981.json +1 -0
  991. data/data/postal_codes/982.json +1 -0
  992. data/data/postal_codes/983.json +1 -0
  993. data/data/postal_codes/984.json +1 -0
  994. data/data/postal_codes/985.json +1 -0
  995. data/data/postal_codes/986.json +1 -0
  996. data/data/postal_codes/987.json +1 -0
  997. data/data/postal_codes/988.json +1 -0
  998. data/data/postal_codes/989.json +1 -0
  999. data/data/postal_codes/990.json +1 -0
  1000. data/data/postal_codes/991.json +1 -0
  1001. data/data/postal_codes/992.json +1 -0
  1002. data/data/postal_codes/993.json +1 -0
  1003. data/data/postal_codes/994.json +1 -0
  1004. data/data/postal_codes/995.json +1 -0
  1005. data/data/postal_codes/996.json +1 -0
  1006. data/data/postal_codes/997.json +1 -0
  1007. data/data/postal_codes/998.json +1 -0
  1008. data/data/postal_codes/999.json +1 -0
  1009. data/data/prefectures.json +472 -0
  1010. data/lib/basho/active_record/base.rb +38 -0
  1011. data/lib/basho/active_record/postal_auto_resolve.rb +73 -0
  1012. data/lib/basho/city.rb +43 -0
  1013. data/lib/basho/code_validator.rb +29 -0
  1014. data/lib/basho/data/loader.rb +47 -0
  1015. data/lib/basho/engine.rb +16 -0
  1016. data/lib/basho/postal_code.rb +32 -0
  1017. data/lib/basho/prefecture.rb +54 -0
  1018. data/lib/basho/region.rb +28 -0
  1019. data/lib/basho/version.rb +5 -0
  1020. data/lib/basho.rb +19 -0
  1021. data/sig/basho.rbs +4 -0
  1022. metadata +1064 -0
@@ -0,0 +1,472 @@
1
+ [
2
+ {
3
+ "code": 1,
4
+ "name": "北海道",
5
+ "region": "北海道",
6
+ "type": "道",
7
+ "capital_code": "011002",
8
+ "name_en": "Hokkaido",
9
+ "name_kana": "ホッカイドウ",
10
+ "name_hiragana": "ほっかいどう"
11
+ },
12
+ {
13
+ "code": 2,
14
+ "name": "青森県",
15
+ "region": "東北",
16
+ "type": "県",
17
+ "capital_code": "022012",
18
+ "name_en": "Aomori",
19
+ "name_kana": "アオモリケン",
20
+ "name_hiragana": "あおもりけん"
21
+ },
22
+ {
23
+ "code": 3,
24
+ "name": "岩手県",
25
+ "region": "東北",
26
+ "type": "県",
27
+ "capital_code": "032018",
28
+ "name_en": "Iwate",
29
+ "name_kana": "イワテケン",
30
+ "name_hiragana": "いわてけん"
31
+ },
32
+ {
33
+ "code": 4,
34
+ "name": "宮城県",
35
+ "region": "東北",
36
+ "type": "県",
37
+ "capital_code": "041009",
38
+ "name_en": "Miyagi",
39
+ "name_kana": "ミヤギケン",
40
+ "name_hiragana": "みやぎけん"
41
+ },
42
+ {
43
+ "code": 5,
44
+ "name": "秋田県",
45
+ "region": "東北",
46
+ "type": "県",
47
+ "capital_code": "052019",
48
+ "name_en": "Akita",
49
+ "name_kana": "アキタケン",
50
+ "name_hiragana": "あきたけん"
51
+ },
52
+ {
53
+ "code": 6,
54
+ "name": "山形県",
55
+ "region": "東北",
56
+ "type": "県",
57
+ "capital_code": "062014",
58
+ "name_en": "Yamagata",
59
+ "name_kana": "ヤマガタケン",
60
+ "name_hiragana": "やまがたけん"
61
+ },
62
+ {
63
+ "code": 7,
64
+ "name": "福島県",
65
+ "region": "東北",
66
+ "type": "県",
67
+ "capital_code": "072010",
68
+ "name_en": "Fukushima",
69
+ "name_kana": "フクシマケン",
70
+ "name_hiragana": "ふくしまけん"
71
+ },
72
+ {
73
+ "code": 8,
74
+ "name": "茨城県",
75
+ "region": "関東",
76
+ "type": "県",
77
+ "capital_code": "082015",
78
+ "name_en": "Ibaraki",
79
+ "name_kana": "イバラキケン",
80
+ "name_hiragana": "いばらきけん"
81
+ },
82
+ {
83
+ "code": 9,
84
+ "name": "栃木県",
85
+ "region": "関東",
86
+ "type": "県",
87
+ "capital_code": "092011",
88
+ "name_en": "Tochigi",
89
+ "name_kana": "トチギケン",
90
+ "name_hiragana": "とちぎけん"
91
+ },
92
+ {
93
+ "code": 10,
94
+ "name": "群馬県",
95
+ "region": "関東",
96
+ "type": "県",
97
+ "capital_code": "102016",
98
+ "name_en": "Gunma",
99
+ "name_kana": "グンマケン",
100
+ "name_hiragana": "ぐんまけん"
101
+ },
102
+ {
103
+ "code": 11,
104
+ "name": "埼玉県",
105
+ "region": "関東",
106
+ "type": "県",
107
+ "capital_code": "111007",
108
+ "name_en": "Saitama",
109
+ "name_kana": "サイタマケン",
110
+ "name_hiragana": "さいたまけん"
111
+ },
112
+ {
113
+ "code": 12,
114
+ "name": "千葉県",
115
+ "region": "関東",
116
+ "type": "県",
117
+ "capital_code": "121002",
118
+ "name_en": "Chiba",
119
+ "name_kana": "チバケン",
120
+ "name_hiragana": "ちばけん"
121
+ },
122
+ {
123
+ "code": 13,
124
+ "name": "東京都",
125
+ "region": "関東",
126
+ "type": "都",
127
+ "capital_code": "131041",
128
+ "name_en": "Tokyo",
129
+ "name_kana": "トウキョウト",
130
+ "name_hiragana": "とうきょうと"
131
+ },
132
+ {
133
+ "code": 14,
134
+ "name": "神奈川県",
135
+ "region": "関東",
136
+ "type": "県",
137
+ "capital_code": "141003",
138
+ "name_en": "Kanagawa",
139
+ "name_kana": "カナガワケン",
140
+ "name_hiragana": "かながわけん"
141
+ },
142
+ {
143
+ "code": 15,
144
+ "name": "新潟県",
145
+ "region": "中部",
146
+ "type": "県",
147
+ "capital_code": "151009",
148
+ "name_en": "Niigata",
149
+ "name_kana": "ニイガタケン",
150
+ "name_hiragana": "にいがたけん"
151
+ },
152
+ {
153
+ "code": 16,
154
+ "name": "富山県",
155
+ "region": "中部",
156
+ "type": "県",
157
+ "capital_code": "162019",
158
+ "name_en": "Toyama",
159
+ "name_kana": "トヤマケン",
160
+ "name_hiragana": "とやまけん"
161
+ },
162
+ {
163
+ "code": 17,
164
+ "name": "石川県",
165
+ "region": "中部",
166
+ "type": "県",
167
+ "capital_code": "172014",
168
+ "name_en": "Ishikawa",
169
+ "name_kana": "イシカワケン",
170
+ "name_hiragana": "いしかわけん"
171
+ },
172
+ {
173
+ "code": 18,
174
+ "name": "福井県",
175
+ "region": "中部",
176
+ "type": "県",
177
+ "capital_code": "182010",
178
+ "name_en": "Fukui",
179
+ "name_kana": "フクイケン",
180
+ "name_hiragana": "ふくいけん"
181
+ },
182
+ {
183
+ "code": 19,
184
+ "name": "山梨県",
185
+ "region": "中部",
186
+ "type": "県",
187
+ "capital_code": "192015",
188
+ "name_en": "Yamanashi",
189
+ "name_kana": "ヤマナシケン",
190
+ "name_hiragana": "やまなしけん"
191
+ },
192
+ {
193
+ "code": 20,
194
+ "name": "長野県",
195
+ "region": "中部",
196
+ "type": "県",
197
+ "capital_code": "202011",
198
+ "name_en": "Nagano",
199
+ "name_kana": "ナガノケン",
200
+ "name_hiragana": "ながのけん"
201
+ },
202
+ {
203
+ "code": 21,
204
+ "name": "岐阜県",
205
+ "region": "中部",
206
+ "type": "県",
207
+ "capital_code": "212016",
208
+ "name_en": "Gifu",
209
+ "name_kana": "ギフケン",
210
+ "name_hiragana": "ぎふけん"
211
+ },
212
+ {
213
+ "code": 22,
214
+ "name": "静岡県",
215
+ "region": "中部",
216
+ "type": "県",
217
+ "capital_code": "221007",
218
+ "name_en": "Shizuoka",
219
+ "name_kana": "シズオカケン",
220
+ "name_hiragana": "しずおかけん"
221
+ },
222
+ {
223
+ "code": 23,
224
+ "name": "愛知県",
225
+ "region": "中部",
226
+ "type": "県",
227
+ "capital_code": "231002",
228
+ "name_en": "Aichi",
229
+ "name_kana": "アイチケン",
230
+ "name_hiragana": "あいちけん"
231
+ },
232
+ {
233
+ "code": 24,
234
+ "name": "三重県",
235
+ "region": "近畿",
236
+ "type": "県",
237
+ "capital_code": "242012",
238
+ "name_en": "Mie",
239
+ "name_kana": "ミエケン",
240
+ "name_hiragana": "みえけん"
241
+ },
242
+ {
243
+ "code": 25,
244
+ "name": "滋賀県",
245
+ "region": "近畿",
246
+ "type": "県",
247
+ "capital_code": "252018",
248
+ "name_en": "Shiga",
249
+ "name_kana": "シガケン",
250
+ "name_hiragana": "しがけん"
251
+ },
252
+ {
253
+ "code": 26,
254
+ "name": "京都府",
255
+ "region": "近畿",
256
+ "type": "府",
257
+ "capital_code": "261009",
258
+ "name_en": "Kyoto",
259
+ "name_kana": "キョウトフ",
260
+ "name_hiragana": "きょうとふ"
261
+ },
262
+ {
263
+ "code": 27,
264
+ "name": "大阪府",
265
+ "region": "近畿",
266
+ "type": "府",
267
+ "capital_code": "271004",
268
+ "name_en": "Osaka",
269
+ "name_kana": "オオサカフ",
270
+ "name_hiragana": "おおさかふ"
271
+ },
272
+ {
273
+ "code": 28,
274
+ "name": "兵庫県",
275
+ "region": "近畿",
276
+ "type": "県",
277
+ "capital_code": "281000",
278
+ "name_en": "Hyogo",
279
+ "name_kana": "ヒョウゴケン",
280
+ "name_hiragana": "ひょうごけん"
281
+ },
282
+ {
283
+ "code": 29,
284
+ "name": "奈良県",
285
+ "region": "近畿",
286
+ "type": "県",
287
+ "capital_code": "292010",
288
+ "name_en": "Nara",
289
+ "name_kana": "ナラケン",
290
+ "name_hiragana": "ならけん"
291
+ },
292
+ {
293
+ "code": 30,
294
+ "name": "和歌山県",
295
+ "region": "近畿",
296
+ "type": "県",
297
+ "capital_code": "302015",
298
+ "name_en": "Wakayama",
299
+ "name_kana": "ワカヤマケン",
300
+ "name_hiragana": "わかやまけん"
301
+ },
302
+ {
303
+ "code": 31,
304
+ "name": "鳥取県",
305
+ "region": "中国",
306
+ "type": "県",
307
+ "capital_code": "312011",
308
+ "name_en": "Tottori",
309
+ "name_kana": "トットリケン",
310
+ "name_hiragana": "とっとりけん"
311
+ },
312
+ {
313
+ "code": 32,
314
+ "name": "島根県",
315
+ "region": "中国",
316
+ "type": "県",
317
+ "capital_code": "322016",
318
+ "name_en": "Shimane",
319
+ "name_kana": "シマネケン",
320
+ "name_hiragana": "しまねけん"
321
+ },
322
+ {
323
+ "code": 33,
324
+ "name": "岡山県",
325
+ "region": "中国",
326
+ "type": "県",
327
+ "capital_code": "331007",
328
+ "name_en": "Okayama",
329
+ "name_kana": "オカヤマケン",
330
+ "name_hiragana": "おかやまけん"
331
+ },
332
+ {
333
+ "code": 34,
334
+ "name": "広島県",
335
+ "region": "中国",
336
+ "type": "県",
337
+ "capital_code": "341002",
338
+ "name_en": "Hiroshima",
339
+ "name_kana": "ヒロシマケン",
340
+ "name_hiragana": "ひろしまけん"
341
+ },
342
+ {
343
+ "code": 35,
344
+ "name": "山口県",
345
+ "region": "中国",
346
+ "type": "県",
347
+ "capital_code": "352039",
348
+ "name_en": "Yamaguchi",
349
+ "name_kana": "ヤマグチケン",
350
+ "name_hiragana": "やまぐちけん"
351
+ },
352
+ {
353
+ "code": 36,
354
+ "name": "徳島県",
355
+ "region": "四国",
356
+ "type": "県",
357
+ "capital_code": "362018",
358
+ "name_en": "Tokushima",
359
+ "name_kana": "トクシマケン",
360
+ "name_hiragana": "とくしまけん"
361
+ },
362
+ {
363
+ "code": 37,
364
+ "name": "香川県",
365
+ "region": "四国",
366
+ "type": "県",
367
+ "capital_code": "372013",
368
+ "name_en": "Kagawa",
369
+ "name_kana": "カガワケン",
370
+ "name_hiragana": "かがわけん"
371
+ },
372
+ {
373
+ "code": 38,
374
+ "name": "愛媛県",
375
+ "region": "四国",
376
+ "type": "県",
377
+ "capital_code": "382019",
378
+ "name_en": "Ehime",
379
+ "name_kana": "エヒメケン",
380
+ "name_hiragana": "えひめけん"
381
+ },
382
+ {
383
+ "code": 39,
384
+ "name": "高知県",
385
+ "region": "四国",
386
+ "type": "県",
387
+ "capital_code": "392014",
388
+ "name_en": "Kochi",
389
+ "name_kana": "コウチケン",
390
+ "name_hiragana": "こうちけん"
391
+ },
392
+ {
393
+ "code": 40,
394
+ "name": "福岡県",
395
+ "region": "九州",
396
+ "type": "県",
397
+ "capital_code": "401307",
398
+ "name_en": "Fukuoka",
399
+ "name_kana": "フクオカケン",
400
+ "name_hiragana": "ふくおかけん"
401
+ },
402
+ {
403
+ "code": 41,
404
+ "name": "佐賀県",
405
+ "region": "九州",
406
+ "type": "県",
407
+ "capital_code": "412015",
408
+ "name_en": "Saga",
409
+ "name_kana": "サガケン",
410
+ "name_hiragana": "さがけん"
411
+ },
412
+ {
413
+ "code": 42,
414
+ "name": "長崎県",
415
+ "region": "九州",
416
+ "type": "県",
417
+ "capital_code": "422011",
418
+ "name_en": "Nagasaki",
419
+ "name_kana": "ナガサキケン",
420
+ "name_hiragana": "ながさきけん"
421
+ },
422
+ {
423
+ "code": 43,
424
+ "name": "熊本県",
425
+ "region": "九州",
426
+ "type": "県",
427
+ "capital_code": "431001",
428
+ "name_en": "Kumamoto",
429
+ "name_kana": "クマモトケン",
430
+ "name_hiragana": "くまもとけん"
431
+ },
432
+ {
433
+ "code": 44,
434
+ "name": "大分県",
435
+ "region": "九州",
436
+ "type": "県",
437
+ "capital_code": "442011",
438
+ "name_en": "Oita",
439
+ "name_kana": "オオイタケン",
440
+ "name_hiragana": "おおいたけん"
441
+ },
442
+ {
443
+ "code": 45,
444
+ "name": "宮崎県",
445
+ "region": "九州",
446
+ "type": "県",
447
+ "capital_code": "452017",
448
+ "name_en": "Miyazaki",
449
+ "name_kana": "ミヤザキケン",
450
+ "name_hiragana": "みやざきけん"
451
+ },
452
+ {
453
+ "code": 46,
454
+ "name": "鹿児島県",
455
+ "region": "九州",
456
+ "type": "県",
457
+ "capital_code": "462012",
458
+ "name_en": "Kagoshima",
459
+ "name_kana": "カゴシマケン",
460
+ "name_hiragana": "かごしまけん"
461
+ },
462
+ {
463
+ "code": 47,
464
+ "name": "沖縄県",
465
+ "region": "九州",
466
+ "type": "県",
467
+ "capital_code": "472018",
468
+ "name_en": "Okinawa",
469
+ "name_kana": "オキナワケン",
470
+ "name_hiragana": "おきなわけん"
471
+ }
472
+ ]
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "postal_auto_resolve"
4
+
5
+ module Basho
6
+ module ActiveRecord
7
+ # ActiveRecordモデルにbasho / basho_postalマクロを提供する
8
+ module Base
9
+ def basho(column)
10
+ column_name = column.to_s
11
+
12
+ define_method(:city) { (c = send(column_name)) && Basho::City.find(c) }
13
+ define_method(:prefecture) { city&.prefecture }
14
+ define_method(:full_address) do
15
+ pref = prefecture
16
+ cty = city
17
+ "#{pref.name}#{cty.name}" if pref && cty
18
+ end
19
+ end
20
+
21
+ def basho_postal(column, **mappings)
22
+ column_name = column.to_s
23
+
24
+ define_method(:postal_address) do
25
+ code = send(column_name)
26
+ return nil unless code
27
+
28
+ postal = Basho::PostalCode.find(code).first
29
+ return nil unless postal
30
+
31
+ "#{postal.prefecture_name}#{postal.city_name}#{postal.town}"
32
+ end
33
+
34
+ PostalAutoResolve.install(self, column_name, mappings) if mappings.any?
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basho
4
+ module ActiveRecord
5
+ # 郵便番号変更時にbefore_saveで住所カラムを自動解決する
6
+ module PostalAutoResolve
7
+ MAPPING_KEYS = %i[prefecture city town prefecture_code city_code].freeze
8
+ RESOLVERS = {
9
+ prefecture: :prefecture_name,
10
+ city: :city_name,
11
+ town: :town,
12
+ prefecture_code: :prefecture_code,
13
+ city_code: :resolve_city_code
14
+ }.freeze
15
+
16
+ module_function
17
+
18
+ def install(model_class, postal_column, mappings)
19
+ validate_model!(model_class)
20
+
21
+ postal_col = postal_column.to_s
22
+ resolved = build_mappings(mappings)
23
+
24
+ register_callback(model_class, postal_col, resolved)
25
+ end
26
+
27
+ def validate_model!(model_class)
28
+ return if model_class.respond_to?(:before_save)
29
+
30
+ raise Basho::Error, "#{model_class} does not support before_save callbacks"
31
+ end
32
+
33
+ def build_mappings(mappings)
34
+ mappings.slice(*MAPPING_KEYS).transform_values(&:to_s).freeze
35
+ end
36
+
37
+ def register_callback(model_class, postal_col, resolved_mappings)
38
+ model_class.before_save do
39
+ next unless will_save_change_to_attribute?(postal_col)
40
+
41
+ postal = PostalAutoResolve.resolve_postal(send(postal_col))
42
+
43
+ resolved_mappings.each do |key, target_col|
44
+ send(:"#{target_col}=", PostalAutoResolve.resolve_value(postal, key))
45
+ end
46
+ end
47
+ end
48
+
49
+ def resolve_postal(code)
50
+ return nil unless code
51
+
52
+ normalized = code.to_s.delete("-")
53
+ return nil unless normalized.match?(/\A\d{7}\z/)
54
+
55
+ Basho::PostalCode.find(normalized).first
56
+ end
57
+
58
+ def resolve_value(postal, key)
59
+ return nil unless postal
60
+
61
+ method_name = RESOLVERS[key]
62
+ return nil unless method_name
63
+
64
+ respond_to?(method_name, true) ? send(method_name, postal) : postal.public_send(method_name)
65
+ end
66
+
67
+ def resolve_city_code(postal)
68
+ City.where(prefecture_code: postal.prefecture_code)
69
+ .find { |c| c.name == postal.city_name }&.code
70
+ end
71
+ end
72
+ end
73
+ end
data/lib/basho/city.rb ADDED
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basho
4
+ City = ::Data.define(:code, :prefecture_code, :name, :name_kana, :capital) do
5
+ def initialize(capital: false, **)
6
+ super
7
+ end
8
+
9
+ def capital? = capital
10
+
11
+ def prefecture
12
+ Prefecture.find(prefecture_code)
13
+ end
14
+
15
+ class << self
16
+ def find(code)
17
+ return nil unless code.is_a?(String) && code.size == 6
18
+
19
+ prefecture_code = code[0..1].to_i
20
+ where(prefecture_code: prefecture_code).find { |city| city.code == code }
21
+ end
22
+
23
+ def where(prefecture_code:)
24
+ cities_cache[prefecture_code] ||=
25
+ Data::Loader.cities(prefecture_code).map { |data| new(**data) }.freeze
26
+ end
27
+
28
+ def valid_code?(code)
29
+ CodeValidator.valid?(code)
30
+ end
31
+
32
+ def reset!
33
+ @cities_cache = nil
34
+ end
35
+
36
+ private
37
+
38
+ def cities_cache
39
+ @cities_cache ||= {}
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basho
4
+ # JIS X 0401 チェックディジットによる自治体コード検証
5
+ module CodeValidator
6
+ CHECK_DIGITS_INDEX = 5
7
+ CHECK_BASE = 11
8
+ PREFECTURE_RANGE = (1..47)
9
+
10
+ module_function
11
+
12
+ def valid?(code)
13
+ return false unless code.is_a?(String) && code.match?(/\A\d{6}\z/)
14
+ return false unless PREFECTURE_RANGE.cover?(code[0..1].to_i)
15
+
16
+ code[CHECK_DIGITS_INDEX].to_i == compute_check_digit(code)
17
+ end
18
+
19
+ def compute_check_digit(code)
20
+ sub_total = code.chars
21
+ .take(CHECK_DIGITS_INDEX)
22
+ .map.with_index { |digit, i| digit.to_i * (CHECK_DIGITS_INDEX - i + 1) }
23
+ .sum
24
+
25
+ candidate = (CHECK_BASE - (sub_total % CHECK_BASE)) % 10
26
+ sub_total >= CHECK_BASE ? candidate : CHECK_BASE - sub_total
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ module Basho
6
+ module Data
7
+ # 組み込みJSONデータの遅延読み込みとキャッシュ
8
+ class Loader
9
+ DATA_DIR = File.expand_path("../../../data", __dir__)
10
+
11
+ class << self
12
+ def prefectures
13
+ @prefectures ||= load_json("prefectures.json")
14
+ end
15
+
16
+ def cities(prefecture_code)
17
+ cities_cache[prefecture_code] ||= load_json("cities/#{format("%02d", prefecture_code)}.json")
18
+ end
19
+
20
+ def postal_codes(prefix)
21
+ postal_cache[prefix] ||= load_json("postal_codes/#{prefix}.json")
22
+ end
23
+
24
+ def reset!
25
+ instance_variables.each { |var| remove_instance_variable(var) }
26
+ end
27
+
28
+ private
29
+
30
+ def cities_cache
31
+ @cities_cache ||= {}
32
+ end
33
+
34
+ def postal_cache
35
+ @postal_cache ||= {}
36
+ end
37
+
38
+ def load_json(relative_path)
39
+ path = File.join(DATA_DIR, relative_path)
40
+ return [] unless File.exist?(path)
41
+
42
+ JSON.parse(File.read(path), symbolize_names: true)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end