mercadolibre_rails 0.6 → 0.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: df8b324f21f677cc5b8f45c6a37d4511523f076e99f816ac2dc5f2b98e3f6a0c
4
- data.tar.gz: e717205170575157ecaee610d9f85cd6a82bab9003ddeb7b19cce045f3415c17
3
+ metadata.gz: 546985e651f68fd892414ff8d517f169fce92c0efdd5263397b7647658c4a170
4
+ data.tar.gz: 9ac297e46491017e5cf088b452d09f1c1328d9890a5efb9a7fc9a6e1d5e2e6a2
5
5
  SHA512:
6
- metadata.gz: c8e100fa61d958425a3caf1e9e327469a412f10020df038f4a413ebc118118e25dd04773236e8310f39b8b8be8f4bd1dec750d6c1c2ca4e5662078af6b17f792
7
- data.tar.gz: a8ece76dfaa42f9c6eca0db7ab4991dc77804416e568c01d9ef2e0009a4603345a12edf513dceabe552e3d51ee05c8c1b593fe2acbf501b57217b86c148923e7
6
+ metadata.gz: c5a23278a67b3ec5e30f9a1ecbbf9dac1e5b5677c1bfabf6752c3a7816b1badede91b0fe9c24c860983ffc84de553bad5e8264ab81bac0011dfa5f292d6f40ee
7
+ data.tar.gz: 6824b1a3d9e0ae3939a2e6e4c7035f00fdfe2f45a1dea33f3a456d990a00a2f71b481bcabc3d2c6b8308c743d1ad1ade66b476bfd4dd606eb2a159b6c6efaff2
@@ -0,0 +1,27 @@
1
+ module MercadolibreRails
2
+ class SyncMercadolibreProductJob < ApplicationJob
3
+ queue_as :default
4
+
5
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
6
+ def perform(product_id)
7
+ product = MercadolibreRails::Product.find(product_id)
8
+
9
+ ml_product = MercadolibreApi::Products::Queries::Find.run!(product_id: product.mercadolibre_id)
10
+ ml_seller = MercadolibreRails::Seller.where(
11
+ mercadolibre_id: ml_product[:seller_id], site: product.site
12
+ ).first_or_create
13
+
14
+ product.update!(
15
+ seller: ml_seller, title: ml_product[:title], price: ml_product[:price],
16
+ currency_code: ml_product[:currency_id], sold_quantity: ml_product[:sold_quantity],
17
+ description: ml_product[:description], status: ml_product[:status],
18
+ latitude: ml_product.dig(:geolocation, :latitude), longitude: ml_product.dig(:geolocation, :longitude)
19
+ )
20
+
21
+ ml_product[:pictures].each do |picture|
22
+ MercadolibreRails::Picture.where(url: picture[:url], product_id: product_id).first_or_create
23
+ end
24
+ end
25
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ module MercadolibreRails
2
+ class SyncMercadolibreSellerJob < ApplicationJob
3
+ queue_as :default
4
+
5
+ def perform(seller_id)
6
+ seller = MercadolibreRails::Seller.find(seller_id)
7
+
8
+ ordered_products = MercadolibreApi::Sellers::Products::Queries::MostSold.run!(
9
+ seller_id: seller.mercadolibre_id, site_code: seller.site_code
10
+ )
11
+
12
+ ordered_products.each { |product| seller.products.where(mercadolibre_id: product[:id]).first_or_create }
13
+ end
14
+ end
15
+ end
@@ -13,33 +13,24 @@ module MercadolibreRails
13
13
  validates_uniqueness_of :mercadolibre_id, scope: :site_id
14
14
 
15
15
  delegate :code, to: :site, prefix: true
16
- after_create_commit :update_metadata
17
16
  has_many :pictures, dependent: :destroy, class_name: 'MercadolibreRails::Picture'
18
17
 
19
- def self.create_from(url:)
20
- ml_id = MercadolibreApi::Products::Queries::GetID.run!(product_url: url)
21
- site_code = MercadolibreApi::Sites::Queries::GetCode.run!(product_url: url)
18
+ class << self
19
+ def create_from(url:)
20
+ ml_id = MercadolibreApi::Products::Queries::GetID.run!(product_url: url)
21
+ site_code = MercadolibreApi::Sites::Queries::GetCode.run!(product_url: url)
22
22
 
23
- return unless ml_id && site_code
23
+ return unless ml_id && site_code
24
24
 
