Sha256: 0031d3d4aae0d336a8fea7239de76416243fb78571f66da377065f8881889fda

Contents?: true

Size: 1.74 KB

Versions: 10

Compression:

Stored size: 1.74 KB

Contents

class Etcdv3
  class KV
    include Etcdv3::KV::Requests
    include GRPC::Core::TimeConsts

    def initialize(hostname, credentials, timeout, metadata={})
      @stub = Etcdserverpb::KV::Stub.new(hostname, credentials)
      @timeout = timeout
      @metadata = metadata
    end

    def get(key, opts={})
      timeout = opts.delete(:timeout)
      @stub.range(get_request(key, opts), metadata: @metadata, deadline: deadline(timeout))
    end

    def del(key, range_end: '', timeout: nil)
      @stub.delete_range(del_request(key, range_end), metadata: @metadata, deadline: deadline(timeout))
    end

    def put(key, value, lease: nil, timeout: nil)
      @stub.put(put_request(key, value, lease), metadata: @metadata, deadline: deadline(timeout))
    end

    def transaction(block, timeout: nil)
      txn = Etcdv3::KV::Transaction.new
      block.call(txn)
      request = Etcdserverpb::TxnRequest.new(
        compare: txn.compare,
        success: generate_request_ops(txn.success),
        failure: generate_request_ops(txn.failure)
      )
      @stub.txn(request, metadata: @metadata, deadline: deadline(timeout))
    end

    private

    def deadline(timeout)
      from_relative_time(timeout || @timeout)
    end

    def generate_request_ops(requests)
      requests.map do |request|
        if request.is_a?(Etcdserverpb::RangeRequest)
          Etcdserverpb::RequestOp.new(request_range: request)
        elsif request.is_a?(Etcdserverpb::PutRequest)
          Etcdserverpb::RequestOp.new(request_put: request)
        elsif request.is_a?(Etcdserverpb::DeleteRangeRequest)
          Etcdserverpb::RequestOp.new(request_delete_range: request)
        else
          raise "Invalid command. Not sure how you got here!"
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 2 rubygems

Version Path
rubypitaya-3.12.5 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/etcdv3-0.11.5/lib/etcdv3/kv.rb
rubypitaya-3.12.4 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/etcdv3-0.11.5/lib/etcdv3/kv.rb
rubypitaya-3.12.3 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/etcdv3-0.11.5/lib/etcdv3/kv.rb
rubypitaya-3.12.2 ./lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/etcdv3-0.11.5/lib/etcdv3/kv.rb
etcdv3-0.11.5 lib/etcdv3/kv.rb
etcdv3-0.11.4 lib/etcdv3/kv.rb
etcdv3-0.11.3 lib/etcdv3/kv.rb
etcdv3-0.10.2 lib/etcdv3/kv.rb
etcdv3-0.10.1 lib/etcdv3/kv.rb
etcdv3-0.9.0 lib/etcdv3/kv.rb