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,377 @@
1
+ require 'shopify_api'
2
+
3
+ # Magento attributes that must exist:
4
+ # vendor (brand)
5
+ # fulfillment_service
6
+ # barcode
7
+ # compare_at_price
8
+ # option1,2,3.....
9
+
10
+
11
+ module Gemgento::Adapter::Shopify
12
+ class Product
13
+
14
+ # Import products from Shopify to Gemgento.
15
+ #
16
+ # @param skip_existing [Boolean]
17
+ # @return [void]
18
+ def self.import(skip_existing = false)
19
+ page = 1
20
+ ShopifyAPI::Base.site = Gemgento::Adapter::ShopifyAdapter.api_url
21
+ shopify_products = ShopifyAPI::Product.where(limit: 250, page: page)
22
+
23
+ while shopify_products.any?
24
+
25
+ shopify_products.each do |product|
26
+ simple_products = []
27
+
28
+ if product.variants.count > 1 && !skip?(skip_existing, product)
29
+ product.variants.each do |variant|
30
+ if skip?(skip_existing, variant)
31
+ simple_products << Gemgento::Adapter::ShopifyAdapter.find_by_shopify_model(variant).gemgento_model
32
+ else
33
+ simple_products << create_simple_product(product, variant, false)
34
+ end
35
+ end
36
+
37
+ create_configurable_product(product, simple_products)
38
+ else
39
+ create_simple_product(product, product.variants.first, true) unless skip?(skip_existing, product.variants.first)
40
+ end
41
+ end
42
+
43
+ page = page + 1
44
+ shopify_products = ShopifyAPI::Product.where(limit: 250, page: page)
45
+ end
46
+
47
+ push_tags
48
+ end
49
+
50
+ # Determine if product import can be skipped.
51
+ #
52
+ # @param skip_existing [Boolean]
53
+ # @param shopify_model [Object]
54
+ # @return [Boolean]
55
+ def self.skip?(skip_existing, shopify_model)
56
+ shopify_adapter = Gemgento::Adapter::ShopifyAdapter.find_by_shopify_model(shopify_model)
57
+ return skip_existing && (shopify_adapter && !shopify_adapter.gemgento_model.magento_id.nil?)
58
+ end
59
+
60
+ # Create a simple product from Shopify product data.
61
+ #
62
+ # @param base_product [ShopifyAPI::Product]
63
+ # @param variant [ShopifyAPI::Variant]
64
+ # @param is_catalog_visible [Boolean]
65
+ # @return [Gemgento::Product]
66
+ def self.create_simple_product(base_product, variant, is_catalog_visible)
67
+ product = initialize_product(variant, base_product, variant.sku, 'simple', is_catalog_visible, !base_product.published_at.nil?)
68
+
69
+ product.set_attribute_value('barcode', variant.barcode)
70
+ product.set_attribute_value('compare_at_price', variant.compare_at_price)
71
+ product.set_attribute_value('fulfillment_service', variant.fulfillment_service)
72
+ product.set_attribute_value('weight', variant.grams)
73
+ product.set_attribute_value('price', variant.price)
74
+ #product.set_attribute_value('size', variant.size)
75
+
76
+ if base_product.published_at.blank?
77
+ product.set_attribute_value('status', 'enabled')
78
+ else
79
+ product.set_attribute_value('status', 'disabled')
80
+ end
81
+ if is_catalog_visible # catalog visible simple products are not part of a configurable
82
+ product.set_attribute_value('name', base_product.title)
83
+ else
84
+ product.set_attribute_value('name', "#{base_product.title} - #{variant.title}")
85
+ end
86
+
87
+ product = set_option_values(product, base_product, variant)
88
+ #product = set_categories(product, base_product.id)
89
+
90
+ product.sync_needed = true
91
+ product.save
92
+
93
+ Gemgento::Adapter::ShopifyAdapter.create_association(product, variant) if product.shopify_adapter.nil?
94
+
95
+ # begin
96
+ # product = create_assets(product, base_product.image, base_product.images)
97
+ # rescue => e
98
+ # Rails.logger.warn "Unable to create assets, will ignore: #{e}"
99
+ # end
100
+
101
+ # create_tags(product, base_product.tags)
102
+ create_inventory(product, variant)
103
+
104
+ return product
105
+ end
106
+
107
+ # Create a simple product from Shopify product data.
108
+ #
109
+ # @param base_product [ShopifyAPI::Product]
110
+ # @param simple_products [Array(Gemgento::Product)]
111
+ # @return [Gemgento::Product]
112
+ def self.create_configurable_product(base_product, simple_products)
113
+ product = initialize_product(base_product, base_product, "#{simple_products.first.sku}_base", 'configurable', true, !base_product.published_at.nil?)
114
+
115
+ product.set_attribute_value('barcode', simple_products.first.barcode)
116
+ product.set_attribute_value('compare_at_price', simple_products.first.compare_at_price)
117
+ product.set_attribute_value('fulfillment_service', simple_products.first.fulfillment_service)
118
+ product.set_attribute_value('weight', simple_products.first.weight)
119
+ product.set_attribute_value('price', simple_products.first.price)
120
+ product.set_attribute_value('name', base_product.title)
121
+ if base_product.published_at.blank?
122
+ product.set_attribute_value('status', 'enabled')
123
+ else
124
+ product.set_attribute_value('status', 'disabled')
125
+ end
126
+
127
+ product.sync_needed = false
128
+ product.save
129
+
130
+ product = set_configurable_attributes(product, base_product, base_product.variants.first)
131
+ #product = set_categories(product, base_product.id)
132
+
133
+ simple_products.uniq.each do |simple_product|
134
+ simple_product.configurable_products << product unless simple_product.configurable_products.include? product
135
+ simple_product.sync_needed
136
+ simple_product.save
137
+ end
138
+
139
+ product.sync_needed = true
140
+ product.save
141
+
142
+ Gemgento::Adapter::ShopifyAdapter.create_association(product, base_product) if product.shopify_adapter.nil?
143
+
144
+ # begin
145
+ # product = create_assets(product, base_product.image, base_product.images)
146
+ # rescue => e
147
+ # Rails.logger.warn "Unable to create assets, will ignore: #{e}"
148
+ # end
149
+
150
+ # create_tags(product, base_product.tags)
151
+
152
+ return product
153
+ end
154
+
155
+ # Initialize a Gemgento::Product given some basic data form Shopify product.
156
+ #
157
+ # @param shopify_model [Object] the shopify model that the product will be associated with through Gemgento::Adapter::ShopifyAdapter
158
+ # @param base_product [ShopifyAPI::Product]
159
+ # @param sku [String]
160
+ # @param magento_type [String]
161
+ # @param is_catalog_visible [Boolean]
162
+ # @param status [Boolean]
163
+ # @return [Gemgento::Product]
164
+ def self.initialize_product(shopify_model, base_product, sku, magento_type, is_catalog_visible, status)
165
+ if shopify_adapter = Gemgento::Adapter::ShopifyAdapter.find_by_shopify_model(shopify_model)
166
+ product = shopify_adapter.gemgento_model
167
+ else
168
+ product = Gemgento::Product.not_deleted.find_or_initialize_by(sku: normalize_sku(sku, base_product, base_product.variants.first))
169
+ end
170
+
171
+ product.magento_type = magento_type
172
+ product.visibility = is_catalog_visible ? 4 : 1
173
+ product.product_attribute_set = Gemgento::ProductAttributeSet.first
174
+ product.status = status
175
+ product.sync_needed = false
176
+ product.save
177
+
178
+ product.set_attribute_value('url_key', base_product.handle)
179
+ product.set_attribute_value('name', base_product.title)
180
+ product.set_attribute_value('description', base_product.body_html)
181
+ product.set_attribute_value('vendor', base_product.vendor)
182
+ product.set_attribute_value('udropship_vendor', base_product.vendor)
183
+ product.set_attribute_value('meta-keywords', base_product.tags)
184
+ product.stores = Gemgento::Store.all
185
+
186
+ puts 'PRODUCT ID: '+product.id.to_s+ ' DESCRIPTION: '+product.description
187
+
188
+ return product
189
+ end
190
+
191
+ # Set product attribute values that have options.
192
+ #
193
+ # @param product [Gemgento::Product]
194
+ # @param base_product [ShopifyAPI::Product]
195
+ # @param variant [ShopifyAPI::Variant]
196
+ # @return [Gemgento::Product]
197
+ def self.set_option_values(product, base_product, variant)
198
+ variant.attributes.each do |key, value|
199
+ if key.to_s.include? 'option'
200
+ code = get_option_attribute_code(base_product, key)
201
+ next if code.nil?
202
+ Rails.logger.warn 'ATTRIBUTE CODE: '+code
203
+ value = 'N/A' if value.blank?
204
+ product.set_attribute_value(code, value)
205
+ Rails.logger.warn 'ATTRIBUTE VALUE: '+value
206
+ end
207
+ end
208
+
209
+ product.sync_needed = false
210
+ product.save
211
+
212
+ return product
213
+ end
214
+
215
+ # Get the Gemgento::Attribute.code relate to an Shopify option code.
216
+ #
217
+ # @param base_product [ShopifyAPI::Product]
218
+ # @param option_code [String]
219
+ def self.get_option_attribute_code(base_product, option_code)
220
+ index = option_code.to_s.gsub('option', '').to_i - 1
221
+ return nil if index >= base_product.options.length
222
+ return base_product.options[index].name.downcase
223
+ end
224
+
225
+ # Associate product with categories based on Shopify collections.
226
+ #
227
+ # @param product [Gemgento::Product]
228
+ # @param shopify_id [Integer]
229
+ # @return [Gemgento::Product]
230
+ def self.set_categories(product, shopify_id)
231
+ collections = ShopifyAPI::CustomCollection.where(product_id: shopify_id)
232
+
233
+ Gemgento::Adapter::ShopifyAdapter.where(shopify_model_type: collections.first.class, shopify_model_id: collections.map(&:id)).each do |shopify_adapter|
234
+ category = shopify_adapter.gemgento_model
235
+
236
+ Gemgento::Store.all.each do |store|
237
+ product_category = Gemgento::ProductCategory.find_or_initialize_by(product: product, category: category, store: store)
238
+ product_category.sync_needed = false
239
+ product_category.save
240
+ end
241
+ end
242
+
243
+ product.product_categories.reload
244
+
245
+ return product
246
+ end
247
+
248
+ # Define the configurable attributes for a configurable product.
249
+ #
250
+ # @param product [Gemgento::Product]
251
+ # @param base_product [ShopifyAPI::Product]
252
+ # @param variant [ShopifyAPI::Variant]
253
+ # @return [Gemgento::Product]
254
+ def self.set_configurable_attributes(product, base_product, variant)
255
+ variant.attributes.each do |key, value|
256
+ if key.to_s.include? 'option'
257
+ code = get_option_attribute_code(base_product, key)
258
+ next if code.nil?
259
+ attribute = Gemgento::ProductAttribute.find_by(code: code)
260
+
261
+ if attribute && attribute.is_configurable && is_configurable_attribute_used(product, attribute)
262
+ product.configurable_attributes << attribute unless product.configurable_attributes.include? attribute
263
+ end
264
+ end
265
+ end
266
+
267
+ product.sync_needed = false
268
+ product.save
269
+
270
+ return product
271
+ end
272
+
273
+ # Check if a configurable attribute is actually being used to differentiate simples.
274
+ #
275
+ # @param product [Gemgento::Product]
276
+ # @param attribute [Gemgento::ProductAttribute]
277
+ # @return [Boolean]
278
+ def self.is_configurable_attribute_used(product, attribute)
279
+ product.simple_products.each do |simple_product|
280
+ return false unless simple_product.product_attribute_values.exists?(product_attribute: attribute)
281
+ end
282
+
283
+ return true
284
+ end
285
+
286
+ # Create the assets for a product.
287
+ #
288
+ # @param product [Gemgento::Product]
289
+ # @param base_image [ShopifyAPI::Image]
290
+ # @param images [Array(ShopifyAPI::Image)]
291
+ # @return [Gemgento::Product]
292
+ def self.create_assets(product, base_image, images)
293
+ images.each do |image|
294
+ asset_file = nil
295
+
296
+ product.stores.each do |store|
297
+ asset = Gemgento::Asset.find_or_initialize_by(product: product, label: image.id)
298
+ asset.asset_types << Gemgento::AssetType.find_by(code: 'image') if image == base_image
299
+ asset.store = store
300
+ asset.position = image.position
301
+ asset.set_file(URI.parse(image.src))
302
+ asset.sync_needed = false
303
+ asset.save
304
+
305
+ asset.sync_needed = true
306
+ asset.save
307
+
308
+ asset_file = asset.asset_file
309
+ end
310
+
311
+ Gemgento::Adapter::ShopifyAdapter.create_association(asset_file, image) unless asset_file.nil?
312
+ end
313
+
314
+ return product
315
+ end
316
+
317
+ # Create the inventory for the product.
318
+ #
319
+ # @param product [Gemgento::Product]
320
+ # @param variant [ShopifyAPI::Variant]
321
+ def self.create_inventory(product, variant)
322
+ product.stores.each do |store|
323
+ inventory = Gemgento::Inventory.find_or_initialize_by(product: product, store: store)
324
+ inventory.quantity = variant.inventory_quantity
325
+ inventory.is_in_stock = (inventory.quantity > 0 || variant.inventory_policy == 'continue')
326
+ inventory.backorders = variant.inventory_policy == 'continue' ? 1 : 0
327
+ inventory.sync_needed = inventory.new_record? || inventory.changed?
328
+ inventory.save
329
+ end
330
+ end
331
+
332
+ # Create and associate product with tags.
333
+ #
334
+ # @param product [Gemgento::Product]
335
+ # @param tags [String]
336
+ # @return [Void]
337
+ def self.create_tags(product, tags)
338
+ tags.split(',').each do |tag_name|
339
+ tag = Gemgento::Tag.find_or_initialize_by(name: tag_name.strip)
340
+ tag.status = 1
341
+ tag.sync_needed = false
342
+ tag.save
343
+
344
+ Gemgento::Store.where.not(code: 'admin').each do |store|
345
+ next if tag.stores.include? store
346
+
347
+ tag.store_tags.create(store: store)
348
+ end
349
+
350
+ tag.products << product unless tag.products.include? product
351
+ tag.sync_needed = false
352
+ tag.save
353
+ end
354
+ end
355
+
356
+ # Push all tags to Magento.
357
+ #
358
+ # @return [Void]
359
+ def self.push_tags
360
+ Gemgento::Tag.all.each do |tag|
361
+ tag.sync_needed = true
362
+ tag.save
363
+ end
364
+ end
365
+
366
+ # Normalize the sku.
367
+ #
368
+ # @param sku [String]
369
+ # @param base_product [ShopifyAPI::Product]
370
+ # @param variant [ShopifyAPI::ProductVariant]
371
+ # @return [String]
372
+ def self.normalize_sku(sku, base_product, variant)
373
+ return sku
374
+ end
375
+
376
+ end
377
+ end
@@ -0,0 +1,58 @@
1
+ require 'shopify_api'
2
+
3
+ module Gemgento::Adapter::Shopify
4
+ class ProductCategoryPosition
5
+
6
+ # Set all product category positions based on Shopify collects
7
+ #
8
+ # @return [Void]
9
+ def self.set_all
10
+ ShopifyAPI::Base.site = Gemgento::Adapter::ShopifyAdapter.api_url
11
+
12
+ collections = ShopifyAPI::CustomCollection.all
13
+ collects = ShopifyAPI::Collect.all
14
+
15
+ collects.each do |collect|
16
+ collection = collections.select { |c| c.id = collect.collection_id }.first
17
+ category = Gemgento::Category.find_by(url_key: collection.handle)
18
+ product = Gemgento::Product.filter(
19
+ {
20
+ attribute: Gemgento::ProductAttribute.find_by(code: 'shopify_id'),
21
+ value: collect.product_id
22
+ }
23
+ ).first
24
+
25
+ set_product_category_position(product, category, collect.position)
26
+ end
27
+
28
+ push_all_positions
29
+ end
30
+
31
+ # Set product category positions for each store.
32
+ #
33
+ # @param product [Gemgento::Product]
34
+ # @param category [Gemgento::Category]
35
+ # @param position [Integer]
36
+ # @return [Void]
37
+ def self.set_product_category_position(product, category, position)
38
+ Gemgento::Store.all.each do |store|
39
+ product_category = Gemgento::ProductCategory.find_by(product: product, category: category, store: store)
40
+ product_category.position = position
41
+ product_category.sync_needed = false
42
+ product_category.save
43
+ end
44
+ end
45
+
46
+ # Push all product category positions to Magento
47
+ #
48
+ # @return [Void]
49
+ def self.push_all_positions
50
+ Gemgento::Category.all.each do |category|
51
+ Gemgento::Store.all.each do |store|
52
+ Gemgento::API::SOAP::Catalog::Category.update_product_positions(category, store)
53
+ end
54
+ end
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,63 @@
1
+ require 'shopify_api'
2
+
3
+ module Gemgento::Adapter
4
+ class ShopifyAdapter < ActiveRecord::Base
5
+ belongs_to :gemgento_model, polymorphic: true
6
+
7
+ validates :gemgento_model_type, :gemgento_model_id, :shopify_model_type, :shopify_model_id, presence: true
8
+ validates :gemgento_model_id, uniqueness: {scope: :gemgento_model_type}
9
+
10
+ def self.api_url
11
+ "https://#{Gemgento::Config[:adapter][:shopify][:api_key]}:#{Gemgento::Config[:adapter][:shopify][:password]}@#{Gemgento::Config[:adapter][:shopify][:shop_name]}.myshopify.com/admin"
12
+ end
13
+
14
+ def self.import_all
15
+ Shopify::Category.import
16
+ Shopify::Product.import
17
+ Shopify::Customer.import
18
+ Shopify::Order.import
19
+ end
20
+
21
+ # Return the associated shopify model
22
+ #
23
+ # @return [Object]
24
+ def shopify_model
25
+ if self.shopify_model_type.blank? || self.shopify_model_id.blank?
26
+ return nil
27
+ else
28
+ ShopifyAPI::Base.site = Gemgento::Adapter::ShopifyAdapter.api_url
29
+ return self.shopify_model_type.constantize.find(self.shopify_model_id)
30
+ end
31
+ end
32
+
33
+ # Create a polymorphic association on shopify_model attributes
34
+ #
35
+ # @param model [Object]
36
+ # @return [Void]
37
+ def shopify_model=(model)
38
+ self.shopify_model_type = model.class
39
+ self.shopify_model_id = model.id
40
+ end
41
+
42
+ # Create a ShopifyAdapter for a given Gemgento model and Shopify model.
43
+ #
44
+ # @param gemgento_model [Object]
45
+ # @param shopify_model [Object]
46
+ # @return [Void]
47
+ def self.create_association(gemgento_model, shopify_model)
48
+ shopify_adapter = Gemgento::Adapter::ShopifyAdapter.new
49
+ shopify_adapter.gemgento_model = gemgento_model
50
+ shopify_adapter.shopify_model = shopify_model
51
+ shopify_adapter.save
52
+ end
53
+
54
+ # Find a record by the shopify model.
55
+ #
56
+ # @param shopify_model [Object]
57
+ # @param [Object, nil]
58
+ def self.find_by_shopify_model(shopify_model)
59
+ Gemgento::Adapter::ShopifyAdapter.find_by(shopify_model_type: shopify_model.class, shopify_model_id: shopify_model.id)
60
+ end
61
+
62
+ end
63
+ end