appodeal_id_client 0.1.0 → 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: ca4d6e42a832eebcc0c55301fce6b68c0055d2bfd1586f6eb1c579779c042a85
4
- data.tar.gz: 212c585b2a4ab53bd3311a205d1b32e329e43b512f263e255fa9a5fd7e11a921
3
+ metadata.gz: 11ee90820d7d01ea121504aae5fa471462205228f1e4cb2d57f6a731ad8f3512
4
+ data.tar.gz: 4697f4a431d61c62a9e135f961f9e5bc95441327142f451f681b7e1b5b6c7517
5
5
  SHA512:
6
- metadata.gz: df50a92849b32f8c31eeb53960b944a1cbb59141ca3a918ca3e26cfbd7682e974546886fd1a35321fd4bb22dbd89615f60a33be9fdc157ff3cafec00370db2c8
7
- data.tar.gz: e0782d7276a2bb560902bb08300410961b0cd0fa278e9cd3a2252aa6ecba8b526e2618751a74d08237559c420cddd8b4eb4d55ed1034b1fe33839ebc931dd265
6
+ metadata.gz: a2a5c60df8cd6feb157c253d568bd4fe94829fc3c3e57da8c96d41bef177347238181bec38ae380764dbb8f28dd685175f028bab8e0b41a91fae99c3f0f50312
7
+ data.tar.gz: 8af711407bea7613f729f4ae449d82750a514672bccf8e54ed033771de89622ab01ba54fc91c0bedb2c2c23398fc90087060bdc4fcdde3c49e52d4ff8b0eaaf1
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
25
25
  spec.require_paths = ['lib']
26
26
 
27
- spec.add_development_dependency 'bundler', '~> 2.4.7'
27
+ spec.add_development_dependency 'bundler', '~> 2.4.5'
28
28
  spec.add_development_dependency 'rake', '~> 10.0'
29
29
  spec.add_development_dependency 'rspec', '~> 3.0'
30
30
  spec.add_development_dependency 'rubocop', '~> 1.45.1'
@@ -5,25 +5,82 @@ 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
- response.body
17
+ @retries = 0
18
+ request_id = SecureRandom.uuid
19
+
20
+ post_request(data, request_id)
15
21
  end
16
22
 
17
23
  private
18
24
 
19
- attr_reader :api_url
25
+ attr_reader :api_url, :logger
20
26
 
21
27
  def connection
22
28
  @connection ||= Faraday.new(api_url) do |c|
23
29
  c.adapter Faraday.default_adapter
24
30
  c.request :json
25
- 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
26
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
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])
56
+ end
57
+
58
+ def check_appodeal_id(appodeal_id)
59
+ return appodeal_id if valid?(appodeal_id)
60
+
61
+ 0
62
+ end
63
+
64
+ def valid?(appodeal_id)
65
+ appodeal_id.is_a?(Integer) &&
66
+ appodeal_id.bit_length > 60 &&
67
+ appodeal_id.bit_length <= 64
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}")
27
84
  end
28
85
  end
29
86
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppodealIdClient
4
- VERSION = '0.1.0'
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.0
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-02 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
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.4.7
19
+ version: 2.4.5
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.4.7
26
+ version: 2.4.5
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement