appodeal_id_client 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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