spree_br_common 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.rspec +1 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +14 -0
  7. data/Gemfile +20 -0
  8. data/LICENSE +26 -0
  9. data/README.md +55 -0
  10. data/Rakefile +21 -0
  11. data/app/assets/javascripts/spree/backend/spree_br_common.js +2 -0
  12. data/app/assets/javascripts/spree/frontend/address.js +119 -0
  13. data/app/assets/javascripts/spree/frontend/mask.js +21 -0
  14. data/app/assets/javascripts/spree/frontend/plugins/jquery.mask.extension.js +4 -0
  15. data/app/assets/javascripts/spree/frontend/plugins/jquery.mask.js +395 -0
  16. data/app/assets/javascripts/spree/frontend/routes.js.erb +4 -0
  17. data/app/assets/javascripts/spree/frontend/spree_br_common.js +1 -0
  18. data/app/assets/stylesheets/spree/backend/spree_br_common.css +4 -0
  19. data/app/assets/stylesheets/spree/frontend/spree_br_common.css +4 -0
  20. data/app/controllers/spree/addresses_controller.rb +24 -0
  21. data/app/controllers/spree/api/cities_controller.rb +38 -0
  22. data/app/controllers/spree/user_registrations_controller_decorator.rb +13 -0
  23. data/app/helpers/spree/api/api_helpers_decorator.rb +13 -0
  24. data/app/helpers/spree/base_helper_decorator.rb +5 -0
  25. data/app/models/spree/ability_decorator.rb +21 -0
  26. data/app/models/spree/address_decorator.rb +6 -0
  27. data/app/models/spree/city.rb +7 -0
  28. data/app/models/spree/permitted_attributes_decorator.rb +8 -0
  29. data/app/models/spree/state_decorator.rb +3 -0
  30. data/app/models/spree/user_decorator.rb +52 -0
  31. data/app/overrides/spree/address/_form/add_district.html.erb.deface +5 -0
  32. data/app/overrides/spree/address/_form/add_number.html.erb.deface +5 -0
  33. data/app/overrides/spree/address/_form/hide_country.html.erb.deface +4 -0
  34. data/app/overrides/spree/address/_form/move_city_to_after_state.deface +2 -0
  35. data/app/overrides/spree/address/_form/move_zipcode_after_last_name.deface +2 -0
  36. data/app/overrides/spree/address/_form/replace_city_input_text_by_select.html.erb.deface +18 -0
  37. data/app/overrides/spree/address/_form/set_data_uf_to_state.html.erb.deface +15 -0
  38. data/app/overrides/spree/admin/users/_form/add_extras_fields.html.erb.deface +39 -0
  39. data/app/overrides/spree/shared/_user_form/add_extra_fields.html.erb.deface +19 -0
  40. data/app/overrides/spree/users/show/add_details.html.erb.deface +13 -0
  41. data/app/views/spree/api/cities/index.v1.rabl +11 -0
  42. data/app/views/spree/api/cities/show.v1.rabl +2 -0
  43. data/bin/rails +7 -0
  44. data/config/locales/en.yml +11 -0
  45. data/config/locales/pt-BR.yml +14 -0
  46. data/config/routes.rb +7 -0
  47. data/db/default/country.rb +3 -0
  48. data/db/default/shipping_categories.rb +1 -0
  49. data/db/default/shipping_zones.rb +3 -0
  50. data/db/default/states.rb +31 -0
  51. data/db/default/states_cities_of_acre.rb +26 -0
  52. data/db/default/states_cities_of_alagoas.rb +107 -0
  53. data/db/default/states_cities_of_amapa.rb +20 -0
  54. data/db/default/states_cities_of_amazonas.rb +67 -0
  55. data/db/default/states_cities_of_bahia.rb +421 -0
  56. data/db/default/states_cities_of_ceara.rb +188 -0
  57. data/db/default/states_cities_of_distrito_federal.rb +5 -0
  58. data/db/default/states_cities_of_espirito_santo.rb +82 -0
  59. data/db/default/states_cities_of_goias.rb +250 -0
  60. data/db/default/states_cities_of_maranhao.rb +221 -0
  61. data/db/default/states_cities_of_mato_grosso.rb +145 -0
  62. data/db/default/states_cities_of_mato_grosso_do_sul.rb +82 -0
  63. data/db/default/states_cities_of_minas_gerais.rb +857 -0
  64. data/db/default/states_cities_of_para.rb +147 -0
  65. data/db/default/states_cities_of_paraiba.rb +227 -0
  66. data/db/default/states_cities_of_parana.rb +403 -0
  67. data/db/default/states_cities_of_pernambuco.rb +189 -0
  68. data/db/default/states_cities_of_piaui.rb +227 -0
  69. data/db/default/states_cities_of_rio_de_janeiro.rb +96 -0
  70. data/db/default/states_cities_of_rio_grande_do_norte.rb +171 -0
  71. data/db/default/states_cities_of_rio_grande_do_sul.rb +500 -0
  72. data/db/default/states_cities_of_rondonia.rb +56 -0
  73. data/db/default/states_cities_of_roraima.rb +19 -0
  74. data/db/default/states_cities_of_santa_catarina.rb +297 -0
  75. data/db/default/states_cities_of_sao_paulo.rb +649 -0
  76. data/db/default/states_cities_of_sergipe.rb +79 -0
  77. data/db/default/states_cities_of_tocantins.rb +144 -0
  78. data/db/default/stock.rb +1 -0
  79. data/db/default/tax_categories.rb +1 -0
  80. data/db/default/user.rb +100 -0
  81. data/db/migrate/20150503011715_create_spree_cities.rb +13 -0
  82. data/db/migrate/20150504004509_remove_city_from_spree_address.rb +5 -0
  83. data/db/migrate/20150504004648_add_city_to_spree_address.rb +5 -0
  84. data/db/migrate/20150505020218_add_number_and_district_to_spree_address.rb +6 -0
  85. data/db/migrate/20150505031019_add_details_to_spree_user.rb +10 -0
  86. data/db/seeds.rb +5 -0
  87. data/lib/generators/spree_br_common/install/install_generator.rb +31 -0
  88. data/lib/spree_br_common/engine.rb +20 -0
  89. data/lib/spree_br_common/factories/address_factory.rb +7 -0
  90. data/lib/spree_br_common/factories/city_factory.rb +8 -0
  91. data/lib/spree_br_common/factories/user_factory.rb +12 -0
  92. data/lib/spree_br_common/factories.rb +3 -0
  93. data/lib/spree_br_common.rb +2 -0
  94. data/spec/controllers/features/address_checkout_spec.rb +89 -0
  95. data/spec/controllers/features/user_account_spec.rb +46 -0
  96. data/spec/controllers/features/user_signup_spec.rb +24 -0
  97. data/spec/controllers/spree/addresses_controller_spec.rb +27 -0
  98. data/spec/controllers/spree/api/cities_controller_spec.rb +86 -0
  99. data/spec/fixtures/vcr_cassettes/Checkout/visitor_makes_checkout_as_guest_without_registration/full_checkout/does_not_break_the_per-item_shipping_method_calculator.yml +49 -0
  100. data/spec/fixtures/vcr_cassettes/Checkout/visitor_makes_checkout_as_guest_without_registration/full_checkout/in_Brazil/should_autocomplete_zipcode.yml +46 -0
  101. data/spec/fixtures/vcr_cassettes/Spree_AddressesController/_show/does_not_find_an_incorrect_cep.yml +38 -0
  102. data/spec/fixtures/vcr_cassettes/Spree_AddressesController/_show/shows_the_correct_address.yml +46 -0
  103. data/spec/models/spree/address_spec.rb +32 -0
  104. data/spec/models/spree/city_spec.rb +7 -0
  105. data/spec/models/spree/user_spec.rb +88 -0
  106. data/spec/spec_helper.rb +94 -0
  107. data/spec/support/controller_hacks.rb +33 -0
  108. data/spec/support/shared_context/checkout_setup.rb +9 -0
  109. data/spec/support/vcr.rb +8 -0
  110. data/spree_br_common.gemspec +33 -0
  111. metadata +351 -0
