gemgento 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +8 -0
  5. data/README.md +9 -0
  6. data/Rakefile +21 -0
  7. data/app/adapters/gemgento/magento/address_adapter.rb +37 -0
  8. data/app/adapters/gemgento/magento/customer_adapter.rb +24 -0
  9. data/app/adapters/gemgento/magento/line_item_adapter.rb +41 -0
  10. data/app/adapters/gemgento/magento/order_adapter.rb +97 -0
  11. data/app/adapters/gemgento/magento/order_status_adapter.rb +24 -0
  12. data/app/adapters/gemgento/magento/payment_adapter.rb +38 -0
  13. data/app/adapters/gemgento/magento/product_adapater.rb +24 -0
  14. data/app/adapters/gemgento/magento/quote_adapter.rb +17 -0
  15. data/app/adapters/gemgento/magento/shipment_adapter.rb +74 -0
  16. data/app/adapters/gemgento/magento/shipment_item_adapter.rb +39 -0
  17. data/app/adapters/gemgento/magento/shipment_track_adapter.rb +31 -0
  18. data/app/adapters/gemgento/magento_adapter.rb +17 -0
  19. data/app/assets/fonts/FuturaStd-Bold.otf +0 -0
  20. data/app/assets/fonts/FuturaStd-Book.otf +0 -0
  21. data/app/assets/fonts/FuturaStd-Light.otf +0 -0
  22. data/app/assets/fonts/FuturaStd-Medium.otf +0 -0
  23. data/app/assets/fonts/Verlag-Black.otf +0 -0
  24. data/app/assets/fonts/Verlag-BlackItalic.otf +0 -0
  25. data/app/assets/fonts/Verlag-Bold.otf +0 -0
  26. data/app/assets/fonts/Verlag-BoldItalic.otf +0 -0
  27. data/app/assets/fonts/Verlag-Book.otf +0 -0
  28. data/app/assets/fonts/Verlag-BookItalic-2.otf +0 -0
  29. data/app/assets/fonts/Verlag-BookItalic-3.otf +0 -0
  30. data/app/assets/fonts/Verlag-BookItalic.otf +0 -0
  31. data/app/assets/fonts/Verlag-Light.otf +0 -0
  32. data/app/assets/fonts/Verlag-LightItalic.otf +0 -0
  33. data/app/assets/fonts/Verlag-XLight.otf +0 -0
  34. data/app/assets/fonts/Verlag-XLightItalic.otf +0 -0
  35. data/app/assets/images/about_store.jpg +0 -0
  36. data/app/assets/images/gemgento-icon-bolt.png +0 -0
  37. data/app/assets/javascripts/gemgento/active_admin.js.coffee +42 -0
  38. data/app/assets/javascripts/gemgento/checkout/address.coffee +23 -0
  39. data/app/assets/javascripts/gemgento/gemgento.js +1 -0
  40. data/app/assets/javascripts/gemgento/global.js.coffee +31 -0
  41. data/app/assets/stylesheets/gemgento/active_admin.css.scss +549 -0
  42. data/app/assets/stylesheets/gemgento/default-views/_address.scss +11 -0
  43. data/app/assets/stylesheets/gemgento/default-views/_category.scss +54 -0
  44. data/app/assets/stylesheets/gemgento/default-views/_checkout.scss +28 -0
  45. data/app/assets/stylesheets/gemgento/default-views/_footer.scss +13 -0
  46. data/app/assets/stylesheets/gemgento/default-views/_form.scss +127 -0
  47. data/app/assets/stylesheets/gemgento/default-views/_header.scss +32 -0
  48. data/app/assets/stylesheets/gemgento/default-views/_layout.css.scss +157 -0
  49. data/app/assets/stylesheets/gemgento/default-views/_pages.css.scss +83 -0
  50. data/app/assets/stylesheets/gemgento/default-views/_product.scss +57 -0
  51. data/app/assets/stylesheets/gemgento/default-views/_shopping_bag.scss +87 -0
  52. data/app/assets/stylesheets/gemgento/default-views/_subheader.css.scss +30 -0
  53. data/app/assets/stylesheets/gemgento/default-views/application.css.scss +1 -0
  54. data/app/controllers/concerns/gemgento/api/v1/base.rb +15 -0
  55. data/app/controllers/concerns/gemgento/api/v1/product_filters.rb +33 -0
  56. data/app/controllers/gemgento/addresses_controller.rb +14 -0
  57. data/app/controllers/gemgento/api/v1/categories_controller.rb +13 -0
  58. data/app/controllers/gemgento/api/v1/products_controller.rb +23 -0
  59. data/app/controllers/gemgento/api/v1/search_controller.rb +14 -0
  60. data/app/controllers/gemgento/application_controller.rb +5 -0
  61. data/app/controllers/gemgento/cart_controller.rb +99 -0
  62. data/app/controllers/gemgento/categories_controller.rb +37 -0
  63. data/app/controllers/gemgento/checkout/address_controller.rb +48 -0
  64. data/app/controllers/gemgento/checkout/confirm_controller.rb +72 -0
  65. data/app/controllers/gemgento/checkout/coupons_controller.rb +42 -0
  66. data/app/controllers/gemgento/checkout/gift_card_controller.rb +39 -0
  67. data/app/controllers/gemgento/checkout/gift_controller.rb +32 -0
  68. data/app/controllers/gemgento/checkout/login_controller.rb +123 -0
  69. data/app/controllers/gemgento/checkout/payment_controller.rb +70 -0
  70. data/app/controllers/gemgento/checkout/paypal_controller.rb +23 -0
  71. data/app/controllers/gemgento/checkout/shipping_controller.rb +46 -0
  72. data/app/controllers/gemgento/checkout/shipping_payment_controller.rb +58 -0
  73. data/app/controllers/gemgento/checkout/thank_you_controller.rb +45 -0
  74. data/app/controllers/gemgento/checkout_controller.rb +120 -0
  75. data/app/controllers/gemgento/countries_controller.rb +17 -0
  76. data/app/controllers/gemgento/errors_controller.rb +7 -0
  77. data/app/controllers/gemgento/footer_items_controller.rb +16 -0
  78. data/app/controllers/gemgento/home_controller.rb +7 -0
  79. data/app/controllers/gemgento/magento/addresses_controller.rb +61 -0
  80. data/app/controllers/gemgento/magento/base_controller.rb +18 -0
  81. data/app/controllers/gemgento/magento/categories_controller.rb +103 -0
  82. data/app/controllers/gemgento/magento/email/sales/credit_memos_controller.rb +21 -0
  83. data/app/controllers/gemgento/magento/email/sales/invoices_controller.rb +21 -0
  84. data/app/controllers/gemgento/magento/email/sales/orders_controller.rb +20 -0
  85. data/app/controllers/gemgento/magento/email/sales/shipments_controller.rb +25 -0
  86. data/app/controllers/gemgento/magento/emails_controller.rb +11 -0
  87. data/app/controllers/gemgento/magento/inventory_controller.rb +30 -0
  88. data/app/controllers/gemgento/magento/orders_controller.rb +12 -0
  89. data/app/controllers/gemgento/magento/price_rules_controller.rb +22 -0
  90. data/app/controllers/gemgento/magento/product_attribute_sets_controller.rb +37 -0
  91. data/app/controllers/gemgento/magento/product_attributes_controller.rb +70 -0
  92. data/app/controllers/gemgento/magento/products_controller.rb +240 -0
  93. data/app/controllers/gemgento/magento/recurring_profiles_controller.rb +42 -0
  94. data/app/controllers/gemgento/magento/stores_controller.rb +21 -0
  95. data/app/controllers/gemgento/magento/user_groups_controller.rb +23 -0
  96. data/app/controllers/gemgento/magento/users_controller.rb +63 -0
  97. data/app/controllers/gemgento/order_export_controller.rb +21 -0
  98. data/app/controllers/gemgento/orders_controller.rb +12 -0
  99. data/app/controllers/gemgento/products_controller.rb +12 -0
  100. data/app/controllers/gemgento/regions_controller.rb +18 -0
  101. data/app/controllers/gemgento/search_controller.rb +16 -0
  102. data/app/controllers/gemgento/shipments_controller.rb +5 -0
  103. data/app/controllers/gemgento/stock_notifications_controller.rb +22 -0
  104. data/app/controllers/gemgento/subscribers_controller.rb +35 -0
  105. data/app/controllers/gemgento/sync_controller.rb +50 -0
  106. data/app/controllers/gemgento/user/addresses_controller.rb +79 -0
  107. data/app/controllers/gemgento/user/base_controller.rb +14 -0
  108. data/app/controllers/gemgento/user/home_controller.rb +9 -0
  109. data/app/controllers/gemgento/user/orders_controller.rb +17 -0
  110. data/app/controllers/gemgento/user/passwords_controller.rb +18 -0
  111. data/app/controllers/gemgento/user/recurring_profiles_controller.rb +31 -0
  112. data/app/controllers/gemgento/user/registration_session_controller.rb +103 -0
  113. data/app/controllers/gemgento/user/registrations_controller.rb +28 -0
  114. data/app/controllers/gemgento/user/saved_credit_cards_controller.rb +56 -0
  115. data/app/controllers/gemgento/user/sessions_controller.rb +50 -0
  116. data/app/controllers/gemgento/user/wishlist_items_controller.rb +55 -0
  117. data/app/controllers/gemgento/users_controller.rb +36 -0
  118. data/app/helpers/gemgento/application_helper.rb +125 -0
  119. data/app/helpers/gemgento/categories_helper.rb +39 -0
  120. data/app/helpers/gemgento/checkout/payment_helper.rb +5 -0
  121. data/app/helpers/gemgento/products_helper.rb +23 -0
  122. data/app/jobs/gemgento/import_job.rb +12 -0
  123. data/app/mailers/gemgento/sales_mailer.rb +80 -0
  124. data/app/models/admin_user.rb +7 -0
  125. data/app/models/concerns/gemgento/product_touches.rb +26 -0
  126. data/app/models/gemgento.rb +5 -0
  127. data/app/models/gemgento/adapter/sellect/customer.rb +34 -0
  128. data/app/models/gemgento/adapter/sellect/order.rb +378 -0
  129. data/app/models/gemgento/adapter/sellect/product.rb +250 -0
  130. data/app/models/gemgento/adapter/sellect_adapter.rb +16 -0
  131. data/app/models/gemgento/adapter/shopify/address.rb +40 -0
  132. data/app/models/gemgento/adapter/shopify/category.rb +51 -0
  133. data/app/models/gemgento/adapter/shopify/customer.rb +66 -0
  134. data/app/models/gemgento/adapter/shopify/order.rb +334 -0
  135. data/app/models/gemgento/adapter/shopify/product.rb +377 -0
  136. data/app/models/gemgento/adapter/shopify/product_category_position.rb +58 -0
  137. data/app/models/gemgento/adapter/shopify_adapter.rb +63 -0
  138. data/app/models/gemgento/address.rb +206 -0
  139. data/app/models/gemgento/api_job.rb +68 -0
  140. data/app/models/gemgento/asset.rb +185 -0
  141. data/app/models/gemgento/asset_file.rb +57 -0
  142. data/app/models/gemgento/asset_type.rb +8 -0
  143. data/app/models/gemgento/bundle.rb +5 -0
  144. data/app/models/gemgento/bundle/item.rb +17 -0
  145. data/app/models/gemgento/bundle/option.rb +20 -0
  146. data/app/models/gemgento/category.rb +235 -0
  147. data/app/models/gemgento/country.rb +21 -0
  148. data/app/models/gemgento/gift_message.rb +8 -0
  149. data/app/models/gemgento/image_import.rb +141 -0
  150. data/app/models/gemgento/import.rb +125 -0
  151. data/app/models/gemgento/inventory.rb +60 -0
  152. data/app/models/gemgento/inventory_import.rb +51 -0
  153. data/app/models/gemgento/line_item.rb +142 -0
  154. data/app/models/gemgento/line_item_option.rb +10 -0
  155. data/app/models/gemgento/magento_db.rb +35 -0
  156. data/app/models/gemgento/magento_response.rb +10 -0
  157. data/app/models/gemgento/order.rb +56 -0
  158. data/app/models/gemgento/order_status.rb +7 -0
  159. data/app/models/gemgento/payment.rb +50 -0
  160. data/app/models/gemgento/price_rule.rb +258 -0
  161. data/app/models/gemgento/price_tier.rb +36 -0
  162. data/app/models/gemgento/product.rb +607 -0
  163. data/app/models/gemgento/product_attribute.rb +48 -0
  164. data/app/models/gemgento/product_attribute_option.rb +39 -0
  165. data/app/models/gemgento/product_attribute_set.rb +22 -0
  166. data/app/models/gemgento/product_attribute_value.rb +26 -0
  167. data/app/models/gemgento/product_category.rb +34 -0
  168. data/app/models/gemgento/product_import.rb +359 -0
  169. data/app/models/gemgento/quote.rb +586 -0
  170. data/app/models/gemgento/recurring_profile.rb +28 -0
  171. data/app/models/gemgento/region.rb +14 -0
  172. data/app/models/gemgento/relation.rb +10 -0
  173. data/app/models/gemgento/relation_type.rb +7 -0
  174. data/app/models/gemgento/saved_credit_card.rb +45 -0
  175. data/app/models/gemgento/search.rb +14 -0
  176. data/app/models/gemgento/session.rb +49 -0
  177. data/app/models/gemgento/shipment.rb +38 -0
  178. data/app/models/gemgento/shipment_comment.rb +19 -0
  179. data/app/models/gemgento/shipment_item.rb +11 -0
  180. data/app/models/gemgento/shipment_track.rb +21 -0
  181. data/app/models/gemgento/stock_notification.rb +17 -0
  182. data/app/models/gemgento/store.rb +31 -0
  183. data/app/models/gemgento/store_tag.rb +8 -0
  184. data/app/models/gemgento/subscriber.rb +30 -0
  185. data/app/models/gemgento/swatch.rb +9 -0
  186. data/app/models/gemgento/sync.rb +134 -0
  187. data/app/models/gemgento/tag.rb +64 -0
  188. data/app/models/gemgento/user.rb +161 -0
  189. data/app/models/gemgento/user_group.rb +13 -0
  190. data/app/models/gemgento/wishlist_item.rb +11 -0
  191. data/app/services/gemgento/magento_api.rb +173 -0
  192. data/app/services/gemgento/price.rb +67 -0
  193. data/app/validators/gemgento/credit_card_validator.rb +50 -0
  194. data/app/validators/gemgento/image_import_validator.rb +100 -0
  195. data/app/validators/gemgento/inventory_import_validator.rb +73 -0
  196. data/app/validators/gemgento/inventory_validator.rb +14 -0
  197. data/app/validators/gemgento/product_import_validator.rb +163 -0
  198. data/app/views/admin/product_positions/_index.html.haml +14 -0
  199. data/app/views/devise/registrations/edit.haml +37 -0
  200. data/app/views/gemgento/addresses/_address.json.jbuilder +6 -0
  201. data/app/views/gemgento/addresses/region_options.html.haml +1 -0
  202. data/app/views/gemgento/api/v1/categories/_category.json.jbuilder +52 -0
  203. data/app/views/gemgento/api/v1/categories/index.json.jbuilder +8 -0
  204. data/app/views/gemgento/api/v1/categories/show.json.jbuilder +7 -0
  205. data/app/views/gemgento/api/v1/products/_attributes.json.jbuilder +9 -0
  206. data/app/views/gemgento/api/v1/products/_product.json.jbuilder +18 -0
  207. data/app/views/gemgento/api/v1/products/_relationships.json.jbuilder +48 -0
  208. data/app/views/gemgento/api/v1/products/index.json.jbuilder +8 -0
  209. data/app/views/gemgento/api/v1/products/show.json.jbuilder +7 -0
  210. data/app/views/gemgento/api/v1/search/index.json.jbuilder +8 -0
  211. data/app/views/gemgento/api/v1/search/show.json.jbuilder +8 -0
  212. data/app/views/gemgento/assets/_asset.json.jbuilder +13 -0
  213. data/app/views/gemgento/cart/show.html.haml +67 -0
  214. data/app/views/gemgento/categories/_category.json.jbuilder +9 -0
  215. data/app/views/gemgento/categories/_product_tile.html.haml +16 -0
  216. data/app/views/gemgento/categories/index.html.haml +10 -0
  217. data/app/views/gemgento/categories/index.json.jbuilder +1 -0
  218. data/app/views/gemgento/categories/show.html.haml +16 -0
  219. data/app/views/gemgento/categories/show.json.jbuilder +1 -0
  220. data/app/views/gemgento/checkout/_checkout_header.html.haml +17 -0
  221. data/app/views/gemgento/checkout/address/error.js.erb +1 -0
  222. data/app/views/gemgento/checkout/address/show.html.haml +88 -0
  223. data/app/views/gemgento/checkout/address/success.js.erb +1 -0
  224. data/app/views/gemgento/checkout/confirm/error.js.erb +0 -0
  225. data/app/views/gemgento/checkout/confirm/show.html.haml +60 -0
  226. data/app/views/gemgento/checkout/confirm/success.js.erb +1 -0
  227. data/app/views/gemgento/checkout/login/login_fail.js.erb +1 -0
  228. data/app/views/gemgento/checkout/login/login_guest_fail.js.erb +1 -0
  229. data/app/views/gemgento/checkout/login/login_guest_success.js.erb +1 -0
  230. data/app/views/gemgento/checkout/login/login_success.js.erb +1 -0
  231. data/app/views/gemgento/checkout/login/registration_fail.js.erb +1 -0
  232. data/app/views/gemgento/checkout/login/registration_success.js.erb +1 -0
  233. data/app/views/gemgento/checkout/login/show.html.haml +50 -0
  234. data/app/views/gemgento/checkout/payment/error.js.erb +1 -0
  235. data/app/views/gemgento/checkout/payment/show.html.haml +56 -0
  236. data/app/views/gemgento/checkout/payment/success.js.erb +1 -0
  237. data/app/views/gemgento/checkout/shipping/error.js.erb +0 -0
  238. data/app/views/gemgento/checkout/shipping/show.html.haml +26 -0
  239. data/app/views/gemgento/checkout/shipping/success.js.erb +1 -0
  240. data/app/views/gemgento/checkout/shipping_payment/show.haml +52 -0
  241. data/app/views/gemgento/checkout/thank_you/show.html.haml +6 -0
  242. data/app/views/gemgento/countries/_country.json.jbuilder +4 -0
  243. data/app/views/gemgento/countries/index.json.jbuilder +3 -0
  244. data/app/views/gemgento/countries/show.json.jbuilder +1 -0
  245. data/app/views/gemgento/home/index.html.haml +1 -0
  246. data/app/views/gemgento/order/add_item.js.erb +0 -0
  247. data/app/views/gemgento/order/no_inventory.js.erb +1 -0
  248. data/app/views/gemgento/order/remove_item.js.erb +0 -0
  249. data/app/views/gemgento/order/update_item.js.erb +0 -0
  250. data/app/views/gemgento/order_export/index.html.haml +2 -0
  251. data/app/views/gemgento/order_items/_order_item.json.jbuilder +7 -0
  252. data/app/views/gemgento/orders/_order.json.jbuilder +29 -0
  253. data/app/views/gemgento/products/_product.json.jbuilder +40 -0
  254. data/app/views/gemgento/products/index.html.haml +19 -0
  255. data/app/views/gemgento/products/show.html.haml +67 -0
  256. data/app/views/gemgento/products/show.json.jbuilder +1 -0
  257. data/app/views/gemgento/sales_mailer/credit_memo_email.html.haml +1 -0
  258. data/app/views/gemgento/sales_mailer/invoice_email.html.haml +1 -0
  259. data/app/views/gemgento/sales_mailer/order_email.html.haml +1 -0
  260. data/app/views/gemgento/sales_mailer/shipment_email.html.haml +1 -0
  261. data/app/views/gemgento/search/index.html.haml +8 -0
  262. data/app/views/gemgento/shared/_asset.json.jbuilder +35 -0
  263. data/app/views/gemgento/shared/_asset_file.json.jbuilder +19 -0
  264. data/app/views/gemgento/shared/_asset_type.json.jbuilder +13 -0
  265. data/app/views/gemgento/shared/_error_messages.haml +7 -0
  266. data/app/views/gemgento/shared/_flash_messages.haml +4 -0
  267. data/app/views/gemgento/shared/_footer.haml +7 -0
  268. data/app/views/gemgento/shared/_header.haml +23 -0
  269. data/app/views/gemgento/shared/_mini_bag.haml +36 -0
  270. data/app/views/gemgento/shared/_product_image.haml +8 -0
  271. data/app/views/gemgento/shipments/_shipment.json.jbuilder +12 -0
  272. data/app/views/gemgento/subscribers/create.js.erb +2 -0
  273. data/app/views/gemgento/subscribers/errors.js.erb +1 -0
  274. data/app/views/gemgento/user/_user.json.jbuilder +2 -0
  275. data/app/views/gemgento/user/addresses/_form.haml +39 -0
  276. data/app/views/gemgento/user/addresses/errors.js.erb +1 -0
  277. data/app/views/gemgento/user/addresses/index.haml +33 -0
  278. data/app/views/gemgento/user/addresses/new.haml +11 -0
  279. data/app/views/gemgento/user/addresses/success.js.erb +1 -0
  280. data/app/views/gemgento/user/confirmations/new.haml +9 -0
  281. data/app/views/gemgento/user/home/index.haml +8 -0
  282. data/app/views/gemgento/user/mailer/confirmation_instructions.html.erb +5 -0
  283. data/app/views/gemgento/user/mailer/reset_password_instructions.html.erb +8 -0
  284. data/app/views/gemgento/user/mailer/unlock_instructions.html.erb +7 -0
  285. data/app/views/gemgento/user/orders/index.html.haml +29 -0
  286. data/app/views/gemgento/user/orders/show.html.haml +87 -0
  287. data/app/views/gemgento/user/passwords/edit.html.erb +18 -0
  288. data/app/views/gemgento/user/passwords/new.html.haml +21 -0
  289. data/app/views/gemgento/user/registration_session/new.haml +67 -0
  290. data/app/views/gemgento/user/registrations/new.html.haml +28 -0
  291. data/app/views/gemgento/user/saved_credit_cards/_form.haml +69 -0
  292. data/app/views/gemgento/user/saved_credit_cards/index.haml +25 -0
  293. data/app/views/gemgento/user/saved_credit_cards/new.haml +13 -0
  294. data/app/views/gemgento/user/sessions/new.html.haml +29 -0
  295. data/app/views/gemgento/user/shared/_links.erb +25 -0
  296. data/app/views/gemgento/user/shared/_user_header.haml +8 -0
  297. data/app/views/gemgento/user/wishlist_items/index.html.haml +20 -0
  298. data/app/views/kaminari/_first_page.html.haml +9 -0
  299. data/app/views/kaminari/_gap.html.haml +8 -0
  300. data/app/views/kaminari/_last_page.html.haml +9 -0
  301. data/app/views/kaminari/_next_page.html.haml +9 -0
  302. data/app/views/kaminari/_page.html.haml +10 -0
  303. data/app/views/kaminari/_paginator.html.haml +18 -0
  304. data/app/views/kaminari/_prev_page.html.haml +9 -0
  305. data/app/views/layouts/_footer.html.haml +5 -0
  306. data/app/views/layouts/_header.html.haml +39 -0
  307. data/app/views/layouts/gemgento.html.haml +22 -0
  308. data/app/workers/gemgento/apply_price_rule.rb +24 -0
  309. data/app/workers/gemgento/cart/add_item_worker.rb +23 -0
  310. data/app/workers/gemgento/cart/update_item_worker.rb +18 -0
  311. data/bin/rails +12 -0
  312. data/config/gemgento_config.yml +12 -0
  313. data/config/initializers/active_admin.rb +14 -0
  314. data/config/initializers/active_touch.rb +3 -0
  315. data/config/initializers/assets.rb +1 -0
  316. data/config/initializers/boolean_typecasting.rb +37 -0
  317. data/config/initializers/devise.rb +49 -0
  318. data/config/initializers/gemgento_config.rb +67 -0
  319. data/config/initializers/mime_types.rb +4 -0
  320. data/config/initializers/state_machine.rb +7 -0
  321. data/config/locales/en.yml +24 -0
  322. data/config/routes.rb +138 -0
  323. data/db/migrate/20151201231300_add_validation_indexes_to_gemgento_products.rb +22 -0
  324. data/db/migrate/20160122174450_gemgento2.rb +969 -0
  325. data/db/migrate/20160217142910_create_gemgento_imports.rb +15 -0
  326. data/db/migrate/20160219235858_add_timestamps_to_gemgento_asset_files.rb +6 -0
  327. data/gemgento.gemspec +44 -0
  328. data/lib/devise/models/validatable.rb +76 -0
  329. data/lib/gemgento.rb +24 -0
  330. data/lib/gemgento/admin/admin_user.rb +29 -0
  331. data/lib/gemgento/admin/api_jobs.rb +30 -0
  332. data/lib/gemgento/admin/image_import.rb +87 -0
  333. data/lib/gemgento/admin/inventory_import.rb +81 -0
  334. data/lib/gemgento/admin/product_import.rb +138 -0
  335. data/lib/gemgento/admin/product_positions.rb +49 -0
  336. data/lib/gemgento/admin/stores.rb +33 -0
  337. data/lib/gemgento/admin/subscribers.rb +31 -0
  338. data/lib/gemgento/admin/syncs.rb +26 -0
  339. data/lib/gemgento/api/soap/authnetcim/payment.rb +127 -0
  340. data/lib/gemgento/api/soap/catalog/category.rb +237 -0
  341. data/lib/gemgento/api/soap/catalog/product.rb +481 -0
  342. data/lib/gemgento/api/soap/catalog/product_attribute.rb +147 -0
  343. data/lib/gemgento/api/soap/catalog/product_attribute_media.rb +202 -0
  344. data/lib/gemgento/api/soap/catalog/product_attribute_set.rb +80 -0
  345. data/lib/gemgento/api/soap/catalog/product_tag.rb +146 -0
  346. data/lib/gemgento/api/soap/catalog/product_tier_price.rb +21 -0
  347. data/lib/gemgento/api/soap/catalog/search.rb +27 -0
  348. data/lib/gemgento/api/soap/catalog_inventory/stock_item.rb +87 -0
  349. data/lib/gemgento/api/soap/catalog_rule/rule.rb +54 -0
  350. data/lib/gemgento/api/soap/checkout/cart.rb +85 -0
  351. data/lib/gemgento/api/soap/checkout/coupon.rb +37 -0
  352. data/lib/gemgento/api/soap/checkout/customer.rb +87 -0
  353. data/lib/gemgento/api/soap/checkout/payment.rb +59 -0
  354. data/lib/gemgento/api/soap/checkout/product.rb +138 -0
  355. data/lib/gemgento/api/soap/checkout/shipping.rb +37 -0
  356. data/lib/gemgento/api/soap/customer/address.rb +143 -0
  357. data/lib/gemgento/api/soap/customer/customer.rb +200 -0
  358. data/lib/gemgento/api/soap/directory/country.rb +49 -0
  359. data/lib/gemgento/api/soap/directory/region.rb +50 -0
  360. data/lib/gemgento/api/soap/enterprise_gift_message/gift_message.rb +26 -0
  361. data/lib/gemgento/api/soap/gift_card.rb +35 -0
  362. data/lib/gemgento/api/soap/globalcollect/saved_cc.rb +58 -0
  363. data/lib/gemgento/api/soap/miscellaneous/store.rb +47 -0
  364. data/lib/gemgento/api/soap/sales/order.rb +249 -0
  365. data/lib/gemgento/api/soap/sales/order_shipment.rb +122 -0
  366. data/lib/gemgento/api/soap/sales/recurring_profile.rb +88 -0
  367. data/lib/gemgento/api/soap/stock_notification.rb +27 -0
  368. data/lib/gemgento/engine.rb +61 -0
  369. data/lib/gemgento/version.rb +3 -0
  370. data/lib/generators/gemgento/assets_generator.rb +11 -0
  371. data/lib/generators/gemgento/install_generator.rb +34 -0
  372. data/lib/generators/gemgento/templates/active_admin.css.scss +1 -0
  373. data/lib/generators/gemgento/templates/active_admin.js.coffee +1 -0
  374. data/lib/generators/gemgento/templates/active_admin.rb +3 -0
  375. data/lib/generators/gemgento/views_generator.rb +10 -0
  376. data/spec/dummy/README.rdoc +28 -0
  377. data/spec/dummy/Rakefile +6 -0
  378. data/spec/dummy/app/assets/images/.keep +0 -0
  379. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  380. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  381. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  382. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  383. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  384. data/spec/dummy/app/mailers/.keep +0 -0
  385. data/spec/dummy/app/models/.keep +0 -0
  386. data/spec/dummy/app/models/concerns/.keep +0 -0
  387. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  388. data/spec/dummy/bin/bundle +3 -0
  389. data/spec/dummy/bin/rails +4 -0
  390. data/spec/dummy/bin/rake +4 -0
  391. data/spec/dummy/bin/setup +29 -0
  392. data/spec/dummy/config.ru +4 -0
  393. data/spec/dummy/config/application.rb +32 -0
  394. data/spec/dummy/config/boot.rb +5 -0
  395. data/spec/dummy/config/database.yml +20 -0
  396. data/spec/dummy/config/environment.rb +5 -0
  397. data/spec/dummy/config/environments/development.rb +41 -0
  398. data/spec/dummy/config/environments/production.rb +79 -0
  399. data/spec/dummy/config/environments/test.rb +42 -0
  400. data/spec/dummy/config/gemgento_config.yml +22 -0
  401. data/spec/dummy/config/initializers/assets.rb +11 -0
  402. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  403. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  404. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  405. data/spec/dummy/config/initializers/inflections.rb +16 -0
  406. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  407. data/spec/dummy/config/initializers/session_store.rb +3 -0
  408. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  409. data/spec/dummy/config/locales/en.yml +23 -0
  410. data/spec/dummy/config/routes.rb +4 -0
  411. data/spec/dummy/config/secrets.yml +22 -0
  412. data/spec/dummy/lib/assets/.keep +0 -0
  413. data/spec/dummy/public/404.html +67 -0
  414. data/spec/dummy/public/422.html +67 -0
  415. data/spec/dummy/public/500.html +66 -0
  416. data/spec/dummy/public/favicon.ico +0 -0
  417. data/spec/factories/gemgento/price_tiers.rb +8 -0
  418. data/spec/factories/gemgento/product_attribute_sets.rb +22 -0
  419. data/spec/factories/gemgento/product_attributes.rb +5 -0
  420. data/spec/factories/gemgento/products.rb +14 -0
  421. data/spec/factories/gemgento/stores.rb +12 -0
  422. data/spec/factories/gemgento/user_groups.rb +6 -0
  423. data/spec/factories/gemgento/users.rb +13 -0
  424. data/spec/factories/gemgento_imports.rb +12 -0
  425. data/spec/model/gemgento/price_tier_spec.rb +45 -0
  426. data/spec/rails_helper.rb +55 -0
  427. data/spec/services/gemgento/price_spec.rb +152 -0
  428. data/spec/spec_helper.rb +87 -0
  429. metadata +919 -0
