class ActiveHashcash::Reputation::IPv4Range

Constants

MIN_PREFIX

Public Class Methods

# File app/models/active_hashcash/reputation/ipv4_range.rb, line 55
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_range.rb, line 35
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_range.rb, line 28
def self.scores(ip)
  abuse, anonymous, attack = by_address(ip).pick(Arel.sql("max(abuse_score), max(anonymous_score), max(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_range.rb, line 44
def self.upsert_score(column, entries)
  upsert_all(
    entries.map do |ip, value|
      range = ip.to_range
      {first_address: range.first.hton, last_address: range.last.hton, column => value}
    end,
    record_timestamps: false,
    update_only: [column]
  )
end