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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 11901f37562fae58d8b52881acb27f5d12d47de6aa21b156bb36fd2a87e1af28
4
+ data.tar.gz: f33b54817ef286e36a88daca0384fbb51b0d46c528a0be640949f816011b9c4a
5
+ SHA512:
6
+ metadata.gz: ecaa8057ece273aaf1ed46e9d66d56195935b94b55d1bf45667b1da9af9e05e4bfa7d9c6ea772f325f0c82c698440983f731583eca56dbb770cf7e4f836c2d06
7
+ data.tar.gz: 27260c4b272179a7db0f7fafc8f1b1f5de53b88341fbe1b4399b65d954154a55ce550414ec765280d94acd3ed90d0bec1088a73c01555c94e0e6a3fd5918a981
data/CHANGELOG.md ADDED
@@ -0,0 +1,23 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.1.0] - 2026-02-08
9
+
10
+ ### Added
11
+
12
+ - `Basho::Prefecture` - 47都道府県の検索(コード・日本語名・英語名)、地方での絞り込み
13
+ - `Basho::City` - 市区町村の検索(6桁JISコード)、都道府県コードでの絞り込み
14
+ - `Basho::PostalCode` - 郵便番号の検索(ハイフン有無対応、1対多マッピング)
15
+ - `Basho::Region` - 8地方区分の検索(日本語/英語名)
16
+ - `Basho::CodeValidator` - JIS X 0401 チェックディジット検証
17
+ - `Basho::Data::Loader` - JSONデータの遅延読み込みとキャッシュ
18
+ - `Basho::ActiveRecord::Base` - `basho` / `basho_postal` マクロ
19
+ - 都道府県・市区町村・郵便番号のJSONデータ同梱
20
+ - GitHub Actions CI(Ruby 3.2/3.3/3.4)
21
+ - 月次データ自動更新ワークフロー
22
+
23
+ [0.1.0]: https://github.com/wagai/basho/releases/tag/v0.1.0
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025 Hirotaka Wagai
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,311 @@
1
+ # Basho
2
+
3
+ 日本の住所データ(都道府県・市区町村・郵便番号・地方区分)を統一的に扱うRuby gem。
4
+
5
+ ## なぜ作ったか
6
+
7
+ 日本の住所まわりは扱いが面倒です。
8
+
9
+ - 郵便番号から住所を引きたいだけなのに、CSVを自前でパースしてDBに入れる必要がある
10
+ - 都道府県・市区町村のマスタデータを持つためにマイグレーションを書かされる
11
+ - 郵便番号の自動入力、都道府県→市区町村の連動セレクトは毎回同じコードを書いている
12
+ - 既存gemはRails依存が強い、データが古い、Hotwire非対応、など
13
+
14
+ Bashoはこれらをまとめて解決します。
15
+
16
+ - **DBマイグレーション不要** — 全データをJSON同梱。`gem install`だけで使える
17
+ - **ActiveRecord統合** — `include Basho` + 1行のマクロで郵便番号→住所の自動保存
18
+ - **Hotwire対応** — 郵便番号自動入力・カスケードセレクトをビルトインEngine提供
19
+ - **軽量** — `Data.define`によるイミュータブルモデル、遅延読み込み、外部依存なし
20
+
21
+ ## 対応バージョン
22
+
23
+ - Ruby 3.2 / 3.3 / 3.4 / 4.0
24
+
25
+ ## インストール
26
+
27
+ ```ruby
28
+ # Gemfile
29
+ gem "basho"
30
+ ```
31
+
32
+ ```bash
33
+ bundle install
34
+ ```
35
+
36
+ ## クイックスタート
37
+
38
+ ### 郵便番号から住所を引く
39
+
40
+ ```ruby
41
+ postal = Basho::PostalCode.find("154-0011").first
42
+ postal.prefecture_name # => "東京都"
43
+ postal.city_name # => "世田谷区"
44
+ postal.town # => "上馬"
45
+ ```
46
+
47
+ ### モデルで郵便番号→住所を自動保存
48
+
49
+ ```ruby
50
+ class User < ApplicationRecord
51
+ include Basho
52
+ basho_postal :postal_code,
53
+ prefecture: :pref_name,
54
+ city: :city_name,
55
+ town: :town_name
56
+ end
57
+
58
+ user = User.new(postal_code: "154-0011")
59
+ user.save
60
+ user.pref_name # => "東京都"
61
+ user.city_name # => "世田谷区"
62
+ user.town_name # => "上馬"
63
+ ```
64
+
65
+ ### 都道府県・市区町村を検索
66
+
67
+ ```ruby
68
+ Basho::Prefecture.find(13).name # => "東京都"
69
+ Basho::Prefecture.where(region: "関東") # => 7件
70
+ Basho::City.find("131016").name # => "千代田区"
71
+ ```
72
+
73
+ ## 使い方
74
+
75
+ ### Prefecture(都道府県)
76
+
77
+ ```ruby
78
+ Basho::Prefecture.find(13) # コードで検索
79
+ Basho::Prefecture.find(name: "東京都") # 名前で検索
80
+ Basho::Prefecture.all # 全47件
81
+ Basho::Prefecture.where(region: "関東") # 地方で絞り込み
82
+
83
+ pref = Basho::Prefecture.find(13)
84
+ pref.code # => 13
85
+ pref.name # => "東京都"
86
+ pref.name_en # => "Tokyo"
87
+ pref.name_kana # => "トウキョウト"
88
+ pref.name_hiragana # => "とうきょうと"
89
+ pref.type # => "都"
90
+ pref.region # => Region
91
+ pref.cities # => Array<City>
92
+ pref.capital # => City(県庁所在地)
93
+ ```
94
+
95
+ ### City(市区町村)
96
+
97
+ ```ruby
98
+ Basho::City.find("131016") # 自治体コードで検索
99
+ Basho::City.where(prefecture_code: 13) # 都道府県で絞り込み
100
+ Basho::City.valid_code?("131016") # チェックディジット検証
101
+
102
+ city = Basho::City.find("131016")
103
+ city.code # => "131016"
104
+ city.prefecture_code # => 13
105
+ city.name # => "千代田区"
106
+ city.name_kana # => "チヨダク"
107
+ city.capital? # => false
108
+ city.prefecture # => Prefecture
109
+ ```
110
+
111
+ ### PostalCode(郵便番号)
112
+
113
+ ```ruby
114
+ results = Basho::PostalCode.find("154-0011") # 常にArrayを返す
115
+ results = Basho::PostalCode.find("1540011") # ハイフンなしも可
116
+
117
+ postal = results.first
118
+ postal.code # => "1540011"
119
+ postal.formatted_code # => "154-0011"
120
+ postal.prefecture_code # => 13
121
+ postal.prefecture_name # => "東京都"
122
+ postal.city_name # => "世田谷区"
123
+ postal.town # => "上馬"
124
+ postal.prefecture # => Prefecture
125
+ ```
126
+
127
+ ### Region(地方区分)
128
+
129
+ ```ruby
130
+ Basho::Region.all # 8地方
131
+ Basho::Region.find("関東") # 名前で検索
132
+
133
+ region = Basho::Region.find("関東")
134
+ region.name # => "関東"
135
+ region.name_en # => "Kanto"
136
+ region.prefectures # => Array<Prefecture>
137
+ region.prefecture_codes # => [8, 9, 10, 11, 12, 13, 14]
138
+ ```
139
+
140
+ ## ActiveRecord統合
141
+
142
+ ### 自治体コードから都道府県・市区町村を引く
143
+
144
+ ```ruby
145
+ class Shop < ApplicationRecord
146
+ include Basho
147
+ basho :local_gov_code
148
+ end
149
+
150
+ shop.prefecture # => Prefecture
151
+ shop.city # => City
152
+ shop.full_address # => "東京都千代田区"
153
+ ```
154
+
155
+ ### 郵便番号から住所文字列を取得
156
+
157
+ ```ruby
158
+ class Shop < ApplicationRecord
159
+ include Basho
160
+ basho_postal :postal_code
161
+ end
162
+
163
+ shop.postal_address # => "東京都世田谷区上馬"
164
+ ```
165
+
166
+ ### 郵便番号から住所カラムを自動保存
167
+
168
+ `basho_postal`にマッピングオプションを渡すと、`before_save`で郵便番号から住所カラムを自動入力します。
169
+
170
+ ```ruby
171
+ class User < ApplicationRecord
172
+ include Basho
173
+ basho_postal :postal_code,
174
+ prefecture: :pref_name,
175
+ city: :city_name,
176
+ town: :town_name
177
+ end
178
+ ```
179
+
180
+ - `postal_code`が変更された時だけ解決を実行
181
+ - マッピングは部分指定可能(`prefecture:`だけでもOK)
182
+ - オプションなしの場合は`postal_address`メソッドのみ定義(後方互換)
183
+
184
+ ## Hotwire Engine
185
+
186
+ Turbo Frame + Stimulusによる住所自動入力・カスケードセレクトをビルトインで提供するRails Engineです。自前でコントローラーを書かずに使えます。
187
+
188
+ ### セットアップ
189
+
190
+ ```ruby
191
+ # config/application.rb
192
+ require "basho/engine"
193
+ ```
194
+
195
+ ```ruby
196
+ # config/routes.rb
197
+ mount Basho::Engine, at: "/basho"
198
+ ```
199
+
200
+ ### 郵便番号自動入力
201
+
202
+ 郵便番号を入力すると都道府県・市区町村・町域フィールドを自動入力します。
203
+
204
+ ```erb
205
+ <%= form_with(model: @shop) do |f| %>
206
+ <div data-controller="basho--auto-fill"
207
+ data-basho--auto-fill-url-value="<%= basho.postal_code_lookup_path %>">
208
+
209
+ <%= f.text_field :postal_code,
210
+ data: { action: "input->basho--auto-fill#lookup",
211
+ "basho--auto-fill-target": "input" } %>
212
+
213
+ <turbo-frame id="basho-result"
214
+ data-basho--auto-fill-target="frame"></turbo-frame>
215
+
216
+ <%= f.text_field :prefecture,
217
+ data: { "basho--auto-fill-target": "prefecture" } %>
218
+ <%= f.text_field :city,
219
+ data: { "basho--auto-fill-target": "city" } %>
220
+ <%= f.text_field :town,
221
+ data: { "basho--auto-fill-target": "town" } %>
222
+ </div>
223
+ <% end %>
224
+ ```
225
+
226
+ 1. ユーザーが郵便番号を入力(7桁)
227
+ 2. 300msデバウンス後、Turbo Frameでサーバーに問い合わせ
228
+ 3. Stimulusが都道府県・市区町村・町域フィールドを自動入力
229
+
230
+ ### 都道府県・市区町村カスケードセレクト
231
+
232
+ 都道府県を選択すると、対応する市区町村がJSON APIで動的に読み込まれます。
233
+
234
+ ```erb
235
+ <%= form_with(model: @shop) do |f| %>
236
+ <div data-controller="basho--cascade-select"
237
+ data-basho--cascade-select-prefectures-url-value="<%= basho.prefectures_path %>"
238
+ data-basho--cascade-select-cities-url-template-value="<%= basho.cities_prefecture_path(':code') %>">
239
+
240
+ <select data-basho--cascade-select-target="prefecture"
241
+ data-action="change->basho--cascade-select#prefectureChanged">
242
+ <option value="">都道府県を選択</option>
243
+ </select>
244
+
245
+ <select data-basho--cascade-select-target="city">
246
+ <option value="">市区町村を選択</option>
247
+ </select>
248
+ </div>
249
+ <% end %>
250
+ ```
251
+
252
+ `basho_cascade_data`ヘルパーでdata属性を簡潔に書けます。
253
+
254
+ ```erb
255
+ <div <%= tag.attributes(data: basho_cascade_data) %>>
256
+ ...
257
+ </div>
258
+ ```
259
+
260
+ 1. ページ読み込み時、都道府県セレクトが空ならAPIから47件を取得
261
+ 2. 都道府県を選択すると、市区町村セレクトをAPIから再構築
262
+ 3. 都道府県を変更すると、市区町村セレクトがリセットされ再取得
263
+
264
+ ### JSON APIエンドポイント
265
+
266
+ Engineをマウントすると以下のエンドポイントが利用可能になります。
267
+
268
+ ```
269
+ GET /basho/prefectures # => [{"code":1,"name":"北海道"}, ...]
270
+ GET /basho/prefectures/13/cities # => [{"code":"131016","name":"千代田区"}, ...]
271
+ GET /basho/postal_codes/lookup?code=1540011 # => Turbo Frame HTML
272
+ ```
273
+
274
+ ## Engine不要の場合
275
+
276
+ Engineを使わず、`PostalCode.find`で自由にエンドポイントを作ることもできます。
277
+
278
+ ```ruby
279
+ # JSON API
280
+ class PostalCodesController < ApplicationController
281
+ def lookup
282
+ results = Basho::PostalCode.find(params[:code])
283
+
284
+ render json: results.map { |r|
285
+ { prefecture: r.prefecture_name, city: r.city_name, town: r.town }
286
+ }
287
+ end
288
+ end
289
+ ```
290
+
291
+ ## データソース
292
+
293
+ | データ | ソース | 更新頻度 |
294
+ |--------|--------|----------|
295
+ | 都道府県 | 総務省 JIS X 0401 | ほぼ変わらない |
296
+ | 市区町村 | 総務省 全国地方公共団体コード | 年に数回 |
297
+ | 郵便番号 | 日本郵便 KEN_ALL.csv | 月次(GitHub Actions自動更新) |
298
+ | 地方区分 | 8地方(ハードコード) | 変わらない |
299
+
300
+ ## 開発
301
+
302
+ ```bash
303
+ git clone https://github.com/wagai/basho.git
304
+ cd basho
305
+ bin/setup
306
+ bundle exec rspec
307
+ ```
308
+
309
+ ## ライセンス
310
+
311
+ MIT License
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ require "rubocop/rake_task"
9
+
10
+ RuboCop::RakeTask.new
11
+
12
+ task default: %i[spec rubocop]
@@ -0,0 +1,34 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ export default class extends Controller {
4
+ static targets = ["input", "frame", "prefecture", "city", "town"]
5
+ static values = { url: String, delay: { type: Number, default: 300 } }
6
+
7
+ connect() {
8
+ this.frameTarget.addEventListener("turbo:frame-load", this.#fillFields)
9
+ }
10
+
11
+ disconnect() {
12
+ this.frameTarget.removeEventListener("turbo:frame-load", this.#fillFields)
13
+ clearTimeout(this.timeout)
14
+ }
15
+
16
+ lookup() {
17
+ clearTimeout(this.timeout)
18
+ const code = this.inputTarget.value.replace(/-/g, "")
19
+ if (code.length < 7) return
20
+
21
+ this.timeout = setTimeout(() => {
22
+ this.frameTarget.src = `${this.urlValue}?code=${code}`
23
+ }, this.delayValue)
24
+ }
25
+
26
+ #fillFields = () => {
27
+ const data = this.frameTarget.querySelector("[data-address]")
28
+ if (!data) return
29
+
30
+ if (this.hasPrefectureTarget) this.prefectureTarget.value = data.dataset.prefecture || ""
31
+ if (this.hasCityTarget) this.cityTarget.value = data.dataset.city || ""
32
+ if (this.hasTownTarget) this.townTarget.value = data.dataset.town || ""
33
+ }
34
+ }
@@ -0,0 +1,77 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ export default class extends Controller {
4
+ static targets = ["prefecture", "city"]
5
+ static values = {
6
+ prefecturesUrl: String,
7
+ citiesUrlTemplate: String
8
+ }
9
+
10
+ connect() {
11
+ this.abortController = new AbortController()
12
+
13
+ if (this.prefectureTarget.options.length <= 1) {
14
+ this.#loadPrefectures()
15
+ }
16
+ }
17
+
18
+ disconnect() {
19
+ this.abortController.abort()
20
+ }
21
+
22
+ prefectureChanged() {
23
+ const code = this.prefectureTarget.value
24
+ this.#clearOptions(this.cityTarget)
25
+
26
+ if (!code) return
27
+
28
+ this.#loadCities(code)
29
+ }
30
+
31
+ async #loadPrefectures() {
32
+ try {
33
+ const response = await fetch(this.prefecturesUrlValue, {
34
+ signal: this.abortController.signal
35
+ })
36
+ if (!response.ok) return
37
+
38
+ const prefectures = await response.json()
39
+ prefectures.forEach(({ code, name }) => {
40
+ this.prefectureTarget.appendChild(new Option(name, code))
41
+ })
42
+ } catch (error) {
43
+ if (error.name !== "AbortError") {
44
+ this.dispatch("error", { detail: { message: "Failed to load prefectures", error } })
45
+ }
46
+ }
47
+ }
48
+
49
+ async #loadCities(code) {
50
+ if (!/^\d{1,2}$/.test(code)) return
51
+
52
+ try {
53
+ const url = this.citiesUrlTemplateValue.replace(":code", encodeURIComponent(code))
54
+ const response = await fetch(url, {
55
+ signal: this.abortController.signal
56
+ })
57
+ if (!response.ok) return
58
+
59
+ const cities = await response.json()
60
+ cities.forEach(({ code, name }) => {
61
+ this.cityTarget.appendChild(new Option(name, code))
62
+ })
63
+ } catch (error) {
64
+ if (error.name !== "AbortError") {
65
+ this.dispatch("error", { detail: { message: "Failed to load cities", error } })
66
+ }
67
+ }
68
+ }
69
+
70
+ #clearOptions(select) {
71
+ const hasPlaceholder = select.options[0] && !select.options[0].value
72
+ const start = hasPlaceholder ? 1 : 0
73
+ while (select.options.length > start) {
74
+ select.remove(start)
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basho
4
+ # 郵便番号からTurbo Frame形式で住所を返すコントローラー
5
+ class PostalCodesController < ActionController::Base
6
+ def lookup
7
+ code = params[:code].to_s.delete("-")
8
+ @postal = PostalCode.find(code).first if code.match?(/\A\d{7}\z/)
9
+
10
+ render layout: false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basho
4
+ # 都道府県・市区町村のJSON APIコントローラー
5
+ class PrefecturesController < ActionController::API
6
+ CACHE_MAX_AGE = 86_400 # 24時間
7
+
8
+ def index
9
+ expires_in CACHE_MAX_AGE, public: true
10
+
11
+ prefectures = Prefecture.all.map { |p| { code: p.code, name: p.name } }
12
+ render json: prefectures
13
+ end
14
+
15
+ def cities
16
+ prefecture = find_prefecture
17
+ return render json: [], status: :not_found unless prefecture
18
+
19
+ expires_in CACHE_MAX_AGE, public: true
20
+
21
+ cities = City.where(prefecture_code: prefecture.code).map { |c| { code: c.code, name: c.name } }
22
+ render json: cities
23
+ end
24
+
25
+ private
26
+
27
+ def find_prefecture
28
+ code = params[:code].to_s
29
+ return nil unless code.match?(/\A[1-9]\d?\z/)
30
+
31
+ Prefecture.find(code.to_i)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Basho
4
+ # 自動入力・カスケードセレクト用のフォームヘルパー
5
+ module FormHelper
6
+ def basho_autofill_frame_tag
7
+ content_tag("turbo-frame", nil, id: "basho-result",
8
+ data: { "basho--auto-fill-target" => "frame" })
9
+ end
10
+
11
+ def basho_cascade_data
12
+ prefectures_url = basho.prefectures_path
13
+ cities_template = basho.cities_prefecture_path(":code")
14
+
15
+ {
16
+ controller: "basho--cascade-select",
17
+ "basho--cascade-select-prefectures-url-value" => prefectures_url,
18
+ "basho--cascade-select-cities-url-template-value" => cities_template
19
+ }
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,9 @@
1
+ <turbo-frame id="basho-result">
2
+ <% if @postal %>
3
+ <span data-address
4
+ data-prefecture="<%= @postal.prefecture_name %>"
5
+ data-city="<%= @postal.city_name %>"
6
+ data-town="<%= @postal.town %>"
7
+ hidden></span>
8
+ <% end %>
9
+ </turbo-frame>
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ pin_all_from Basho::Engine.root.join("app/assets/javascripts/controllers/basho"),
4
+ under: "controllers/basho"
data/config/routes.rb ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ Basho::Engine.routes.draw do
4
+ get "postal_codes/lookup", to: "postal_codes#lookup", as: :postal_code_lookup
5
+ resources :prefectures, only: [:index], param: :code do
6
+ get :cities, on: :member
7
+ end
8
+ end