Module: Arctic::Vendor
- Defined in:
- lib/arctic/vendor.rb,
lib/arctic/vendor/api.rb,
lib/arctic/vendor/vendor.rb,
lib/arctic/vendor/version.rb
Defined Under Namespace
Classes: API
Constant Summary collapse
- MAX_THREADS =
ENV.fetch('MAX_THREADS', 4).to_s.to_i.freeze
- VERSION =
"1.0.1"
Class Method Summary collapse
- .api(*args) ⇒ Object
- .collect_currencies(&block) ⇒ Object
-
.collect_products(&block) ⇒ Object
Fetches all products from all shops, where this vendor is the source vendor and pushes them to the Core API.
-
.distribute_products(**params) ⇒ Object
Fetches all products from the Core API and distributes them to the target vendors.
- .each_shop(type = :collection) ⇒ Object
- .threaded(collection, &block) ⇒ Object
- .time ⇒ Object
Class Method Details
.api(*args) ⇒ Object
40 41 42 |
# File 'lib/arctic/vendor/vendor.rb', line 40 def api(*args) @api ||= Arctic::Vendor::API.new(*args) end |
.collect_currencies(&block) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/arctic/vendor/vendor.rb', line 24 def collect_currencies(&block) Arctic.logger.info "Collecting currencies from collection shop" currencies_count = 0 seconds = time do each_shop(:collection) do |shop| currencies = api.send_currencies shop['id'], yield(shop) currencies_count += currencies.size end end Arctic.logger.info "Collected #{currencies_count} exchange rates in #{seconds} seconds." end |
.collect_products(&block) ⇒ Object
Fetches all products from all shops, where this vendor is the source vendor and pushes them to the Core API.
54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/arctic/vendor/vendor.rb', line 54 def collect_products(&block) Arctic.logger.info "Collecting products from vendor..." products_count = 0 seconds = time do each_shop(:collection) do |shop| products = api.send_products shop['id'], yield(shop) products_count += products.size end end Arctic.logger.info "Collected #{products_count} products in #{seconds} seconds" end |
.distribute_products(**params) ⇒ Object
Fetches all products from the Core API and distributes them to the target vendors
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/arctic/vendor/vendor.rb', line 71 def distribute_products(**params) Arctic.logger.info "Distributing products to target vendor..." products_count = 0 params.reverse_merge! \ batch_size: 100 seconds = time do each_shop(:dispersal) do |shop| api.list_products(shop['id'], params) do |products| products_count += products.size yield shop, products # api.update_products shop['id'], products, dispersed_at: Time.now.to_s(:db) end end end Arctic.logger.info "Distributed #{products_count} products in #{seconds} seconds" end |
.each_shop(type = :collection) ⇒ Object
17 18 19 20 21 |
# File 'lib/arctic/vendor/vendor.rb', line 17 def each_shop(type = :collection) api.list_shops.with_indifferent_access[type].each do |shop| yield shop end end |
.threaded(collection, &block) ⇒ Object
5 6 7 8 9 10 11 12 13 14 |
# File 'lib/arctic/vendor/vendor.rb', line 5 def threaded(collection, &block) threads = Arctic::Vendor::MAX_THREADS.times.collect do Thread.new do while item = collection.pop do yield item end end end threads.compact.map &:join end |
.time ⇒ Object
45 46 47 48 49 |
# File 'lib/arctic/vendor/vendor.rb', line 45 def time t1 = Time.now.to_f yield Time.now.to_f - t1 end |