Arie/serveme

View on GitHub
app/models/whitelist_tf.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

class WhitelistTf < ActiveRecord::Base
  validates_presence_of :tf_whitelist_id, :content
  validates_format_of :tf_whitelist_id, with: /\A[a-zA-Z0-9_-]*\z/

  def self.download_and_save_whitelist(tf_whitelist_id)
    tf_whitelist = find_or_initialize_by(tf_whitelist_id: tf_whitelist_id)
    tf_whitelist.content = whitelist_content(tf_whitelist_id.to_s)
    tf_whitelist.save!
  end

  def self.whitelist_content(tf_whitelist_id)
    if tf_whitelist_id.match(/\A[0-9]*\z/)
      fetch_whitelist("custom_whitelist_#{tf_whitelist_id}")
    else
      fetch_whitelist(tf_whitelist_id)
    end
  end

  def self.fetch_whitelist(tf_whitelist_id)
    response = whitelist_connection.get("#{tf_whitelist_id}.txt")
    response.body if response.success?
  end

  def self.whitelist_connection
    Faraday.new(url: 'http://whitelist.tf')
  end
end