class ActiveHashcash::Reputation::IPv4Address

Public Class Methods

# File app/models/active_hashcash/reputation/ipv4_address.rb, line 39
def self.delete_zero_scores
  where(anonymous_score: 0, abuse_score: 0, attack_score: 0).delete_all
end
# File app/models/active_hashcash/reputation/ipv4_address.rb, line 22
def self.reset_score(name, entries)
  column = :"#{name}_score"
  entries.uniq! { |ip, _| ip }
  transaction do
    where(column => 1..).update_all(column => 0)
    entries.each_slice(10_000) { |batch| upsert_score(column, batch) }
  end
end
# File app/models/active_hashcash/reputation/ipv4_address.rb, line 15
def self.scores(ip)
  abuse, anonymous, attack = where(id: ActiveRecord::Type::Binary.new.serialize(IPAddr.new(ip).hton)).pick(:abuse_score, :anonymous_score, :attack_score)
  {abuse: abuse || 0, anonymous: anonymous || 0, attack: attack || 0}
rescue IPAddr::InvalidAddressError
  {abuse: 0, anonymous: 0, attack: 0}
end
# File app/models/active_hashcash/reputation/ipv4_address.rb, line 31
def self.upsert_score(column, entries)
  upsert_all(
    entries.map { |ip, value| {id: ip.hton, column => value} },
    record_timestamps: false,
    update_only: [column]
  )
end