Skip to content

Instantly share code, notes, and snippets.

@DiegoSalazar
Created September 13, 2012 18:15
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DiegoSalazar/3716345 to your computer and use it in GitHub Desktop.
Save DiegoSalazar/3716345 to your computer and use it in GitHub Desktop.
Order spoof finder
class DasSpoofenSpleiza
def initialize(product_id)
@product = Product.find product_id, :include => :variants
end
def filter
start = Time.now
puts "\nGetting all order_items for product #{@product.id}..."
order_items = OrderItem.all({
:joins => [:order],
:conditions => {
:variant_id => @product.variant_ids,
:orders => {:tag_id => [2, 22, 23, 32]}
},
:order => 'created_at'
})
total = order_items.size
puts "Checking #{total} order_items...\n"
@unique_order_item_signatures = []
@unique_order_items = []
@rejected_order_items = []
order_items.each_with_index do |order_item, i|
s = get_signature order_item
if @unique_order_item_signatures.include? s
@rejected_order_items << order_item
else
@unique_order_item_signatures << s
@unique_order_items << order_item
end
print "\r---> #{percent_of i, total} done."; $>.flush
end
puts "\nGot #{@unique_order_items.size} uniques, #{@rejected_order_items.size} rejected."
puts "done in #{Time.now - start} secs."
end
def update!
start = Time.now
puts "gathering order_item_ids..."
@approved_order_item_ids = @unique_order_items.map &:id
@rejected_order_item_ids = @rejected_order_items.map &:id
@approved_file_name = File.expand_path "approved_order_items-#{Time.now.to_i}.txt", 'tmp'
@rejected_file_name = File.expand_path "rejected_order_items-#{Time.now.to_i}.txt", 'tmp'
File.open(@approved_file_name, 'w') { |f| f.puts @approved_order_item_ids }
puts "wrote approved order_item_ids to #{@approved_file_name}."
File.open(@rejected_file_name, 'w') { |f| f.puts @rejected_order_item_ids }
puts "wrote rejected order_item_ids to #{@rejected_file_name}."
puts "updating reject order item quantities to 0..."
OrderItem.update_all({:quantity => 0}, {:id => @rejected_order_item_ids})
puts "done in #{Time.now - start} secs."
end
private
def get_signature(order_item)
o = order_item.order
s = [o.address.to_s.downcase, o.city.to_s.downcase, o.zip_code].join('')
s.to_sym
end
def percent_of(is, of)
"#{sprintf("%.2f", ((is + 1).to_f / of.to_f * 100))}%"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment