appodeal_id_client 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e0cdd609d3d2a0f6f75103d2bd0e415e31146a20f2bcd70b5251ffd14fcd7a4
4
- data.tar.gz: 705234e1beef00b7387630b55f6f0b2709b470636d79b9ae4e0380e339cfe322
3
+ metadata.gz: 11ee90820d7d01ea121504aae5fa471462205228f1e4cb2d57f6a731ad8f3512
4
+ data.tar.gz: 4697f4a431d61c62a9e135f961f9e5bc95441327142f451f681b7e1b5b6c7517
5
5
  SHA512:
6
- metadata.gz: 23fc1feedfdbf3f94903df5d63e043f76fab0613154cebcaa64008cd54d7a70328eb441e825347b2c469f23682b32fd8073e7b9f95dc028fe8bfed343cf85ebd
7
- data.tar.gz: 4d0d25b52b0d1416737ca3842f5373d590ea87cf0105245356fea9a4d7b33df34b635762714b112e9a3c0e25648a1562781ffdb777d2fc0e7779abe2154c0ab0
6
+ metadata.gz: a2a5c60df8cd6feb157c253d568bd4fe94829fc3c3e57da8c96d41bef177347238181bec38ae380764dbb8f28dd685175f028bab8e0b41a91fae99c3f0f50312
7
+ data.tar.gz: 8af711407bea7613f729f4ae449d82750a514672bccf8e54ed033771de89622ab01ba54fc91c0bedb2c2c23398fc90087060bdc4fcdde3c49e52d4ff8b0eaaf1
@@ -5,29 +5,54 @@ require 'faraday'
5
5
  module AppodealIdClient
6
6
  # Client for appodeal_id_services
7
7
  class Client
8
- def initialize(api_url)
8
+ ZeroAppodealIdException = Class.new(StandardError)
9
+ RETRY_LIMIT = 3
10
+
11
+ def initialize(api_url, logger)
9
12
  @api_url = api_url
13
+ @logger = logger
10
14
  end
11
15
 
12
16
  def find_or_create(data)
13
- response = connection.post('/v1', data)
14
- return response.body.to_i if response.status == 200
17
+ @retries = 0
18
+ request_id = SecureRandom.uuid
15
19
 
16
- check_appodeal_id(data[:appodeal_id])
17
- rescue StandardError
18
- check_appodeal_id(data[:appodeal_id])
20
+ post_request(data, request_id)
19
21
  end
20
22
 
21
23
  private
22
24
 
23
- attr_reader :api_url
25
+ attr_reader :api_url, :logger
24
26
 
25
27
  def connection
26
28
  @connection ||= Faraday.new(api_url) do |c|
27
29
  c.adapter Faraday.default_adapter
28
30
  c.request :json
29
- c.request :retry, max: 3, interval: 0.05, interval_randomness: 0.5, backoff_factor: 2
31
+ c.request :retry, retry_options
32
+ end
33
+ end
34
+
35
+ def post_request(data, request_id) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
36
+ log_request(data, request_id)
37
+
38
+ response = connection.post('/v1', data) do |req|
39
+ req.headers['X-Request-ID'] = request_id
40
+ end
41
+
42
+ if response.status == 200
43
+ appodeal_id = response.body.to_i
44
+ raise ZeroAppodealIdException if appodeal_id.zero?
45
+
46
+ appodeal_id
30
47
  end
48
+
49
+ check_appodeal_id(data[:appodeal_id])
50
+ rescue ZeroAppodealIdException
51
+ retry if (@retries += 1) < RETRY_LIMIT
52
+
53
+ check_appodeal_id(data[:appodeal_id])
54
+ rescue StandardError
55
+ check_appodeal_id(data[:appodeal_id])
31
56
  end
32
57
 
33
58
  def check_appodeal_id(appodeal_id)
@@ -41,5 +66,21 @@ module AppodealIdClient
41
66
  appodeal_id.bit_length > 60 &&
42
67
  appodeal_id.bit_length <= 64
43
68
  end
69
+
70
+ def retry_options
71
+ {
72
+ max: 3,
73
+ interval: 0.05,
74
+ interval_randomness: 0.5,
75
+ backoff_factor: 2
76
+ }
77
+ end
78
+
79
+ def log_request(data, request_id)
80
+ return unless logger
81
+
82
+ params = data.merge(request_id: request_id)
83
+ logger.info("[NEEDED] [APPODEAL ID] #{params.inspect}")
84
+ end
44
85
  end
45
86
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppodealIdClient
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.2'
5
5
  end
@@ -6,7 +6,7 @@ require 'appodeal_id_client/client'
6
6
  # Service find or create appodeal_id from appodeal_id_services
7
7
  module AppodealIdClient
8
8
  class << self
9
- attr_accessor :api_url
9
+ attr_accessor :api_url, :logger
10
10
 
11
11
  def configure
12
12
  yield self
@@ -21,7 +21,7 @@ module AppodealIdClient
21
21
  private
22
22
 
23
23
  def client
24
- @client ||= Client.new(api_url)
24
+ @client ||= Client.new(api_url, logger)
25
25
  end
26
26
  end
27
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appodeal_id_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Ilchenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-03 00:00:00.000000000 Z
11
+ date: 2023-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler