data_maker 2.2.3 → 2.3.3

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 (406) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/data_maker.gemspec +395 -7
  4. data/lib/data_maker.rb +29 -4
  5. data/lib/data_maker/cn/address.rb +200 -12
  6. data/lib/data_maker/data/cn/address/aba_districts +13 -0
  7. data/lib/data_maker/data/cn/address/akesu_districts +9 -0
  8. data/lib/data_maker/data/cn/address/alaer_districts +0 -0
  9. data/lib/data_maker/data/cn/address/alashanmeng_districts +3 -0
  10. data/lib/data_maker/data/cn/address/aletai_districts +7 -0
  11. data/lib/data_maker/data/cn/address/ali_districts +7 -0
  12. data/lib/data_maker/data/cn/address/anhui_cities +17 -0
  13. data/lib/data_maker/data/cn/address/ankang_districts +10 -0
  14. data/lib/data_maker/data/cn/address/anqing_districts +11 -0
  15. data/lib/data_maker/data/cn/address/anshan_districts +7 -0
  16. data/lib/data_maker/data/cn/address/anshun_districts +6 -0
  17. data/lib/data_maker/data/cn/address/anyang_districts +9 -0
  18. data/lib/data_maker/data/cn/address/aomen_cities +1 -0
  19. data/lib/data_maker/data/cn/address/aomen_districts +0 -0
  20. data/lib/data_maker/data/cn/address/baicheng_districts +5 -0
  21. data/lib/data_maker/data/cn/address/baise_districts +12 -0
  22. data/lib/data_maker/data/cn/address/baishan_districts +6 -0
  23. data/lib/data_maker/data/cn/address/baiyin_districts +5 -0
  24. data/lib/data_maker/data/cn/address/bangbu_districts +7 -0
  25. data/lib/data_maker/data/cn/address/baoding_districts +25 -0
  26. data/lib/data_maker/data/cn/address/baoji_districts +12 -0
  27. data/lib/data_maker/data/cn/address/baoshan_districts +5 -0
  28. data/lib/data_maker/data/cn/address/baotou_districts +9 -0
  29. data/lib/data_maker/data/cn/address/bayannaoer_districts +7 -0
  30. data/lib/data_maker/data/cn/address/bayinguolengmenggu_districts +9 -0
  31. data/lib/data_maker/data/cn/address/bazhong_districts +4 -0
  32. data/lib/data_maker/data/cn/address/beihai_districts +4 -0
  33. data/lib/data_maker/data/cn/address/beijing_cities +1 -0
  34. data/lib/data_maker/data/cn/address/beijing_districts +18 -0
  35. data/lib/data_maker/data/cn/address/benxi_districts +6 -0
  36. data/lib/data_maker/data/cn/address/bijie_districts +8 -0
  37. data/lib/data_maker/data/cn/address/binzhou_districts +7 -0
  38. data/lib/data_maker/data/cn/address/boertalamenggu_districts +3 -0
  39. data/lib/data_maker/data/cn/address/bozhou_districts +4 -0
  40. data/lib/data_maker/data/cn/address/cangzhou_districts +16 -0
  41. data/lib/data_maker/data/cn/address/changchun_districts +10 -0
  42. data/lib/data_maker/data/cn/address/changde_districts +9 -0
  43. data/lib/data_maker/data/cn/address/changdu_districts +11 -0
  44. data/lib/data_maker/data/cn/address/changjihuizu_districts +8 -0
  45. data/lib/data_maker/data/cn/address/changsha_districts +9 -0
  46. data/lib/data_maker/data/cn/address/changzhi_districts +13 -0
  47. data/lib/data_maker/data/cn/address/changzhou_districts +7 -0
  48. data/lib/data_maker/data/cn/address/chaohu_districts +5 -0
  49. data/lib/data_maker/data/cn/address/chaozhou_districts +3 -0
  50. data/lib/data_maker/data/cn/address/chengde_districts +11 -0
  51. data/lib/data_maker/data/cn/address/chengdu_districts +19 -0
  52. data/lib/data_maker/data/cn/address/chenyang_districts +13 -0
  53. data/lib/data_maker/data/cn/address/chenzhou_districts +11 -0
  54. data/lib/data_maker/data/cn/address/chifeng_districts +12 -0
  55. data/lib/data_maker/data/cn/address/chizhou_districts +4 -0
  56. data/lib/data_maker/data/cn/address/chongqing_cities +1 -0
  57. data/lib/data_maker/data/cn/address/chongqing_districts +40 -0
  58. data/lib/data_maker/data/cn/address/chongzuo_districts +7 -0
  59. data/lib/data_maker/data/cn/address/chuxiong_districts +10 -0
  60. data/lib/data_maker/data/cn/address/chuzhou_districts +8 -0
  61. data/lib/data_maker/data/cn/address/cities +351 -0
  62. data/lib/data_maker/data/cn/address/city_provinces +351 -0
  63. data/lib/data_maker/data/cn/address/dalian_districts +10 -0
  64. data/lib/data_maker/data/cn/address/dalibaizu_districts +12 -0
  65. data/lib/data_maker/data/cn/address/dandong_districts +6 -0
  66. data/lib/data_maker/data/cn/address/daqing_districts +9 -0
  67. data/lib/data_maker/data/cn/address/datong_districts +11 -0
  68. data/lib/data_maker/data/cn/address/daxinganling_districts +3 -0
  69. data/lib/data_maker/data/cn/address/dazhou_districts +7 -0
  70. data/lib/data_maker/data/cn/address/dehongdaizujingpozu_districts +5 -0
  71. data/lib/data_maker/data/cn/address/deyang_districts +6 -0
  72. data/lib/data_maker/data/cn/address/dezhou_districts +11 -0
  73. data/lib/data_maker/data/cn/address/dingxi_districts +7 -0
  74. data/lib/data_maker/data/cn/address/diqingcangzu_districts +3 -0
  75. data/lib/data_maker/data/cn/address/districts +2862 -0
  76. data/lib/data_maker/data/cn/address/dongguan_districts +0 -0
  77. data/lib/data_maker/data/cn/address/dongying_districts +5 -0
  78. data/lib/data_maker/data/cn/address/eerduosi_districts +8 -0
  79. data/lib/data_maker/data/cn/address/enshi_districts +8 -0
  80. data/lib/data_maker/data/cn/address/ezhou_districts +3 -0
  81. data/lib/data_maker/data/cn/address/fangchenggang_districts +4 -0
  82. data/lib/data_maker/data/cn/address/foshan_districts +5 -0
  83. data/lib/data_maker/data/cn/address/fujian_cities +9 -0
  84. data/lib/data_maker/data/cn/address/fushun_districts +7 -0
  85. data/lib/data_maker/data/cn/address/futian_districts +5 -0
  86. data/lib/data_maker/data/cn/address/fuxin_districts +7 -0
  87. data/lib/data_maker/data/cn/address/fuyang_districts +8 -0
  88. data/lib/data_maker/data/cn/address/fuzhou_districts +11 -0
  89. data/lib/data_maker/data/cn/address/gannancangzu_districts +8 -0
  90. data/lib/data_maker/data/cn/address/gansu_cities +14 -0
  91. data/lib/data_maker/data/cn/address/ganzhou_districts +18 -0
  92. data/lib/data_maker/data/cn/address/ganzi_districts +18 -0
  93. data/lib/data_maker/data/cn/address/guangan_districts +5 -0
  94. data/lib/data_maker/data/cn/address/guangdong_cities +21 -0
  95. data/lib/data_maker/data/cn/address/guangxi_cities +14 -0
  96. data/lib/data_maker/data/cn/address/guangyuan_districts +7 -0
  97. data/lib/data_maker/data/cn/address/guangzhou_districts +12 -0
  98. data/lib/data_maker/data/cn/address/guigang_districts +5 -0
  99. data/lib/data_maker/data/cn/address/guilin_districts +17 -0
  100. data/lib/data_maker/data/cn/address/guiyang_districts +10 -0
  101. data/lib/data_maker/data/cn/address/guizhou_cities +9 -0
  102. data/lib/data_maker/data/cn/address/guoluocangzu_districts +6 -0
  103. data/lib/data_maker/data/cn/address/guyuan_districts +5 -0
  104. data/lib/data_maker/data/cn/address/haerbin_districts +19 -0
  105. data/lib/data_maker/data/cn/address/haibeicangzu_districts +4 -0
  106. data/lib/data_maker/data/cn/address/haidong_districts +6 -0
  107. data/lib/data_maker/data/cn/address/haikou_districts +4 -0
  108. data/lib/data_maker/data/cn/address/hainan_cities +3 -0
  109. data/lib/data_maker/data/cn/address/hainancangzu_districts +5 -0
  110. data/lib/data_maker/data/cn/address/haiximengguzucangzu_districts +5 -0
  111. data/lib/data_maker/data/cn/address/hami_districts +3 -0
  112. data/lib/data_maker/data/cn/address/handan_districts +19 -0
  113. data/lib/data_maker/data/cn/address/hangzhou_districts +13 -0
  114. data/lib/data_maker/data/cn/address/hanzhong_districts +11 -0
  115. data/lib/data_maker/data/cn/address/hebei_cities +11 -0
  116. data/lib/data_maker/data/cn/address/hebi_districts +5 -0
  117. data/lib/data_maker/data/cn/address/hechi_districts +11 -0
  118. data/lib/data_maker/data/cn/address/hefei_districts +7 -0
  119. data/lib/data_maker/data/cn/address/hegang_districts +8 -0
  120. data/lib/data_maker/data/cn/address/heihe_districts +6 -0
  121. data/lib/data_maker/data/cn/address/heilongjiang_cities +13 -0
  122. data/lib/data_maker/data/cn/address/henan_cities +17 -0
  123. data/lib/data_maker/data/cn/address/hengshui_districts +11 -0
  124. data/lib/data_maker/data/cn/address/hengyang_districts +12 -0
  125. data/lib/data_maker/data/cn/address/hetian_districts +8 -0
  126. data/lib/data_maker/data/cn/address/heyuan_districts +6 -0
  127. data/lib/data_maker/data/cn/address/heze_districts +9 -0
  128. data/lib/data_maker/data/cn/address/hezhou_districts +4 -0
  129. data/lib/data_maker/data/cn/address/honghehanizuyizu_districts +13 -0
  130. data/lib/data_maker/data/cn/address/huaian_districts +8 -0
  131. data/lib/data_maker/data/cn/address/huaibei_districts +4 -0
  132. data/lib/data_maker/data/cn/address/huaihua_districts +12 -0
  133. data/lib/data_maker/data/cn/address/huainan_districts +6 -0
  134. data/lib/data_maker/data/cn/address/huanggang_districts +10 -0
  135. data/lib/data_maker/data/cn/address/huangnancangzu_districts +4 -0
  136. data/lib/data_maker/data/cn/address/huangshan_districts +7 -0
  137. data/lib/data_maker/data/cn/address/huangshi_districts +6 -0
  138. data/lib/data_maker/data/cn/address/hubei_cities +14 -0
  139. data/lib/data_maker/data/cn/address/huhehaote_districts +9 -0
  140. data/lib/data_maker/data/cn/address/huizhou_districts +5 -0
  141. data/lib/data_maker/data/cn/address/huludao_districts +6 -0
  142. data/lib/data_maker/data/cn/address/hulunbeier_districts +13 -0
  143. data/lib/data_maker/data/cn/address/hunan_cities +14 -0
  144. data/lib/data_maker/data/cn/address/huzhou_districts +5 -0
  145. data/lib/data_maker/data/cn/address/jiamusi_districts +11 -0
  146. data/lib/data_maker/data/cn/address/jian_districts +13 -0
  147. data/lib/data_maker/data/cn/address/jiangmen_districts +7 -0
  148. data/lib/data_maker/data/cn/address/jiangsu_cities +13 -0
  149. data/lib/data_maker/data/cn/address/jiangxi_cities +11 -0
  150. data/lib/data_maker/data/cn/address/jiaozuo_districts +11 -0
  151. data/lib/data_maker/data/cn/address/jiaxing_districts +7 -0
  152. data/lib/data_maker/data/cn/address/jiayi_districts +0 -0
  153. data/lib/data_maker/data/cn/address/jiayuguan_districts +0 -0
  154. data/lib/data_maker/data/cn/address/jieyang_districts +5 -0
  155. data/lib/data_maker/data/cn/address/jilin_cities +9 -0
  156. data/lib/data_maker/data/cn/address/jilin_districts +9 -0
  157. data/lib/data_maker/data/cn/address/jilong_districts +0 -0
  158. data/lib/data_maker/data/cn/address/jinan_districts +10 -0
  159. data/lib/data_maker/data/cn/address/jinchang_districts +2 -0
  160. data/lib/data_maker/data/cn/address/jincheng_districts +6 -0
  161. data/lib/data_maker/data/cn/address/jingdezhen_districts +4 -0
  162. data/lib/data_maker/data/cn/address/jingmen_districts +5 -0
  163. data/lib/data_maker/data/cn/address/jingzhou_districts +8 -0
  164. data/lib/data_maker/data/cn/address/jinhua_districts +9 -0
  165. data/lib/data_maker/data/cn/address/jining_districts +12 -0
  166. data/lib/data_maker/data/cn/address/jinzhong_districts +11 -0
  167. data/lib/data_maker/data/cn/address/jinzhou_districts +7 -0
  168. data/lib/data_maker/data/cn/address/jiujiang_districts +12 -0
  169. data/lib/data_maker/data/cn/address/jiuquan_districts +7 -0
  170. data/lib/data_maker/data/cn/address/jixi_districts +9 -0
  171. data/lib/data_maker/data/cn/address/kaifeng_districts +10 -0
  172. data/lib/data_maker/data/cn/address/kashi_districts +12 -0
  173. data/lib/data_maker/data/cn/address/kelamayi_districts +4 -0
  174. data/lib/data_maker/data/cn/address/kezilesukeerkezi_districts +4 -0
  175. data/lib/data_maker/data/cn/address/kunming_districts +14 -0
  176. data/lib/data_maker/data/cn/address/laibin_districts +6 -0
  177. data/lib/data_maker/data/cn/address/laiwu_districts +2 -0
  178. data/lib/data_maker/data/cn/address/langfang_districts +10 -0
  179. data/lib/data_maker/data/cn/address/lanzhou_districts +8 -0
  180. data/lib/data_maker/data/cn/address/lasa_districts +8 -0
  181. data/lib/data_maker/data/cn/address/leshan_districts +11 -0
  182. data/lib/data_maker/data/cn/address/liangshan_districts +17 -0
  183. data/lib/data_maker/data/cn/address/lianyungang_districts +7 -0
  184. data/lib/data_maker/data/cn/address/liaocheng_districts +8 -0
  185. data/lib/data_maker/data/cn/address/liaoning_cities +14 -0
  186. data/lib/data_maker/data/cn/address/liaoyang_districts +7 -0
  187. data/lib/data_maker/data/cn/address/liaoyuan_districts +4 -0
  188. data/lib/data_maker/data/cn/address/lijiang_districts +5 -0
  189. data/lib/data_maker/data/cn/address/lincang_districts +8 -0
  190. data/lib/data_maker/data/cn/address/linfen_districts +17 -0
  191. data/lib/data_maker/data/cn/address/linxiahuizu_districts +8 -0
  192. data/lib/data_maker/data/cn/address/linyi_districts +12 -0
  193. data/lib/data_maker/data/cn/address/linzhi_districts +7 -0
  194. data/lib/data_maker/data/cn/address/lishui_districts +9 -0
  195. data/lib/data_maker/data/cn/address/liuan_districts +7 -0
  196. data/lib/data_maker/data/cn/address/liupanshui_districts +4 -0
  197. data/lib/data_maker/data/cn/address/liuzhou_districts +10 -0
  198. data/lib/data_maker/data/cn/address/longnan_districts +9 -0
  199. data/lib/data_maker/data/cn/address/longyan_districts +7 -0
  200. data/lib/data_maker/data/cn/address/loudi_districts +5 -0
  201. data/lib/data_maker/data/cn/address/luoyang_districts +15 -0
  202. data/lib/data_maker/data/cn/address/luzhou_districts +7 -0
  203. data/lib/data_maker/data/cn/address/lvliang_districts +13 -0
  204. data/lib/data_maker/data/cn/address/maanshan_districts +4 -0
  205. data/lib/data_maker/data/cn/address/maoming_districts +6 -0
  206. data/lib/data_maker/data/cn/address/meishan_districts +6 -0
  207. data/lib/data_maker/data/cn/address/meizhou_districts +8 -0
  208. data/lib/data_maker/data/cn/address/mianyang_districts +9 -0
  209. data/lib/data_maker/data/cn/address/mudanjiang_districts +10 -0
  210. data/lib/data_maker/data/cn/address/nanchang_districts +9 -0
  211. data/lib/data_maker/data/cn/address/nanchong_districts +9 -0
  212. data/lib/data_maker/data/cn/address/nanjing_districts +13 -0
  213. data/lib/data_maker/data/cn/address/nanning_districts +12 -0
  214. data/lib/data_maker/data/cn/address/nanping_districts +10 -0
  215. data/lib/data_maker/data/cn/address/nantong_districts +8 -0
  216. data/lib/data_maker/data/cn/address/nanyang_districts +13 -0
  217. data/lib/data_maker/data/cn/address/naqu_districts +10 -0
  218. data/lib/data_maker/data/cn/address/neijiang_districts +5 -0
  219. data/lib/data_maker/data/cn/address/neimenggu_cities +12 -0
  220. data/lib/data_maker/data/cn/address/ningbo_districts +11 -0
  221. data/lib/data_maker/data/cn/address/ningde_districts +9 -0
  222. data/lib/data_maker/data/cn/address/ningxia_cities +5 -0
  223. data/lib/data_maker/data/cn/address/nujianglisuzu_districts +4 -0
  224. data/lib/data_maker/data/cn/address/panjin_districts +4 -0
  225. data/lib/data_maker/data/cn/address/panzhihua_districts +5 -0
  226. data/lib/data_maker/data/cn/address/pingdingshan_districts +10 -0
  227. data/lib/data_maker/data/cn/address/pingliang_districts +7 -0
  228. data/lib/data_maker/data/cn/address/pingxiang_districts +5 -0
  229. data/lib/data_maker/data/cn/address/province_postal_codes +34 -0
  230. data/lib/data_maker/data/cn/address/provinces +34 -0
  231. data/lib/data_maker/data/cn/address/puyang_districts +6 -0
  232. data/lib/data_maker/data/cn/address/qiandongnan_districts +16 -0
  233. data/lib/data_maker/data/cn/address/qiannanbu_districts +12 -0
  234. data/lib/data_maker/data/cn/address/qianxinan_districts +8 -0
  235. data/lib/data_maker/data/cn/address/qingdao_districts +12 -0
  236. data/lib/data_maker/data/cn/address/qinghai_cities +8 -0
  237. data/lib/data_maker/data/cn/address/qingyang_districts +8 -0
  238. data/lib/data_maker/data/cn/address/qingyuan_districts +8 -0
  239. data/lib/data_maker/data/cn/address/qinhuangdao_districts +7 -0
  240. data/lib/data_maker/data/cn/address/qinzhou_districts +4 -0
  241. data/lib/data_maker/data/cn/address/qiqihaer_districts +16 -0
  242. data/lib/data_maker/data/cn/address/qitaihe_districts +4 -0
  243. data/lib/data_maker/data/cn/address/quanzhou_districts +12 -0
  244. data/lib/data_maker/data/cn/address/qujing_districts +9 -0
  245. data/lib/data_maker/data/cn/address/quzhou_districts +6 -0
  246. data/lib/data_maker/data/cn/address/rikaze_districts +18 -0
  247. data/lib/data_maker/data/cn/address/rizhao_districts +4 -0
  248. data/lib/data_maker/data/cn/address/sanmenxia_districts +7 -0
  249. data/lib/data_maker/data/cn/address/sanming_districts +12 -0
  250. data/lib/data_maker/data/cn/address/sansha_districts +0 -0
  251. data/lib/data_maker/data/cn/address/sanya_districts +19 -0
  252. data/lib/data_maker/data/cn/address/shamen_districts +6 -0
  253. data/lib/data_maker/data/cn/address/shandong_cities +17 -0
  254. data/lib/data_maker/data/cn/address/shanghai_cities +1 -0
  255. data/lib/data_maker/data/cn/address/shanghai_districts +19 -0
  256. data/lib/data_maker/data/cn/address/shangluo_districts +7 -0
  257. data/lib/data_maker/data/cn/address/shangqiu_districts +9 -0
  258. data/lib/data_maker/data/cn/address/shangrao_districts +12 -0
  259. data/lib/data_maker/data/cn/address/shannan_districts +12 -0
  260. data/lib/data_maker/data/cn/address/shantou_districts +7 -0
  261. data/lib/data_maker/data/cn/address/shanwei_districts +4 -0
  262. data/lib/data_maker/data/cn/address/shanxi_cities +10 -0
  263. data/lib/data_maker/data/cn/address/shaoguan_districts +10 -0
  264. data/lib/data_maker/data/cn/address/shaoxing_districts +6 -0
  265. data/lib/data_maker/data/cn/address/shaoyang_districts +12 -0
  266. data/lib/data_maker/data/cn/address/shennongjia_districts +4 -0
  267. data/lib/data_maker/data/cn/address/shenzhen_districts +6 -0
  268. data/lib/data_maker/data/cn/address/shihezi_districts +0 -0
  269. data/lib/data_maker/data/cn/address/shijiazhuang_districts +23 -0
  270. data/lib/data_maker/data/cn/address/shiyan_districts +8 -0
  271. data/lib/data_maker/data/cn/address/shizuishan_districts +3 -0
  272. data/lib/data_maker/data/cn/address/shuangyashan_districts +8 -0
  273. data/lib/data_maker/data/cn/address/shuozhou_districts +6 -0
  274. data/lib/data_maker/data/cn/address/sichuan_cities +21 -0
  275. data/lib/data_maker/data/cn/address/simao_districts +10 -0
  276. data/lib/data_maker/data/cn/address/siping_districts +6 -0
  277. data/lib/data_maker/data/cn/address/songyuan_districts +5 -0
  278. data/lib/data_maker/data/{china → cn}/address/street_suffixes +0 -0
  279. data/lib/data_maker/data/cn/address/suihua_districts +10 -0
  280. data/lib/data_maker/data/cn/address/suining_districts +5 -0
  281. data/lib/data_maker/data/cn/address/suizhou_districts +2 -0
  282. data/lib/data_maker/data/cn/address/suqian_districts +5 -0
  283. data/lib/data_maker/data/cn/address/suzhou_districts +5 -0
  284. data/lib/data_maker/data/cn/address/tacheng_districts +7 -0
  285. data/lib/data_maker/data/cn/address/tahe_districts +5 -0
  286. data/lib/data_maker/data/cn/address/taian_districts +6 -0
  287. data/lib/data_maker/data/cn/address/taibei_districts +0 -0
  288. data/lib/data_maker/data/cn/address/tainan_districts +0 -0
  289. data/lib/data_maker/data/cn/address/taiwan_cities +6 -0
  290. data/lib/data_maker/data/cn/address/taiyuan_districts +10 -0
  291. data/lib/data_maker/data/cn/address/taizhong_districts +0 -0
  292. data/lib/data_maker/data/cn/address/taizhou_districts +9 -0
  293. data/lib/data_maker/data/cn/address/tangshan_districts +14 -0
  294. data/lib/data_maker/data/cn/address/tianjin_cities +1 -0
  295. data/lib/data_maker/data/cn/address/tianjin_districts +18 -0
  296. data/lib/data_maker/data/cn/address/tianshui_districts +7 -0
  297. data/lib/data_maker/data/cn/address/tieling_districts +7 -0
  298. data/lib/data_maker/data/cn/address/tongchuan_districts +4 -0
  299. data/lib/data_maker/data/cn/address/tonghua_districts +7 -0
  300. data/lib/data_maker/data/cn/address/tongliao_districts +8 -0
  301. data/lib/data_maker/data/cn/address/tongling_districts +4 -0
  302. data/lib/data_maker/data/cn/address/tongren_districts +10 -0
  303. data/lib/data_maker/data/cn/address/tulufan_districts +3 -0
  304. data/lib/data_maker/data/cn/address/tumushuke_districts +0 -0
  305. data/lib/data_maker/data/cn/address/weifang_districts +12 -0
  306. data/lib/data_maker/data/cn/address/weihai_districts +4 -0
  307. data/lib/data_maker/data/cn/address/weinan_districts +11 -0
  308. data/lib/data_maker/data/cn/address/wenshanzhuangzumiaozu_districts +8 -0
  309. data/lib/data_maker/data/cn/address/wenzhou_districts +11 -0
  310. data/lib/data_maker/data/cn/address/wuhai_districts +3 -0
  311. data/lib/data_maker/data/cn/address/wuhan_districts +13 -0
  312. data/lib/data_maker/data/cn/address/wuhu_districts +7 -0
  313. data/lib/data_maker/data/cn/address/wujiaqu_districts +0 -0
  314. data/lib/data_maker/data/cn/address/wulanchabu_districts +11 -0
  315. data/lib/data_maker/data/cn/address/wulumuqi_districts +8 -0
  316. data/lib/data_maker/data/cn/address/wuwei_districts +4 -0
  317. data/lib/data_maker/data/cn/address/wuxi_districts +8 -0
  318. data/lib/data_maker/data/cn/address/wuzhong_districts +4 -0
  319. data/lib/data_maker/data/cn/address/wuzhou_districts +7 -0
  320. data/lib/data_maker/data/cn/address/xian_districts +13 -0
  321. data/lib/data_maker/data/cn/address/xiangfan_districts +9 -0
  322. data/lib/data_maker/data/cn/address/xianggang_cities +1 -0
  323. data/lib/data_maker/data/cn/address/xianggang_districts +0 -0
  324. data/lib/data_maker/data/cn/address/xiangtan_districts +5 -0
  325. data/lib/data_maker/data/cn/address/xiangxi_districts +8 -0
  326. data/lib/data_maker/data/cn/address/xianning_districts +6 -0
  327. data/lib/data_maker/data/cn/address/xianyang_districts +14 -0
  328. data/lib/data_maker/data/cn/address/xiaogan_districts +7 -0
  329. data/lib/data_maker/data/cn/address/xilinguolemeng_districts +12 -0
  330. data/lib/data_maker/data/cn/address/xinganmeng_districts +6 -0
  331. data/lib/data_maker/data/cn/address/xingtai_districts +19 -0
  332. data/lib/data_maker/data/cn/address/xining_districts +7 -0
  333. data/lib/data_maker/data/cn/address/xinjiang_cities +18 -0
  334. data/lib/data_maker/data/cn/address/xinxiang_districts +12 -0
  335. data/lib/data_maker/data/cn/address/xinyang_districts +10 -0
  336. data/lib/data_maker/data/cn/address/xinyu_districts +2 -0
  337. data/lib/data_maker/data/cn/address/xinzhou_districts +14 -0
  338. data/lib/data_maker/data/cn/address/xinzhu_districts +0 -0
  339. data/lib/data_maker/data/cn/address/xishuangbannadaizu_districts +3 -0
  340. data/lib/data_maker/data/cn/address/xizang_cities +7 -0
  341. data/lib/data_maker/data/cn/address/xuancheng_districts +7 -0
  342. data/lib/data_maker/data/cn/address/xuchang_districts +6 -0
  343. data/lib/data_maker/data/cn/address/xuzhou_districts +11 -0
  344. data/lib/data_maker/data/cn/address/yaan_districts +8 -0
  345. data/lib/data_maker/data/cn/address/yanan_districts +13 -0
  346. data/lib/data_maker/data/cn/address/yanbian_districts +8 -0
  347. data/lib/data_maker/data/cn/address/yancheng_districts +9 -0
  348. data/lib/data_maker/data/cn/address/yangjiang_districts +4 -0
  349. data/lib/data_maker/data/cn/address/yangquan_districts +5 -0
  350. data/lib/data_maker/data/cn/address/yangzhou_districts +7 -0
  351. data/lib/data_maker/data/cn/address/yantai_districts +12 -0
  352. data/lib/data_maker/data/cn/address/yibin_districts +10 -0
  353. data/lib/data_maker/data/cn/address/yichang_districts +13 -0
  354. data/lib/data_maker/data/cn/address/yichun_districts +10 -0
  355. data/lib/data_maker/data/cn/address/yilihasake_districts +10 -0
  356. data/lib/data_maker/data/cn/address/yinchuan_districts +6 -0
  357. data/lib/data_maker/data/cn/address/yingkou_districts +6 -0
  358. data/lib/data_maker/data/cn/address/yingtan_districts +3 -0
  359. data/lib/data_maker/data/cn/address/yiyang_districts +6 -0
  360. data/lib/data_maker/data/cn/address/yongzhou_districts +11 -0
  361. data/lib/data_maker/data/cn/address/yueyang_districts +9 -0
  362. data/lib/data_maker/data/cn/address/yulin_districts +12 -0
  363. data/lib/data_maker/data/cn/address/yuncheng_districts +13 -0
  364. data/lib/data_maker/data/cn/address/yunfu_districts +5 -0
  365. data/lib/data_maker/data/cn/address/yunnan_cities +16 -0
  366. data/lib/data_maker/data/cn/address/yushucangzu_districts +6 -0
  367. data/lib/data_maker/data/cn/address/yuxi_districts +9 -0
  368. data/lib/data_maker/data/cn/address/zaozhuang_districts +6 -0
  369. data/lib/data_maker/data/cn/address/zhangjiajie_districts +4 -0
  370. data/lib/data_maker/data/cn/address/zhangjiakou_districts +17 -0
  371. data/lib/data_maker/data/cn/address/zhangye_districts +6 -0
  372. data/lib/data_maker/data/cn/address/zhangzhou_districts +11 -0
  373. data/lib/data_maker/data/cn/address/zhanjiang_districts +9 -0
  374. data/lib/data_maker/data/cn/address/zhaoqing_districts +8 -0
  375. data/lib/data_maker/data/cn/address/zhaotong_districts +11 -0
  376. data/lib/data_maker/data/cn/address/zhaoyang_districts +7 -0
  377. data/lib/data_maker/data/cn/address/zhejiang_cities +11 -0
  378. data/lib/data_maker/data/cn/address/zhengzhou_districts +12 -0
  379. data/lib/data_maker/data/cn/address/zhenjiang_districts +6 -0
  380. data/lib/data_maker/data/cn/address/zhongshan_districts +0 -0
  381. data/lib/data_maker/data/cn/address/zhongwei_districts +3 -0
  382. data/lib/data_maker/data/cn/address/zhoukou_districts +10 -0
  383. data/lib/data_maker/data/cn/address/zhoushan_districts +4 -0
  384. data/lib/data_maker/data/cn/address/zhuhai_districts +3 -0
  385. data/lib/data_maker/data/cn/address/zhumadian_districts +10 -0
  386. data/lib/data_maker/data/cn/address/zhuzhou_districts +9 -0
  387. data/lib/data_maker/data/cn/address/zibo_districts +8 -0
  388. data/lib/data_maker/data/cn/address/zigong_districts +6 -0
  389. data/lib/data_maker/data/cn/address/ziyang_districts +4 -0
  390. data/lib/data_maker/data/cn/address/zunyi_districts +14 -0
  391. data/lib/data_maker/data/cn/cities_chinese +351 -0
  392. data/lib/data_maker/data/cn/districts_chinese +2862 -0
  393. data/lib/data_maker/data/cn/provinces_chinese +34 -0
  394. data/lib/data_maker/locales/zh.yml +3253 -0
  395. data/lib/data_maker/modulator.rb +175 -0
  396. data/lib/data_maker/utilities/array_utilities.rb +2 -2
  397. data/lib/data_maker/version.rb +3 -0
  398. data/spec/lib/data_maker/cn/address_spec.rb +394 -0
  399. data/spec/lib/data_maker/data_maker_spec.rb +1 -1
  400. data/spec/spec_helper.rb +1 -8
  401. metadata +423 -9
  402. data/lib/data_maker/data/china/address/city_prefixes +0 -21
  403. data/lib/data_maker/data/china/address/city_suffixes +0 -19
  404. data/lib/data_maker/data/china/address/province_abbreviations +0 -33
  405. data/lib/data_maker/data/china/address/provinces +0 -33
  406. data/spec/lib/data_maker/support/matchers/phone_number_matcher.rb +0 -42