@@ -0,0 +1,79 @@
1
+ sergipe = Spree::State.find_by! abbr: 'SE'
2
+
3
+ Spree::City.create!([
4
+ {state: sergipe, ibge_code: 2801306, name: "Capela"},
5
+ {state: sergipe, ibge_code: 2802007, name: "Divina Pastora"},
6
+ {state: sergipe, ibge_code: 2806503, name: "Santa Rosa de Lima"},
7
+ {state: sergipe, ibge_code: 2803302, name: "Japaratuba"},
8
+ {state: sergipe, ibge_code: 2803401, name: "Japoatã"},
9
+ {state: sergipe, ibge_code: 2804904, name: "Pacatuba"},
10
+ {state: sergipe, ibge_code: 2805307, name: "Pirambu"},
11
+ {state: sergipe, ibge_code: 2806909, name: "São Francisco"},
12
+ {state: sergipe, ibge_code: 2803609, name: "Laranjeiras"},
13
+ {state: sergipe, ibge_code: 2804003, name: "Maruim"},
14
+ {state: sergipe, ibge_code: 2805901, name: "Riachuelo"},
15
+ {state: sergipe, ibge_code: 2804300, name: "Muribeca"},
16
+ {state: sergipe, ibge_code: 2807204, name: "Siriri"},
17
+ {state: sergipe, ibge_code: 2802601, name: "Gracho Cardoso"},
18
+ {state: sergipe, ibge_code: 2804607, name: "Nossa Senhora das Dores"},
19
+ {state: sergipe, ibge_code: 2805703, name: "Propriá"},
20
+ {state: sergipe, ibge_code: 2802502, name: "General Maynard"},
21
+ {state: sergipe, ibge_code: 2806305, name: "Santa Luzia do Itanhy"},
22
+ {state: sergipe, ibge_code: 2801504, name: "Carmópolis"},
23
+ {state: sergipe, ibge_code: 2806107, name: "Rosário do Catete"},
24
+ {state: sergipe, ibge_code: 2806701, name: "São Cristóvão"},
25
+ {state: sergipe, ibge_code: 2805109, name: "Pedrinhas"},
26
+ {state: sergipe, ibge_code: 2802106, name: "Estância"},
27
+ {state: sergipe, ibge_code: 2806602, name: "Santo Amaro das Brotas"},
28
+ {state: sergipe, ibge_code: 2800308, name: "Aracaju"},
29
+ {state: sergipe, ibge_code: 2800605, name: "Barra dos Coqueiros"},
30
+ {state: sergipe, ibge_code: 2804805, name: "Nossa Senhora do Socorro"},
31
+ {state: sergipe, ibge_code: 2800407, name: "Arauá"},
32
+ {state: sergipe, ibge_code: 2800670, name: "Boquim"},
33
+ {state: sergipe, ibge_code: 2801702, name: "Cristinápolis"},
34
+ {state: sergipe, ibge_code: 2803005, name: "Itabaianinha"},
35
+ {state: sergipe, ibge_code: 2806206, name: "Salgado"},
36
+ {state: sergipe, ibge_code: 2807501, name: "Tomar do Geru"},
37
+ {state: sergipe, ibge_code: 2807600, name: "Umbaúba"},
38
+ {state: sergipe, ibge_code: 2802809, name: "Indiaroba"},
39
+ {state: sergipe, ibge_code: 2803203, name: "Itaporanga d'Ajuda"},
40
+ {state: sergipe, ibge_code: 2801207, name: "Canindé de São Francisco"},
41
+ {state: sergipe, ibge_code: 2802205, name: "Feira Nova"},
42
+ {state: sergipe, ibge_code: 2802403, name: "Gararu"},
43
+ {state: sergipe, ibge_code: 2803104, name: "Itabi"},
44
+ {state: sergipe, ibge_code: 2804201, name: "Monte Alegre de Sergipe"},
45
+ {state: sergipe, ibge_code: 2804508, name: "Nossa Senhora da Glória"},
46
+ {state: sergipe, ibge_code: 2805406, name: "Poço Redondo"},
47
+ {state: sergipe, ibge_code: 2805604, name: "Porto da Folha"},
48
+ {state: sergipe, ibge_code: 2801405, name: "Carira"},
49
+ {state: sergipe, ibge_code: 2802304, name: "Frei Paulo"},
50
+ {state: sergipe, ibge_code: 2804458, name: "Nossa Senhora Aparecida"},
51
+ {state: sergipe, ibge_code: 2805000, name: "Pedra Mole"},
52
+ {state: sergipe, ibge_code: 2805208, name: "Pinhão"},
53
+ {state: sergipe, ibge_code: 2806008, name: "Ribeirópolis"},
54
+ {state: sergipe, ibge_code: 2800209, name: "Aquidabã"},
55
+ {state: sergipe, ibge_code: 2801900, name: "Cumbe"},
56
+ {state: sergipe, ibge_code: 2803807, name: "Malhada dos Bois"},
57
+ {state: sergipe, ibge_code: 2807006, name: "São Miguel do Aleixo"},
58
+ {state: sergipe, ibge_code: 2800506, name: "Areia Branca"},
59
+ {state: sergipe, ibge_code: 2801009, name: "Campo do Brito"},
60
+ {state: sergipe, ibge_code: 2802908, name: "Itabaiana"},
61
+ {state: sergipe, ibge_code: 2803708, name: "Macambira"},
62
+ {state: sergipe, ibge_code: 2803906, name: "Malhador"},
63
+ {state: sergipe, ibge_code: 2804102, name: "Moita Bonita"},
64
+ {state: sergipe, ibge_code: 2806800, name: "São Domingos"},
65
+ {state: sergipe, ibge_code: 2805505, name: "Poço Verde"},
66
+ {state: sergipe, ibge_code: 2807105, name: "Simão Dias"},
67
+ {state: sergipe, ibge_code: 2807402, name: "Tobias Barreto"},
68
+ {state: sergipe, ibge_code: 2803500, name: "Lagarto"},
69
+ {state: sergipe, ibge_code: 2805802, name: "Riachão do Dantas"},
70
+ {state: sergipe, ibge_code: 2800100, name: "Amparo de São Francisco"},
71
+ {state: sergipe, ibge_code: 2800704, name: "Brejo Grande"},
72
+ {state: sergipe, ibge_code: 2801108, name: "Canhoba"},
73
+ {state: sergipe, ibge_code: 2801603, name: "Cedro de São João"},
74
+ {state: sergipe, ibge_code: 2802700, name: "Ilha das Flores"},
75
+ {state: sergipe, ibge_code: 2804409, name: "Neópolis"},
76
+ {state: sergipe, ibge_code: 2804706, name: "Nossa Senhora de Lourdes"},
77
+ {state: sergipe, ibge_code: 2806404, name: "Santana do São Francisco"},
78
+ {state: sergipe, ibge_code: 2807303, name: "Telha"}
79
+ ])
@@ -0,0 +1,144 @@
1
+ tocantins = Spree::State.find_by! abbr: 'TO'
2
+
3
+ Spree::City.create!([
4
+ {state: tocantins, ibge_code: 1713957, name: "Muricilândia"},
5
+ {state: tocantins, ibge_code: 1715507, name: "Oliveira de Fátima"},
6
+ {state: tocantins, ibge_code: 1707009, name: "Dianópolis"},
7
+ {state: tocantins, ibge_code: 1706506, name: "Darcinópolis"},
8
+ {state: tocantins, ibge_code: 1721208, name: "Tocantinópolis"},
9
+ {state: tocantins, ibge_code: 1722081, name: "Wanderlândia"},
10
+ {state: tocantins, ibge_code: 1713700, name: "Monte Santo do Tocantins"},
11
+ {state: tocantins, ibge_code: 1707652, name: "Figueirópolis"},
12
+ {state: tocantins, ibge_code: 1721109, name: "Tocantínia"},
13
+ {state: tocantins, ibge_code: 1702703, name: "Aurora do Tocantins"},
14
+ {state: tocantins, ibge_code: 1718451, name: "Pugmil"},
15
+ {state: tocantins, ibge_code: 1700350, name: "Aliança do Tocantins"},
16
+ {state: tocantins, ibge_code: 1700707, name: "Alvorada"},
17
+ {state: tocantins, ibge_code: 1703701, name: "Brejinho de Nazaré"},
18
+ {state: tocantins, ibge_code: 1703867, name: "Cariri do Tocantins"},
19
+ {state: tocantins, ibge_code: 1709500, name: "Gurupi"},
20
+ {state: tocantins, ibge_code: 1711506, name: "Jaú do Tocantins"},
21
+ {state: tocantins, ibge_code: 1715754, name: "Palmeirópolis"},
22
+ {state: tocantins, ibge_code: 1716604, name: "Peixe"},
23
+ {state: tocantins, ibge_code: 1720259, name: "São Salvador do Tocantins"},
24
+ {state: tocantins, ibge_code: 1720853, name: "Sucupira"},
25
+ {state: tocantins, ibge_code: 1720978, name: "Talismã"},
26
+ {state: tocantins, ibge_code: 1701101, name: "Aparecida do Rio Negro"},
27
+ {state: tocantins, ibge_code: 1703305, name: "Bom Jesus do Tocantins"},
28
+ {state: tocantins, ibge_code: 1712009, name: "Lajeado"},
29
+ {state: tocantins, ibge_code: 1713601, name: "Monte do Carmo"},
30
+ {state: tocantins, ibge_code: 1716505, name: "Pedro Afonso"},
31
+ {state: tocantins, ibge_code: 1718881, name: "Santa Maria do Tocantins"},
32
+ {state: tocantins, ibge_code: 1720655, name: "Silvanópolis"},
33
+ {state: tocantins, ibge_code: 1721000, name: "Palmas"},
34
+ {state: tocantins, ibge_code: 1703842, name: "Campos Lindos"},
35
+ {state: tocantins, ibge_code: 1704105, name: "Centenário"},
36
+ {state: tocantins, ibge_code: 1709005, name: "Goiatins"},
37
+ {state: tocantins, ibge_code: 1710508, name: "Itacajá"},
38
+ {state: tocantins, ibge_code: 1711951, name: "Lagoa do Tocantins"},
39
+ {state: tocantins, ibge_code: 1712405, name: "Lizarda"},
40
+ {state: tocantins, ibge_code: 1712702, name: "Mateiros"},
41
+ {state: tocantins, ibge_code: 1715101, name: "Novo Acordo"},
42
+ {state: tocantins, ibge_code: 1718501, name: "Recursolândia"},
43
+ {state: tocantins, ibge_code: 1718758, name: "Rio Sono"},
44
+ {state: tocantins, ibge_code: 1719004, name: "Santa Tereza do Tocantins"},
45
+ {state: tocantins, ibge_code: 1720150, name: "São Félix do Tocantins"},
46
+ {state: tocantins, ibge_code: 1700400, name: "Almas"},
47
+ {state: tocantins, ibge_code: 1705102, name: "Chapada da Natividade"},
48
+ {state: tocantins, ibge_code: 1705557, name: "Combinado"},
49
+ {state: tocantins, ibge_code: 1712157, name: "Lavandeira"},
50
+ {state: tocantins, ibge_code: 1714203, name: "Natividade"},
51
+ {state: tocantins, ibge_code: 1715150, name: "Novo Alegre"},
52
+ {state: tocantins, ibge_code: 1715259, name: "Novo Jardim"},
53
+ {state: tocantins, ibge_code: 1717008, name: "Pindorama do Tocantins"},
54
+ {state: tocantins, ibge_code: 1717800, name: "Ponte Alta do Bom Jesus"},
55
+ {state: tocantins, ibge_code: 1718006, name: "Porto Alegre do Tocantins"},
56
+ {state: tocantins, ibge_code: 1718907, name: "Santa Rosa do Tocantins"},
57
+ {state: tocantins, ibge_code: 1720499, name: "São Valério da Natividade"},
58
+ {state: tocantins, ibge_code: 1720903, name: "Taguatinga"},
59
+ {state: tocantins, ibge_code: 1720937, name: "Taipas do Tocantins"},
60
+ {state: tocantins, ibge_code: 1700251, name: "Abreulândia"},
61
+ {state: tocantins, ibge_code: 1703602, name: "Brasilândia do Tocantins"},
62
+ {state: tocantins, ibge_code: 1709302, name: "Guaraí"},
63
+ {state: tocantins, ibge_code: 1713205, name: "Miracema do Tocantins"},
64
+ {state: tocantins, ibge_code: 1718709, name: "Rio dos Bois"},
65
+ {state: tocantins, ibge_code: 1706100, name: "Cristalândia"},
66
+ {state: tocantins, ibge_code: 1715002, name: "Nova Rosalândia"},
67
+ {state: tocantins, ibge_code: 1718840, name: "Sandolândia"},
68
+ {state: tocantins, ibge_code: 1706258, name: "Crixás do Tocantins"},
69
+ {state: tocantins, ibge_code: 1718659, name: "Rio da Conceição"},
70
+ {state: tocantins, ibge_code: 1718899, name: "Santa Rita do Tocantins"},
71
+ {state: tocantins, ibge_code: 1709807, name: "Ipueiras"},
72
+ {state: tocantins, ibge_code: 1718204, name: "Porto Nacional"},
73
+ {state: tocantins, ibge_code: 1703073, name: "Barra do Ouro"},
74
+ {state: tocantins, ibge_code: 1710904, name: "Itapiratins"},
75
+ {state: tocantins, ibge_code: 1717909, name: "Ponte Alta do Tocantins"},
76
+ {state: tocantins, ibge_code: 1702406, name: "Arraias"},
77
+ {state: tocantins, ibge_code: 1705607, name: "Conceição do Tocantins"},
78
+ {state: tocantins, ibge_code: 1716208, name: "Paranã"},
79
+ {state: tocantins, ibge_code: 1700301, name: "Aguiarnópolis"},
80
+ {state: tocantins, ibge_code: 1701002, name: "Ananás"},
81
+ {state: tocantins, ibge_code: 1701051, name: "Angico"},
82
+ {state: tocantins, ibge_code: 1702208, name: "Araguatins"},
83
+ {state: tocantins, ibge_code: 1702554, name: "Augustinópolis"},
84
+ {state: tocantins, ibge_code: 1702901, name: "Axixá do Tocantins"},
85
+ {state: tocantins, ibge_code: 1703800, name: "Buriti do Tocantins"},
86
+ {state: tocantins, ibge_code: 1703826, name: "Cachoeirinha"},
87
+ {state: tocantins, ibge_code: 1703891, name: "Carrasco Bonito"},
88
+ {state: tocantins, ibge_code: 1707405, name: "Esperantina"},
89
+ {state: tocantins, ibge_code: 1710706, name: "Itaguatins"},
90
+ {state: tocantins, ibge_code: 1712454, name: "Luzinópolis"},
91
+ {state: tocantins, ibge_code: 1712801, name: "Maurilândia do Tocantins"},
92
+ {state: tocantins, ibge_code: 1713809, name: "Palmeiras do Tocantins"},
93
+ {state: tocantins, ibge_code: 1714302, name: "Nazaré"},
94
+ {state: tocantins, ibge_code: 1718303, name: "Praia Norte"},
95
+ {state: tocantins, ibge_code: 1718550, name: "Riachinho"},
96
+ {state: tocantins, ibge_code: 1718808, name: "Sampaio"},
97
+ {state: tocantins, ibge_code: 1720002, name: "Santa Terezinha do Tocantins"},
98
+ {state: tocantins, ibge_code: 1720101, name: "São Bento do Tocantins"},
99
+ {state: tocantins, ibge_code: 1720200, name: "São Miguel do Tocantins"},
100
+ {state: tocantins, ibge_code: 1720309, name: "São Sebastião do Tocantins"},
101
+ {state: tocantins, ibge_code: 1720804, name: "Sítio Novo do Tocantins"},
102
+ {state: tocantins, ibge_code: 1701309, name: "Aragominas"},
103
+ {state: tocantins, ibge_code: 1702109, name: "Araguaína"},
104
+ {state: tocantins, ibge_code: 1702158, name: "Araguanã"},
105
+ {state: tocantins, ibge_code: 1702307, name: "Arapoema"},
106
+ {state: tocantins, ibge_code: 1703008, name: "Babaçulândia"},
107
+ {state: tocantins, ibge_code: 1703057, name: "Bandeirantes do Tocantins"},
108
+ {state: tocantins, ibge_code: 1703883, name: "Carmolândia"},
109
+ {state: tocantins, ibge_code: 1705508, name: "Colinas do Tocantins"},
110
+ {state: tocantins, ibge_code: 1707702, name: "Filadélfia"},
111
+ {state: tocantins, ibge_code: 1714880, name: "Nova Olinda"},
112
+ {state: tocantins, ibge_code: 1715705, name: "Palmeirante"},
113
+ {state: tocantins, ibge_code: 1716307, name: "Pau D'Arco"},
114
+ {state: tocantins, ibge_code: 1717206, name: "Piraquê"},
115
+ {state: tocantins, ibge_code: 1718865, name: "Santa Fé do Araguaia"},
116
+ {state: tocantins, ibge_code: 1722107, name: "Xambioá"},
117
+ {state: tocantins, ibge_code: 1701903, name: "Araguacema"},
118
+ {state: tocantins, ibge_code: 1703107, name: "Barrolândia"},
119
+ {state: tocantins, ibge_code: 1703206, name: "Bernardo Sayão"},
120
+ {state: tocantins, ibge_code: 1703909, name: "Caseara"},
121
+ {state: tocantins, ibge_code: 1706001, name: "Couto de Magalhães"},
122
+ {state: tocantins, ibge_code: 1707108, name: "Divinópolis do Tocantins"},
123
+ {state: tocantins, ibge_code: 1707207, name: "Dois Irmãos do Tocantins"},
124
+ {state: tocantins, ibge_code: 1708254, name: "Fortaleza do Tabocão"},
125
+ {state: tocantins, ibge_code: 1708304, name: "Goianorte"},
126
+ {state: tocantins, ibge_code: 1711100, name: "Itaporã do Tocantins"},
127
+ {state: tocantins, ibge_code: 1711803, name: "Juarina"},
128
+ {state: tocantins, ibge_code: 1712504, name: "Marianópolis do Tocantins"},
129
+ {state: tocantins, ibge_code: 1713304, name: "Miranorte"},
130
+ {state: tocantins, ibge_code: 1716653, name: "Pequizeiro"},
131
+ {state: tocantins, ibge_code: 1716703, name: "Colméia"},
132
+ {state: tocantins, ibge_code: 1718402, name: "Presidente Kennedy"},
133
+ {state: tocantins, ibge_code: 1721257, name: "Tupirama"},
134
+ {state: tocantins, ibge_code: 1721307, name: "Tupiratins"},
135
+ {state: tocantins, ibge_code: 1702000, name: "Araguaçu"},
136
+ {state: tocantins, ibge_code: 1704600, name: "Chapada de Areia"},
137
+ {state: tocantins, ibge_code: 1707306, name: "Dueré"},
138
+ {state: tocantins, ibge_code: 1707553, name: "Fátima"},
139
+ {state: tocantins, ibge_code: 1708205, name: "Formoso do Araguaia"},
140
+ {state: tocantins, ibge_code: 1711902, name: "Lagoa da Confusão"},
141
+ {state: tocantins, ibge_code: 1716109, name: "Paraíso do Tocantins"},
142
+ {state: tocantins, ibge_code: 1717503, name: "Pium"}
143
+ ])
144
+
@@ -0,0 +1 @@
1
+ Spree::StockLocation.create! name: 'Padrão', country: Spree::Country.first!
@@ -0,0 +1 @@
1
+ Spree::TaxCategory.create!(:name => 'Padrão', :description => 'Padrão', :is_default => true)
@@ -0,0 +1,100 @@
1
+ require 'highline/import'
2
+
3
+ # see last line where we create an admin if there is none, asking for email and password
4
+ def prompt_for_admin_password
5
+ if ENV['ADMIN_PASSWORD']
6
+ password = ENV['ADMIN_PASSWORD'].dup
7
+ say "Admin Password #{password}"
8
+ else
9
+ password = ask('Password [spree123]: ') do |q|
10
+ q.echo = false
11
+ q.validate = /^(|.{5,40})$/
12
+ q.responses[:not_valid] = 'Invalid password. Must be at least 5 characters long.'
13
+ q.whitespace = :strip
14
+ end
15
+ password = 'spree123' if password.blank?
16
+ end
17
+
18
+ password
19
+ end
20
+
21
+ def prompt_for_admin_field(field_description, var_env, default_value)
22
+
23
+ if ENV[var_env]
24
+ field = ENV[var_env].dup
25
+ say "Admin #{field_description} #{field}"
26
+ else
27
+ field = ask("#{field_description} [#{default_value}]: ") do |q|
28
+ q.echo = true
29
+ q.whitespace = :strip
30
+ end
31
+ field = default_value if field.blank?
32
+ end
33
+
34
+ field
35
+
36
+ end
37
+
38
+ def create_admin_user
39
+ attributes = {
40
+ :password => 'fulano',
41
+ :email => 'admin@bluesoft.com.br',
42
+ :first_name => 'admin',
43
+ :last_name => 'admin',
44
+ :phone => '11 12212122',
45
+ :date_of_birth => 22.years.ago,
46
+ :cpf => CPF.generate,
47
+ :password_confirmation => nil,
48
+ :login => nil
49
+ }
50
+
51
+ if ENV['AUTO_ACCEPT']
52
+ puts 'User will be created with the properties:'
53
+ puts attributes
54
+ else
55
+ puts 'Create the admin user (press enter for defaults).'
56
+ attributes = {
57
+ :email => prompt_for_admin_field('Email', 'ADMIN_EMAIL', 'spree@example.com'),
58
+ :password => prompt_for_admin_password,
59
+ :first_name => prompt_for_admin_field('First Name', 'ADMIN_FIRST_NAME', 'admin'),
60
+ :last_name => prompt_for_admin_field('Last Name', 'ADMIN_LAST_NAME', 'admin'),
61
+ :phone => prompt_for_admin_field('Phone', 'ADMIN_PHONE', '11 12212122'),
62
+ :date_of_birth => prompt_for_admin_field('Date Of Birth', 'ADMIN_DATE_OF_BIRTH', 22.years.ago),
63
+ :cpf => prompt_for_admin_field('CPF', 'ADMIN_CPF', CPF.generate)
64
+ }
65
+ end
66
+
67
+ attributes[:password_confirmation] = attributes[:password]
68
+ attributes[:login] = attributes[:email]
69
+
70
+ load 'spree/user.rb'
71
+
72
+ if Spree::User.find_by_email(attributes[:email])
73
+ say "\nWARNING: There is already a user with the email: #{attributes[:email]}, so no account changes were made. If you wish to create an additional admin user, please run rake spree_auth:admin:create again with a different email.\n\n"
74
+ else
75
+ admin = Spree::User.new(attributes)
76
+ if admin.save
77
+ role = Spree::Role.find_or_create_by(name: 'admin')
78
+ admin.spree_roles << role
79
+ admin.save
80
+ admin.generate_spree_api_key!
81
+ say "Done!"
82
+ else
83
+ say "There was some problems with persisting new admin user:"
84
+ admin.errors.full_messages.each do |error|
85
+ say error
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ if Spree::User.admin.empty?
92
+ create_admin_user
93
+ else
94
+ puts 'Admin user has already been previously created.'
95
+ if agree('Would you like to create a new admin user? (yes/no)')
96
+ create_admin_user
97
+ else
98
+ puts 'No admin user created.'
99
+ end
100
+ end
@@ -0,0 +1,13 @@
1
+ class CreateSpreeCities < ActiveRecord::Migration
2
+ def change
3
+ create_table :spree_cities do |t|
4
+ t.references :state
5
+ t.string :name
6
+ t.integer :ibge_code
7
+
8
+ t.timestamps
9
+ end
10
+
11
+ add_index :spree_cities, :state_id
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ class RemoveCityFromSpreeAddress < ActiveRecord::Migration
2
+ def change
3
+ remove_column :spree_addresses, :city
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddCityToSpreeAddress < ActiveRecord::Migration
2
+ def change
3
+ add_reference :spree_addresses, :city, index: true
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class AddNumberAndDistrictToSpreeAddress < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_addresses, :number, :integer
4
+ add_column :spree_addresses, :district, :string
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ class AddDetailsToSpreeUser < ActiveRecord::Migration
2
+ def change
3
+ unless defined?(User)
4
+ change_table :spree_users do |t|
5
+ t.string :first_name, :last_name, :cpf, :phone, :alternative_phone
6
+ t.datetime :date_of_birth
7
+ end
8
+ end
9
+ end
10
+ end
data/db/seeds.rb ADDED
@@ -0,0 +1,5 @@
1
+ # Loads seed data out of default dir
2
+ default_path = File.join(File.dirname(__FILE__), 'default')
3
+
4
+ Rake::Task['db:load_dir'].reenable
5
+ Rake::Task['db:load_dir'].invoke(default_path)
@@ -0,0 +1,31 @@
1
+ module SpreeBrCommon
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+
5
+ class_option :auto_run_migrations, :type => :boolean, :default => false
6
+
7
+ def add_javascripts
8
+ append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/spree_br_common\n"
9
+ append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/spree_br_common\n"
10
+ end
11
+
12
+ def add_stylesheets
13
+ inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require spree/frontend/spree_br_common\n", :before => /\*\//, :verbose => true
14
+ inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/spree_br_common\n", :before => /\*\//, :verbose => true
15
+ end
16
+
17
+ def add_migrations
18
+ run 'bundle exec rake railties:install:migrations FROM=spree_br_common'
19
+ end
20
+
21
+ def run_migrations
22
+ run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]')
23
+ if run_migrations
24
+ run 'bundle exec rake db:migrate'
25
+ else
26
+ puts 'Skipping rake db:migrate, don\'t forget to run it!'
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+ module SpreeBrCommon
2
+ class Engine < Rails::Engine
3
+ require 'spree/core'
4
+ isolate_namespace Spree
5
+ engine_name 'spree_br_common'
6
+
7
+ # use rspec for tests
8
+ config.generators do |g|
9
+ g.test_framework :rspec
10
+ end
11
+
12
+ def self.activate
13
+ Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
14
+ Rails.configuration.cache_classes ? require(c) : load(c)
15
+ end
16
+ end
17
+
18
+ config.to_prepare &method(:activate).to_proc
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ FactoryGirl.modify do
2
+ factory :address do
3
+ number 122
4
+ district 'Carville'
5
+ city {|address| address.association(:city)}
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ FactoryGirl.define do
2
+ factory :city, class: Spree::City do
3
+ name 'Ashville'
4
+ ibge_code 32323
5
+
6
+ state { |city| city.association(:state) }
7
+ end
8
+ end
@@ -0,0 +1,12 @@
1
+ require "cpf_cnpj"
2
+
3
+ FactoryGirl.modify do
4
+ factory :user do
5
+ first_name 'Diego'
6
+ last_name 'Domingues'
7
+ date_of_birth { 18.years.ago }
8
+ cpf CPF.generate.to_s
9
+ phone '11-12211221'
10
+ alternative_phone '11-12211221'
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ Dir["#{File.dirname(__FILE__)}/factories/**"].each do |f|
2
+ require File.expand_path(f)
3
+ end
@@ -0,0 +1,2 @@
1
+ require 'spree_core'
2
+ require 'spree_br_common/engine'
@@ -0,0 +1,89 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Checkout', type: :feature, inaccessible: true do
4
+ include_context 'checkout setup'
5
+
6
+ let!(:city) { create(:city, state: Spree::State.first!) }
7
+
8
+ context 'visitor makes checkout as guest without registration' do
9
+ before(:each) do
10
+ stock_location.stock_items.update_all(count_on_hand: 1)
11
+ end
12
+
13
+ context 'full checkout', :vcr do
14
+ before do
15
+ shipping_method.calculator.update!(preferred_amount: 10)
16
+ mug.shipping_category = shipping_method.shipping_categories.first
17
+ mug.save!
18
+ end
19
+
20
+ it 'does not break the per-item shipping method calculator', :js => true do
21
+ add_mug_to_cart
22
+ click_button 'Checkout'
23
+
24
+ fill_in 'order_email', :with => 'test@example.com'
25
+ click_button 'Continue'
26
+
27
+ fill_in_address
28
+ click_button 'Save and Continue'
29
+
30
+ expect(page).not_to have_content("undefined method `promotion'")
31
+ click_button 'Save and Continue'
32
+ expect(page).to have_content('Shipping total: $10.00')
33
+ end
34
+
35
+ context 'in Brazil' do
36
+ before do
37
+ brazil = create(:country, name: 'Brasil')
38
+ minas_gerais_state = create(:state, abbr: 'MG', name: 'Minas Gerais', country: brazil)
39
+ minas_gerais_city = create(:city, name: 'Minas Gerais', state: minas_gerais_state)
40
+ @sao_paulo_state = create(:state, abbr: 'SP', name: 'São Paulo', country: brazil)
41
+ @sao_paulo_city = create(:city, name: 'São Paulo', state: @sao_paulo_state)
42
+
43
+ Spree::Config[:default_country_id] = brazil.id
44
+ end
45
+
46
+ it 'should autocomplete zipcode', :js => true do
47
+ add_mug_to_cart
48
+ click_button 'Checkout'
49
+
50
+ fill_in 'order_email', :with => 'test@example.com'
51
+ click_button 'Continue'
52
+
53
+ address = 'order_bill_address_attributes'
54
+ fill_in "#{address}_zipcode", with: '04089000'
55
+
56
+ wait_for_ajax
57
+
58
+ expect(find_by_id("#{address}_address1").value).to eq('Alameda dos Maracatins')
59
+ expect(find_by_id("#{address}_district").value).to eq('Indianópolis')
60
+ expect(find_by_id("#{address}_state_id").value).to eq(@sao_paulo_state.id.to_s)
61
+ expect(find_by_id("#{address}_city_id").value).to eq(@sao_paulo_city.id.to_s)
62
+ end
63
+
64
+ after do
65
+ Spree::Config[:default_country_id] = nil
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ def fill_in_address
72
+ address = 'order_bill_address_attributes'
73
+ fill_in "#{address}_firstname", with: 'Ryan'
74
+ fill_in "#{address}_lastname", with: 'Bigg'
75
+ fill_in "#{address}_address1", with: 'Swan Street'
76
+ fill_in "#{address}_number", with: '143'
77
+ fill_in "#{address}_district", with: 'Carville'
78
+ select 'Alabama', from: "#{address}_state_id"
79
+ select city.name, from: "#{address}_city_id"
80
+ fill_in "#{address}_zipcode", with: '12345'
81
+ fill_in "#{address}_phone", with: '(555) 555-5555'
82
+ end
83
+
84
+ def add_mug_to_cart
85
+ visit spree.root_path
86
+ click_link mug.name
87
+ click_button 'add-to-cart-button'
88
+ end
89
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Accounts', type: :feature, inaccessible: true, js: true do
4
+ def login_as(user)
5
+ visit spree.login_path
6
+ fill_in 'Email', with: user.email
7
+ fill_in 'Password', with: user.password
8
+ click_button 'Login'
9
+ end
10
+
11
+ let(:user) { create(:user) }
12
+
13
+ before do
14
+ login_as(user)
15
+ end
16
+
17
+ context 'editing' do
18
+ scenario 'should rename user with success' do
19
+ Spree::Auth::Config.set(signout_after_password_change: false)
20
+ click_link 'My Account'
21
+
22
+ expect(page).to have_text user.email
23
+ click_link 'Edit'
24
+ fill_in 'First Name', with: 'Diego'
25
+ fill_in 'Last Name', with: 'Domingues'
26
+ fill_in Spree.t(:date_of_birth), with: 19.years.ago.strftime(Spree.t('date_picker.format', default: '%Y/%m/%d'))
27
+ click_button 'Update'
28
+
29
+ expect(page).to have_text 'Diego Domingues'
30
+ expect(page).to have_text 'Account updated'
31
+ end
32
+ end
33
+
34
+ context 'showing' do
35
+ scenario 'should show details of user' do
36
+ click_link 'My Account'
37
+
38
+ expect(page).to have_text user.full_name
39
+ expect(page).to have_text user.cpf_formatted
40
+ expect(page).to have_text user.phone
41
+ expect(page).to have_text user.alternative_phone if user.alternative_phone.present?
42
+ expect(page).to have_text user.date_of_birth.to_date
43
+ expect(page).to have_text user.email
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Sign Up', type: :feature, inaccessible: true do
4
+ context 'with valid data' do
5
+ scenario 'create a user with success', js: true do
6
+ visit spree.signup_path
7
+
8
+ fill_in Spree.t(:first_name), with: 'Carlos'
9
+ fill_in Spree.t(:last_name), with: 'Andrade'
10
+ fill_in Spree.t(:cpf), with: '53229124367'
11
+ fill_in Spree.t(:date_of_birth), with: 18.years.ago.strftime(Spree.t('date_picker.format', default: '%Y/%m/%d'))
12
+ fill_in Spree.t(:email), with: 'email@person.com'
13
+ fill_in Spree.t(:phone), with: '11 12211221'
14
+ fill_in Spree.t(:alternative_phone), with: '11 12211221'
15
+ fill_in Spree.t(:password), with: 'password'
16
+ fill_in 'Password Confirmation', with: 'password'
17
+
18
+ click_button 'Create'
19
+
20
+ expect(page).to have_text 'You have signed up successfully.'
21
+ expect(Spree::User.count).to eq(1)
22
+ end
23
+ end
24
+ end