basho 0.2.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +8 -0
- data/CHANGELOG.md +49 -0
- data/README.ja.md +276 -107
- data/README.md +277 -108
- data/app/assets/javascripts/controllers/basho/auto_fill_controller.js +17 -22
- data/app/controllers/basho/postal_codes_controller.rb +1 -2
- data/app/helpers/basho/form_helper.rb +3 -13
- data/config/routes.rb +0 -3
- data/data/cities/06.json +1 -1
- data/data/cities/10.json +1 -1
- data/data/cities/11.json +3 -3
- data/data/cities/12.json +3 -3
- data/data/cities/14.json +1 -1
- data/data/cities/23.json +1 -2
- data/data/cities/25.json +1 -1
- data/data/cities/27.json +2 -3
- data/data/cities/29.json +1 -1
- data/data/cities/33.json +2 -2
- data/data/cities/34.json +1 -2
- data/data/cities/47.json +1 -1
- data/data/postal_codes/001.json +1 -1
- data/data/postal_codes/002.json +1 -1
- data/data/postal_codes/003.json +1 -1
- data/data/postal_codes/004.json +1 -1
- data/data/postal_codes/005.json +1 -1
- data/data/postal_codes/006.json +1 -1
- data/data/postal_codes/007.json +1 -1
- data/data/postal_codes/010.json +1 -1
- data/data/postal_codes/011.json +1 -1
- data/data/postal_codes/012.json +1 -1
- data/data/postal_codes/013.json +1 -1
- data/data/postal_codes/014.json +1 -1
- data/data/postal_codes/015.json +1 -1
- data/data/postal_codes/016.json +1 -1
- data/data/postal_codes/017.json +1 -1
- data/data/postal_codes/018.json +1 -1
- data/data/postal_codes/019.json +1 -1
- data/data/postal_codes/020.json +1 -1
- data/data/postal_codes/021.json +1 -1
- data/data/postal_codes/022.json +1 -1
- data/data/postal_codes/023.json +1 -1
- data/data/postal_codes/024.json +1 -1
- data/data/postal_codes/025.json +1 -1
- data/data/postal_codes/026.json +1 -1
- data/data/postal_codes/027.json +1 -1
- data/data/postal_codes/028.json +1 -1
- data/data/postal_codes/029.json +1 -1
- data/data/postal_codes/030.json +1 -1
- data/data/postal_codes/031.json +1 -1
- data/data/postal_codes/033.json +1 -1
- data/data/postal_codes/034.json +1 -1
- data/data/postal_codes/035.json +1 -1
- data/data/postal_codes/036.json +1 -1
- data/data/postal_codes/037.json +1 -1
- data/data/postal_codes/038.json +1 -1
- data/data/postal_codes/039.json +1 -1
- data/data/postal_codes/040.json +1 -1
- data/data/postal_codes/041.json +1 -1
- data/data/postal_codes/042.json +1 -1
- data/data/postal_codes/043.json +1 -1
- data/data/postal_codes/044.json +1 -1
- data/data/postal_codes/045.json +1 -1
- data/data/postal_codes/046.json +1 -1
- data/data/postal_codes/047.json +1 -1
- data/data/postal_codes/048.json +1 -1
- data/data/postal_codes/049.json +1 -1
- data/data/postal_codes/050.json +1 -1
- data/data/postal_codes/051.json +1 -1
- data/data/postal_codes/052.json +1 -1
- data/data/postal_codes/053.json +1 -1
- data/data/postal_codes/054.json +1 -1
- data/data/postal_codes/055.json +1 -1
- data/data/postal_codes/056.json +1 -1
- data/data/postal_codes/057.json +1 -1
- data/data/postal_codes/058.json +1 -1
- data/data/postal_codes/059.json +1 -1
- data/data/postal_codes/060.json +1 -1
- data/data/postal_codes/061.json +1 -1
- data/data/postal_codes/062.json +1 -1
- data/data/postal_codes/063.json +1 -1
- data/data/postal_codes/064.json +1 -1
- data/data/postal_codes/065.json +1 -1
- data/data/postal_codes/066.json +1 -1
- data/data/postal_codes/067.json +1 -1
- data/data/postal_codes/068.json +1 -1
- data/data/postal_codes/069.json +1 -1
- data/data/postal_codes/070.json +1 -1
- data/data/postal_codes/071.json +1 -1
- data/data/postal_codes/072.json +1 -1
- data/data/postal_codes/073.json +1 -1
- data/data/postal_codes/074.json +1 -1
- data/data/postal_codes/075.json +1 -1
- data/data/postal_codes/076.json +1 -1
- data/data/postal_codes/077.json +1 -1
- data/data/postal_codes/078.json +1 -1
- data/data/postal_codes/079.json +1 -1
- data/data/postal_codes/080.json +1 -1
- data/data/postal_codes/081.json +1 -1
- data/data/postal_codes/082.json +1 -1
- data/data/postal_codes/083.json +1 -1
- data/data/postal_codes/084.json +1 -1
- data/data/postal_codes/085.json +1 -1
- data/data/postal_codes/086.json +1 -1
- data/data/postal_codes/087.json +1 -1
- data/data/postal_codes/088.json +1 -1
- data/data/postal_codes/089.json +1 -1
- data/data/postal_codes/090.json +1 -1
- data/data/postal_codes/091.json +1 -1
- data/data/postal_codes/092.json +1 -1
- data/data/postal_codes/093.json +1 -1
- data/data/postal_codes/094.json +1 -1
- data/data/postal_codes/095.json +1 -1
- data/data/postal_codes/096.json +1 -1
- data/data/postal_codes/097.json +1 -1
- data/data/postal_codes/098.json +1 -1
- data/data/postal_codes/099.json +1 -1
- data/data/postal_codes/100.json +1 -1
- data/data/postal_codes/101.json +1 -1
- data/data/postal_codes/102.json +1 -1
- data/data/postal_codes/103.json +1 -1
- data/data/postal_codes/104.json +1 -1
- data/data/postal_codes/105.json +1 -1
- data/data/postal_codes/106.json +1 -1
- data/data/postal_codes/107.json +1 -1
- data/data/postal_codes/108.json +1 -1
- data/data/postal_codes/110.json +1 -1
- data/data/postal_codes/111.json +1 -1
- data/data/postal_codes/112.json +1 -1
- data/data/postal_codes/113.json +1 -1
- data/data/postal_codes/114.json +1 -1
- data/data/postal_codes/115.json +1 -1
- data/data/postal_codes/116.json +1 -1
- data/data/postal_codes/120.json +1 -1
- data/data/postal_codes/121.json +1 -1
- data/data/postal_codes/123.json +1 -1
- data/data/postal_codes/124.json +1 -1
- data/data/postal_codes/125.json +1 -1
- data/data/postal_codes/130.json +1 -1
- data/data/postal_codes/131.json +1 -1
- data/data/postal_codes/132.json +1 -1
- data/data/postal_codes/133.json +1 -1
- data/data/postal_codes/134.json +1 -1
- data/data/postal_codes/135.json +1 -1
- data/data/postal_codes/136.json +1 -1
- data/data/postal_codes/140.json +1 -1
- data/data/postal_codes/141.json +1 -1
- data/data/postal_codes/142.json +1 -1
- data/data/postal_codes/143.json +1 -1
- data/data/postal_codes/144.json +1 -1
- data/data/postal_codes/145.json +1 -1
- data/data/postal_codes/146.json +1 -1
- data/data/postal_codes/150.json +1 -1
- data/data/postal_codes/151.json +1 -1
- data/data/postal_codes/152.json +1 -1
- data/data/postal_codes/153.json +1 -1
- data/data/postal_codes/154.json +1 -1
- data/data/postal_codes/155.json +1 -1
- data/data/postal_codes/156.json +1 -1
- data/data/postal_codes/157.json +1 -1
- data/data/postal_codes/158.json +1 -1
- data/data/postal_codes/160.json +1 -1
- data/data/postal_codes/161.json +1 -1
- data/data/postal_codes/162.json +1 -1
- data/data/postal_codes/163.json +1 -1
- data/data/postal_codes/164.json +1 -1
- data/data/postal_codes/165.json +1 -1
- data/data/postal_codes/166.json +1 -1
- data/data/postal_codes/167.json +1 -1
- data/data/postal_codes/168.json +1 -1
- data/data/postal_codes/169.json +1 -1
- data/data/postal_codes/170.json +1 -1
- data/data/postal_codes/171.json +1 -1
- data/data/postal_codes/173.json +1 -1
- data/data/postal_codes/174.json +1 -1
- data/data/postal_codes/175.json +1 -1
- data/data/postal_codes/176.json +1 -1
- data/data/postal_codes/177.json +1 -1
- data/data/postal_codes/178.json +1 -1
- data/data/postal_codes/179.json +1 -1
- data/data/postal_codes/180.json +1 -1
- data/data/postal_codes/181.json +1 -1
- data/data/postal_codes/182.json +1 -1
- data/data/postal_codes/183.json +1 -1
- data/data/postal_codes/184.json +1 -1
- data/data/postal_codes/185.json +1 -1
- data/data/postal_codes/186.json +1 -1
- data/data/postal_codes/187.json +1 -1
- data/data/postal_codes/188.json +1 -1
- data/data/postal_codes/189.json +1 -1
- data/data/postal_codes/190.json +1 -1
- data/data/postal_codes/191.json +1 -1
- data/data/postal_codes/192.json +1 -1
- data/data/postal_codes/193.json +1 -1
- data/data/postal_codes/194.json +1 -1
- data/data/postal_codes/195.json +1 -1
- data/data/postal_codes/196.json +1 -1
- data/data/postal_codes/197.json +1 -1
- data/data/postal_codes/198.json +1 -1
- data/data/postal_codes/201.json +1 -1
- data/data/postal_codes/202.json +1 -1
- data/data/postal_codes/203.json +1 -1
- data/data/postal_codes/204.json +1 -1
- data/data/postal_codes/205.json +1 -1
- data/data/postal_codes/206.json +1 -1
- data/data/postal_codes/207.json +1 -1
- data/data/postal_codes/208.json +1 -1
- data/data/postal_codes/210.json +1 -1
- data/data/postal_codes/211.json +1 -1
- data/data/postal_codes/212.json +1 -1
- data/data/postal_codes/213.json +1 -1
- data/data/postal_codes/214.json +1 -1
- data/data/postal_codes/215.json +1 -1
- data/data/postal_codes/216.json +1 -1
- data/data/postal_codes/220.json +1 -1
- data/data/postal_codes/221.json +1 -1
- data/data/postal_codes/222.json +1 -1
- data/data/postal_codes/223.json +1 -1
- data/data/postal_codes/224.json +1 -1
- data/data/postal_codes/225.json +1 -1
- data/data/postal_codes/226.json +1 -1
- data/data/postal_codes/227.json +1 -1
- data/data/postal_codes/230.json +1 -1
- data/data/postal_codes/231.json +1 -1
- data/data/postal_codes/232.json +1 -1
- data/data/postal_codes/233.json +1 -1
- data/data/postal_codes/234.json +1 -1
- data/data/postal_codes/235.json +1 -1
- data/data/postal_codes/236.json +1 -1
- data/data/postal_codes/237.json +1 -1
- data/data/postal_codes/238.json +1 -1
- data/data/postal_codes/239.json +1 -1
- data/data/postal_codes/240.json +1 -1
- data/data/postal_codes/241.json +1 -1
- data/data/postal_codes/242.json +1 -1
- data/data/postal_codes/243.json +1 -1
- data/data/postal_codes/244.json +1 -1
- data/data/postal_codes/245.json +1 -1
- data/data/postal_codes/246.json +1 -1
- data/data/postal_codes/247.json +1 -1
- data/data/postal_codes/248.json +1 -1
- data/data/postal_codes/249.json +1 -1
- data/data/postal_codes/250.json +1 -1
- data/data/postal_codes/251.json +1 -1
- data/data/postal_codes/252.json +1 -1
- data/data/postal_codes/253.json +1 -1
- data/data/postal_codes/254.json +1 -1
- data/data/postal_codes/255.json +1 -1
- data/data/postal_codes/256.json +1 -1
- data/data/postal_codes/257.json +1 -1
- data/data/postal_codes/258.json +1 -1
- data/data/postal_codes/259.json +1 -1
- data/data/postal_codes/260.json +1 -1
- data/data/postal_codes/261.json +1 -1
- data/data/postal_codes/262.json +1 -1
- data/data/postal_codes/263.json +1 -1
- data/data/postal_codes/264.json +1 -1
- data/data/postal_codes/265.json +1 -1
- data/data/postal_codes/266.json +1 -1
- data/data/postal_codes/267.json +1 -1
- data/data/postal_codes/270.json +1 -1
- data/data/postal_codes/271.json +1 -1
- data/data/postal_codes/272.json +1 -1
- data/data/postal_codes/273.json +1 -1
- data/data/postal_codes/274.json +1 -1
- data/data/postal_codes/275.json +1 -1
- data/data/postal_codes/276.json +1 -1
- data/data/postal_codes/277.json +1 -1
- data/data/postal_codes/278.json +1 -1
- data/data/postal_codes/279.json +1 -1
- data/data/postal_codes/282.json +1 -1
- data/data/postal_codes/283.json +1 -1
- data/data/postal_codes/284.json +1 -1
- data/data/postal_codes/285.json +1 -1
- data/data/postal_codes/286.json +1 -1
- data/data/postal_codes/287.json +1 -1
- data/data/postal_codes/288.json +1 -1
- data/data/postal_codes/289.json +1 -1
- data/data/postal_codes/290.json +1 -1
- data/data/postal_codes/292.json +1 -1
- data/data/postal_codes/293.json +1 -1
- data/data/postal_codes/294.json +1 -1
- data/data/postal_codes/295.json +1 -1
- data/data/postal_codes/296.json +1 -1
- data/data/postal_codes/297.json +1 -1
- data/data/postal_codes/298.json +1 -1
- data/data/postal_codes/299.json +1 -1
- data/data/postal_codes/300.json +1 -1
- data/data/postal_codes/301.json +1 -1
- data/data/postal_codes/302.json +1 -1
- data/data/postal_codes/303.json +1 -1
- data/data/postal_codes/304.json +1 -1
- data/data/postal_codes/305.json +1 -1
- data/data/postal_codes/306.json +1 -1
- data/data/postal_codes/307.json +1 -1
- data/data/postal_codes/308.json +1 -1
- data/data/postal_codes/309.json +1 -1
- data/data/postal_codes/310.json +1 -1
- data/data/postal_codes/311.json +1 -1
- data/data/postal_codes/312.json +1 -1
- data/data/postal_codes/313.json +1 -1
- data/data/postal_codes/314.json +1 -1
- data/data/postal_codes/315.json +1 -1
- data/data/postal_codes/316.json +1 -1
- data/data/postal_codes/317.json +1 -1
- data/data/postal_codes/318.json +1 -1
- data/data/postal_codes/319.json +1 -1
- data/data/postal_codes/320.json +1 -1
- data/data/postal_codes/321.json +1 -1
- data/data/postal_codes/322.json +1 -1
- data/data/postal_codes/323.json +1 -1
- data/data/postal_codes/324.json +1 -1
- data/data/postal_codes/325.json +1 -1
- data/data/postal_codes/326.json +1 -1
- data/data/postal_codes/327.json +1 -1
- data/data/postal_codes/328.json +1 -1
- data/data/postal_codes/329.json +1 -1
- data/data/postal_codes/330.json +1 -1
- data/data/postal_codes/331.json +1 -1
- data/data/postal_codes/332.json +1 -1
- data/data/postal_codes/333.json +1 -1
- data/data/postal_codes/334.json +1 -1
- data/data/postal_codes/335.json +1 -1
- data/data/postal_codes/336.json +1 -1
- data/data/postal_codes/337.json +1 -1
- data/data/postal_codes/338.json +1 -1
- data/data/postal_codes/339.json +1 -1
- data/data/postal_codes/340.json +1 -1
- data/data/postal_codes/341.json +1 -1
- data/data/postal_codes/342.json +1 -1
- data/data/postal_codes/343.json +1 -1
- data/data/postal_codes/344.json +1 -1
- data/data/postal_codes/345.json +1 -1
- data/data/postal_codes/346.json +1 -1
- data/data/postal_codes/347.json +1 -1
- data/data/postal_codes/348.json +1 -1
- data/data/postal_codes/349.json +1 -1
- data/data/postal_codes/350.json +1 -1
- data/data/postal_codes/351.json +1 -1
- data/data/postal_codes/352.json +1 -1
- data/data/postal_codes/353.json +1 -1
- data/data/postal_codes/354.json +1 -1
- data/data/postal_codes/355.json +1 -1
- data/data/postal_codes/356.json +1 -1
- data/data/postal_codes/357.json +1 -1
- data/data/postal_codes/358.json +1 -1
- data/data/postal_codes/359.json +1 -1
- data/data/postal_codes/360.json +1 -1
- data/data/postal_codes/361.json +1 -1
- data/data/postal_codes/362.json +1 -1
- data/data/postal_codes/363.json +1 -1
- data/data/postal_codes/364.json +1 -1
- data/data/postal_codes/365.json +1 -1
- data/data/postal_codes/366.json +1 -1
- data/data/postal_codes/367.json +1 -1
- data/data/postal_codes/368.json +1 -1
- data/data/postal_codes/369.json +1 -1
- data/data/postal_codes/370.json +1 -1
- data/data/postal_codes/371.json +1 -1
- data/data/postal_codes/372.json +1 -1
- data/data/postal_codes/373.json +1 -1
- data/data/postal_codes/374.json +1 -1
- data/data/postal_codes/375.json +1 -1
- data/data/postal_codes/376.json +1 -1
- data/data/postal_codes/377.json +1 -1
- data/data/postal_codes/378.json +1 -1
- data/data/postal_codes/379.json +1 -1
- data/data/postal_codes/380.json +1 -1
- data/data/postal_codes/381.json +1 -1
- data/data/postal_codes/382.json +1 -1
- data/data/postal_codes/383.json +1 -1
- data/data/postal_codes/384.json +1 -1
- data/data/postal_codes/385.json +1 -1
- data/data/postal_codes/386.json +1 -1
- data/data/postal_codes/387.json +1 -1
- data/data/postal_codes/388.json +1 -1
- data/data/postal_codes/389.json +1 -1
- data/data/postal_codes/390.json +1 -1
- data/data/postal_codes/391.json +1 -1
- data/data/postal_codes/392.json +1 -1
- data/data/postal_codes/393.json +1 -1
- data/data/postal_codes/394.json +1 -1
- data/data/postal_codes/395.json +1 -1
- data/data/postal_codes/396.json +1 -1
- data/data/postal_codes/397.json +1 -1
- data/data/postal_codes/398.json +1 -1
- data/data/postal_codes/399.json +1 -1
- data/data/postal_codes/400.json +1 -1
- data/data/postal_codes/401.json +1 -1
- data/data/postal_codes/402.json +1 -1
- data/data/postal_codes/403.json +1 -1
- data/data/postal_codes/404.json +1 -1
- data/data/postal_codes/405.json +1 -1
- data/data/postal_codes/406.json +1 -1
- data/data/postal_codes/407.json +1 -1
- data/data/postal_codes/408.json +1 -1
- data/data/postal_codes/409.json +1 -1
- data/data/postal_codes/410.json +1 -1
- data/data/postal_codes/411.json +1 -1
- data/data/postal_codes/412.json +1 -1
- data/data/postal_codes/413.json +1 -1
- data/data/postal_codes/414.json +1 -1
- data/data/postal_codes/415.json +1 -1
- data/data/postal_codes/416.json +1 -1
- data/data/postal_codes/417.json +1 -1
- data/data/postal_codes/418.json +1 -1
- data/data/postal_codes/419.json +1 -1
- data/data/postal_codes/420.json +1 -1
- data/data/postal_codes/421.json +1 -1
- data/data/postal_codes/422.json +1 -1
- data/data/postal_codes/424.json +1 -1
- data/data/postal_codes/425.json +1 -1
- data/data/postal_codes/426.json +1 -1
- data/data/postal_codes/427.json +1 -1
- data/data/postal_codes/428.json +1 -1
- data/data/postal_codes/430.json +1 -1
- data/data/postal_codes/431.json +1 -1
- data/data/postal_codes/432.json +1 -1
- data/data/postal_codes/433.json +1 -1
- data/data/postal_codes/434.json +1 -1
- data/data/postal_codes/435.json +1 -1
- data/data/postal_codes/436.json +1 -1
- data/data/postal_codes/437.json +1 -1
- data/data/postal_codes/438.json +1 -1
- data/data/postal_codes/439.json +1 -1
- data/data/postal_codes/440.json +1 -1
- data/data/postal_codes/441.json +1 -1
- data/data/postal_codes/442.json +1 -1
- data/data/postal_codes/443.json +1 -1
- data/data/postal_codes/444.json +1 -1
- data/data/postal_codes/445.json +1 -1
- data/data/postal_codes/446.json +1 -1
- data/data/postal_codes/447.json +1 -1
- data/data/postal_codes/448.json +1 -1
- data/data/postal_codes/449.json +1 -1
- data/data/postal_codes/450.json +1 -1
- data/data/postal_codes/451.json +1 -1
- data/data/postal_codes/452.json +1 -1
- data/data/postal_codes/453.json +1 -1
- data/data/postal_codes/454.json +1 -1
- data/data/postal_codes/455.json +1 -1
- data/data/postal_codes/456.json +1 -1
- data/data/postal_codes/457.json +1 -1
- data/data/postal_codes/458.json +1 -1
- data/data/postal_codes/459.json +1 -1
- data/data/postal_codes/460.json +1 -1
- data/data/postal_codes/461.json +1 -1
- data/data/postal_codes/462.json +1 -1
- data/data/postal_codes/463.json +1 -1
- data/data/postal_codes/464.json +1 -1
- data/data/postal_codes/465.json +1 -1
- data/data/postal_codes/466.json +1 -1
- data/data/postal_codes/467.json +1 -1
- data/data/postal_codes/468.json +1 -1
- data/data/postal_codes/470.json +1 -1
- data/data/postal_codes/471.json +1 -1
- data/data/postal_codes/472.json +1 -1
- data/data/postal_codes/473.json +1 -1
- data/data/postal_codes/474.json +1 -1
- data/data/postal_codes/475.json +1 -1
- data/data/postal_codes/476.json +1 -1
- data/data/postal_codes/477.json +1 -1
- data/data/postal_codes/478.json +1 -1
- data/data/postal_codes/479.json +1 -1
- data/data/postal_codes/480.json +1 -1
- data/data/postal_codes/481.json +1 -1
- data/data/postal_codes/482.json +1 -1
- data/data/postal_codes/483.json +1 -1
- data/data/postal_codes/484.json +1 -1
- data/data/postal_codes/485.json +1 -1
- data/data/postal_codes/486.json +1 -1
- data/data/postal_codes/487.json +1 -1
- data/data/postal_codes/488.json +1 -1
- data/data/postal_codes/489.json +1 -1
- data/data/postal_codes/490.json +1 -1
- data/data/postal_codes/491.json +1 -1
- data/data/postal_codes/492.json +1 -1
- data/data/postal_codes/493.json +1 -1
- data/data/postal_codes/494.json +1 -1
- data/data/postal_codes/495.json +1 -1
- data/data/postal_codes/496.json +1 -1
- data/data/postal_codes/497.json +1 -1
- data/data/postal_codes/498.json +1 -1
- data/data/postal_codes/500.json +1 -1
- data/data/postal_codes/501.json +1 -1
- data/data/postal_codes/502.json +1 -1
- data/data/postal_codes/503.json +1 -1
- data/data/postal_codes/504.json +1 -1
- data/data/postal_codes/505.json +1 -1
- data/data/postal_codes/506.json +1 -1
- data/data/postal_codes/507.json +1 -1
- data/data/postal_codes/508.json +1 -1
- data/data/postal_codes/509.json +1 -1
- data/data/postal_codes/510.json +1 -1
- data/data/postal_codes/511.json +1 -1
- data/data/postal_codes/512.json +1 -1
- data/data/postal_codes/513.json +1 -1
- data/data/postal_codes/514.json +1 -1
- data/data/postal_codes/515.json +1 -1
- data/data/postal_codes/516.json +1 -1
- data/data/postal_codes/517.json +1 -1
- data/data/postal_codes/518.json +1 -1
- data/data/postal_codes/519.json +1 -1
- data/data/postal_codes/520.json +1 -1
- data/data/postal_codes/521.json +1 -1
- data/data/postal_codes/522.json +1 -1
- data/data/postal_codes/523.json +1 -1
- data/data/postal_codes/524.json +1 -1
- data/data/postal_codes/525.json +1 -1
- data/data/postal_codes/526.json +1 -1
- data/data/postal_codes/527.json +1 -1
- data/data/postal_codes/528.json +1 -1
- data/data/postal_codes/529.json +1 -1
- data/data/postal_codes/530.json +1 -1
- data/data/postal_codes/531.json +1 -1
- data/data/postal_codes/532.json +1 -1
- data/data/postal_codes/533.json +1 -1
- data/data/postal_codes/534.json +1 -1
- data/data/postal_codes/535.json +1 -1
- data/data/postal_codes/536.json +1 -1
- data/data/postal_codes/537.json +1 -1
- data/data/postal_codes/538.json +1 -1
- data/data/postal_codes/539.json +1 -1
- data/data/postal_codes/540.json +1 -1
- data/data/postal_codes/541.json +1 -1
- data/data/postal_codes/542.json +1 -1
- data/data/postal_codes/543.json +1 -1
- data/data/postal_codes/544.json +1 -1
- data/data/postal_codes/545.json +1 -1
- data/data/postal_codes/546.json +1 -1
- data/data/postal_codes/547.json +1 -1
- data/data/postal_codes/549.json +1 -1
- data/data/postal_codes/550.json +1 -1
- data/data/postal_codes/551.json +1 -1
- data/data/postal_codes/552.json +1 -1
- data/data/postal_codes/553.json +1 -1
- data/data/postal_codes/554.json +1 -1
- data/data/postal_codes/555.json +1 -1
- data/data/postal_codes/556.json +1 -1
- data/data/postal_codes/557.json +1 -1
- data/data/postal_codes/558.json +1 -1
- data/data/postal_codes/559.json +1 -1
- data/data/postal_codes/560.json +1 -1
- data/data/postal_codes/561.json +1 -1
- data/data/postal_codes/562.json +1 -1
- data/data/postal_codes/563.json +1 -1
- data/data/postal_codes/564.json +1 -1
- data/data/postal_codes/565.json +1 -1
- data/data/postal_codes/566.json +1 -1
- data/data/postal_codes/567.json +1 -1
- data/data/postal_codes/568.json +1 -1
- data/data/postal_codes/569.json +1 -1
- data/data/postal_codes/570.json +1 -1
- data/data/postal_codes/571.json +1 -1
- data/data/postal_codes/572.json +1 -1
- data/data/postal_codes/573.json +1 -1
- data/data/postal_codes/574.json +1 -1
- data/data/postal_codes/575.json +1 -1
- data/data/postal_codes/576.json +1 -1
- data/data/postal_codes/577.json +1 -1
- data/data/postal_codes/578.json +1 -1
- data/data/postal_codes/579.json +1 -1
- data/data/postal_codes/580.json +1 -1
- data/data/postal_codes/581.json +1 -1
- data/data/postal_codes/582.json +1 -1
- data/data/postal_codes/583.json +1 -1
- data/data/postal_codes/584.json +1 -1
- data/data/postal_codes/585.json +1 -1
- data/data/postal_codes/586.json +1 -1
- data/data/postal_codes/587.json +1 -1
- data/data/postal_codes/589.json +1 -1
- data/data/postal_codes/590.json +1 -1
- data/data/postal_codes/591.json +1 -1
- data/data/postal_codes/592.json +1 -1
- data/data/postal_codes/593.json +1 -1
- data/data/postal_codes/594.json +1 -1
- data/data/postal_codes/595.json +1 -1
- data/data/postal_codes/596.json +1 -1
- data/data/postal_codes/597.json +1 -1
- data/data/postal_codes/598.json +1 -1
- data/data/postal_codes/599.json +1 -1
- data/data/postal_codes/600.json +1 -1
- data/data/postal_codes/601.json +1 -1
- data/data/postal_codes/602.json +1 -1
- data/data/postal_codes/603.json +1 -1
- data/data/postal_codes/604.json +1 -1
- data/data/postal_codes/605.json +1 -1
- data/data/postal_codes/606.json +1 -1
- data/data/postal_codes/607.json +1 -1
- data/data/postal_codes/610.json +1 -1
- data/data/postal_codes/611.json +1 -1
- data/data/postal_codes/612.json +1 -1
- data/data/postal_codes/613.json +1 -1
- data/data/postal_codes/614.json +1 -1
- data/data/postal_codes/615.json +1 -1
- data/data/postal_codes/616.json +1 -1
- data/data/postal_codes/617.json +1 -1
- data/data/postal_codes/618.json +1 -1
- data/data/postal_codes/619.json +1 -1
- data/data/postal_codes/620.json +1 -1
- data/data/postal_codes/621.json +1 -1
- data/data/postal_codes/622.json +1 -1
- data/data/postal_codes/623.json +1 -1
- data/data/postal_codes/624.json +1 -1
- data/data/postal_codes/625.json +1 -1
- data/data/postal_codes/626.json +1 -1
- data/data/postal_codes/627.json +1 -1
- data/data/postal_codes/629.json +1 -1
- data/data/postal_codes/630.json +1 -1
- data/data/postal_codes/631.json +1 -1
- data/data/postal_codes/632.json +1 -1
- data/data/postal_codes/633.json +1 -1
- data/data/postal_codes/634.json +1 -1
- data/data/postal_codes/635.json +1 -1
- data/data/postal_codes/636.json +1 -1
- data/data/postal_codes/637.json +1 -1
- data/data/postal_codes/638.json +1 -1
- data/data/postal_codes/639.json +1 -1
- data/data/postal_codes/640.json +1 -1
- data/data/postal_codes/641.json +1 -1
- data/data/postal_codes/642.json +1 -1
- data/data/postal_codes/643.json +1 -1
- data/data/postal_codes/644.json +1 -1
- data/data/postal_codes/645.json +1 -1
- data/data/postal_codes/646.json +1 -1
- data/data/postal_codes/647.json +1 -1
- data/data/postal_codes/648.json +1 -1
- data/data/postal_codes/649.json +1 -1
- data/data/postal_codes/650.json +1 -1
- data/data/postal_codes/651.json +1 -1
- data/data/postal_codes/652.json +1 -1
- data/data/postal_codes/653.json +1 -1
- data/data/postal_codes/654.json +1 -1
- data/data/postal_codes/655.json +1 -1
- data/data/postal_codes/656.json +1 -1
- data/data/postal_codes/657.json +1 -1
- data/data/postal_codes/658.json +1 -1
- data/data/postal_codes/659.json +1 -1
- data/data/postal_codes/660.json +1 -1
- data/data/postal_codes/661.json +1 -1
- data/data/postal_codes/662.json +1 -1
- data/data/postal_codes/663.json +1 -1
- data/data/postal_codes/664.json +1 -1
- data/data/postal_codes/665.json +1 -1
- data/data/postal_codes/666.json +1 -1
- data/data/postal_codes/667.json +1 -1
- data/data/postal_codes/668.json +1 -1
- data/data/postal_codes/669.json +1 -1
- data/data/postal_codes/670.json +1 -1
- data/data/postal_codes/671.json +1 -1
- data/data/postal_codes/672.json +1 -1
- data/data/postal_codes/673.json +1 -1
- data/data/postal_codes/674.json +1 -1
- data/data/postal_codes/675.json +1 -1
- data/data/postal_codes/676.json +1 -1
- data/data/postal_codes/677.json +1 -1
- data/data/postal_codes/678.json +1 -1
- data/data/postal_codes/679.json +1 -1
- data/data/postal_codes/680.json +1 -1
- data/data/postal_codes/681.json +1 -1
- data/data/postal_codes/682.json +1 -1
- data/data/postal_codes/683.json +1 -1
- data/data/postal_codes/684.json +1 -1
- data/data/postal_codes/685.json +1 -1
- data/data/postal_codes/689.json +1 -1
- data/data/postal_codes/690.json +1 -1
- data/data/postal_codes/691.json +1 -1
- data/data/postal_codes/692.json +1 -1
- data/data/postal_codes/693.json +1 -1
- data/data/postal_codes/694.json +1 -1
- data/data/postal_codes/695.json +1 -1
- data/data/postal_codes/696.json +1 -1
- data/data/postal_codes/697.json +1 -1
- data/data/postal_codes/698.json +1 -1
- data/data/postal_codes/699.json +1 -1
- data/data/postal_codes/700.json +1 -1
- data/data/postal_codes/701.json +1 -1
- data/data/postal_codes/702.json +1 -1
- data/data/postal_codes/703.json +1 -1
- data/data/postal_codes/704.json +1 -1
- data/data/postal_codes/705.json +1 -1
- data/data/postal_codes/706.json +1 -1
- data/data/postal_codes/707.json +1 -1
- data/data/postal_codes/708.json +1 -1
- data/data/postal_codes/709.json +1 -1
- data/data/postal_codes/710.json +1 -1
- data/data/postal_codes/711.json +1 -1
- data/data/postal_codes/712.json +1 -1
- data/data/postal_codes/713.json +1 -1
- data/data/postal_codes/714.json +1 -1
- data/data/postal_codes/715.json +1 -1
- data/data/postal_codes/716.json +1 -1
- data/data/postal_codes/717.json +1 -1
- data/data/postal_codes/718.json +1 -1
- data/data/postal_codes/719.json +1 -1
- data/data/postal_codes/720.json +1 -1
- data/data/postal_codes/721.json +1 -1
- data/data/postal_codes/722.json +1 -1
- data/data/postal_codes/723.json +1 -1
- data/data/postal_codes/725.json +1 -1
- data/data/postal_codes/726.json +1 -1
- data/data/postal_codes/727.json +1 -1
- data/data/postal_codes/728.json +1 -1
- data/data/postal_codes/729.json +1 -1
- data/data/postal_codes/730.json +1 -1
- data/data/postal_codes/731.json +1 -1
- data/data/postal_codes/732.json +1 -1
- data/data/postal_codes/733.json +1 -1
- data/data/postal_codes/734.json +1 -1
- data/data/postal_codes/735.json +1 -1
- data/data/postal_codes/736.json +1 -1
- data/data/postal_codes/737.json +1 -1
- data/data/postal_codes/738.json +1 -1
- data/data/postal_codes/739.json +1 -1
- data/data/postal_codes/740.json +1 -1
- data/data/postal_codes/741.json +1 -1
- data/data/postal_codes/742.json +1 -1
- data/data/postal_codes/743.json +1 -1
- data/data/postal_codes/744.json +1 -1
- data/data/postal_codes/745.json +1 -1
- data/data/postal_codes/746.json +1 -1
- data/data/postal_codes/747.json +1 -1
- data/data/postal_codes/749.json +1 -1
- data/data/postal_codes/750.json +1 -1
- data/data/postal_codes/751.json +1 -1
- data/data/postal_codes/752.json +1 -1
- data/data/postal_codes/753.json +1 -1
- data/data/postal_codes/754.json +1 -1
- data/data/postal_codes/755.json +1 -1
- data/data/postal_codes/756.json +1 -1
- data/data/postal_codes/757.json +1 -1
- data/data/postal_codes/758.json +1 -1
- data/data/postal_codes/759.json +1 -1
- data/data/postal_codes/760.json +1 -1
- data/data/postal_codes/761.json +1 -1
- data/data/postal_codes/762.json +1 -1
- data/data/postal_codes/763.json +1 -1
- data/data/postal_codes/764.json +1 -1
- data/data/postal_codes/765.json +1 -1
- data/data/postal_codes/766.json +1 -1
- data/data/postal_codes/767.json +1 -1
- data/data/postal_codes/768.json +1 -1
- data/data/postal_codes/769.json +1 -1
- data/data/postal_codes/770.json +1 -1
- data/data/postal_codes/771.json +1 -1
- data/data/postal_codes/772.json +1 -1
- data/data/postal_codes/773.json +1 -1
- data/data/postal_codes/774.json +1 -1
- data/data/postal_codes/775.json +1 -1
- data/data/postal_codes/776.json +1 -1
- data/data/postal_codes/777.json +1 -1
- data/data/postal_codes/778.json +1 -1
- data/data/postal_codes/779.json +1 -1
- data/data/postal_codes/780.json +1 -1
- data/data/postal_codes/781.json +1 -1
- data/data/postal_codes/782.json +1 -1
- data/data/postal_codes/783.json +1 -1
- data/data/postal_codes/784.json +1 -1
- data/data/postal_codes/785.json +1 -1
- data/data/postal_codes/786.json +1 -1
- data/data/postal_codes/787.json +1 -1
- data/data/postal_codes/788.json +1 -1
- data/data/postal_codes/789.json +1 -1
- data/data/postal_codes/790.json +1 -1
- data/data/postal_codes/791.json +1 -1
- data/data/postal_codes/792.json +1 -1
- data/data/postal_codes/793.json +1 -1
- data/data/postal_codes/794.json +1 -1
- data/data/postal_codes/795.json +1 -1
- data/data/postal_codes/796.json +1 -1
- data/data/postal_codes/797.json +1 -1
- data/data/postal_codes/798.json +1 -1
- data/data/postal_codes/799.json +1 -1
- data/data/postal_codes/800.json +1 -1
- data/data/postal_codes/801.json +1 -1
- data/data/postal_codes/802.json +1 -1
- data/data/postal_codes/803.json +1 -1
- data/data/postal_codes/804.json +1 -1
- data/data/postal_codes/805.json +1 -1
- data/data/postal_codes/806.json +1 -1
- data/data/postal_codes/807.json +1 -1
- data/data/postal_codes/808.json +1 -1
- data/data/postal_codes/809.json +1 -1
- data/data/postal_codes/810.json +1 -1
- data/data/postal_codes/811.json +1 -1
- data/data/postal_codes/812.json +1 -1
- data/data/postal_codes/813.json +1 -1
- data/data/postal_codes/814.json +1 -1
- data/data/postal_codes/815.json +1 -1
- data/data/postal_codes/816.json +1 -1
- data/data/postal_codes/817.json +1 -1
- data/data/postal_codes/818.json +1 -1
- data/data/postal_codes/819.json +1 -1
- data/data/postal_codes/820.json +1 -1
- data/data/postal_codes/821.json +1 -1
- data/data/postal_codes/822.json +1 -1
- data/data/postal_codes/823.json +1 -1
- data/data/postal_codes/824.json +1 -1
- data/data/postal_codes/825.json +1 -1
- data/data/postal_codes/826.json +1 -1
- data/data/postal_codes/827.json +1 -1
- data/data/postal_codes/828.json +1 -1
- data/data/postal_codes/829.json +1 -1
- data/data/postal_codes/830.json +1 -1
- data/data/postal_codes/831.json +1 -1
- data/data/postal_codes/832.json +1 -1
- data/data/postal_codes/833.json +1 -1
- data/data/postal_codes/834.json +1 -1
- data/data/postal_codes/835.json +1 -1
- data/data/postal_codes/836.json +1 -1
- data/data/postal_codes/837.json +1 -1
- data/data/postal_codes/838.json +1 -1
- data/data/postal_codes/839.json +1 -1
- data/data/postal_codes/840.json +1 -1
- data/data/postal_codes/841.json +1 -1
- data/data/postal_codes/842.json +1 -1
- data/data/postal_codes/843.json +1 -1
- data/data/postal_codes/844.json +1 -1
- data/data/postal_codes/845.json +1 -1
- data/data/postal_codes/846.json +1 -1
- data/data/postal_codes/847.json +1 -1
- data/data/postal_codes/848.json +1 -1
- data/data/postal_codes/849.json +1 -1
- data/data/postal_codes/850.json +1 -1
- data/data/postal_codes/851.json +1 -1
- data/data/postal_codes/852.json +1 -1
- data/data/postal_codes/853.json +1 -1
- data/data/postal_codes/854.json +1 -1
- data/data/postal_codes/855.json +1 -1
- data/data/postal_codes/856.json +1 -1
- data/data/postal_codes/857.json +1 -1
- data/data/postal_codes/858.json +1 -1
- data/data/postal_codes/859.json +1 -1
- data/data/postal_codes/860.json +1 -1
- data/data/postal_codes/861.json +1 -1
- data/data/postal_codes/862.json +1 -1
- data/data/postal_codes/863.json +1 -1
- data/data/postal_codes/864.json +1 -1
- data/data/postal_codes/865.json +1 -1
- data/data/postal_codes/866.json +1 -1
- data/data/postal_codes/867.json +1 -1
- data/data/postal_codes/868.json +1 -1
- data/data/postal_codes/869.json +1 -1
- data/data/postal_codes/870.json +1 -1
- data/data/postal_codes/871.json +1 -1
- data/data/postal_codes/872.json +1 -1
- data/data/postal_codes/873.json +1 -1
- data/data/postal_codes/874.json +1 -1
- data/data/postal_codes/875.json +1 -1
- data/data/postal_codes/876.json +1 -1
- data/data/postal_codes/877.json +1 -1
- data/data/postal_codes/878.json +1 -1
- data/data/postal_codes/879.json +1 -1
- data/data/postal_codes/880.json +1 -1
- data/data/postal_codes/881.json +1 -1
- data/data/postal_codes/882.json +1 -1
- data/data/postal_codes/883.json +1 -1
- data/data/postal_codes/884.json +1 -1
- data/data/postal_codes/885.json +1 -1
- data/data/postal_codes/886.json +1 -1
- data/data/postal_codes/887.json +1 -1
- data/data/postal_codes/888.json +1 -1
- data/data/postal_codes/889.json +1 -1
- data/data/postal_codes/890.json +1 -1
- data/data/postal_codes/891.json +1 -1
- data/data/postal_codes/892.json +1 -1
- data/data/postal_codes/893.json +1 -1
- data/data/postal_codes/894.json +1 -1
- data/data/postal_codes/895.json +1 -1
- data/data/postal_codes/896.json +1 -1
- data/data/postal_codes/897.json +1 -1
- data/data/postal_codes/898.json +1 -1
- data/data/postal_codes/899.json +1 -1
- data/data/postal_codes/900.json +1 -1
- data/data/postal_codes/901.json +1 -1
- data/data/postal_codes/902.json +1 -1
- data/data/postal_codes/903.json +1 -1
- data/data/postal_codes/904.json +1 -1
- data/data/postal_codes/905.json +1 -1
- data/data/postal_codes/906.json +1 -1
- data/data/postal_codes/907.json +1 -1
- data/data/postal_codes/910.json +1 -1
- data/data/postal_codes/911.json +1 -1
- data/data/postal_codes/912.json +1 -1
- data/data/postal_codes/913.json +1 -1
- data/data/postal_codes/914.json +1 -1
- data/data/postal_codes/915.json +1 -1
- data/data/postal_codes/916.json +1 -1
- data/data/postal_codes/917.json +1 -1
- data/data/postal_codes/918.json +1 -1
- data/data/postal_codes/919.json +1 -1
- data/data/postal_codes/920.json +1 -1
- data/data/postal_codes/921.json +1 -1
- data/data/postal_codes/922.json +1 -1
- data/data/postal_codes/923.json +1 -1
- data/data/postal_codes/924.json +1 -1
- data/data/postal_codes/925.json +1 -1
- data/data/postal_codes/926.json +1 -1
- data/data/postal_codes/927.json +1 -1
- data/data/postal_codes/928.json +1 -1
- data/data/postal_codes/929.json +1 -1
- data/data/postal_codes/930.json +1 -1
- data/data/postal_codes/931.json +1 -1
- data/data/postal_codes/932.json +1 -1
- data/data/postal_codes/933.json +1 -1
- data/data/postal_codes/934.json +1 -1
- data/data/postal_codes/935.json +1 -1
- data/data/postal_codes/936.json +1 -1
- data/data/postal_codes/937.json +1 -1
- data/data/postal_codes/938.json +1 -1
- data/data/postal_codes/939.json +1 -1
- data/data/postal_codes/940.json +1 -1
- data/data/postal_codes/941.json +1 -1
- data/data/postal_codes/942.json +1 -1
- data/data/postal_codes/943.json +1 -1
- data/data/postal_codes/944.json +1 -1
- data/data/postal_codes/945.json +1 -1
- data/data/postal_codes/946.json +1 -1
- data/data/postal_codes/947.json +1 -1
- data/data/postal_codes/948.json +1 -1
- data/data/postal_codes/949.json +1 -1
- data/data/postal_codes/950.json +1 -1
- data/data/postal_codes/951.json +1 -1
- data/data/postal_codes/952.json +1 -1
- data/data/postal_codes/953.json +1 -1
- data/data/postal_codes/954.json +1 -1
- data/data/postal_codes/955.json +1 -1
- data/data/postal_codes/956.json +1 -1
- data/data/postal_codes/957.json +1 -1
- data/data/postal_codes/958.json +1 -1
- data/data/postal_codes/959.json +1 -1
- data/data/postal_codes/960.json +1 -1
- data/data/postal_codes/961.json +1 -1
- data/data/postal_codes/962.json +1 -1
- data/data/postal_codes/963.json +1 -1
- data/data/postal_codes/964.json +1 -1
- data/data/postal_codes/965.json +1 -1
- data/data/postal_codes/966.json +1 -1
- data/data/postal_codes/967.json +1 -1
- data/data/postal_codes/968.json +1 -1
- data/data/postal_codes/969.json +1 -1
- data/data/postal_codes/970.json +1 -1
- data/data/postal_codes/971.json +1 -1
- data/data/postal_codes/972.json +1 -1
- data/data/postal_codes/973.json +1 -1
- data/data/postal_codes/974.json +1 -1
- data/data/postal_codes/975.json +1 -1
- data/data/postal_codes/976.json +1 -1
- data/data/postal_codes/979.json +1 -1
- data/data/postal_codes/980.json +1 -1
- data/data/postal_codes/981.json +1 -1
- data/data/postal_codes/982.json +1 -1
- data/data/postal_codes/983.json +1 -1
- data/data/postal_codes/984.json +1 -1
- data/data/postal_codes/985.json +1 -1
- data/data/postal_codes/986.json +1 -1
- data/data/postal_codes/987.json +1 -1
- data/data/postal_codes/988.json +1 -1
- data/data/postal_codes/989.json +1 -1
- data/data/postal_codes/990.json +1 -1
- data/data/postal_codes/991.json +1 -1
- data/data/postal_codes/992.json +1 -1
- data/data/postal_codes/993.json +1 -1
- data/data/postal_codes/994.json +1 -1
- data/data/postal_codes/995.json +1 -1
- data/data/postal_codes/996.json +1 -1
- data/data/postal_codes/997.json +1 -1
- data/data/postal_codes/998.json +1 -1
- data/data/postal_codes/999.json +1 -1
- data/data/prefectures.json +94 -94
- data/lib/basho/active_record/base.rb +26 -2
- data/lib/basho/active_record/postal_auto_resolve.rb +33 -39
- data/lib/basho/city.rb +43 -14
- data/lib/basho/code_validator.rb +16 -1
- data/lib/basho/data/loader.rb +21 -2
- data/lib/basho/db/city.rb +24 -0
- data/lib/basho/db/prefecture.rb +26 -0
- data/lib/basho/db.rb +45 -0
- data/lib/basho/engine.rb +11 -1
- data/lib/basho/postal_code.rb +32 -4
- data/lib/basho/prefecture.rb +64 -23
- data/lib/basho/region.rb +19 -0
- data/lib/basho/version.rb +2 -1
- data/lib/basho.rb +51 -1
- data/lib/generators/basho/install_tables/install_tables_generator.rb +28 -0
- data/lib/generators/basho/install_tables/templates/create_basho_cities.rb.erb +15 -0
- data/lib/generators/basho/install_tables/templates/create_basho_prefectures.rb.erb +14 -0
- data/lib/tasks/basho.rake +11 -0
- metadata +9 -3
- data/app/assets/javascripts/controllers/basho/cascade_select_controller.js +0 -77
- data/app/controllers/basho/prefectures_controller.rb +0 -34
data/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# Basho
|
|
4
4
|
|
|
5
|
-
A Ruby gem for working with Japanese address data
|
|
5
|
+
A Ruby gem for working with Japanese address data -- prefectures, cities, postal codes, and regions -- in a unified interface.
|
|
6
6
|
|
|
7
7
|
## Why Basho
|
|
8
8
|
|
|
@@ -15,10 +15,14 @@ Dealing with Japanese addresses is tedious.
|
|
|
15
15
|
|
|
16
16
|
Basho solves all of these.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
- **
|
|
21
|
-
- **
|
|
18
|
+
## Features
|
|
19
|
+
|
|
20
|
+
- **No DB migrations** -- All data is bundled as JSON. Just `gem install` and go
|
|
21
|
+
- **Optional DB backend** -- Generate tables for JOINs and foreign keys. The API auto-switches transparently
|
|
22
|
+
- **Framework-agnostic** -- Works with plain Ruby, Sinatra, Rails API-only, or any Ruby app
|
|
23
|
+
- **ActiveRecord integration** -- `include Basho` + a one-line macro for automatic postal code to address resolution on save
|
|
24
|
+
- **Hotwire-ready** -- Built-in Rails Engine with postal code auto-fill via Turbo Frame + Stimulus
|
|
25
|
+
- **Lightweight** -- Immutable models via `Data.define`, lazy loading, zero external dependencies
|
|
22
26
|
|
|
23
27
|
## Supported Versions
|
|
24
28
|
|
|
@@ -40,7 +44,7 @@ bundle install
|
|
|
40
44
|
### Look up an address from a postal code
|
|
41
45
|
|
|
42
46
|
```ruby
|
|
43
|
-
postal = Basho::PostalCode.find("154-0011")
|
|
47
|
+
postal = Basho::PostalCode.find("154-0011")
|
|
44
48
|
postal.prefecture_name # => "東京都"
|
|
45
49
|
postal.city_name # => "世田谷区"
|
|
46
50
|
postal.town # => "上馬"
|
|
@@ -68,7 +72,7 @@ user.town_name # => "上馬"
|
|
|
68
72
|
|
|
69
73
|
```ruby
|
|
70
74
|
Basho::Prefecture.find(13).name # => "東京都"
|
|
71
|
-
Basho::Prefecture.where(region: "関東") # => 7
|
|
75
|
+
Basho::Prefecture.where(region: "関東") # => 7 prefectures
|
|
72
76
|
Basho::City.find("131016").name # => "千代田区"
|
|
73
77
|
```
|
|
74
78
|
|
|
@@ -77,70 +81,109 @@ Basho::City.find("131016").name # => "千代田区"
|
|
|
77
81
|
### Prefecture
|
|
78
82
|
|
|
79
83
|
```ruby
|
|
80
|
-
|
|
81
|
-
Basho::Prefecture.find(
|
|
82
|
-
Basho::Prefecture.
|
|
83
|
-
Basho::Prefecture.
|
|
84
|
+
# Class methods
|
|
85
|
+
Basho::Prefecture.find(13) # Find by code (Integer)
|
|
86
|
+
Basho::Prefecture.find(name: "東京都") # Find by Japanese name
|
|
87
|
+
Basho::Prefecture.find(name_en: "Tokyo") # Find by English name
|
|
88
|
+
Basho::Prefecture.all # All 47 prefectures
|
|
89
|
+
Basho::Prefecture.where(region: "関東") # Filter by region name
|
|
90
|
+
```
|
|
84
91
|
|
|
92
|
+
```ruby
|
|
93
|
+
# Instance methods / members
|
|
85
94
|
pref = Basho::Prefecture.find(13)
|
|
86
|
-
pref.code # => 13
|
|
87
|
-
pref.name # => "東京都"
|
|
88
|
-
pref.name_en # => "Tokyo"
|
|
89
|
-
pref.name_kana # => "トウキョウト"
|
|
90
|
-
pref.name_hiragana # => "とうきょうと"
|
|
91
|
-
pref.
|
|
92
|
-
pref.
|
|
93
|
-
pref.
|
|
94
|
-
pref.
|
|
95
|
+
pref.code # => 13 (Integer)
|
|
96
|
+
pref.name # => "東京都" (String)
|
|
97
|
+
pref.name_en # => "Tokyo" (String)
|
|
98
|
+
pref.name_kana # => "トウキョウト" (String, katakana)
|
|
99
|
+
pref.name_hiragana # => "とうきょうと" (String, hiragana)
|
|
100
|
+
pref.region_name # => "関東" (String)
|
|
101
|
+
pref.type # => "都" (String: "都" / "道" / "府" / "県")
|
|
102
|
+
pref.capital_code # => "131016" (String, 6-digit city code)
|
|
103
|
+
pref.region # => Basho::Region
|
|
104
|
+
pref.cities # => Array<Basho::City>
|
|
105
|
+
pref.capital # => Basho::City (prefectural capital)
|
|
95
106
|
```
|
|
96
107
|
|
|
97
108
|
### City
|
|
98
109
|
|
|
99
110
|
```ruby
|
|
100
|
-
|
|
101
|
-
Basho::City.
|
|
102
|
-
Basho::City.
|
|
111
|
+
# Class methods
|
|
112
|
+
Basho::City.find("131016") # Find by 6-digit municipality code (String)
|
|
113
|
+
Basho::City.where(prefecture_code: 13) # Filter by prefecture code (Integer)
|
|
114
|
+
Basho::City.valid_code?("131016") # Validate JIS X 0401 check digit
|
|
115
|
+
```
|
|
103
116
|
|
|
117
|
+
```ruby
|
|
118
|
+
# Instance methods / members
|
|
104
119
|
city = Basho::City.find("131016")
|
|
105
|
-
city.code # => "131016"
|
|
106
|
-
city.prefecture_code # => 13
|
|
107
|
-
city.name # => "千代田区"
|
|
108
|
-
city.name_kana # => "チヨダク"
|
|
109
|
-
city.
|
|
110
|
-
city.
|
|
120
|
+
city.code # => "131016" (String, 6-digit)
|
|
121
|
+
city.prefecture_code # => 13 (Integer)
|
|
122
|
+
city.name # => "千代田区" (String)
|
|
123
|
+
city.name_kana # => "チヨダク" (String, katakana)
|
|
124
|
+
city.district # => nil (String or nil, e.g. "島尻郡")
|
|
125
|
+
city.capital # => false (Boolean, raw member)
|
|
126
|
+
city.capital? # => false (Boolean, prefectural capital?)
|
|
127
|
+
city.full_name # => "千代田区" (String, prepends district if present)
|
|
128
|
+
city.prefecture # => Basho::Prefecture
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
`district` is set only for towns/villages that belong to a county (gun). For example:
|
|
132
|
+
|
|
133
|
+
```ruby
|
|
134
|
+
city = Basho::City.find("473821")
|
|
135
|
+
city.name # => "八重瀬町"
|
|
136
|
+
city.district # => "島尻郡"
|
|
137
|
+
city.full_name # => "島尻郡八重瀬町"
|
|
111
138
|
```
|
|
112
139
|
|
|
113
140
|
### PostalCode
|
|
114
141
|
|
|
142
|
+
`find` returns a single `PostalCode` or `nil`. `where` returns an `Array` (may contain multiple results for shared postal codes).
|
|
143
|
+
|
|
115
144
|
```ruby
|
|
116
|
-
|
|
117
|
-
|
|
145
|
+
# Class methods
|
|
146
|
+
Basho::PostalCode.find("154-0011") # => PostalCode or nil (first match)
|
|
147
|
+
Basho::PostalCode.find("1540011") # Hyphenless format also works
|
|
148
|
+
Basho::PostalCode.where(code: "154-0011") # => Array<PostalCode>
|
|
149
|
+
```
|
|
118
150
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
postal
|
|
122
|
-
postal.
|
|
123
|
-
postal.
|
|
124
|
-
postal.
|
|
125
|
-
postal.
|
|
126
|
-
postal.
|
|
151
|
+
```ruby
|
|
152
|
+
# Instance methods / members
|
|
153
|
+
postal = Basho::PostalCode.find("154-0011")
|
|
154
|
+
postal.code # => "1540011" (String, 7 digits, no hyphen)
|
|
155
|
+
postal.formatted_code # => "154-0011" (String, with hyphen)
|
|
156
|
+
postal.prefecture_code # => 13 (Integer)
|
|
157
|
+
postal.city_name # => "世田谷区" (String)
|
|
158
|
+
postal.town # => "上馬" (String)
|
|
159
|
+
postal.prefecture_name # => "東京都" (String)
|
|
160
|
+
postal.prefecture # => Basho::Prefecture
|
|
127
161
|
```
|
|
128
162
|
|
|
129
163
|
### Region
|
|
130
164
|
|
|
165
|
+
9 regions: Hokkaido, Tohoku, Kanto, Chubu, Kinki, Chugoku, Shikoku, Kyushu, Okinawa.
|
|
166
|
+
|
|
131
167
|
```ruby
|
|
132
|
-
|
|
133
|
-
Basho::Region.
|
|
168
|
+
# Class methods
|
|
169
|
+
Basho::Region.all # => Array of 9 regions
|
|
170
|
+
Basho::Region.find("関東") # Find by Japanese name
|
|
171
|
+
Basho::Region.find("Kanto") # Find by English name
|
|
172
|
+
```
|
|
134
173
|
|
|
174
|
+
```ruby
|
|
175
|
+
# Instance methods / members
|
|
135
176
|
region = Basho::Region.find("関東")
|
|
136
|
-
region.name # => "関東"
|
|
137
|
-
region.name_en # => "Kanto"
|
|
138
|
-
region.
|
|
139
|
-
region.
|
|
177
|
+
region.name # => "関東" (String)
|
|
178
|
+
region.name_en # => "Kanto" (String)
|
|
179
|
+
region.prefecture_codes # => [8, 9, 10, 11, 12, 13, 14] (Array<Integer>)
|
|
180
|
+
region.prefectures # => Array<Basho::Prefecture>
|
|
140
181
|
```
|
|
141
182
|
|
|
142
183
|
## ActiveRecord Integration
|
|
143
184
|
|
|
185
|
+
Add `include Basho` to your model to enable the `basho` and `basho_postal` macros.
|
|
186
|
+
|
|
144
187
|
### Look up prefecture and city from a municipality code
|
|
145
188
|
|
|
146
189
|
```ruby
|
|
@@ -149,11 +192,19 @@ class Shop < ApplicationRecord
|
|
|
149
192
|
basho :local_gov_code
|
|
150
193
|
end
|
|
151
194
|
|
|
152
|
-
shop.
|
|
153
|
-
shop.
|
|
195
|
+
shop.city # => Basho::City
|
|
196
|
+
shop.prefecture # => Basho::Prefecture
|
|
154
197
|
shop.full_address # => "東京都千代田区"
|
|
155
198
|
```
|
|
156
199
|
|
|
200
|
+
`basho :column` defines three instance methods:
|
|
201
|
+
|
|
202
|
+
| Method | Return value |
|
|
203
|
+
|--------|-------------|
|
|
204
|
+
| `city` | `Basho::City` found by the column value |
|
|
205
|
+
| `prefecture` | `Basho::Prefecture` via `city.prefecture` |
|
|
206
|
+
| `full_address` | `"#{prefecture.name}#{city.name}"` or `nil` |
|
|
207
|
+
|
|
157
208
|
### Get an address string from a postal code
|
|
158
209
|
|
|
159
210
|
```ruby
|
|
@@ -165,9 +216,11 @@ end
|
|
|
165
216
|
shop.postal_address # => "東京都世田谷区上馬"
|
|
166
217
|
```
|
|
167
218
|
|
|
219
|
+
`basho_postal :column` (without mapping options) defines a `postal_address` method that returns `"#{prefecture_name}#{city_name}#{town}"` or `nil`.
|
|
220
|
+
|
|
168
221
|
### Auto-save address columns from a postal code
|
|
169
222
|
|
|
170
|
-
When you pass mapping options to `basho_postal`, it registers a `before_save` callback that auto-fills address columns
|
|
223
|
+
When you pass mapping options to `basho_postal`, it registers a `before_save` callback that auto-fills address columns whenever the postal code column changes.
|
|
171
224
|
|
|
172
225
|
```ruby
|
|
173
226
|
class User < ApplicationRecord
|
|
@@ -179,29 +232,44 @@ class User < ApplicationRecord
|
|
|
179
232
|
end
|
|
180
233
|
```
|
|
181
234
|
|
|
182
|
-
|
|
235
|
+
Available mapping keys:
|
|
236
|
+
|
|
237
|
+
| Key | Resolved value |
|
|
238
|
+
|-----|---------------|
|
|
239
|
+
| `prefecture:` | Prefecture name (e.g. "東京都") |
|
|
240
|
+
| `city:` | City name (e.g. "世田谷区") |
|
|
241
|
+
| `town:` | Town name (e.g. "上馬") |
|
|
242
|
+
| `prefecture_code:` | Prefecture code (e.g. 13) |
|
|
243
|
+
| `city_code:` | 6-digit municipality code (e.g. "131130") |
|
|
244
|
+
|
|
245
|
+
- Resolution runs only when the postal code column will change on save
|
|
183
246
|
- Partial mappings are supported (e.g. `prefecture:` only)
|
|
184
|
-
-
|
|
247
|
+
- The `postal_address` method is always defined regardless of mapping options
|
|
185
248
|
|
|
186
249
|
## Hotwire Engine
|
|
187
250
|
|
|
188
|
-
A built-in Rails Engine providing postal code auto-fill
|
|
251
|
+
A built-in Rails Engine providing postal code auto-fill via Turbo Frame + Stimulus.
|
|
189
252
|
|
|
190
253
|
### Setup
|
|
191
254
|
|
|
192
|
-
|
|
193
|
-
# config/application.rb
|
|
194
|
-
require "basho/engine"
|
|
195
|
-
```
|
|
255
|
+
Mount the Engine in your routes:
|
|
196
256
|
|
|
197
257
|
```ruby
|
|
198
258
|
# config/routes.rb
|
|
199
259
|
mount Basho::Engine, at: "/basho"
|
|
200
260
|
```
|
|
201
261
|
|
|
262
|
+
The Engine provides a single route:
|
|
263
|
+
|
|
264
|
+
| Method | Path | Controller#Action |
|
|
265
|
+
|--------|------|------------------|
|
|
266
|
+
| GET | `/basho/postal_codes/lookup?code=1540011` | `Basho::PostalCodesController#lookup` |
|
|
267
|
+
|
|
268
|
+
The Stimulus controller and form helper are automatically registered via importmap and `ActionView` initializers.
|
|
269
|
+
|
|
202
270
|
### Postal Code Auto-fill
|
|
203
271
|
|
|
204
|
-
Automatically fills in prefecture, city, and town fields when a postal code is entered.
|
|
272
|
+
Automatically fills in prefecture, city, and town fields when a 7-digit postal code is entered.
|
|
205
273
|
|
|
206
274
|
```erb
|
|
207
275
|
<%= form_with(model: @shop) do |f| %>
|
|
@@ -213,83 +281,184 @@ Automatically fills in prefecture, city, and town fields when a postal code is e
|
|
|
213
281
|
"basho--auto-fill-target": "input" } %>
|
|
214
282
|
|
|
215
283
|
<turbo-frame id="basho-result"
|
|
216
|
-
data-basho--auto-fill-target="frame"
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
284
|
+
data-basho--auto-fill-target="frame"
|
|
285
|
+
data-action="turbo:frame-load->basho--auto-fill#fill"></turbo-frame>
|
|
286
|
+
|
|
287
|
+
<div data-basho--auto-fill-target="fields" hidden>
|
|
288
|
+
<%= f.text_field :prefecture, disabled: true,
|
|
289
|
+
data: { "basho--auto-fill-target": "prefecture" } %>
|
|
290
|
+
<%= f.text_field :city, disabled: true,
|
|
291
|
+
data: { "basho--auto-fill-target": "city" } %>
|
|
292
|
+
<%= f.text_field :town, disabled: true,
|
|
293
|
+
data: { "basho--auto-fill-target": "town" } %>
|
|
294
|
+
</div>
|
|
224
295
|
</div>
|
|
225
296
|
<% end %>
|
|
226
297
|
```
|
|
227
298
|
|
|
299
|
+
How it works:
|
|
300
|
+
|
|
228
301
|
1. User enters a 7-digit postal code
|
|
229
|
-
2.
|
|
230
|
-
3. Stimulus
|
|
302
|
+
2. A Turbo Frame request is sent to the Engine's lookup endpoint
|
|
303
|
+
3. Stimulus fills the prefecture, city, and town fields and shows the `fields` container
|
|
304
|
+
4. When the postal code is cleared or incomplete, the fields are hidden
|
|
231
305
|
|
|
232
|
-
|
|
306
|
+
The `fields` target is optional. Without it, the fields remain visible and are simply cleared.
|
|
233
307
|
|
|
234
|
-
|
|
308
|
+
You can use the `basho_autofill_frame_tag` helper instead of writing the `<turbo-frame>` tag manually:
|
|
235
309
|
|
|
236
310
|
```erb
|
|
237
|
-
<%=
|
|
238
|
-
<div data-controller="basho--cascade-select"
|
|
239
|
-
data-basho--cascade-select-prefectures-url-value="<%= basho.prefectures_path %>"
|
|
240
|
-
data-basho--cascade-select-cities-url-template-value="<%= basho.cities_prefecture_path(':code') %>">
|
|
241
|
-
|
|
242
|
-
<select data-basho--cascade-select-target="prefecture"
|
|
243
|
-
data-action="change->basho--cascade-select#prefectureChanged">
|
|
244
|
-
<option value="">Select prefecture</option>
|
|
245
|
-
</select>
|
|
246
|
-
|
|
247
|
-
<select data-basho--cascade-select-target="city">
|
|
248
|
-
<option value="">Select city</option>
|
|
249
|
-
</select>
|
|
250
|
-
</div>
|
|
251
|
-
<% end %>
|
|
311
|
+
<%= basho_autofill_frame_tag %>
|
|
252
312
|
```
|
|
253
313
|
|
|
254
|
-
|
|
314
|
+
This renders:
|
|
255
315
|
|
|
256
|
-
```
|
|
257
|
-
<
|
|
258
|
-
|
|
259
|
-
|
|
316
|
+
```html
|
|
317
|
+
<turbo-frame id="basho-result"
|
|
318
|
+
data-basho--auto-fill-target="frame"
|
|
319
|
+
data-action="turbo:frame-load->basho--auto-fill#fill"></turbo-frame>
|
|
260
320
|
```
|
|
261
321
|
|
|
262
|
-
|
|
263
|
-
2. Selecting a prefecture rebuilds the city select from the API
|
|
264
|
-
3. Changing the prefecture resets and re-fetches the city select
|
|
322
|
+
#### Stimulus Controller Targets and Values
|
|
265
323
|
|
|
266
|
-
|
|
324
|
+
| Type | Name | Description |
|
|
325
|
+
|------|------|-------------|
|
|
326
|
+
| Value | `url` (String) | Lookup endpoint URL (required) |
|
|
327
|
+
| Target | `input` | Postal code input field |
|
|
328
|
+
| Target | `frame` | Turbo Frame for server response |
|
|
329
|
+
| Target | `prefecture` | Prefecture output field |
|
|
330
|
+
| Target | `city` | City output field |
|
|
331
|
+
| Target | `town` | Town output field |
|
|
332
|
+
| Target | `fields` | Container to show/hide (optional) |
|
|
267
333
|
|
|
268
|
-
|
|
334
|
+
### Prefecture-City Cascade Select
|
|
335
|
+
|
|
336
|
+
Basho provides the data -- build the UI in your app using Turbo Frame.
|
|
337
|
+
|
|
338
|
+
```ruby
|
|
339
|
+
# app/controllers/cities_controller.rb
|
|
340
|
+
class CitiesController < ApplicationController
|
|
341
|
+
def index
|
|
342
|
+
@cities = Basho::City.where(prefecture_code: params[:prefecture_code].to_i)
|
|
343
|
+
end
|
|
344
|
+
end
|
|
345
|
+
```
|
|
269
346
|
|
|
347
|
+
```erb
|
|
348
|
+
<%# app/views/cities/index.html.erb %>
|
|
349
|
+
<turbo-frame id="city-select">
|
|
350
|
+
<%= f.select :city_code,
|
|
351
|
+
@cities.map { |c| [c.name, c.code] },
|
|
352
|
+
{ include_blank: "Select city" } %>
|
|
353
|
+
</turbo-frame>
|
|
270
354
|
```
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
355
|
+
|
|
356
|
+
```erb
|
|
357
|
+
<%# In your form %>
|
|
358
|
+
<%= f.select :prefecture_code,
|
|
359
|
+
Basho::Prefecture.all.map { |p| [p.name, p.code] },
|
|
360
|
+
{ include_blank: "Select prefecture" },
|
|
361
|
+
data: { action: "change->auto-submit#submit",
|
|
362
|
+
turbo_frame: "city-select" } %>
|
|
363
|
+
|
|
364
|
+
<turbo-frame id="city-select">
|
|
365
|
+
<%= f.select :city_code, [], include_blank: "Select city" %>
|
|
366
|
+
</turbo-frame>
|
|
274
367
|
```
|
|
275
368
|
|
|
276
|
-
|
|
369
|
+
This keeps the HTML and styling in your app where it belongs.
|
|
277
370
|
|
|
278
|
-
|
|
371
|
+
## Without Hotwire
|
|
372
|
+
|
|
373
|
+
The data API and ActiveRecord integration work without Hotwire. If you don't mount the Engine, no routes or Stimulus controllers are loaded.
|
|
279
374
|
|
|
280
375
|
```ruby
|
|
281
|
-
#
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
376
|
+
# Just the data API -- works in any Ruby app
|
|
377
|
+
require "basho"
|
|
378
|
+
|
|
379
|
+
Basho::PostalCode.find("154-0011").town # => "上馬"
|
|
380
|
+
Basho::Prefecture.find(13).name # => "東京都"
|
|
381
|
+
Basho::City.where(prefecture_code: 13) # => Array<City>
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
```ruby
|
|
385
|
+
# ActiveRecord integration -- works in any Rails app, Hotwire or not
|
|
386
|
+
class Shop < ApplicationRecord
|
|
387
|
+
include Basho
|
|
388
|
+
basho_postal :postal_code, city_code: :city_code, town: :town
|
|
290
389
|
end
|
|
291
390
|
```
|
|
292
391
|
|
|
392
|
+
## DB Backend (Optional)
|
|
393
|
+
|
|
394
|
+
By default, Basho loads all data from bundled JSON files -- no database needed. If you need JOINs, foreign key constraints, or want to reference `basho_prefectures` / `basho_cities` from your own tables, you can optionally generate DB tables.
|
|
395
|
+
|
|
396
|
+
### Setup
|
|
397
|
+
|
|
398
|
+
```bash
|
|
399
|
+
rails generate basho:install_tables
|
|
400
|
+
rails db:migrate
|
|
401
|
+
rails basho:seed
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
This creates two tables:
|
|
405
|
+
|
|
406
|
+
| Table | Primary Key | Rows |
|
|
407
|
+
|-------|------------|------|
|
|
408
|
+
| `basho_prefectures` | `code` (integer) | 47 |
|
|
409
|
+
| `basho_cities` | `code` (string, 6-digit) | ~1,900 |
|
|
410
|
+
|
|
411
|
+
### Transparent Auto-switching
|
|
412
|
+
|
|
413
|
+
Once the tables exist, the public API (`Basho::Prefecture.find`, `Basho::City.where`, etc.) automatically uses the DB backend. **No code changes required.**
|
|
414
|
+
|
|
415
|
+
```ruby
|
|
416
|
+
# Works exactly the same whether DB tables exist or not
|
|
417
|
+
Basho::Prefecture.find(13).name # => "東京都"
|
|
418
|
+
Basho::City.find("131016").full_name # => "千代田区"
|
|
419
|
+
Basho::City.where(prefecture_code: 13) # => Array
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
Detection happens once on first access via `Basho.db?` and is cached for the process lifetime.
|
|
423
|
+
|
|
424
|
+
### Foreign Keys from Your Tables
|
|
425
|
+
|
|
426
|
+
```ruby
|
|
427
|
+
# Your app migration
|
|
428
|
+
add_foreign_key :shops, :basho_cities, column: :city_code, primary_key: :code
|
|
429
|
+
add_foreign_key :shops, :basho_prefectures, column: :prefecture_code, primary_key: :code
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### Direct DB Model Access
|
|
433
|
+
|
|
434
|
+
When you need ActiveRecord features (JOINs, scopes, eager loading), use the DB models directly:
|
|
435
|
+
|
|
436
|
+
```ruby
|
|
437
|
+
# JOINs
|
|
438
|
+
Basho::DB::City.joins(:prefecture).where(basho_prefectures: { region_name: "関東" })
|
|
439
|
+
|
|
440
|
+
# Eager loading
|
|
441
|
+
Basho::DB::Prefecture.includes(:cities).find(13)
|
|
442
|
+
|
|
443
|
+
# Associations
|
|
444
|
+
prefecture = Basho::DB::Prefecture.find(13)
|
|
445
|
+
prefecture.cities # => ActiveRecord::Relation
|
|
446
|
+
prefecture.capital # => Basho::DB::City
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### Re-seeding
|
|
450
|
+
|
|
451
|
+
`basho:seed` is idempotent. Run it again after updating the gem to refresh the data:
|
|
452
|
+
|
|
453
|
+
```bash
|
|
454
|
+
rails basho:seed
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
### Notes
|
|
458
|
+
|
|
459
|
+
- Postal codes are **not** included in the DB tables (120k+ rows, updated monthly). They are always served from bundled JSON files.
|
|
460
|
+
- `Basho.db?` is thread-safe and cached. Use `Basho.reset_db_cache!` if you need to re-detect (e.g. after running migrations in a test).
|
|
461
|
+
|
|
293
462
|
## Data Sources
|
|
294
463
|
|
|
295
464
|
| Data | Source | Update Frequency |
|
|
@@ -297,7 +466,7 @@ end
|
|
|
297
466
|
| Prefectures | Ministry of Internal Affairs, JIS X 0401 | Rarely changes |
|
|
298
467
|
| Cities | Ministry of Internal Affairs, Local Government Codes | A few times per year |
|
|
299
468
|
| Postal codes | Japan Post KEN_ALL.csv | Monthly (auto-updated via GitHub Actions) |
|
|
300
|
-
| Regions |
|
|
469
|
+
| Regions | 9 regions (hardcoded) | Never changes |
|
|
301
470
|
|
|
302
471
|
## Development
|
|
303
472
|
|
|
@@ -1,34 +1,29 @@
|
|
|
1
1
|
import { Controller } from "@hotwired/stimulus"
|
|
2
2
|
|
|
3
3
|
export default class extends Controller {
|
|
4
|
-
static targets = ["input", "frame", "prefecture", "city", "town"]
|
|
5
|
-
static values = { url: String
|
|
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
|
-
}
|
|
4
|
+
static targets = ["input", "frame", "fields", "prefecture", "city", "town"]
|
|
5
|
+
static values = { url: String }
|
|
15
6
|
|
|
16
7
|
lookup() {
|
|
17
|
-
clearTimeout(this.timeout)
|
|
18
8
|
const code = this.inputTarget.value.replace(/-/g, "")
|
|
19
|
-
if (code.length < 7) return
|
|
20
9
|
|
|
21
|
-
|
|
22
|
-
this
|
|
23
|
-
|
|
10
|
+
if (code.length < 7) {
|
|
11
|
+
this.#setAddress()
|
|
12
|
+
return
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
this.frameTarget.src = `${this.urlValue}?code=${encodeURIComponent(code)}`
|
|
24
16
|
}
|
|
25
17
|
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
if (
|
|
18
|
+
fill() {
|
|
19
|
+
const el = this.frameTarget.querySelector("[data-address]")
|
|
20
|
+
if (el) this.#setAddress(el.dataset)
|
|
21
|
+
}
|
|
29
22
|
|
|
30
|
-
|
|
31
|
-
if (this.
|
|
32
|
-
if (this.
|
|
23
|
+
#setAddress(data) {
|
|
24
|
+
if (this.hasPrefectureTarget) this.prefectureTarget.value = data?.prefecture || ""
|
|
25
|
+
if (this.hasCityTarget) this.cityTarget.value = data?.city || ""
|
|
26
|
+
if (this.hasTownTarget) this.townTarget.value = data?.town || ""
|
|
27
|
+
if (this.hasFieldsTarget) this.fieldsTarget.hidden = !data
|
|
33
28
|
}
|
|
34
29
|
}
|
|
@@ -4,8 +4,7 @@ module Basho
|
|
|
4
4
|
# 郵便番号からTurbo Frame形式で住所を返すコントローラー
|
|
5
5
|
class PostalCodesController < ActionController::Base
|
|
6
6
|
def lookup
|
|
7
|
-
|
|
8
|
-
@postal = PostalCode.find(code).first if code.match?(/\A\d{7}\z/)
|
|
7
|
+
@postal = PostalCode.find(params[:code])
|
|
9
8
|
|
|
10
9
|
render layout: false
|
|
11
10
|
end
|
|
@@ -1,22 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Basho
|
|
4
|
-
#
|
|
4
|
+
# 郵便番号自動入力用のフォームヘルパー
|
|
5
5
|
module FormHelper
|
|
6
6
|
def basho_autofill_frame_tag
|
|
7
7
|
content_tag("turbo-frame", nil, id: "basho-result",
|
|
8
|
-
data: { "basho--auto-fill-target" => "frame"
|
|
9
|
-
|
|
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
|
-
}
|
|
8
|
+
data: { "basho--auto-fill-target" => "frame",
|
|
9
|
+
action: "turbo:frame-load->basho--auto-fill#fill" })
|
|
20
10
|
end
|
|
21
11
|
end
|
|
22
12
|
end
|
data/config/routes.rb
CHANGED
data/data/cities/06.json
CHANGED
data/data/cities/10.json
CHANGED
data/data/cities/11.json
CHANGED
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"prefecture_code": 11,
|
|
103
103
|
"name": "行田市",
|
|
104
104
|
"capital": false,
|
|
105
|
-
"name_kana": "
|
|
105
|
+
"name_kana": "ギョウダシ"
|
|
106
106
|
},
|
|
107
107
|
{
|
|
108
108
|
"code": "112071",
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
"prefecture_code": 11,
|
|
138
138
|
"name": "本庄市",
|
|
139
139
|
"capital": false,
|
|
140
|
-
"name_kana": "
|
|
140
|
+
"name_kana": "ホンジョウシ"
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
"code": "112127",
|
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
"prefecture_code": 11,
|
|
166
166
|
"name": "羽生市",
|
|
167
167
|
"capital": false,
|
|
168
|
-
"name_kana": "
|
|
168
|
+
"name_kana": "ハニュウシ"
|
|
169
169
|
},
|
|
170
170
|
{
|
|
171
171
|
"code": "112178",
|