graphd 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +11 -0
- data/Gemfile.lock +2 -1
- data/examples/timeout_example.rb +21 -0
- data/graphd.gemspec +1 -0
- data/lib/graphd/client.rb +13 -0
- data/lib/graphd/client_stub.rb +40 -2
- data/lib/graphd/transaction.rb +44 -2
- data/lib/graphd/transaction_error.rb +1 -1
- data/lib/graphd/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98359f417fb784ec316e80de7298c05e7b69ba5910de8f85ae168bdfc9aefc4d
|
4
|
+
data.tar.gz: 06374bfbcfb72a0b2d57003d465a2e7d6a87f7337acd51da84d50370bdf1ccc8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0025a478e2c14db90355a0b644d1424af1c124c35a4bf0db76f8b0b3e3259aab0a3903c4336f69b3716d2eb30764e26c41acb36f4a395b5d023705927ec9a7d
|
7
|
+
data.tar.gz: 57e4df0e40891cbdea1e3afe151bebfc83a3eae70efb61a44808d1b914c82aa3f8de336ca76995c4e9db60614790b4e6d0653d2437fde674784d6951f9f303c9
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# To get started with Dependabot version updates, you'll need to specify which
|
2
|
+
# package ecosystems to update and where the package manifests are located.
|
3
|
+
# Please see the documentation for all configuration options:
|
4
|
+
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
5
|
+
|
6
|
+
version: 2
|
7
|
+
updates:
|
8
|
+
- package-ecosystem: "bundler" # See documentation for possible values
|
9
|
+
directory: "/" # Location of package manifests
|
10
|
+
schedule:
|
11
|
+
interval: "daily"
|
data/Gemfile.lock
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'grpc'
|
4
|
+
require_relative '../lib/graphd'
|
5
|
+
|
6
|
+
def client_stub
|
7
|
+
# if timeout is exceeded will throw `GRPC::DeadlineExceeded`
|
8
|
+
@client_stub ||= Graphd::ClientStub.new('localhost:9080', timeout: 1)
|
9
|
+
end
|
10
|
+
|
11
|
+
def client(client_stub)
|
12
|
+
@client ||= Graphd::Client.new(client_stub)
|
13
|
+
end
|
14
|
+
|
15
|
+
def run
|
16
|
+
dgraph_client = client(client_stub)
|
17
|
+
version = dgraph_client.check_version
|
18
|
+
p version
|
19
|
+
end
|
20
|
+
|
21
|
+
run
|
data/graphd.gemspec
CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.metadata['homepage_uri'] = spec.homepage
|
19
19
|
spec.metadata['source_code_uri'] = 'https://github.com/thegeorgeous/graphd'
|
20
20
|
spec.metadata['changelog_uri'] = 'https://github.com/thegeorgeous/graphd'
|
21
|
+
spec.metadata['documentation_uri'] = 'https://rubydoc.info/gems/graphd/'
|
21
22
|
|
22
23
|
# Specify which files should be added to the gem when it is released.
|
23
24
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
data/lib/graphd/client.rb
CHANGED
@@ -10,6 +10,10 @@ module Graphd
|
|
10
10
|
# client_stub = Graphd::ClientStub.new('localhost:9080')
|
11
11
|
# client = Graphd::Cilent.new(client_stub)
|
12
12
|
class Client
|
13
|
+
# Create a new instance of Graphd::Client
|
14
|
+
#
|
15
|
+
# @param clients [Array<Graphd::ClientStub>] The stubs that can be used
|
16
|
+
# to communicate with a DGraph server
|
13
17
|
def initialize(*clients)
|
14
18
|
raise ClientError unless clients
|
15
19
|
|
@@ -17,6 +21,9 @@ module Graphd
|
|
17
21
|
@jwt = Api::Jwt.new
|
18
22
|
end
|
19
23
|
|
24
|
+
# Get the version of the DGraph server
|
25
|
+
#
|
26
|
+
# @return [String] the version of the DGraph server
|
20
27
|
def check_version
|
21
28
|
request = Api::Check.new
|
22
29
|
response = client.check_version(request)
|
@@ -27,6 +34,12 @@ module Graphd
|
|
27
34
|
client.alter(operation)
|
28
35
|
end
|
29
36
|
|
37
|
+
# Create a new transaction
|
38
|
+
#
|
39
|
+
# @param read_only [true, false] whether the transaction should be read only
|
40
|
+
# @param best_effort [true, false] Enable best-effort queries for the transaction
|
41
|
+
#
|
42
|
+
# @return [Transaction]
|
30
43
|
def txn(read_only: false, best_effort: false)
|
31
44
|
Transaction.new(self, read_only: read_only, best_effort: best_effort)
|
32
45
|
end
|
data/lib/graphd/client_stub.rb
CHANGED
@@ -5,29 +5,67 @@ require_relative 'api_services_pb'
|
|
5
5
|
|
6
6
|
module Graphd
|
7
7
|
# gRPC Client stub for DGraph
|
8
|
+
# This stub is a very thin wrapper over `GRPC::ClientStub`. It exists purely
|
9
|
+
# to provide sensible defaults relevant to DGraph like host and credentials
|
8
10
|
class ClientStub
|
9
11
|
attr_reader :stub
|
10
12
|
|
13
|
+
# Creates a new Graphd::ClientStub
|
14
|
+
#
|
15
|
+
# @param host [String] the host the stub connects to
|
16
|
+
# @param creds [GRPC::Core::ChannelCredentials|Symbol] the channel credentials, or
|
17
|
+
# :this_channel_is_insecure, which explicitly indicates that the client
|
18
|
+
# should be created with an insecure connection. Note: this argument is
|
19
|
+
# ignored if the channel_override argument is provided.
|
20
|
+
# @param channel_override [GRPC::Core::Channel] a pre-created channel
|
21
|
+
# @param timeout [Number] the default timeout in milliseconds to use in requests
|
22
|
+
# This will be used to set the deadline for every call made using this stub
|
23
|
+
# @param channel_args [Hash] the channel arguments. Note: this argument is
|
24
|
+
# ignored if the channel_override argument is provided.
|
11
25
|
def initialize(
|
12
26
|
host = 'localhost:9080',
|
13
27
|
credentials = :this_channel_is_insecure,
|
14
|
-
|
28
|
+
channel_override: nil,
|
29
|
+
timeout: nil,
|
30
|
+
channel_args: {}
|
15
31
|
)
|
16
|
-
@stub = Api::Dgraph::Stub.new(
|
32
|
+
@stub = Api::Dgraph::Stub.new(
|
33
|
+
host,
|
34
|
+
credentials,
|
35
|
+
channel_override: channel_override,
|
36
|
+
timeout: timeout,
|
37
|
+
channel_args: channel_args
|
38
|
+
)
|
17
39
|
end
|
18
40
|
|
41
|
+
# Request the version of the DGraph server running on host
|
42
|
+
#
|
43
|
+
# @param request [Api::Check]
|
44
|
+
# @return [Api::Version]
|
19
45
|
def check_version(request)
|
20
46
|
@stub.check_version(request)
|
21
47
|
end
|
22
48
|
|
49
|
+
# Run operations that alter the DGraph db like set schema and drop_all
|
50
|
+
#
|
51
|
+
# @param operation [Api::Operation]
|
52
|
+
# @return [Api::Payload]
|
23
53
|
def alter(operation)
|
24
54
|
@stub.alter(operation)
|
25
55
|
end
|
26
56
|
|
57
|
+
# Query the db
|
58
|
+
#
|
59
|
+
# @param request [Api::Request]
|
60
|
+
# @return [Api::Response]
|
27
61
|
def query(request)
|
28
62
|
@stub.query(request)
|
29
63
|
end
|
30
64
|
|
65
|
+
# Commit a mutation or abort if it fails
|
66
|
+
#
|
67
|
+
# @param transaction_context [Api::TxnContext]
|
68
|
+
# @return [Api::TxnContext]
|
31
69
|
def commit_or_abort(transaction_context:)
|
32
70
|
@stub.commit_or_abort(transaction_context)
|
33
71
|
end
|
data/lib/graphd/transaction.rb
CHANGED
@@ -1,9 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'json'
|
4
|
+
require_relative 'transaction_error'
|
4
5
|
|
5
6
|
module Graphd
|
7
|
+
# A transaction to perform queries and mutations
|
8
|
+
#
|
9
|
+
# A transaction bounds a sequence of queries and mutations that are committed
|
10
|
+
# by Dgraph as a single unit: that is, on commit, either all the changes are
|
11
|
+
# accepted by Dgraph or none are.
|
6
12
|
class Transaction
|
13
|
+
# Create a new transaction
|
14
|
+
#
|
15
|
+
# @param client [Graphd::Client] The client for which the transaction needs to be created
|
16
|
+
# @param read_only [true, false] whether the transaction should be read only
|
17
|
+
# Read-only transactions are ideal for transactions which only involve
|
18
|
+
# queries. Mutations and commits are not allowed.
|
19
|
+
# @param best_effort [true, false] Enable best-effort queries Best-effort
|
20
|
+
# queries are faster than normal queries because they bypass the normal
|
21
|
+
# consensus protocol. For this same reason, best-effort queries cannot
|
22
|
+
# guarantee to return the latest data. Best-effort queries are only
|
23
|
+
# supported by read-only transactions.
|
7
24
|
def initialize(client, read_only: false, best_effort: false)
|
8
25
|
if !read_only && best_effort
|
9
26
|
raise TransactionError, 'Best effort transactions are only compatible with read-only transactions'
|
@@ -30,6 +47,17 @@ module Graphd
|
|
30
47
|
do_request(request)
|
31
48
|
end
|
32
49
|
|
50
|
+
# Create or modify an instance of Api::Mutation with the provided configuration
|
51
|
+
#
|
52
|
+
# @param mutation [Api::Mutation] (optional) A mutation to be modified
|
53
|
+
# @param set_obj [Hash] (optional) A Hash that represent a value to be set
|
54
|
+
# This value will be set the value of `set_json` of `Api::Mutation`
|
55
|
+
# @param del_obj [Hash] (optional) A Hash that represents a value to be deleted
|
56
|
+
# This value will be set the value of `delete_json` of `Api::Mutation`
|
57
|
+
# @param set_nquads [String] (optional) An N-Quad representing the value to be set for `Api::Mutation`
|
58
|
+
# @param del_nquads [String] (optional) An N-Quad representing the value to be deleted for `Api::Mutation`
|
59
|
+
#
|
60
|
+
# @return [Api::Mutation]
|
33
61
|
def create_mutation(mutation: nil, set_obj: nil, del_obj: nil, set_nquads: nil, del_nquads: nil, cond: nil)
|
34
62
|
mutation ||= ::Api::Mutation.new
|
35
63
|
|
@@ -42,6 +70,18 @@ module Graphd
|
|
42
70
|
mutation
|
43
71
|
end
|
44
72
|
|
73
|
+
# Create an instance of Api::Request
|
74
|
+
#
|
75
|
+
# @param query [String] (optional) A GraphQL query as a string
|
76
|
+
# @param query [Hash] (optional) A Hash of variables used in the provided query
|
77
|
+
# The keys can be symbols or strings but not numbers. The values must be
|
78
|
+
# strings
|
79
|
+
# @param mutations [Array<Api::Mutation>] A list of mutations
|
80
|
+
# @param commit_now [true, false] Indicate that the mutation must be
|
81
|
+
# immediately committed. This can be used when the mutation needs to be
|
82
|
+
# committed, without querying anything further.
|
83
|
+
#
|
84
|
+
# @return [Api::Request]
|
45
85
|
def create_request(query: nil, variables: nil, mutations: nil, commit_now: nil)
|
46
86
|
request = ::Api::Request.new(
|
47
87
|
start_ts: @transaction_context.start_ts,
|
@@ -50,10 +90,12 @@ module Graphd
|
|
50
90
|
best_effort: true
|
51
91
|
)
|
52
92
|
variables&.each do |key, value|
|
53
|
-
unless key.is_a?(
|
54
|
-
raise TransactionError, '
|
93
|
+
unless key.is_a?(Symbol) || key.is_a?(String)
|
94
|
+
raise TransactionError, 'Keys in variable map must be symbols or strings'
|
55
95
|
end
|
56
96
|
|
97
|
+
raise TransactionError, 'Values in variable map must be strings' unless value.is_a?(String)
|
98
|
+
|
57
99
|
request.vars[key] = value
|
58
100
|
end
|
59
101
|
|
data/lib/graphd/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- George Thomas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-12-
|
11
|
+
date: 2020-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grpc
|
@@ -33,6 +33,7 @@ executables:
|
|
33
33
|
extensions: []
|
34
34
|
extra_rdoc_files: []
|
35
35
|
files:
|
36
|
+
- ".github/dependabot.yml"
|
36
37
|
- ".gitignore"
|
37
38
|
- ".rspec"
|
38
39
|
- ".rubocop.yml"
|
@@ -47,6 +48,7 @@ files:
|
|
47
48
|
- bin/console
|
48
49
|
- bin/setup
|
49
50
|
- examples/simple_example.rb
|
51
|
+
- examples/timeout_example.rb
|
50
52
|
- graphd.gemspec
|
51
53
|
- lib/graphd.rb
|
52
54
|
- lib/graphd/aborted_error.rb
|
@@ -67,6 +69,7 @@ metadata:
|
|
67
69
|
homepage_uri: https://github.com/thegeorgeous/graphd
|
68
70
|
source_code_uri: https://github.com/thegeorgeous/graphd
|
69
71
|
changelog_uri: https://github.com/thegeorgeous/graphd
|
72
|
+
documentation_uri: https://rubydoc.info/gems/graphd/
|
70
73
|
post_install_message:
|
71
74
|
rdoc_options: []
|
72
75
|
require_paths:
|