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.
- checksums.yaml +4 -4
- data/Rakefile +1 -1
- data/data_maker.gemspec +395 -7
- data/lib/data_maker.rb +29 -4
- data/lib/data_maker/cn/address.rb +200 -12
- data/lib/data_maker/data/cn/address/aba_districts +13 -0
- data/lib/data_maker/data/cn/address/akesu_districts +9 -0
- data/lib/data_maker/data/cn/address/alaer_districts +0 -0
- data/lib/data_maker/data/cn/address/alashanmeng_districts +3 -0
- data/lib/data_maker/data/cn/address/aletai_districts +7 -0
- data/lib/data_maker/data/cn/address/ali_districts +7 -0
- data/lib/data_maker/data/cn/address/anhui_cities +17 -0
- data/lib/data_maker/data/cn/address/ankang_districts +10 -0
- data/lib/data_maker/data/cn/address/anqing_districts +11 -0
- data/lib/data_maker/data/cn/address/anshan_districts +7 -0
- data/lib/data_maker/data/cn/address/anshun_districts +6 -0
- data/lib/data_maker/data/cn/address/anyang_districts +9 -0
- data/lib/data_maker/data/cn/address/aomen_cities +1 -0
- data/lib/data_maker/data/cn/address/aomen_districts +0 -0
- data/lib/data_maker/data/cn/address/baicheng_districts +5 -0
- data/lib/data_maker/data/cn/address/baise_districts +12 -0
- data/lib/data_maker/data/cn/address/baishan_districts +6 -0
- data/lib/data_maker/data/cn/address/baiyin_districts +5 -0
- data/lib/data_maker/data/cn/address/bangbu_districts +7 -0
- data/lib/data_maker/data/cn/address/baoding_districts +25 -0
- data/lib/data_maker/data/cn/address/baoji_districts +12 -0
- data/lib/data_maker/data/cn/address/baoshan_districts +5 -0
- data/lib/data_maker/data/cn/address/baotou_districts +9 -0
- data/lib/data_maker/data/cn/address/bayannaoer_districts +7 -0
- data/lib/data_maker/data/cn/address/bayinguolengmenggu_districts +9 -0
- data/lib/data_maker/data/cn/address/bazhong_districts +4 -0
- data/lib/data_maker/data/cn/address/beihai_districts +4 -0
- data/lib/data_maker/data/cn/address/beijing_cities +1 -0
- data/lib/data_maker/data/cn/address/beijing_districts +18 -0
- data/lib/data_maker/data/cn/address/benxi_districts +6 -0
- data/lib/data_maker/data/cn/address/bijie_districts +8 -0
- data/lib/data_maker/data/cn/address/binzhou_districts +7 -0
- data/lib/data_maker/data/cn/address/boertalamenggu_districts +3 -0
- data/lib/data_maker/data/cn/address/bozhou_districts +4 -0
- data/lib/data_maker/data/cn/address/cangzhou_districts +16 -0
- data/lib/data_maker/data/cn/address/changchun_districts +10 -0
- data/lib/data_maker/data/cn/address/changde_districts +9 -0
- data/lib/data_maker/data/cn/address/changdu_districts +11 -0
- data/lib/data_maker/data/cn/address/changjihuizu_districts +8 -0
- data/lib/data_maker/data/cn/address/changsha_districts +9 -0
- data/lib/data_maker/data/cn/address/changzhi_districts +13 -0
- data/lib/data_maker/data/cn/address/changzhou_districts +7 -0
- data/lib/data_maker/data/cn/address/chaohu_districts +5 -0
- data/lib/data_maker/data/cn/address/chaozhou_districts +3 -0
- data/lib/data_maker/data/cn/address/chengde_districts +11 -0
- data/lib/data_maker/data/cn/address/chengdu_districts +19 -0
- data/lib/data_maker/data/cn/address/chenyang_districts +13 -0
- data/lib/data_maker/data/cn/address/chenzhou_districts +11 -0
- data/lib/data_maker/data/cn/address/chifeng_districts +12 -0
- data/lib/data_maker/data/cn/address/chizhou_districts +4 -0
- data/lib/data_maker/data/cn/address/chongqing_cities +1 -0
- data/lib/data_maker/data/cn/address/chongqing_districts +40 -0
- data/lib/data_maker/data/cn/address/chongzuo_districts +7 -0
- data/lib/data_maker/data/cn/address/chuxiong_districts +10 -0
- data/lib/data_maker/data/cn/address/chuzhou_districts +8 -0
- data/lib/data_maker/data/cn/address/cities +351 -0
- data/lib/data_maker/data/cn/address/city_provinces +351 -0
- data/lib/data_maker/data/cn/address/dalian_districts +10 -0
- data/lib/data_maker/data/cn/address/dalibaizu_districts +12 -0
- data/lib/data_maker/data/cn/address/dandong_districts +6 -0
- data/lib/data_maker/data/cn/address/daqing_districts +9 -0
- data/lib/data_maker/data/cn/address/datong_districts +11 -0
- data/lib/data_maker/data/cn/address/daxinganling_districts +3 -0
- data/lib/data_maker/data/cn/address/dazhou_districts +7 -0
- data/lib/data_maker/data/cn/address/dehongdaizujingpozu_districts +5 -0
- data/lib/data_maker/data/cn/address/deyang_districts +6 -0
- data/lib/data_maker/data/cn/address/dezhou_districts +11 -0
- data/lib/data_maker/data/cn/address/dingxi_districts +7 -0
- data/lib/data_maker/data/cn/address/diqingcangzu_districts +3 -0
- data/lib/data_maker/data/cn/address/districts +2862 -0
- data/lib/data_maker/data/cn/address/dongguan_districts +0 -0
- data/lib/data_maker/data/cn/address/dongying_districts +5 -0
- data/lib/data_maker/data/cn/address/eerduosi_districts +8 -0
- data/lib/data_maker/data/cn/address/enshi_districts +8 -0
- data/lib/data_maker/data/cn/address/ezhou_districts +3 -0
- data/lib/data_maker/data/cn/address/fangchenggang_districts +4 -0
- data/lib/data_maker/data/cn/address/foshan_districts +5 -0
- data/lib/data_maker/data/cn/address/fujian_cities +9 -0
- data/lib/data_maker/data/cn/address/fushun_districts +7 -0
- data/lib/data_maker/data/cn/address/futian_districts +5 -0
- data/lib/data_maker/data/cn/address/fuxin_districts +7 -0
- data/lib/data_maker/data/cn/address/fuyang_districts +8 -0
- data/lib/data_maker/data/cn/address/fuzhou_districts +11 -0
- data/lib/data_maker/data/cn/address/gannancangzu_districts +8 -0
- data/lib/data_maker/data/cn/address/gansu_cities +14 -0
- data/lib/data_maker/data/cn/address/ganzhou_districts +18 -0
- data/lib/data_maker/data/cn/address/ganzi_districts +18 -0
- data/lib/data_maker/data/cn/address/guangan_districts +5 -0
- data/lib/data_maker/data/cn/address/guangdong_cities +21 -0
- data/lib/data_maker/data/cn/address/guangxi_cities +14 -0
- data/lib/data_maker/data/cn/address/guangyuan_districts +7 -0
- data/lib/data_maker/data/cn/address/guangzhou_districts +12 -0
- data/lib/data_maker/data/cn/address/guigang_districts +5 -0
- data/lib/data_maker/data/cn/address/guilin_districts +17 -0
- data/lib/data_maker/data/cn/address/guiyang_districts +10 -0
- data/lib/data_maker/data/cn/address/guizhou_cities +9 -0
- data/lib/data_maker/data/cn/address/guoluocangzu_districts +6 -0
- data/lib/data_maker/data/cn/address/guyuan_districts +5 -0
- data/lib/data_maker/data/cn/address/haerbin_districts +19 -0
- data/lib/data_maker/data/cn/address/haibeicangzu_districts +4 -0
- data/lib/data_maker/data/cn/address/haidong_districts +6 -0
- data/lib/data_maker/data/cn/address/haikou_districts +4 -0
- data/lib/data_maker/data/cn/address/hainan_cities +3 -0
- data/lib/data_maker/data/cn/address/hainancangzu_districts +5 -0
- data/lib/data_maker/data/cn/address/haiximengguzucangzu_districts +5 -0
- data/lib/data_maker/data/cn/address/hami_districts +3 -0
- data/lib/data_maker/data/cn/address/handan_districts +19 -0
- data/lib/data_maker/data/cn/address/hangzhou_districts +13 -0
- data/lib/data_maker/data/cn/address/hanzhong_districts +11 -0
- data/lib/data_maker/data/cn/address/hebei_cities +11 -0
- data/lib/data_maker/data/cn/address/hebi_districts +5 -0
- data/lib/data_maker/data/cn/address/hechi_districts +11 -0
- data/lib/data_maker/data/cn/address/hefei_districts +7 -0
- data/lib/data_maker/data/cn/address/hegang_districts +8 -0
- data/lib/data_maker/data/cn/address/heihe_districts +6 -0
- data/lib/data_maker/data/cn/address/heilongjiang_cities +13 -0
- data/lib/data_maker/data/cn/address/henan_cities +17 -0
- data/lib/data_maker/data/cn/address/hengshui_districts +11 -0
- data/lib/data_maker/data/cn/address/hengyang_districts +12 -0
- data/lib/data_maker/data/cn/address/hetian_districts +8 -0
- data/lib/data_maker/data/cn/address/heyuan_districts +6 -0
- data/lib/data_maker/data/cn/address/heze_districts +9 -0
- data/lib/data_maker/data/cn/address/hezhou_districts +4 -0
- data/lib/data_maker/data/cn/address/honghehanizuyizu_districts +13 -0
- data/lib/data_maker/data/cn/address/huaian_districts +8 -0
- data/lib/data_maker/data/cn/address/huaibei_districts +4 -0
- data/lib/data_maker/data/cn/address/huaihua_districts +12 -0
- data/lib/data_maker/data/cn/address/huainan_districts +6 -0
- data/lib/data_maker/data/cn/address/huanggang_districts +10 -0
- data/lib/data_maker/data/cn/address/huangnancangzu_districts +4 -0
- data/lib/data_maker/data/cn/address/huangshan_districts +7 -0
- data/lib/data_maker/data/cn/address/huangshi_districts +6 -0
- data/lib/data_maker/data/cn/address/hubei_cities +14 -0
- data/lib/data_maker/data/cn/address/huhehaote_districts +9 -0
- data/lib/data_maker/data/cn/address/huizhou_districts +5 -0
- data/lib/data_maker/data/cn/address/huludao_districts +6 -0
- data/lib/data_maker/data/cn/address/hulunbeier_districts +13 -0
- data/lib/data_maker/data/cn/address/hunan_cities +14 -0
- data/lib/data_maker/data/cn/address/huzhou_districts +5 -0
- data/lib/data_maker/data/cn/address/jiamusi_districts +11 -0
- data/lib/data_maker/data/cn/address/jian_districts +13 -0
- data/lib/data_maker/data/cn/address/jiangmen_districts +7 -0
- data/lib/data_maker/data/cn/address/jiangsu_cities +13 -0
- data/lib/data_maker/data/cn/address/jiangxi_cities +11 -0
- data/lib/data_maker/data/cn/address/jiaozuo_districts +11 -0
- data/lib/data_maker/data/cn/address/jiaxing_districts +7 -0
- data/lib/data_maker/data/cn/address/jiayi_districts +0 -0
- data/lib/data_maker/data/cn/address/jiayuguan_districts +0 -0
- data/lib/data_maker/data/cn/address/jieyang_districts +5 -0
- data/lib/data_maker/data/cn/address/jilin_cities +9 -0
- data/lib/data_maker/data/cn/address/jilin_districts +9 -0
- data/lib/data_maker/data/cn/address/jilong_districts +0 -0
- data/lib/data_maker/data/cn/address/jinan_districts +10 -0
- data/lib/data_maker/data/cn/address/jinchang_districts +2 -0
- data/lib/data_maker/data/cn/address/jincheng_districts +6 -0
- data/lib/data_maker/data/cn/address/jingdezhen_districts +4 -0
- data/lib/data_maker/data/cn/address/jingmen_districts +5 -0
- data/lib/data_maker/data/cn/address/jingzhou_districts +8 -0
- data/lib/data_maker/data/cn/address/jinhua_districts +9 -0
- data/lib/data_maker/data/cn/address/jining_districts +12 -0
- data/lib/data_maker/data/cn/address/jinzhong_districts +11 -0
- data/lib/data_maker/data/cn/address/jinzhou_districts +7 -0
- data/lib/data_maker/data/cn/address/jiujiang_districts +12 -0
- data/lib/data_maker/data/cn/address/jiuquan_districts +7 -0
- data/lib/data_maker/data/cn/address/jixi_districts +9 -0
- data/lib/data_maker/data/cn/address/kaifeng_districts +10 -0
- data/lib/data_maker/data/cn/address/kashi_districts +12 -0
- data/lib/data_maker/data/cn/address/kelamayi_districts +4 -0
- data/lib/data_maker/data/cn/address/kezilesukeerkezi_districts +4 -0
- data/lib/data_maker/data/cn/address/kunming_districts +14 -0
- data/lib/data_maker/data/cn/address/laibin_districts +6 -0
- data/lib/data_maker/data/cn/address/laiwu_districts +2 -0
- data/lib/data_maker/data/cn/address/langfang_districts +10 -0
- data/lib/data_maker/data/cn/address/lanzhou_districts +8 -0
- data/lib/data_maker/data/cn/address/lasa_districts +8 -0
- data/lib/data_maker/data/cn/address/leshan_districts +11 -0
- data/lib/data_maker/data/cn/address/liangshan_districts +17 -0
- data/lib/data_maker/data/cn/address/lianyungang_districts +7 -0
- data/lib/data_maker/data/cn/address/liaocheng_districts +8 -0
- data/lib/data_maker/data/cn/address/liaoning_cities +14 -0
- data/lib/data_maker/data/cn/address/liaoyang_districts +7 -0
- data/lib/data_maker/data/cn/address/liaoyuan_districts +4 -0
- data/lib/data_maker/data/cn/address/lijiang_districts +5 -0
- data/lib/data_maker/data/cn/address/lincang_districts +8 -0
- data/lib/data_maker/data/cn/address/linfen_districts +17 -0
- data/lib/data_maker/data/cn/address/linxiahuizu_districts +8 -0
- data/lib/data_maker/data/cn/address/linyi_districts +12 -0
- data/lib/data_maker/data/cn/address/linzhi_districts +7 -0
- data/lib/data_maker/data/cn/address/lishui_districts +9 -0
- data/lib/data_maker/data/cn/address/liuan_districts +7 -0
- data/lib/data_maker/data/cn/address/liupanshui_districts +4 -0
- data/lib/data_maker/data/cn/address/liuzhou_districts +10 -0
- data/lib/data_maker/data/cn/address/longnan_districts +9 -0
- data/lib/data_maker/data/cn/address/longyan_districts +7 -0
- data/lib/data_maker/data/cn/address/loudi_districts +5 -0
- data/lib/data_maker/data/cn/address/luoyang_districts +15 -0
- data/lib/data_maker/data/cn/address/luzhou_districts +7 -0
- data/lib/data_maker/data/cn/address/lvliang_districts +13 -0
- data/lib/data_maker/data/cn/address/maanshan_districts +4 -0
- data/lib/data_maker/data/cn/address/maoming_districts +6 -0
- data/lib/data_maker/data/cn/address/meishan_districts +6 -0
- data/lib/data_maker/data/cn/address/meizhou_districts +8 -0
- data/lib/data_maker/data/cn/address/mianyang_districts +9 -0
- data/lib/data_maker/data/cn/address/mudanjiang_districts +10 -0
- data/lib/data_maker/data/cn/address/nanchang_districts +9 -0
- data/lib/data_maker/data/cn/address/nanchong_districts +9 -0
- data/lib/data_maker/data/cn/address/nanjing_districts +13 -0
- data/lib/data_maker/data/cn/address/nanning_districts +12 -0
- data/lib/data_maker/data/cn/address/nanping_districts +10 -0
- data/lib/data_maker/data/cn/address/nantong_districts +8 -0
- data/lib/data_maker/data/cn/address/nanyang_districts +13 -0
- data/lib/data_maker/data/cn/address/naqu_districts +10 -0
- data/lib/data_maker/data/cn/address/neijiang_districts +5 -0
- data/lib/data_maker/data/cn/address/neimenggu_cities +12 -0
- data/lib/data_maker/data/cn/address/ningbo_districts +11 -0
- data/lib/data_maker/data/cn/address/ningde_districts +9 -0
- data/lib/data_maker/data/cn/address/ningxia_cities +5 -0
- data/lib/data_maker/data/cn/address/nujianglisuzu_districts +4 -0
- data/lib/data_maker/data/cn/address/panjin_districts +4 -0
- data/lib/data_maker/data/cn/address/panzhihua_districts +5 -0
- data/lib/data_maker/data/cn/address/pingdingshan_districts +10 -0
- data/lib/data_maker/data/cn/address/pingliang_districts +7 -0
- data/lib/data_maker/data/cn/address/pingxiang_districts +5 -0
- data/lib/data_maker/data/cn/address/province_postal_codes +34 -0
- data/lib/data_maker/data/cn/address/provinces +34 -0
- data/lib/data_maker/data/cn/address/puyang_districts +6 -0
- data/lib/data_maker/data/cn/address/qiandongnan_districts +16 -0
- data/lib/data_maker/data/cn/address/qiannanbu_districts +12 -0
- data/lib/data_maker/data/cn/address/qianxinan_districts +8 -0
- data/lib/data_maker/data/cn/address/qingdao_districts +12 -0
- data/lib/data_maker/data/cn/address/qinghai_cities +8 -0
- data/lib/data_maker/data/cn/address/qingyang_districts +8 -0
- data/lib/data_maker/data/cn/address/qingyuan_districts +8 -0
- data/lib/data_maker/data/cn/address/qinhuangdao_districts +7 -0
- data/lib/data_maker/data/cn/address/qinzhou_districts +4 -0
- data/lib/data_maker/data/cn/address/qiqihaer_districts +16 -0
- data/lib/data_maker/data/cn/address/qitaihe_districts +4 -0
- data/lib/data_maker/data/cn/address/quanzhou_districts +12 -0
- data/lib/data_maker/data/cn/address/qujing_districts +9 -0
- data/lib/data_maker/data/cn/address/quzhou_districts +6 -0
- data/lib/data_maker/data/cn/address/rikaze_districts +18 -0
- data/lib/data_maker/data/cn/address/rizhao_districts +4 -0
- data/lib/data_maker/data/cn/address/sanmenxia_districts +7 -0
- data/lib/data_maker/data/cn/address/sanming_districts +12 -0
- data/lib/data_maker/data/cn/address/sansha_districts +0 -0
- data/lib/data_maker/data/cn/address/sanya_districts +19 -0
- data/lib/data_maker/data/cn/address/shamen_districts +6 -0
- data/lib/data_maker/data/cn/address/shandong_cities +17 -0
- data/lib/data_maker/data/cn/address/shanghai_cities +1 -0
- data/lib/data_maker/data/cn/address/shanghai_districts +19 -0
- data/lib/data_maker/data/cn/address/shangluo_districts +7 -0
- data/lib/data_maker/data/cn/address/shangqiu_districts +9 -0
- data/lib/data_maker/data/cn/address/shangrao_districts +12 -0
- data/lib/data_maker/data/cn/address/shannan_districts +12 -0
- data/lib/data_maker/data/cn/address/shantou_districts +7 -0
- data/lib/data_maker/data/cn/address/shanwei_districts +4 -0
- data/lib/data_maker/data/cn/address/shanxi_cities +10 -0
- data/lib/data_maker/data/cn/address/shaoguan_districts +10 -0
- data/lib/data_maker/data/cn/address/shaoxing_districts +6 -0
- data/lib/data_maker/data/cn/address/shaoyang_districts +12 -0
- data/lib/data_maker/data/cn/address/shennongjia_districts +4 -0
- data/lib/data_maker/data/cn/address/shenzhen_districts +6 -0
- data/lib/data_maker/data/cn/address/shihezi_districts +0 -0
- data/lib/data_maker/data/cn/address/shijiazhuang_districts +23 -0
- data/lib/data_maker/data/cn/address/shiyan_districts +8 -0
- data/lib/data_maker/data/cn/address/shizuishan_districts +3 -0
- data/lib/data_maker/data/cn/address/shuangyashan_districts +8 -0
- data/lib/data_maker/data/cn/address/shuozhou_districts +6 -0
- data/lib/data_maker/data/cn/address/sichuan_cities +21 -0
- data/lib/data_maker/data/cn/address/simao_districts +10 -0
- data/lib/data_maker/data/cn/address/siping_districts +6 -0
- data/lib/data_maker/data/cn/address/songyuan_districts +5 -0
- data/lib/data_maker/data/{china → cn}/address/street_suffixes +0 -0
- data/lib/data_maker/data/cn/address/suihua_districts +10 -0
- data/lib/data_maker/data/cn/address/suining_districts +5 -0
- data/lib/data_maker/data/cn/address/suizhou_districts +2 -0
- data/lib/data_maker/data/cn/address/suqian_districts +5 -0
- data/lib/data_maker/data/cn/address/suzhou_districts +5 -0
- data/lib/data_maker/data/cn/address/tacheng_districts +7 -0
- data/lib/data_maker/data/cn/address/tahe_districts +5 -0
- data/lib/data_maker/data/cn/address/taian_districts +6 -0
- data/lib/data_maker/data/cn/address/taibei_districts +0 -0
- data/lib/data_maker/data/cn/address/tainan_districts +0 -0
- data/lib/data_maker/data/cn/address/taiwan_cities +6 -0
- data/lib/data_maker/data/cn/address/taiyuan_districts +10 -0
- data/lib/data_maker/data/cn/address/taizhong_districts +0 -0
- data/lib/data_maker/data/cn/address/taizhou_districts +9 -0
- data/lib/data_maker/data/cn/address/tangshan_districts +14 -0
- data/lib/data_maker/data/cn/address/tianjin_cities +1 -0
- data/lib/data_maker/data/cn/address/tianjin_districts +18 -0
- data/lib/data_maker/data/cn/address/tianshui_districts +7 -0
- data/lib/data_maker/data/cn/address/tieling_districts +7 -0
- data/lib/data_maker/data/cn/address/tongchuan_districts +4 -0
- data/lib/data_maker/data/cn/address/tonghua_districts +7 -0
- data/lib/data_maker/data/cn/address/tongliao_districts +8 -0
- data/lib/data_maker/data/cn/address/tongling_districts +4 -0
- data/lib/data_maker/data/cn/address/tongren_districts +10 -0
- data/lib/data_maker/data/cn/address/tulufan_districts +3 -0
- data/lib/data_maker/data/cn/address/tumushuke_districts +0 -0
- data/lib/data_maker/data/cn/address/weifang_districts +12 -0
- data/lib/data_maker/data/cn/address/weihai_districts +4 -0
- data/lib/data_maker/data/cn/address/weinan_districts +11 -0
- data/lib/data_maker/data/cn/address/wenshanzhuangzumiaozu_districts +8 -0
- data/lib/data_maker/data/cn/address/wenzhou_districts +11 -0
- data/lib/data_maker/data/cn/address/wuhai_districts +3 -0
- data/lib/data_maker/data/cn/address/wuhan_districts +13 -0
- data/lib/data_maker/data/cn/address/wuhu_districts +7 -0
- data/lib/data_maker/data/cn/address/wujiaqu_districts +0 -0
- data/lib/data_maker/data/cn/address/wulanchabu_districts +11 -0
- data/lib/data_maker/data/cn/address/wulumuqi_districts +8 -0
- data/lib/data_maker/data/cn/address/wuwei_districts +4 -0
- data/lib/data_maker/data/cn/address/wuxi_districts +8 -0
- data/lib/data_maker/data/cn/address/wuzhong_districts +4 -0
- data/lib/data_maker/data/cn/address/wuzhou_districts +7 -0
- data/lib/data_maker/data/cn/address/xian_districts +13 -0
- data/lib/data_maker/data/cn/address/xiangfan_districts +9 -0
- data/lib/data_maker/data/cn/address/xianggang_cities +1 -0
- data/lib/data_maker/data/cn/address/xianggang_districts +0 -0
- data/lib/data_maker/data/cn/address/xiangtan_districts +5 -0
- data/lib/data_maker/data/cn/address/xiangxi_districts +8 -0
- data/lib/data_maker/data/cn/address/xianning_districts +6 -0
- data/lib/data_maker/data/cn/address/xianyang_districts +14 -0
- data/lib/data_maker/data/cn/address/xiaogan_districts +7 -0
- data/lib/data_maker/data/cn/address/xilinguolemeng_districts +12 -0
- data/lib/data_maker/data/cn/address/xinganmeng_districts +6 -0
- data/lib/data_maker/data/cn/address/xingtai_districts +19 -0
- data/lib/data_maker/data/cn/address/xining_districts +7 -0
- data/lib/data_maker/data/cn/address/xinjiang_cities +18 -0
- data/lib/data_maker/data/cn/address/xinxiang_districts +12 -0
- data/lib/data_maker/data/cn/address/xinyang_districts +10 -0
- data/lib/data_maker/data/cn/address/xinyu_districts +2 -0
- data/lib/data_maker/data/cn/address/xinzhou_districts +14 -0
- data/lib/data_maker/data/cn/address/xinzhu_districts +0 -0
- data/lib/data_maker/data/cn/address/xishuangbannadaizu_districts +3 -0
- data/lib/data_maker/data/cn/address/xizang_cities +7 -0
- data/lib/data_maker/data/cn/address/xuancheng_districts +7 -0
- data/lib/data_maker/data/cn/address/xuchang_districts +6 -0
- data/lib/data_maker/data/cn/address/xuzhou_districts +11 -0
- data/lib/data_maker/data/cn/address/yaan_districts +8 -0
- data/lib/data_maker/data/cn/address/yanan_districts +13 -0
- data/lib/data_maker/data/cn/address/yanbian_districts +8 -0
- data/lib/data_maker/data/cn/address/yancheng_districts +9 -0
- data/lib/data_maker/data/cn/address/yangjiang_districts +4 -0
- data/lib/data_maker/data/cn/address/yangquan_districts +5 -0
- data/lib/data_maker/data/cn/address/yangzhou_districts +7 -0
- data/lib/data_maker/data/cn/address/yantai_districts +12 -0
- data/lib/data_maker/data/cn/address/yibin_districts +10 -0
- data/lib/data_maker/data/cn/address/yichang_districts +13 -0
- data/lib/data_maker/data/cn/address/yichun_districts +10 -0
- data/lib/data_maker/data/cn/address/yilihasake_districts +10 -0
- data/lib/data_maker/data/cn/address/yinchuan_districts +6 -0
- data/lib/data_maker/data/cn/address/yingkou_districts +6 -0
- data/lib/data_maker/data/cn/address/yingtan_districts +3 -0
- data/lib/data_maker/data/cn/address/yiyang_districts +6 -0
- data/lib/data_maker/data/cn/address/yongzhou_districts +11 -0
- data/lib/data_maker/data/cn/address/yueyang_districts +9 -0
- data/lib/data_maker/data/cn/address/yulin_districts +12 -0
- data/lib/data_maker/data/cn/address/yuncheng_districts +13 -0
- data/lib/data_maker/data/cn/address/yunfu_districts +5 -0
- data/lib/data_maker/data/cn/address/yunnan_cities +16 -0
- data/lib/data_maker/data/cn/address/yushucangzu_districts +6 -0
- data/lib/data_maker/data/cn/address/yuxi_districts +9 -0
- data/lib/data_maker/data/cn/address/zaozhuang_districts +6 -0
- data/lib/data_maker/data/cn/address/zhangjiajie_districts +4 -0
- data/lib/data_maker/data/cn/address/zhangjiakou_districts +17 -0
- data/lib/data_maker/data/cn/address/zhangye_districts +6 -0
- data/lib/data_maker/data/cn/address/zhangzhou_districts +11 -0
- data/lib/data_maker/data/cn/address/zhanjiang_districts +9 -0
- data/lib/data_maker/data/cn/address/zhaoqing_districts +8 -0
- data/lib/data_maker/data/cn/address/zhaotong_districts +11 -0
- data/lib/data_maker/data/cn/address/zhaoyang_districts +7 -0
- data/lib/data_maker/data/cn/address/zhejiang_cities +11 -0
- data/lib/data_maker/data/cn/address/zhengzhou_districts +12 -0
- data/lib/data_maker/data/cn/address/zhenjiang_districts +6 -0
- data/lib/data_maker/data/cn/address/zhongshan_districts +0 -0
- data/lib/data_maker/data/cn/address/zhongwei_districts +3 -0
- data/lib/data_maker/data/cn/address/zhoukou_districts +10 -0
- data/lib/data_maker/data/cn/address/zhoushan_districts +4 -0
- data/lib/data_maker/data/cn/address/zhuhai_districts +3 -0
- data/lib/data_maker/data/cn/address/zhumadian_districts +10 -0
- data/lib/data_maker/data/cn/address/zhuzhou_districts +9 -0
- data/lib/data_maker/data/cn/address/zibo_districts +8 -0
- data/lib/data_maker/data/cn/address/zigong_districts +6 -0
- data/lib/data_maker/data/cn/address/ziyang_districts +4 -0
- data/lib/data_maker/data/cn/address/zunyi_districts +14 -0
- data/lib/data_maker/data/cn/cities_chinese +351 -0
- data/lib/data_maker/data/cn/districts_chinese +2862 -0
- data/lib/data_maker/data/cn/provinces_chinese +34 -0
- data/lib/data_maker/locales/zh.yml +3253 -0
- data/lib/data_maker/modulator.rb +175 -0
- data/lib/data_maker/utilities/array_utilities.rb +2 -2
- data/lib/data_maker/version.rb +3 -0
- data/spec/lib/data_maker/cn/address_spec.rb +394 -0
- data/spec/lib/data_maker/data_maker_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -8
- metadata +423 -9
- data/lib/data_maker/data/china/address/city_prefixes +0 -21
- data/lib/data_maker/data/china/address/city_suffixes +0 -19
- data/lib/data_maker/data/china/address/province_abbreviations +0 -33
- data/lib/data_maker/data/china/address/provinces +0 -33
- 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,
|
10
|
-
indexes = (0...array.length).sort_by{Kernel.rand}[0...
|
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,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
|