forked from OpenNeo/impress
clear sold_in_mall flag for items not currently sold in mall, add sold_in_mall flag to items we found that are already in our database
This commit is contained in:
parent
c67f8c916a
commit
8847a87fd9
1 changed files with 24 additions and 6 deletions
|
@ -31,7 +31,8 @@ class Item < ActiveRecord::Base
|
||||||
|
|
||||||
scope :spidered_longest_ago, order(["(#{Item.arel_table[:last_spidered].eq(nil).to_sql}) DESC", arel_table[:last_spidered].desc])
|
scope :spidered_longest_ago, order(["(#{Item.arel_table[:last_spidered].eq(nil).to_sql}) DESC", arel_table[:last_spidered].desc])
|
||||||
|
|
||||||
scope :sold_in_mall, where(arel_table[:sold_in_mall].eq(true))
|
scope :sold_in_mall, where(:sold_in_mall => true)
|
||||||
|
scope :not_sold_in_mall, where(:sold_in_mall => false)
|
||||||
|
|
||||||
# Not defining validations, since this app is currently read-only
|
# Not defining validations, since this app is currently read-only
|
||||||
|
|
||||||
|
@ -304,11 +305,28 @@ class Item < ActiveRecord::Base
|
||||||
Rails.logger.warn "Error parsing JSON at #{uri}, skipping: #{e.message}"
|
Rails.logger.warn "Error parsing JSON at #{uri}, skipping: #{e.message}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
puts "#{items.size} items total"
|
puts "#{items.size} items found"
|
||||||
# Remove items from the list that already exist, so as to avoid
|
all_item_ids = items.keys
|
||||||
# unnecessary saves
|
# Find which of these already exist but aren't marked as sold_in_mall so
|
||||||
existing_item_ids = Item.find_all_by_id(items.keys, :select => :id).map(&:id)
|
# we can update them as being sold
|
||||||
items = items.except *existing_item_ids
|
Item.not_sold_in_mall.where(:id => items.keys).select([:id, :name]).each do |item|
|
||||||
|
items.delete(item.id)
|
||||||
|
item.sold_in_mall = true
|
||||||
|
item.save
|
||||||
|
puts "#{item.name} (#{item.id}) now in mall, updated"
|
||||||
|
end
|
||||||
|
# Find items marked as sold_in_mall so we can skip those we just found
|
||||||
|
# if they already are properly marked, and mark those that we didn't just
|
||||||
|
# find as no longer sold_in_mall
|
||||||
|
Item.sold_in_mall.select([:id, :name]).each do |item|
|
||||||
|
if all_item_ids.include?(item.id)
|
||||||
|
items.delete(item.id)
|
||||||
|
else
|
||||||
|
item.sold_in_mall = false
|
||||||
|
item.save
|
||||||
|
puts "#{item.name} (#{item.id}) no longer in mall, removed sold_in_mall status"
|
||||||
|
end
|
||||||
|
end
|
||||||
puts "#{items.size} new items"
|
puts "#{items.size} new items"
|
||||||
items.each do |item_id, item|
|
items.each do |item_id, item|
|
||||||
item.save
|
item.save
|
||||||
|
|
Loading…
Reference in a new issue