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