dapi-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 +4 -4
 - data/lib/dapi/client.rb +54 -18
 - data/lib/dapi/client/version.rb +1 -1
 - metadata +1 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: a9475f64c82e86742b38333c59b329a2a2f0873920cfa99a46f2ef0b099ea176
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 7fcd29bf890170ba4f7f42b17849cb36538b1e43d81dfd8122978dcdb0dd79aa
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 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 =  
     | 
| 
       9 
     | 
    
         
            -
                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 
     | 
    
         
            -
                   
     | 
| 
       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 
     | 
    
         
            -
                   
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
      
 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
         
     | 
    
        data/lib/dapi/client/version.rb
    CHANGED