@@ -0,0 +1,46 @@
1
+ module Gemgento
2
+ class Checkout::ShippingController < CheckoutController
3
+ respond_to :json, :html
4
+
5
+ before_action :redirect_to_payment_step, unless: -> { @quote.shipping_method_required? }
6
+
7
+ def show
8
+ initialize_shipping_variables
9
+
10
+ respond_to do |format|
11
+ format.html
12
+ format.json { render json: { quote: @quote, shipping_methods: @shipping_methods, totals: @quote.totals } }
13
+ end
14
+ end
15
+
16
+ def update
17
+ @quote.shipping_amount = @quote.get_shipping_amount(quote_params[:shipping_method], JSON.parse(cookies[:shipping_methods], symbolize_names: true))
18
+ @quote.push_shipping_method = true
19
+
20
+ respond_to do |format|
21
+ if @quote.update(quote_params)
22
+ format.html { redirect_to checkout_payment_path }
23
+ format.json { render json: { result: true, quote: @quote, totals: @quote.totals } }
24
+ else
25
+ initialize_shipping_variables
26
+ format.html { render action: :show }
27
+ format.json { render json: { result: false, errors: @quote.errors }, status: 422 }
28
+ end
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def quote_params
35
+ params.require(:quote).permit(:shipping_method)
36
+ end
37
+
38
+ def redirect_to_payment_step
39
+ respond_to do |format|
40
+ format.html { redirect_to checkout_payment_path }
41
+ format.json { render json: { quote: @quote, shipping_methods: [], totals: @quote.totals } }
42
+ end
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,58 @@
1
+ module Gemgento
2
+ class Checkout::ShippingPaymentController < CheckoutController
3
+ respond_to :json, :html
4
+
5
+ def show
6
+ initialize_shipping_variables
7
+ initialize_payment_variables
8
+
9
+ respond_to do |format|
10
+ format.html
11
+ format.json { render json: {
12
+ quote: @quote,
13
+ shipping_methods: @shipping_methods,
14
+ payment_methods: (@payment_methods || nil),
15
+ saved_credit_cards: @saved_credit_cards,
16
+ totals: @quote.totals
17
+ } }
18
+ end
19
+ end
20
+
21
+ def update
22
+ @quote.shipping_amount = @quote.get_shipping_amount(quote_params[:shipping_method], JSON.parse(cookies[:shipping_methods], symbolize_names: true))
23
+ @quote.push_shipping_method = true
24
+ @quote.push_payment_method = true
25
+
26
+ respond_to do |format|
27
+
28
+ if @quote.update(quote_params)
29
+ session[:payment_data] = quote_params[:payment_attributes]
30
+
31
+ if !@quote.payment.is_redirecting_payment_method?('payment_after')
32
+ format.html { redirect_to checkout_confirm_path }
33
+ format.json { render json: { result: true, order: @quote, totals: @quote.totals } }
34
+ else
35
+ format.html { redirect_to payment_after_redirect_url }
36
+ format.json { render json: { result: true, payment_redirect_url: payment_after_redirect_url } }
37
+ end
38
+
39
+ else
40
+ initialize_shipping_variables
41
+ initialize_payment_variables
42
+ format.html { render action: :show }
43
+ format.json { render json: { result: false, errors: @quote.errors }, status: 422 }
44
+ end
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def quote_params
51
+ params.require(:quote).permit(
52
+ :shipping_method,
53
+ payment_attributes: [:id, :method, :cc_cid, :cc_number, :cc_type, :cc_exp_year, :cc_exp_month, :cc_owner, :save_card, :payment_id]
54
+ )
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,45 @@
1
+ module Gemgento
2
+ class Checkout::ThankYouController < CheckoutController
3
+ skip_before_filter :set_quote
4
+ skip_before_filter :validate_item_quantity
5
+ skip_before_filter :validate_quote_user
6
+
7
+ before_action :set_quote
8
+
9
+ respond_to :json, :html
10
+
11
+ def show
12
+ @order = @quote.order
13
+
14
+ # load the new order from the quote or fetch from Magento if it's not present.
15
+ if @order.nil? && !session[:order_increment_id].nil?
16
+ begin
17
+ @order = Gemgento::OrderAdapter.find(session[:order_increment_id]).import
18
+ rescue Exception
19
+ if (retries ||= 0) <= 1
20
+ retries += 1
21
+ retry
22
+ end
23
+ end
24
+ end
25
+
26
+ session.delete :order_increment_id
27
+
28
+ # create a new quote
29
+ session.delete :quote
30
+ @current_quote = Gemgento::Quote.current(current_store, nil, current_user)
31
+
32
+ respond_with @order
33
+ end
34
+
35
+ private
36
+
37
+ def set_quote
38
+ if session[:quote]
39
+ @quote = Quote.find(session[:quote])
40
+ else
41
+ redirect_to '/'
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,120 @@
1
+ module Gemgento
2
+ class CheckoutController < ApplicationController
3
+
4
+ before_action :set_quote
5
+ before_action :validate_item_quantity
6
+ before_action :validate_quote_user
7
+
8
+ private
9
+
10
+ # Define current quote as instance variable.
11
+ #
12
+ # @return [Gemgento::Quote]
13
+ def set_quote
14
+ @quote = current_quote
15
+
16
+ if @quote.new_record?
17
+ respond_to do |format|
18
+ format.html { redirect_to cart_path, alert: 'Shopping cart is no longer valid. Please create a new order.' }
19
+ format.json { render json: { result: false, errors: 'Shopping cart is no longer valid. Please create a new order.' }, status: 422 }
20
+ end
21
+ end
22
+ end
23
+
24
+ # Cart must have a quantity greater than 0.
25
+ #
26
+ # @return [Boolean]
27
+ def validate_item_quantity
28
+
29
+ if @quote.item_quantity <= 0
30
+
31
+ respond_to do |format|
32
+ format.html { redirect_to cart_path, alert: 'You do not have any products in your cart.' }
33
+ format.json { render json: { result: false, errors: 'You do not have any products in your cart.' }, status: 422 }
34
+ end
35
+
36
+ return false
37
+ else
38
+ return true
39
+ end
40
+ end
41
+
42
+ # Cart must be associated with a user or marked as guest checkout.
43
+ #
44
+ # @return [Boolean]
45
+ def validate_quote_user
46
+
47
+ # if the user is not signed in and the cart is not a guest checkout, go to login
48
+ if !user_signed_in? && !(@quote.customer_is_guest && !@quote.customer_email.blank?)
49
+
50
+ respond_to do |format|
51
+ format.html { redirect_to checkout_login_path, alert: 'You must login or select guest checkout before continuing.' }
52
+ format.json { render json: { result: false, errors: 'You must login or select guest checkout before continuing.' }, status: 422 }
53
+ end
54
+
55
+ return false
56
+ else
57
+ return true
58
+ end
59
+ end
60
+
61
+ def build_billing_address
62
+ billing_address = current_user.default_billing_address if user_signed_in?
63
+ billing_address = billing_address.nil? ? Address.new : billing_address.duplicate
64
+ billing_address.is_billing = true
65
+ billing_address.is_shipping = false
66
+ billing_address.country = Gemgento::Country.find_by(iso2_code: 'us') unless billing_address.country.present?
67
+ @quote.build_billing_address(billing_address.attributes.reject{ |key| key == 'id' })
68
+ end
69
+
70
+ def build_shipping_address
71
+ shipping_address = current_user.default_shipping_address if user_signed_in?
72
+ shipping_address = shipping_address.nil? ? Address.new : shipping_address.duplicate
73
+ shipping_address.is_shipping = true
74
+ shipping_address.is_billing = false
75
+ shipping_address.country = Gemgento::Country.find_by(iso2_code: 'us') unless shipping_address.country.present?
76
+ @quote.build_shipping_address(shipping_address.attributes.reject{ |key| key == 'id' })
77
+ end
78
+
79
+ def get_magento_shipping_method
80
+ if cookies[:shipping_methods].nil?
81
+ shipping_methods = @quote.shipping_methods
82
+ else
83
+ shipping_methods = JSON.parse(cookies[:shipping_methods], symbolize_names: true)
84
+ end
85
+
86
+ shipping_methods.each do |shipping_method|
87
+ return shipping_method if shipping_method[:code] == @quote.shipping_method
88
+ end
89
+
90
+ return nil
91
+ end
92
+
93
+ def initialize_shipping_variables
94
+ @shipping_methods = @quote.shipping_methods || []
95
+ cookies[:shipping_methods] = @shipping_methods.to_json
96
+ end
97
+
98
+ def initialize_payment_variables
99
+ # @payment_methods = @quote.payment_methods
100
+ @quote.build_payment if @quote.payment.nil?
101
+
102
+ unless @quote.customer_is_guest
103
+ API::SOAP::Authnetcim::Payment.fetch(@quote.user) if Config[:extensions]['authorize-net-cim-payment-module']
104
+ @saved_credit_cards = @quote.user.saved_credit_cards
105
+ else
106
+ @saved_credit_cards = []
107
+ end
108
+ end
109
+
110
+ def payment_after_redirect_url
111
+ case @quote.payment.method
112
+ when 'paypal_express'
113
+ "#{Gemgento::Config[:magento][:url]}/paypal/express/start?quote_id=#{@quote.magento_id}&store_id=#{@quote.store.magento_id}#{("&customer_id=#{@quote.user.magento_id}" if @quote.user)}"
114
+ else
115
+ checkout_confirm_path
116
+ end
117
+ end
118
+
119
+ end
120
+ end
@@ -0,0 +1,17 @@
1
+ module Gemgento
2
+ class CountriesController < ApplicationController
3
+
4
+ respond_to :json, :html
5
+
6
+ def index
7
+ @countries = Country.all.includes(:regions)
8
+ respond_with @countries
9
+ end
10
+
11
+ def show
12
+ @country = Country.find(params[:id])
13
+ respond_with @country
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ module Gemgento
2
+ class ErrorsController < ApplicationController
3
+ def generic
4
+ raise '500 generic error'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ module Gemgento
2
+ class FooterLinksController < ApplicationController
3
+
4
+ def index
5
+
6
+ end
7
+
8
+ def show
9
+
10
+ end
11
+
12
+ def destroy
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ module Gemgento
2
+ class HomeController < ApplicationController
3
+ def index
4
+ end
5
+ end
6
+ end
7
+
@@ -0,0 +1,61 @@
1
+ module Gemgento
2
+ module Magento
3
+ class AddressesController < Gemgento::Magento::BaseController
4
+
5
+ before_action :skip_callbacks
6
+ after_action :set_callbacks
7
+
8
+ def update
9
+ data = params[:data]
10
+ @user = User.find_by(magento_id: data[:customer_id])
11
+
12
+ unless @user.nil?
13
+ @address = Address.find_or_initialize_by(magento_id: data[:entity_id], addressable_type: 'Gemgento::User')
14
+ @address.addressable = @user
15
+ @address.city = data[:city]
16
+ @address.company = data[:company]
17
+ @address.country = Country.where(magento_id: data[:country_id]).first
18
+ @address.fax = data[:fax]
19
+ @address.first_name = data[:firstname]
20
+ @address.middle_name = data[:middlename]
21
+ @address.last_name = data[:lastname]
22
+ @address.postcode = data[:postcode]
23
+ @address.prefix = data[:prefix]
24
+ @address.region_name = data[:region]
25
+ @address.region = Region.where(magento_id: data[:region_id]).first
26
+ @address.street = data[:street]
27
+ @address.suffix = data[:suffix]
28
+ @address.telephone = data[:telephone]
29
+ @address.is_billing = data[:is_default_billing]
30
+ @address.is_shipping = data[:is_default_shipping]
31
+ @address.sync_needed = false
32
+ @address.save
33
+ end
34
+
35
+ render nothing: true
36
+ end
37
+
38
+ def destroy
39
+ @address = Address.find_by(magento_id: params[:id], addressable_type: 'Gemgento::User')
40
+ @address.destroy unless @address.nil?
41
+
42
+ render nothing: true
43
+ end
44
+
45
+ private
46
+
47
+ def skip_callbacks
48
+ Address.skip_callback(:create, :before, :create_magento_address)
49
+ Address.skip_callback(:update, :before, :update_magento_address)
50
+ Address.skip_callback(:destroy, :before, :destroy_magento_address)
51
+ end
52
+
53
+ def set_callbacks
54
+ Address.set_callback(:create, :before, :create_magento_address)
55
+ Address.set_callback(:update, :before, :update_magento_address)
56
+ Address.set_callback(:destroy, :before, :destroy_magento_address)
57
+ end
58
+
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,18 @@
1
+ module Gemgento
2
+ module Magento
3
+ class BaseController < Gemgento::ApplicationController
4
+
5
+ skip_before_action :verify_authenticity_token
6
+ before_filter :validate_ip
7
+
8
+ def validate_ip
9
+ whitelist = Config[:magento][:ip_whitelist].to_s.split(',').map(&:strip)
10
+
11
+ if Rails.env.production? && !whitelist.include?(request.remote_ip.to_s)
12
+ raise ActionController::RoutingError.new('Not Found')
13
+ end
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,103 @@
1
+ module Gemgento
2
+ module Magento
3
+ class CategoriesController < Gemgento::Magento::BaseController
4
+
5
+ def update
6
+ @category = Category.find_or_initialize_by(magento_id: params[:id])
7
+ data = params[:data]
8
+
9
+ @category.magento_id = data[:category_id]
10
+ @category.is_active = data[:is_active].to_i == 1 ? true : false
11
+ @category.position = data[:position]
12
+ @category.parent = Category.find_by(magento_id: data[:parent_id]) unless data[:parent_id].nil?
13
+ @category.name = data[:name]
14
+ @category.url_key = data[:url_key]
15
+ @category.include_in_menu = data[:include_in_menu]
16
+ @category.sync_needed = false
17
+
18
+ if data.key? :image
19
+ begin
20
+ @category.image = magento_image(data[:image][:value])
21
+ rescue
22
+ @category.image = nil
23
+ end
24
+ end
25
+
26
+ @category.save
27
+
28
+ set_stores(data[:store_ids], @category)
29
+ set_products(data[:products], @category) unless data[:products].nil?
30
+
31
+ render nothing: true
32
+ end
33
+
34
+ def destroy
35
+ @category = Category.find_by(magento_id: params[:id])
36
+
37
+ unless @category.nil?
38
+ @category.children.each do |category|
39
+ category.mark_deleted!
40
+ end
41
+
42
+ @category.mark_deleted!
43
+ end
44
+
45
+ render nothing: true
46
+ end
47
+
48
+ private
49
+
50
+ def set_stores(magento_store_ids, category)
51
+ category.stores.clear
52
+
53
+ magento_store_ids.each do |magento_id|
54
+ next if magento_id.to_i == 0 # 0 is the admin store which is not used in Gemgento
55
+ category.stores << Store.find_by(magento_id: magento_id)
56
+ end
57
+
58
+ category.save
59
+ end
60
+
61
+ def set_products(stores_products, category)
62
+ stores_products.each do |store_id, products|
63
+ next if store_id.to_i == 0 # 0 is the admin store which is not used in Gemgento
64
+ store = Store.find_by(magento_id: store_id)
65
+
66
+ if products.nil?
67
+ ProductCategory.where(store_id: store.id, category_id: category.id).destroy_all
68
+ else
69
+ product_category_ids = []
70
+ product_ids = products.map { |p| p[:product_id] }
71
+
72
+ Product.where(magento_id: product_ids).each do |product|
73
+ pairing = ProductCategory.find_or_initialize_by(category: category, product: product, store: store)
74
+ item = products.select { |p| p[:product_id].to_i == product.magento_id }.first
75
+ pairing.position = item[:position].is_a?(Array) ? item[:position].first : item[:position]
76
+ pairing.store = store
77
+ pairing.sync_needed = false
78
+ pairing.save!
79
+
80
+ product_category_ids << pairing.id
81
+ end
82
+
83
+ ProductCategory.where(store: store, category: category).where.not(id: product_category_ids).destroy_all
84
+ end
85
+ end
86
+ end
87
+
88
+ def magento_image(file_name)
89
+ url = "#{Gemgento::Config[:magento][:url]}/media/catalog/category/#{file_name}"
90
+
91
+ if Gemgento::Config[:magento][:auth_username].blank?
92
+ open(url)
93
+ else
94
+ open(url,
95
+ http_basic_authentication:
96
+ [ Gemgento::Config[:magento][:auth_username], Gemgento::Config[:magento][:auth_password] ]
97
+ )
98
+ end
99
+ end
100
+
101
+ end
102
+ end
103
+ end