@@ -0,0 +1,175 @@
1
+ # This was made so that I could easily transfer or transform a dataset that was in yaml format
2
+ # that had all the region data for china. The cities.yml file was taken from china_regions gem.
3
+ #
4
+ # require 'hashie'
5
+ #
6
+ # module Modulator
7
+ # def self.create_province_chinese
8
+ # results = []
9
+ # china_regions = YAML::load(File.open('lib/data_maker/data/cities.yml'))
10
+ # china_regions.each do |key, value|
11
+ # results << [value["name_en"], key].join(": ")
12
+ # end
13
+ #
14
+ # file = "provinces_chinese"
15
+ # File.open(file, "w") { |f| f.write results.join("\n") }
16
+ #
17
+ # results
18
+ # end
19
+ #
20
+ # def self.create_provinces
21
+ # results = []
22
+ # china_regions = YAML::load(File.open('lib/data_maker/data/cities.yml'))
23
+ # china_regions.extend Hashie::Extensions::DeepFind
24
+ # china_cities = china_regions.deep_find_all("name_en")
25
+ # china_cities.each do |key, value|
26
+ # results << key
27
+ # end
28
+ #
29
+ # file = "provinces"
30
+ # File.open(file, "w") { |f| f.write results.join("\n") }
31
+ #
32
+ # results
33
+ # end
34
+ #
35
+ # def self.create_cities_chinese
36
+ # results = []
37
+ # china_regions = YAML::load(File.open('lib/data_maker/data/cities.yml'))
38
+ # china_regions.extend Hashie::Extensions::DeepFind
39
+ # china_cities = china_regions.deep_find_all("cities")
40
+ # china_cities.each do |city|
41
+ # city.each do |key, value|
42
+ # value.extend Hashie::Extensions::DeepFind
43
+ # results << [value["name_en"], key].join(": ")
44
+ # end
45
+ # end
46
+ #
47
+ # file = "cities_chinese"
48
+ # File.open(file, "w") { |f| f.write results.join("\n") }
49
+ #
50
+ # results
51
+ # end
52
+ #
53
+ # def self.create_cities
54
+ # results = []
55
+ # china_regions = YAML::load(File.open('lib/data_maker/data/cities.yml'))
56
+ # china_regions.extend Hashie::Extensions::DeepFind
57
+ # china_cities = china_regions.deep_find_all("cities")
58
+ # china_cities.each do |city|
59
+ # city.each do |key, value|
60
+ # value.extend Hashie::Extensions::DeepFind
61
+ # results << value["name_en"]
62
+ # end
63
+ # end
64
+ #
65
+ # file = "cities"
66
+ # File.open(file, "w") { |f| f.write results.join("\n") }
67
+ #
68
+ # results
69
+ # end
70
+ #
71
+ # def self.create_districts_chinese
72
+ # results = []
73
+ # china_regions = YAML::load(File.open('lib/data_maker/data/cities.yml'))
74
+ # china_regions.extend Hashie::Extensions::DeepFind
75
+ # china_cities = china_regions.deep_find_all("cities")
76
+ # china_cities.each do |city|
77
+ # city.each do |key, value|
78
+ # value.extend Hashie::Extensions::DeepFind
79
+ # value.deep_find("districts").each do |k, v|
80
+ # results << [v["name_en"], k].join(": ")
81
+ # end
82
+ # end
83
+ # end
84
+ #
85
+ # file = "districts_chinese"
86
+ # File.open(file, "w") { |f| f.write results.join("\n") }
87
+ #
88
+ # results
89
+ # end
90
+ #
91
+ # def self.create_districts
92
+ # results = []
93
+ # china_regions = YAML::load(File.open('lib/data_maker/data/cities.yml'))
94
+ # china_regions.extend Hashie::Extensions::DeepFind
95
+ # china_cities = china_regions.deep_find_all("cities")
96
+ # china_cities.each do |city|
97
+ # city.each do |key, value|
98
+ # value.extend Hashie::Extensions::DeepFind
99
+ # value.deep_find("districts").each do |k, v|
100
+ # results << v["name_en"]
101
+ # end
102
+ # end
103
+ # end
104
+ #
105
+ # file = "districts"
106
+ # File.open(file, "w") { |f| f.write results.join("\n") }
107
+ #
108
+ # results
109
+ # end
110
+ #
111
+ # def self.create_province_postalcode
112
+ # results = []
113
+ # china_regions = YAML::load(File.open('lib/data_maker/data/cities.yml'))
114
+ # china_regions.each do |key, value|
115
+ # value.extend Hashie::Extensions::DeepFind
116
+ # postal_code = value.deep_find("zip_code")
117
+ # results << [value["name_en"], postal_code].join(" ")
118
+ # end
119
+ #
120
+ # file = "province_postalcode"
121
+ # File.open(file, "w") { |f| f.write results.join("\n") }
122
+ #
123
+ # results
124
+ # end
125
+ #
126
+ # def self.create_province_cities
127
+ # file_name = nil
128
+ # china_regions = YAML::load(File.open('lib/data_maker/data/cities.yml'))
129
+ # china_regions.extend Hashie::Extensions::DeepFind
130
+ # china_regions.each do |key, value|
131
+ # results = []
132
+ # province = value["name_en"]
133
+ # file_name = "lib/data_maker/data/cn/address/#{province}_cities"
134
+ # value.extend Hashie::Extensions::DeepFind
135
+ # value.deep_find("cities").each do |k, v|
136
+ # results << v["name_en"]
137
+ # end
138
+ # File.open(file_name, "w") { |f| f.write results.join("\n") }
139
+ # end
140
+ # end
141
+ #
142
+ # def self.create_city_districts
143
+ # file_name = nil
144
+ # china_regions = YAML::load(File.open('lib/data_maker/data/cities.yml'))
145
+ # china_regions.extend Hashie::Extensions::DeepFind
146
+ # china_cities = china_regions.deep_find_all("cities")
147
+ # china_cities.each do |city|
148
+ # city.each do |key, value|
149
+ # results = []
150
+ # city_name = value["name_en"]
151
+ # file_name = "lib/data_maker/data/cn/address/#{city_name}_districts"
152
+ # value.extend Hashie::Extensions::DeepFind
153
+ # value.deep_find("districts").each do |k, v|
154
+ # results << v["name_en"]
155
+ # end
156
+ # File.open(file_name, "w") { |f| f.write results.join("\n") }
157
+ # end
158
+ # end
159
+ # end
160
+ #
161
+ # def self.create_city_province
162
+ # results = []
163
+ # china_regions = YAML::load(File.open('lib/data_maker/data/cities.yml'))
164
+ # china_regions.each do |key, value|
165
+ # value["cities"].each do |k, v|
166
+ # results << [v["name_en"], value["name_en"]].join(", ")
167
+ # end
168
+ # end
169
+ #
170
+ # file = "city_province"
171
+ # File.open(file, "w") { |f| f.write results.join("\n") }
172
+ #
173
+ # results
174
+ # end
175
+ # end
@@ -6,8 +6,8 @@ module DataMaker
6
6
  freeze_all(array)
