Class: Decidim::SpamDetection::ApiProxy

Inherits:
Object
  • Object
show all
Defined in:
lib/decidim/spam_detection/api_proxy.rb

Constant Summary collapse

URL =
URI(Decidim::SpamDetection.spam_detection_api_url)
AUTH_TOKEN =
Decidim::SpamDetection.spam_detection_api_auth_token

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data_array, batch_size) ⇒ ApiProxy

Returns a new instance of ApiProxy.



12
13
14
15
16
# File 'lib/decidim/spam_detection/api_proxy.rb', line 12

def initialize(data_array, batch_size)
  @data_array = data_array
  @batch_size = batch_size
  @retries = [3, 5, 10]
end

Class Method Details

.request(data_array, batch_size = 1000) ⇒ Object



18
19
20
# File 'lib/decidim/spam_detection/api_proxy.rb', line 18

def self.request(data_array, batch_size = 1000)
  new(data_array, batch_size).send_request_in_batch
end

.use_ssl?(url) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/decidim/spam_detection/api_proxy.rb', line 48

def self.use_ssl?(url)
  url.scheme == "https"
end

Instance Method Details

#send_request_in_batchObject



22
23
24
25
26
27
28
29
# File 'lib/decidim/spam_detection/api_proxy.rb', line 22

def send_request_in_batch
  responses = []
  @data_array.each_slice(@batch_size) do |subdata_array|
    responses << JSON.parse(send_request_to_api(subdata_array))
  end

  responses.flatten
end

#send_request_to_api(data) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/decidim/spam_detection/api_proxy.rb', line 31

def send_request_to_api(data)
  http = Net::HTTP.new(URL.host, URL.port)
  request = Net::HTTP::Post.new(URL)
  request["Content-Type"] = "application/json"
  request["AUTH_TOKEN"] = AUTH_TOKEN
  request.body = JSON.dump(data)
  http.use_ssl = true if self.class.use_ssl?(URL)
  response = http.request(request)
  response.read_body
rescue Net::ReadTimeout
  raise Net::ReadTimeout if @retries.empty?

  sleep @retries.first
  @retries.shift
  retry
end