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,9 @@
1
+ module Gemgento
2
+ class User::HomeController < User::BaseController
3
+
4
+ def index
5
+
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ module Gemgento
2
+ class User::OrdersController < User::BaseController
3
+
4
+ def index
5
+ @orders = current_user.orders.where.not(status: [nil, '']).order('created_at DESC')
6
+
7
+ respond_with @orders
8
+ end
9
+
10
+ def show
11
+ @order = Order.find_by(increment_id: params[:id], user: current_user)
12
+
13
+ respond_with @order
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ module Gemgento
2
+ class User::PasswordsController < Devise::PasswordsController
3
+
4
+ protected
5
+
6
+ # The path used after sending reset password instructions
7
+ def after_sending_reset_password_instructions_path_for(resource_name)
8
+ if is_navigational_format?
9
+ if Config[:combined_shipping_payment]
10
+ user_new_login_path
11
+ else
12
+ new_session_path(resource_name)
13
+ end
14
+ end
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,31 @@
1
+ module Gemgento
2
+ class User::RecurringProfilesController < User::BaseController
3
+
4
+ def index
5
+ @recurring_profile = RecurringProfile.where(user: current_user)
6
+ end
7
+
8
+ def destroy
9
+ recurring_profile = RecurringProfile.find_by!(id: params[:id], user: current_user)
10
+
11
+ respond_to do |format|
12
+ result = recurring_profile.change_state('cancel')
13
+
14
+ if result == true
15
+ format.json { render json: { status: true } }
16
+ format.html do
17
+ flash[:notice] = 'The recurring profile has been canceled.'
18
+ redirect_to action: 'index'
19
+ end
20
+ else
21
+ format.json { render json: { errors: result }, status: 422 }
22
+ format.html do
23
+ flash[:warning] = result
24
+ redirect_to action: 'index'
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,103 @@
1
+ module Gemgento
2
+ class User::RegistrationSessionController < User::BaseController
3
+ prepend_before_filter :require_no_authentication
4
+
5
+ skip_before_filter :auth_user
6
+ before_filter :set_user_instances
7
+
8
+ respond_to :json, :html
9
+
10
+ def new
11
+ @existing_user = User.new
12
+ @new_user = User.new
13
+ end
14
+
15
+ def create
16
+ case params[:activity]
17
+ when 'sign_in'
18
+ create_session
19
+ when 'register'
20
+ create_registration
21
+ else
22
+ raise "Unknown action - #{params[:activity]}"
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def set_user_instances
29
+ @existing_user = User.new
30
+ @new_user = User.new
31
+ end
32
+
33
+ def create_session
34
+ @existing_user = User::is_valid_login(user_session_params[:email], user_session_params[:password])
35
+ result = false
36
+
37
+ unless @existing_user.nil?
38
+ sign_in(:user, @existing_user)
39
+ result = true
40
+ end
41
+
42
+ respond_to do |format|
43
+ if result
44
+ format.html { redirect_to after_sign_in_path }
45
+ format.json { render json: { result: true, user: current_user } }
46
+ else
47
+ @existing_user = User.new(email: user_session_params[:email])
48
+ flash.keep[:error] = 'Invalid username and password'
49
+
50
+ format.html { render 'new' }
51
+ format.json do
52
+ render json: {
53
+ result: false,
54
+ errors: 'Invalid username and password',
55
+ }
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ def create_registration
62
+ @new_user = User.new(user_registration_params)
63
+ @new_user.stores << current_store
64
+ @new_user.user_group = UserGroup.where(code: 'General').first
65
+
66
+ respond_to do |format|
67
+ if @new_user.save
68
+ sign_in(:user, @new_user)
69
+ Subscriber.add_user(@new_user) if params[:subscribe]
70
+
71
+ format.html { redirect_to after_register_path }
72
+ format.json { render json: { result: true, user: @new_user, order: current_quote } }
73
+ else
74
+ format.html { render 'new' }
75
+ format.json { render json: { result: false, errors: @new_user.errors.full_messages, order: current_quote } }
76
+ end
77
+ end
78
+ end
79
+
80
+ def user_session_params
81
+ params.require(:user).permit(:email, :password)
82
+ end
83
+
84
+ def user_registration_params
85
+ params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
86
+ end
87
+
88
+ def after_sign_in_path
89
+ session[:return_to] || edit_user_registration_path
90
+ end
91
+
92
+ def after_register_path
93
+ session[:return_to] || edit_user_registration_path
94
+ end
95
+
96
+ def require_no_authentication
97
+ if user_signed_in?
98
+ redirect_to after_sign_in_path, alert: 'Already signed in.'
99
+ end
100
+ end
101
+
102
+ end
103
+ end
@@ -0,0 +1,28 @@
1
+ module Gemgento
2
+ class User::RegistrationsController < Devise::RegistrationsController
3
+ # POST /resource
4
+ def create
5
+ build_resource(sign_up_params)
6
+ resource.stores << current_store unless resource.stores.include? current_store
7
+ resource.user_group = UserGroup.find_by(code: 'General')
8
+ resource.sync_needed = true
9
+
10
+ if resource.save
11
+ yield resource if block_given?
12
+ if resource.active_for_authentication?
13
+ set_flash_message :notice, :signed_up if is_flashing_format?
14
+ sign_up(resource_name, resource)
15
+ respond_with resource, location: after_sign_up_path_for(resource)
16
+ else
17
+ set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format?
18
+ expire_data_after_sign_in!
19
+ respond_with resource, location: after_inactive_sign_up_path_for(resource)
20
+ end
21
+ else
22
+ clean_up_passwords resource
23
+ respond_with resource
24
+ end
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,56 @@
1
+ module Gemgento
2
+ class User::SavedCreditCardsController < User::BaseController
3
+
4
+ def index
5
+ @saved_credit_cards = current_user.saved_credit_cards
6
+ end
7
+
8
+ def new
9
+ @saved_credit_card = SavedCreditCard.new(user: current_user)
10
+ @saved_credit_card.build_address(country: Gemgento::Country.find_by(iso2_code: 'us'))
11
+ end
12
+
13
+ def create
14
+ @saved_credit_card = SavedCreditCard.new(saved_credit_card_params)
15
+ @saved_credit_card.user = current_user
16
+
17
+ respond_to do |format|
18
+ if @saved_credit_card.save
19
+ format.html { redirect_to user_saved_credit_cards_path, notice: 'Saved credit card successfully created.' }
20
+ format.json { render json: { result: true } }
21
+ else
22
+ format.html { render 'new' }
23
+ format.json { render json: { result: false, errors: @saved_credit_card.errors.full_messages }, status: 422 }
24
+ end
25
+ end
26
+ end
27
+
28
+ def destroy
29
+ @saved_credit_card = SavedCreditCard.find_by(user: current_user, id: params[:id])
30
+
31
+ respond_to do |format|
32
+ if @saved_credit_card.destroy
33
+ format.html { redirect_to user_saved_credit_cards_path, notice: 'Saved credit card successfully destroyed.' }
34
+ format.json { render json: { result: true } }
35
+ else
36
+ format.html { redirect_to user_saved_credit_cards_path, alert: 'Saved credit card could not be destroyed.' }
37
+ format.json { render json: { result: false, errors: @saved_credit_card.errors.full_messages }, status: 422 }
38
+ end
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def saved_credit_card_params
45
+ params.require(:saved_credit_card).permit(
46
+ :id, :cc_type, :cc_number, :exp_month, :exp_year, :cc_cid,
47
+ address_attributes:
48
+ [
49
+ :id, :first_name, :last_name, :address1, :address2, :country_id, :city, :region_id, :postcode,
50
+ :telephone
51
+ ],
52
+ )
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,50 @@
1
+ module Gemgento
2
+ class User::SessionsController < Devise::SessionsController
3
+ respond_to :html, :json
4
+ prepend_before_filter :convert_magento_password, only: :create
5
+
6
+ # POST /resource/sign_in
7
+ def create
8
+ self.resource = warden.authenticate!(auth_options)
9
+ set_flash_message(:notice, :signed_in) if is_flashing_format?
10
+ sign_in(resource_name, resource)
11
+ yield resource if block_given?
12
+
13
+ respond_to do |format|
14
+ format.html { respond_with resource, location: after_sign_in_path_for(resource) }
15
+ format.json do
16
+ render json: {
17
+ result: true,
18
+ user: resource,
19
+ csrfParam: request_forgery_protection_token,
20
+ csrfToken: form_authenticity_token
21
+ }
22
+ end
23
+ end
24
+ end
25
+
26
+ # DELETE /resource/sign_out
27
+ def destroy
28
+ redirect_path = after_sign_out_path_for(resource_name)
29
+ signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
30
+ set_flash_message :notice, :signed_out if signed_out && is_navigational_format?
31
+
32
+ # reset the current quote when user logs out, the current quotes persists between user sessions.
33
+ current_quote.reset unless current_quote.new_record?
34
+
35
+ # We actually need to hardcode this as Rails default responder doesn't
36
+ # support returning empty response on GET request
37
+ respond_to do |format|
38
+ format.all { head :no_content }
39
+ format.any(*navigational_formats) { redirect_to redirect_path }
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def convert_magento_password
46
+ User.is_valid_login params[:user][:email], params[:user][:password]
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,55 @@
1
+ module Gemgento
2
+ class User::WishlistItemsController < User::BaseController
3
+ prepend_before_action :set_return_to
4
+
5
+ before_action :authenticate_user!
6
+
7
+ def index
8
+ @wishlist_items = current_user.wishlist_items
9
+ respond_with @wishlist_items
10
+ end
11
+
12
+ def create
13
+ @wishlist_item = current_user.wishlist_items.new(wishlist_item_params)
14
+
15
+ respond_to do |format|
16
+ if @wishlist_item.save
17
+ format.html { redirect_to user_wishlist_items_path, notice: "Item sucessfully added to wishlist." }
18
+ format.json { render json: { result: true, wishlist_item: @wishlist_item } }
19
+ else
20
+ format.html { redirect_to user_wishlist_items_path }
21
+ format.json { render json: { result: false, errors: @wishlist_item.errors.full_messages } }
22
+ end
23
+ end
24
+ end
25
+
26
+ def destroy
27
+ @wishlist_item = current_user.wishlist_items.find(params[:id])
28
+
29
+ respond_to do |format|
30
+ if @wishlist_item.destroy
31
+ format.html { redirect_to user_wishlist_items_path , notice: "Wishlist item removed." }
32
+ format.json { render json: { result: true } }
33
+ else
34
+ format.html { render user_wishlist_items_path, alert: 'Unable to remove item from wishlist' }
35
+ format.json { render json: { result: false, errors: @wishlist_item.errors.full_messages } }
36
+ end
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def set_return_to
43
+ if user_signed_in?
44
+ session.delete(:return_to)
45
+ elsif params[:wishlist_item]
46
+ return_params = { wishlist_item: params[:wishlist_item] }.to_query
47
+ session[:return_to] = "#{request.fullpath}/add?#{return_params}"
48
+ end
49
+ end
50
+
51
+ def wishlist_item_params
52
+ params.require(:wishlist_item).permit(:product_id)
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,36 @@
1
+ module Gemgento
2
+ class UsersController < ApplicationController
3
+ before_filter :auth_user, except: [:update, :index]
4
+
5
+ respond_to :json, :html
6
+
7
+ def index
8
+ @user = current_user
9
+
10
+ respond_to do |format|
11
+ format.html
12
+ format.json { render json: @user.as_json({ store: current_store }) }
13
+ end
14
+ end
15
+
16
+ def show
17
+ @user = current_user
18
+
19
+ respond_to do |format|
20
+ format.html
21
+ format.json { render json: @user.as_json({ store: current_store }) }
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def auth_user
28
+ redirect_to new_user_session_path unless user_signed_in?
29
+ end
30
+
31
+ def user_params
32
+ params.require(:user).permit(:first_name, :last_name, :email, :middle_name, :prefix, :suffix, :password, :password_confirmation)
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,125 @@
1
+ module Gemgento
2
+ module ApplicationHelper
3
+
4
+ def set_store
5
+ session[:store_id] = Store.current.id if session[:store_id].nil?
6
+ end
7
+
8
+ def current_store
9
+ @current_store ||= begin
10
+ if session[:store_id].nil?
11
+ Store.current
12
+ else
13
+ Store.find(session[:store_id])
14
+ end
15
+ end
16
+ end
17
+
18
+ def current_quote
19
+ @current_quote ||= Quote.current(current_store, session[:quote], current_user) if @current_quote.nil?
20
+ session[:quote] = @current_quote.id
21
+ return @current_quote
22
+ end
23
+
24
+ def current_category
25
+ @current_category ||= begin
26
+ if @category
27
+ @category
28
+
29
+ elsif @product
30
+ @product.current_category
31
+
32
+ else
33
+ Gemgento::Category.root
34
+ end
35
+ end
36
+ end
37
+
38
+ def not_found
39
+ raise ActiveRecord::RecordNotFound
40
+ end
41
+
42
+ # Determine if a given category is the current category or a child.
43
+ #
44
+ # @param c [Gemgento::Category]\
45
+ # @return [Boolean]
46
+ def nav_category_is_active(c)
47
+ @curent_category == c or @current_category.children.include?(c)
48
+ end
49
+
50
+ def set_layout(html_layout = nil, pjax_layout = false)
51
+ html_layout = Config[:layout] if html_layout.nil?
52
+
53
+ if request.url # Check if we are redirected
54
+ response.headers['X-PJAX-URL'] = request.url
55
+ end
56
+
57
+ if request.headers['X-PJAX']
58
+ pjax_layout
59
+ elsif request.format == 'json'
60
+ false
61
+ else
62
+ html_layout
63
+ end
64
+ end
65
+
66
+ def json_options
67
+ @json_options ||= {
68
+ include_products: params[:include_products] ||= false,
69
+ include_simple_products: params[:include_simple_products] ||= false,
70
+ active: params[:active] ||= true
71
+ }
72
+ end
73
+
74
+ def product_asset(product, asset_type_code)
75
+ asset = Gemgento::Asset.find_by_code(product, asset_type_code)
76
+
77
+ if asset.nil? && product.magento_type == 'simple' && product.configurable_products.active.any? # check the configurable if the simple doesn't have images.
78
+ asset = Gemgento::Asset.find_by_code(product.configurable_products.active.first, asset_type_code)
79
+ elsif asset.nil?
80
+ asset = product.assets.first.image
81
+ end
82
+
83
+ return asset
84
+ end
85
+
86
+ # Get the product price for the given session
87
+ #
88
+ # @param product [Gemgento::Product]
89
+ # @param quantity [Float]
90
+ # @return [BigDecimal]
91
+ def product_price(product, quantity = 1.0)
92
+ user_group = current_user ? current_user.user_group : nil
93
+ product.price(user_group, current_store, quantity)
94
+ end
95
+
96
+ # Determine if a product is on sale in the given session.
97
+ #
98
+ # @param product [Gemgento::Product]
99
+ # @param quantity [Float]
100
+ # @return [Boolean]
101
+ def product_on_sale?(product, quantity = 1.0)
102
+ user_group = current_user ? current_user.user_group : nil
103
+ product.magento_type != 'giftvoucher' && product.on_sale?(user_group, current_store, quantity)
104
+ end
105
+
106
+ # Get a breadcrumb trail from root to current category, not including root.
107
+ #
108
+ # @param category [Gemgento::Category]
109
+ # @param separator [String]
110
+ # @param link_options [Hash] options hash for link_to
111
+ def breadcrumbs(category, separator = '/', link_options = {})
112
+ breadcrumbs = ''
113
+ trail = category.heirarchy
114
+ trail << category
115
+
116
+ trail.each do |parent|
117
+ breadcrumbs += " #{separator} " unless breadcrumbs.blank? # don't add separator to first link
118
+ breadcrumbs += link_to(parent.name, category_path(parent), link_options)
119
+ end
120
+
121
+ return breadcrumbs
122
+ end
123
+
124
+ end
125
+ end