7
7
  end
8
8
 
9
- def self.random_pick(array, n)
10
- indexes = (0...array.length).sort_by{Kernel.rand}[0...n]
9
+ def self.random_pick(array, number)
10
+ indexes = (0...array.length).sort_by{Kernel.rand}[0...number]
11
11
  indexes.map { |n| array[n].dup }
12
12
  end
13
13
 
@@ -0,0 +1,3 @@
1
+ module DataMaker
2
+ VERSION = '2.3.3'
3
+ end
@@ -0,0 +1,394 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe DataMaker::CN::Address do
4
+ describe "#self.street_address" do
5
+ it "calls GenerateAddress#street_address" do
6
+ expect(described_class::GenerateAddress).to receive_message_chain('new.street_address')
7
+ described_class.street_address
8
+ end
9
+
10
+ it "returns a string" do
11
+ expect(described_class.street_address).to be_a(::String)
12
+ end
13
+ end
14
+
15
+ describe "#self.city" do
16
+ it "returns a city that exists in the file" do
17
+ cities = described_class::CITIES.to_set
18
+ expect(cities).to include(described_class.city)
19
+ end
20
+ end
21
+
22
+ describe "#self.province" do
23
+ it "returns a province that exists in the file" do
24
+ provinces = described_class::PROVINCES.to_set
25
+ expect(provinces).to include(described_class.province)
26
+ end
27
+ end
28
+
29
+ describe "#self.postal_code" do
30
+ it "returns a postal_code for China" do
31
+ expect(described_class.postal_code).to match(/^([0-9]){6}$/)
32
+ end
33
+ end
34
+
35
+ describe "#self.full_address" do
36
+ context "when struct is false" do
37
+ it "returns a string" do
38
+ address = described_class.address(struct: false)
39
+ expect(address).to be_a(::String)
40
+ end
41
+ end
42
+
43
+ context "when struct is true" do
44
+ it "returns an OpenStruct" do
45
+ address = described_class.address(struct: true)
46
+ expect(address).to be_a(OpenStruct)
47
+ end
48
+ end
49
+ end
50
+
51
+ describe "::GenerateAddress" do
52
+ describe "#initialize" do
53
+ context "when *args is empty" do
54
+ let(:generate_address) { described_class::GenerateAddress.new }
55
+
56
+ it "sets options with an empty hash" do
57
+ expect(generate_address.options.empty?).to be_truthy
58
+ end
59
+
60
+ it "sets district to nil" do
61
+ expect(generate_address.district.nil?).to be_truthy
62
+ end
63
+
64
+ it "sets city to nil" do
65
+ expect(generate_address.city.nil?).to be_truthy
66
+ end
67
+
68
+ it "sets province to nil" do
69
+ expect(generate_address.province.nil?).to be_truthy
70
+ end
71
+ end
72
+
73
+ context "when args are passed" do
74
+ let(:generate_address) { described_class::GenerateAddress.new(province: 'beijing') }
75
+
76
+ it "sets options with passed args" do
77
+ expect(generate_address.options).to include(province: 'beijing')
78
+ end
79
+
80
+ it "calls validate" do
81
+ expect_any_instance_of(described_class::GenerateAddress).to receive(:validate)
82
+ generate_address
83
+ end
84
+
85
+ context "when province is true" do
86
+ context "but province_exists? is false" do
87
+ let(:generate_address) { described_class::GenerateAddress.new(province: province) }
88
+ let(:province) { 'illinois' }
89
+
90
+ it "raises an ArgumentError" do
91
+ expect { generate_address }.to raise_error(ArgumentError)
92
+ end
93
+ end
94
+ end
95
+
96
+ context "when city is true" do
97
+ context "but city_exists? is false" do
98
+ let(:generate_address) { described_class::GenerateAddress.new(city: city) }
99
+ let(:city) { 'chicago' }
100
+
101
+ it "raises an ArgumentError" do
102
+ expect { generate_address }.to raise_error(ArgumentError, "The city #{city} does not exist!")
103
+ end
104
+ end
105
+ end
106
+
107
+ context "when district is true" do
108
+ context "but district_exists? is false" do
109
+ let(:generate_address) { described_class::GenerateAddress.new(district: district) }
110
+ let(:district) { 'dupage' }
111
+
112
+ it "raises an ArgumentError" do
113
+ expect { generate_address }.to raise_error(ArgumentError, "The district #{district} does not exist!")
114
+ end
115
+ end
116
+ end
117
+
118
+ context "when city.nil? is true" do
119
+ let(:city) { nil }
120
+
121
+ before :each do
122
+ #this is self actualizing but this is just to prove that the variable city
123
+ #is indeed nil
124
+ expect(city).to be_nil
125
+ end
126
+
127
+ context "and district is true and it exists" do
128
+ let(:generate_address) { described_class::GenerateAddress.new(city: city, district: district) }
129
+ let(:district) { 'wuwei' }
130
+
131
+ it "raises an ArgumentError" do
132
+ expect { generate_address }.to raise_error(ArgumentError, "You must always pass a city with a district!")
133
+ end
134
+ end
135
+ end
136
+
137
+ context "when province is true and it exists" do
138
+ let(:province) { 'beijing' }
139
+
140
+ before :each do
141
+ provinces = described_class::PROVINCES.to_set
142
+ expect(provinces).to include(province)
143
+ end
144
+
145
+ context "and city is true and exists" do
146
+ let(:city) { 'zhaoqing' }
147
+
148
+ before :each do
149
+ cities = described_class::CITIES.to_set
150
+ expect(cities).to include(city)
151
+ end
152
+
153
+ context "but province_has_city? is false" do
154
+ let(:generate_address) { described_class::GenerateAddress.new(province: province, city: city) }
155
+
156
+ it "raises an ArgumentError" do
157
+ expect { generate_address }.to raise_error(ArgumentError, "The province #{province} does not have the city #{city}")
158
+ end
159
+ end
160
+ end
161
+ end
162
+
163
+ context "when city is true and it exists" do
164
+ let(:city) { 'beijing' }
165
+
166
+ before :each do
167
+ cities = described_class::CITIES.to_set
168
+ expect(cities).to include(city)
169
+ end
170
+
171
+ context "and district is true and exists" do
172
+ let(:district) { 'shunde' }
173
+
174
+ before :each do
175
+ districts = described_class::DISTRICTS.to_set
176
+ expect(districts).to include(district)
177
+ end
178
+
179
+ context "but province_has_city? is false" do
180
+ let(:generate_address) { described_class::GenerateAddress.new(city: city, district: district) }
181
+
182
+ it "raises an ArgumentError" do
183
+ expect { generate_address }.to raise_error(ArgumentError, "The city #{city} does not have the district #{district}")
184
+ end
185
+ end
186
+ end
187
+ end
188
+ end
189
+ end
190
+
191
+ describe "#generate" do
192
+ context "when options.empty? is true" do
193
+ let(:generate_address) { described_class::GenerateAddress.new }
194
+ let(:province) { described_class::PROVINCES.sample }
195
+
196
+ before :each do
197
+ expect(generate_address.options.empty?).to be_truthy
198
+ allow(generate_address).to receive_message_chain('provinces.sample').and_return(province)
199
+ generate_address.generate
200
+ end
201
+
202
+ it "sets province" do
203
+ expect(generate_address.province).to_not be_empty
204
+ end
205
+
206
+ it "sets a random province using sample" do
207
+ expect_any_instance_of(described_class::GenerateAddress).to receive_message_chain('provinces.sample')
208
+ generate_address.generate
209
+ end
210
+
211
+ it "sets city" do
212
+ expect(generate_address.province).to_not be_empty
213
+ end
214
+
215
+ it "sets the city from a province" do
216
+ province_cities = described_class.const_get("#{province}_cities".upcase)
217
+ expect(province_cities.to_set).to include(generate_address.city)
218
+ end
219
+
220
+ it "sets district" do
221
+ city_districts = described_class.const_get("#{generate_address.city}_districts".upcase)
222
+ if city_districts.empty?
223
+ expect(generate_address.district).to be_nil
224
+ else
225
+ expect(generate_address.district).to_not be_empty
226
+ end
227
+ end
228
+
229
+ it "sets the district from the city" do
230
+ city_districts = described_class.const_get("#{generate_address.city}_districts".upcase)
231
+ if city_districts.empty?
232
+ expect(generate_address.district).to be_nil
233
+ else
234
+ expect(city_districts.to_set).to include(generate_address.district)
235
+ end
236
+ end
237
+ end
238
+
239
+ context "when options[:province] is true" do
240
+ let(:province) { described_class::PROVINCES.sample }
241
+ let(:generate_address) { described_class::GenerateAddress.new(province: province) }
242
+
243
+ before :each do
244
+ expect(generate_address.options[:province]).to_not be_nil
245
+ end
246
+
247
+ context "and options[:city].nil?" do
248
+ before :each do
249
+ expect(generate_address.options[:city]).to be_nil
250
+ end
251
+
252
+ context "and options[:district].nil?" do
253
+ before :each do
254
+ expect(generate_address.options[:district]).to be_nil
255
+ generate_address.generate
256
+ end
257
+
258
+ it "does not set province again" do
259
+ expect { generate_address.generate }.to_not change { generate_address.province }
260
+ end
261
+
262
+ it "sets city" do
263
+ expect(generate_address.province).to_not be_empty
264
+ end
265
+
266
+ it "sets the city from a province" do
267
+ province_cities = described_class.const_get("#{province}_cities".upcase)
268
+ expect(province_cities.to_set).to include(generate_address.city)
269
+ end
270
+
271
+ it "sets district" do
272
+ city_districts = described_class.const_get("#{generate_address.city}_districts".upcase)
273
+ if city_districts.empty?
274
+ expect(generate_address.district).to be_nil
275
+ else
276
+ expect(generate_address.district).to_not be_empty
277
+ end
278
+ end
279
+
280
+ it "sets the district from the city" do
281
+ city_districts = described_class.const_get("#{generate_address.city}_districts".upcase)
282
+ if city_districts.empty?
283
+ expect(generate_address.district).to be_nil
284
+ else
285
+ expect(city_districts.to_set).to include(generate_address.district)
286
+ end
287
+ end
288
+ end
289
+ end
290
+ end
291
+
292
+ context "when options[:province].nil? is true" do
293
+ let(:city) { described_class::CITIES.sample }
294
+ let(:generate_address) { described_class::GenerateAddress.new(city: city) }
295
+
296
+ before :each do
297
+ expect(generate_address.options[:province]).to be_nil
298
+ end
299
+
300
+ context "and options[:city] is true" do
301
+ before :each do
302
+ expect(generate_address.options[:city]).to_not be_nil
303
+ end
304
+
305
+ context "and options[:district].nil? is true" do
306
+ before :each do
307
+ expect(generate_address.options[:district]).to be_nil
308
+ generate_address.generate
309
+ end
310
+
311
+ it "does not set city again" do
312
+ expect { generate_address.generate }.to_not change { generate_address.city }
313
+ end
314
+
315
+ it "sets province using the city's province" do
316
+ cp = nil
317
+ city_provinces = DataMaker::CN::Address::CITY_PROVINCES
318
+ city_provinces.to_set.select do |city_province|
319
+ c, p = city_province.split(",")
320
+ c == generate_address.city ? cp = p : nil
321
+ end
322
+ expect(generate_address.province).to eq(cp)
323
+ end
324
+
325
+ it "sets the district from the city" do
326
+ city_districts = described_class.const_get("#{generate_address.city}_districts".upcase)
327
+ if city_districts.empty?
328
+ expect(generate_address.district).to be_nil
329
+ else
330
+ expect(city_districts.to_set).to include(generate_address.district)
331
+ end
332
+ end
333
+ end
334
+ end
335
+ end
336
+ end
337
+
338
+ describe "#address_string" do
339
+ let(:generate_address) { described_class::GenerateAddress.new }
340
+
341
+ it "calls #generate" do
342
+ expect_any_instance_of(described_class::GenerateAddress).to receive(:generate)
343
+ generate_address.address_string
344
+ end
345
+
346
+ it "calls #build_address" do
347
+ expect_any_instance_of(described_class::GenerateAddress).to receive(:build_address)
348
+ generate_address.address_string
349
+ end
350
+
351
+ it "returns a string" do
352
+ expect(generate_address.address_string).to be_a(::String)
353
+ end
354
+ end
355
+
356
+ describe "#address_struct" do
357
+ let(:generate_address) { described_class::GenerateAddress.new }
358
+
359
+ it "calls #generate" do
360
+ expect_any_instance_of(described_class::GenerateAddress).to receive(:generate)
361
+ generate_address.address_struct
362
+ end
363
+
364
+ it "initiaes a new OpenStruct" do
365
+ expect(OpenStruct).to receive(:new)
366
+ generate_address.address_struct
367
+ end
368
+
369
+ it "returns an OpenStruct" do
370
+ expect(generate_address.address_struct).to be_a(OpenStruct)
371
+ end
372
+
373
+ it "returns an OpenStruct that responds to street_address" do
374
+ expect(generate_address.address_struct).to respond_to(:street_address)
375
+ end
376
+
377
+ it "returns an OpenStruct that responds to city" do
378
+ expect(generate_address.address_struct).to respond_to(:city)
379
+ end
380
+
381
+ it "returns an OpenStruct that responds to district" do
382
+ expect(generate_address.address_struct).to respond_to(:district)
383
+ end
384
+
385
+ it "returns an OpenStruct that responds to province" do
386
+ expect(generate_address.address_struct).to respond_to(:province)
387
+ end
388
+
389
+ it "returns an OpenStruct that responds to postal_code" do
390
+ expect(generate_address.address_struct).to respond_to(:postal_code)
391
+ end
392
+ end
393
+ end
394
+ end