data_maker 2.2.3 → 2.3.3

Sign up to get free protection for your applications and to get access to all the features.
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