dapi-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: 3af6232965a19b8ed245ab347a0d82e0da95f8a686d653463fa9e48e9635c30d
4
- data.tar.gz: d47460d0bbc734c3bb2df565d712f29fe010991ebb60c2c4a2381c348e352921
3
+ metadata.gz: a9475f64c82e86742b38333c59b329a2a2f0873920cfa99a46f2ef0b099ea176
4
+ data.tar.gz: 7fcd29bf890170ba4f7f42b17849cb36538b1e43d81dfd8122978dcdb0dd79aa
5
5
  SHA512:
6
- metadata.gz: 91508607d01994bd0d1a63f2775884f44624189c6d505e03f40d74fc00a3e988b9af9210dd8be62a1a9e5eecf955d8cdf9e093ef72efa05bf56cb70e08cf0950
7
- data.tar.gz: 48e415ba642caf12a1d8753ca011d0661e13bd1a2bcb77a76fb80578039a9d299f04ca7f8377cf0c63d75df7dd95e55306be7d05cf7106d544a7fa2587368066
6
+ metadata.gz: 0253ccf3080e0b77b994b9d5035193ac7f04e2df77be52c6679a47e9f9e8b6d4a8716f50bc0c03ea52f8ac552c04822ebd7759ac14ccfe1cd9fc58185b4f004a
7
+ data.tar.gz: 51ef22b2d7a6619130382a25c176499d5ead0768541d75516d999de9c6a854f00017cbc2d455457f35ac6c74fd7c394bf821d2ff961ecad24a3177a63782779c
data/lib/dapi/client.rb CHANGED
@@ -5,8 +5,8 @@ module Dapi
5
5
 
6
6
  class Client
7
7
 
8
- OPTIMISTIC_LOCKING_CHECK_WAIT = 1.0 unless defined?(OPTIMISTIC_LOCKING_CHECK_WAIT)
9
- OPTIMISTIC_LOCKING_RETRIES = 10 unless defined?(OPTIMISTIC_LOCKING_RETRIES)
8
+ OPTIMISTIC_LOCKING_CHECK_WAIT = 3.0 unless defined?(OPTIMISTIC_LOCKING_CHECK_WAIT)
9
+ OPTIMISTIC_LOCKING_RETRIES = 5 unless defined?(OPTIMISTIC_LOCKING_RETRIES)
10
10
 
11
11
  def initialize(url:, token:, http: HTTP)
12
12
  @url = url
@@ -14,23 +14,21 @@ module Dapi
14
14
  @token = token
15
15
  end
16
16
 
17
+ def delete_record(zone_name, lvalue, type)
18
+ with_optimistic_locking { delete_record!(zone_name, lvalue, type) }
19
+ end
20
+
17
21
  def get_zone(zone_name)
18
22
  unwrap { http.get(@url + "zone/" + zone_name) }
19
23
  end
20
24
 
25
+ # Useful for test suites, and staging domains
26
+ def truncate_zone(zone_name)
27
+ with_optimistic_locking { truncate_zone!(zone_name) }
28
+ end
29
+
21
30
  def upsert_record(zone_name, lvalue, type, rvalue, ttl)
22
- retries = OPTIMISTIC_LOCKING_RETRIES
23
- begin
24
- upsert_record!(zone_name, lvalue, type, rvalue, ttl)
25
- rescue Dapi::Client::OptimisticLockFailure
26
- if retries > 0
27
- retries -= 1
28
- sleep(0.1)
29
- retry
30
- else
31
- raise
32
- end
33
- end
31
+ with_optimistic_locking { upsert_record!(zone_name, lvalue, type, rvalue, ttl) }
34
32
  end
35
33
 
36
34
  private
@@ -57,19 +55,57 @@ module Dapi
57
55
  raise Dapi::Client::Error, "error parsing server response (JSON)"
58
56
  end
59
57
 
58
+ def delete_record!(zone_name, lvalue, type)
59
+ zone = get_zone(zone_name)
60
+ zone["records"].reject! { |r| r["name"] == lvalue && r["type"] == type }
61
+ unwrap { http.post(@url + "zone/" + zone_name, json: {data: zone}) }
62
+ optimistic_lock_check(zone_name) do |check|
63
+ not check["records"].detect { |r| r["name"] == lvalue && r["type"] == type }
64
+ end
65
+ end
66
+
67
+ def truncate_zone!(zone_name)
68
+ zone = get_zone(zone_name)
69
+ zone["records"].reject! { |r| r["type"] == "A" && r["name"] != "@" }
70
+ unwrap { http.post(@url + "zone/" + zone_name, json: {data: zone}) }
71
+ optimistic_lock_check(zone_name) do |check|
72
+ not check["records"].detect { |r| r["type"] == "A" && r["name"] != "@" }
73
+ end
74
+ end
75
+
60
76
  def upsert_record!(zone_name, lvalue, type, rvalue, ttl)
61
77
  zone = get_zone(zone_name)
62
78
  zone["records"].reject! { |r| r["name"] == lvalue && r["type"] == type }
63
79
  zone["records"] << {"name" => lvalue, "type" => type, "value" => rvalue, "ttl" => ttl}
64
80
  unwrap { http.post(@url + "zone/" + zone_name, json: {data: zone}) }
81
+ optimistic_lock_check(zone_name) do |check|
82
+ check["records"].detect { |r| r["name"] == lvalue && r["type"] == type && r["value"] == rvalue && r["ttl"] == ttl }
83
+ end
84
+ end
85
+
86
+ def optimistic_lock_check(zone_name, &block)
65
87
  sleep(OPTIMISTIC_LOCKING_CHECK_WAIT)
66
- zone = get_zone(zone_name)
67
- unless zone["records"].detect { |r| r["name"] == lvalue && r["type"] == type && r["value"] == rvalue && r["ttl"] == ttl }
68
- raise Dapi::Client::OptimisticLockFailure, "upsert_record: optimistic locking failed"
88
+ get_zone(zone_name).tap do |zone|
89
+ raise Dapi::Client::OptimisticLockFailure, "upsert_record: optimistic locking failed" unless block.call(zone)
90
+ end
91
+ end
92
+
93
+ def with_optimistic_locking(&block)
94
+ retries = OPTIMISTIC_LOCKING_RETRIES
95
+ begin
96
+ block.call
97
+ rescue Dapi::Client::OptimisticLockFailure
98
+ if retries > 0
99
+ retries -= 1
100
+ sleep(0.1)
101
+ retry
102
+ else
103
+ raise
104
+ end
69
105
  end
70
- zone
71
106
  end
72
107
 
108
+
73
109
  end
74
110
 
75
111
  end
@@ -1,5 +1,5 @@
1
1
  module Dapi
2
2
  class Client
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dapi-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
  - Sheldon Hearn