25
- mercadolibre_site = MercadolibreRails::Site.where(code: site_code).first_or_create
26
- mercadolibre_site.products.where(mercadolibre_id: ml_id).first_or_create
27
- end
28
-
29
- # rubocop:disable Metrics/AbcSize
30
- def update_metadata
31
- ml_product = MercadolibreApi::Products::Queries::Find.run!(product_id: mercadolibre_id)
32
- ml_seller = MercadolibreRails::Seller.where(mercadolibre_id: ml_product[:seller_id], site: site).first_or_create
25
+ mercadolibre_site = MercadolibreRails::Site.where(code: site_code).first_or_create
26
+ product = mercadolibre_site.products.where(mercadolibre_id: ml_id).first_or_create
33
27
 
34
- update!(seller: ml_seller, title: ml_product[:title], price: ml_product[:price],
35
- currency_code: ml_product[:currency_id], sold_quantity: ml_product[:sold_quantity],
36
- description: ml_product[:description], status: ml_product[:status],
37
- latitude: ml_product.dig(:geolocation, :latitude), longitude: ml_product.dig(:geolocation, :longitude))
28
+ MercadolibreRails::SyncMercadolibreProductJob.perform_now(product.id)
29
+ end
38
30
 
39
- ml_product[:pictures].each do |picture|
40
- MercadolibreRails::Picture.where(url: picture[:url], product_id: id).first_or_create
31
+ def sync_all
32
+ all.each { |product| MercadolibreRails::SyncMercadolibreProductJob.perform_now(product.id) }
41
33
  end
42
34
  end
43
- # rubocop:enable Metrics/AbcSize
44
35
  end
45
36
  end
@@ -6,25 +6,22 @@ module MercadolibreRails
6
6
  belongs_to :site
7
7
 
8
8
  delegate :code, to: :site, prefix: true
9
- after_create_commit :create_products
10
9
 
11
- def self.create_from(product_url:)
12
- ml_product_id = MercadolibreApi::Products::Queries::GetID.run!(product_url: product_url)
13
- ml_seller_id = MercadolibreApi::Sellers::Queries::GetID.run!(product_id: ml_product_id)
14
- ml_site_code = MercadolibreApi::Sites::Queries::GetCode.run!(product_url: product_url)
10
+ class << self
11
+ def create_from(product_url:)
12
+ ml_product_id = MercadolibreApi::Products::Queries::GetID.run!(product_url: product_url)
13
+ ml_seller_id = MercadolibreApi::Sellers::Queries::GetID.run!(product_id: ml_product_id)
14
+ ml_site_code = MercadolibreApi::Sites::Queries::GetCode.run!(product_url: product_url)
15
15
 
16
- ml_site = MercadolibreRails::Site.where(code: ml_site_code).first_or_create
17
- where(mercadolibre_id: ml_seller_id, site: ml_site).first_or_create
18
- end
19
-
20
- private
16
+ ml_site = MercadolibreRails::Site.where(code: ml_site_code).first_or_create
17
+ seller = where(mercadolibre_id: ml_seller_id, site: ml_site).first_or_create
21
18
 
22
- def create_products
23
- ordered_products = MercadolibreApi::Sellers::Products::Queries::MostSold.run!(
24
- seller_id: mercadolibre_id, site_code: site_code
25
- )
19
+ MercadolibreRails::SyncMercadolibreSellerJob.perform_now(seller.id)
20
+ end
26
21
 
27
- ordered_products.each { |product| products.where(mercadolibre_id: product[:id]).first_or_create }
22
+ def sync_all
23
+ all.each { |seller| MercadolibreRails::SyncMercadolibreSellerJob.perform_now(seller.id) }
24
+ end
28
25
  end
29
26
  end
30
27
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MercadolibreRails
4
- VERSION = '0.6'
4
+ VERSION = '0.7'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mercadolibre_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.6'
4
+ version: '0.7'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pablo Gonzaga
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-26 00:00:00.000000000 Z
11
+ date: 2018-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mercadolibre_api
@@ -166,6 +166,8 @@ files:
166
166
  - app/controllers/mercadolibre_rails/application_controller.rb
167
167
  - app/helpers/mercadolibre_rails/application_helper.rb
168
168
  - app/jobs/mercadolibre_rails/application_job.rb
169
+ - app/jobs/mercadolibre_rails/sync_mercadolibre_product_job.rb
170
+ - app/jobs/mercadolibre_rails/sync_mercadolibre_seller_job.rb
169
171
  - app/mailers/mercadolibre_rails/application_mailer.rb
170
172
  - app/models/mercadolibre_rails/application_record.rb
171
173
  - app/models/mercadolibre_rails/picture.rb