fauna 2.1.2 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +7 -0
- data/README.md +20 -17
- data/fauna.gemspec +2 -2
- data/lib/fauna.rb +1 -1
- data/lib/fauna/client.rb +29 -12
- data/lib/fauna/context.rb +7 -7
- data/lib/fauna/errors.rb +44 -26
- data/lib/fauna/objects.rb +3 -3
- data/lib/fauna/page.rb +2 -2
- data/lib/fauna/query.rb +110 -62
- data/lib/fauna/version.rb +1 -1
- data/spec/errors_spec.rb +29 -1
- data/spec/fauna_helper.rb +8 -0
- data/spec/query_spec.rb +76 -14
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79e3f29b34209d1fd34ebfb3a878fe2210cc6a34
|
4
|
+
data.tar.gz: eb8887d649b435f9e1064717c04232ace5af76d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b23b487d4202f26858139562129d66132cfdc0d313067381acd077504a80bee7b74b22e084dc0cc4b4564857ad8ff90c9145dc3f58e7b9c79432ba458e0468f
|
7
|
+
data.tar.gz: 0ae0ecc0c29346e8aeb64228c67e9ca8f059de588c9acaa3de2b4cd165ab9228ef5dd8aaf5276263b1bc5ff98400c27ecf11357951a21e21888221a1841036d3
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
2.2.0
|
2
|
+
* Added `create_class`, `create_index`, `create_database`, `create_key`, `database`, `class`,
|
3
|
+
and `index` query functions.
|
4
|
+
* Removed `count` query function.
|
5
|
+
* Raises `Fauna::UnavailableError` for all 503s and for Faraday network errors.
|
6
|
+
* Fix documentation errors and update links.
|
7
|
+
|
1
8
|
2.1.2
|
2
9
|
* Change default domain to `cloud.faunadb.com`.
|
3
10
|
|
data/README.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
# FaunaDB
|
2
2
|
|
3
|
-
|
3
|
+
[![Build Status](https://img.shields.io/travis/faunadb/faunadb-ruby/master.svg?maxAge=21600)](https://travis-ci.org/faunadb/faunadb-ruby)
|
4
|
+
[![Coverage Status](https://img.shields.io/codecov/c/github/faunadb/faunadb-ruby/master.svg?maxAge=21600)](https://codecov.io/gh/faunadb/faunadb-ruby/branch/master)
|
5
|
+
[![Gem Version](https://img.shields.io/gem/v/fauna.svg?maxAge=21600)](https://rubygems.org/gems/fauna)
|
6
|
+
[![License](https://img.shields.io/badge/license-MPL_2.0-blue.svg?maxAge=2592000)](https://raw.githubusercontent.com/faunadb/faunadb-ruby/master/LICENSE)
|
7
|
+
|
8
|
+
Ruby driver for [FaunaDB](https://fauna.com).
|
4
9
|
|
5
10
|
## Installation
|
6
11
|
|
@@ -16,6 +21,15 @@ And then execute:
|
|
16
21
|
|
17
22
|
$ bundle
|
18
23
|
|
24
|
+
## Documentation
|
25
|
+
|
26
|
+
The driver documentation is [hosted on GitHub Pages](https://faunadb.github.io/faunadb-ruby/).
|
27
|
+
|
28
|
+
Please see the [FaunaDB Documentation](https://fauna.com/documentation) for
|
29
|
+
a complete API reference, or look in
|
30
|
+
[`/test`](https://github.com/faunadb/faunadb-ruby/tree/master/test) for more
|
31
|
+
examples.
|
32
|
+
|
19
33
|
## Compatibility
|
20
34
|
|
21
35
|
Tested and compatible with the following ruby versions:
|
@@ -95,39 +109,28 @@ $fauna.query { delete user[:ref] }
|
|
95
109
|
## Running Tests
|
96
110
|
|
97
111
|
You can run tests against FaunaDB Cloud yourself.
|
98
|
-
[Create an admin key](https://
|
99
|
-
`FAUNA_ROOT_KEY` environment variable to it's secret. Then run `rake
|
112
|
+
[Create an admin key](https://fauna.com/account/keys) and set
|
113
|
+
`FAUNA_ROOT_KEY` environment variable to it's secret. Then run `rake spec`:
|
100
114
|
|
101
115
|
```bash
|
102
116
|
export FAUNA_ROOT_KEY='kqnPAbijGhkgAAC03-36hjCvcTnWf4Pl8w97UE1HeWo'
|
103
|
-
rake
|
117
|
+
rake spec
|
104
118
|
```
|
105
119
|
|
106
120
|
To run a single test, use e.g. `ruby test/client_test.rb`.
|
107
121
|
|
108
122
|
Coverage is automatically run as part of the tests. After running tests, check
|
109
123
|
`coverage/index.html` for the coverage report. If using jruby, use
|
110
|
-
`JRUBY_OPTS="--debug" bundle exec rake
|
124
|
+
`JRUBY_OPTS="--debug" bundle exec rake spec` to ensure coverage is generated
|
111
125
|
correctly.
|
112
126
|
|
113
|
-
## Documenting
|
114
|
-
|
115
|
-
Use `rake rdoc` to generate documentation.
|
116
|
-
|
117
|
-
## Further Reading
|
118
|
-
|
119
|
-
Please see the [FaunaDB Documentation](https://faunadb.com/documentation) for
|
120
|
-
a complete API reference, or look in
|
121
|
-
[`/test`](https://github.com/faunadb/faunadb-ruby/tree/master/test) for more
|
122
|
-
examples.
|
123
|
-
|
124
127
|
## Contributing
|
125
128
|
|
126
129
|
GitHub pull requests are very welcome.
|
127
130
|
|
128
131
|
## LICENSE
|
129
132
|
|
130
|
-
Copyright 2016 [Fauna, Inc.](https://
|
133
|
+
Copyright 2016 [Fauna, Inc.](https://fauna.com/)
|
131
134
|
|
132
135
|
Licensed under the Mozilla Public License, Version 2.0 (the
|
133
136
|
"License"); you may not use this software except in compliance with
|
data/fauna.gemspec
CHANGED
@@ -5,7 +5,7 @@ Gem::Specification.new do |s|
|
|
5
5
|
s.name = 'fauna'
|
6
6
|
s.version = Fauna::VERSION.dup
|
7
7
|
s.author = 'Fauna, Inc.'
|
8
|
-
s.email = 'priority@
|
8
|
+
s.email = 'priority@fauna.com'
|
9
9
|
s.summary = 'FaunaDB Ruby driver'
|
10
10
|
s.description = 'Ruby driver for FaunaDB.'
|
11
11
|
s.homepage = 'https://github.com/faunadb/faunadb-ruby'
|
@@ -22,5 +22,5 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_runtime_dependency 'json', '~> 1.8'
|
23
23
|
s.add_development_dependency 'rspec', '~> 3.4'
|
24
24
|
s.add_development_dependency 'rubocop', '~> 0.38.0'
|
25
|
-
s.add_development_dependency '
|
25
|
+
s.add_development_dependency 'codecov', '~> 0.1.5'
|
26
26
|
end
|
data/lib/fauna.rb
CHANGED
data/lib/fauna/client.rb
CHANGED
@@ -24,7 +24,7 @@ module Fauna
|
|
24
24
|
attr_reader :connection_timeout
|
25
25
|
# Callback that will be passed a +RequestResult+ after every completed request.
|
26
26
|
attr_reader :observer
|
27
|
-
# Faraday adapter in use.
|
27
|
+
# Faraday[https://github.com/lostisland/faraday] adapter in use.
|
28
28
|
attr_reader :adapter
|
29
29
|
|
30
30
|
##
|
@@ -65,7 +65,7 @@ module Fauna
|
|
65
65
|
##
|
66
66
|
# Issues a query to FaunaDB.
|
67
67
|
#
|
68
|
-
# Queries are built via the Query helpers. See {FaunaDB Query API}[https://
|
68
|
+
# Queries are built via the Query helpers. See {FaunaDB Query API}[https://fauna.com/documentation/queries]
|
69
69
|
# for information on constructing queries.
|
70
70
|
#
|
71
71
|
# +expression+:: A query expression
|
@@ -79,7 +79,7 @@ module Fauna
|
|
79
79
|
#
|
80
80
|
# <code>client.query { add(1, 2, subtract(3, 2)) }</code>
|
81
81
|
#
|
82
|
-
# Reference: {Executing FaunaDB Queries}[https://
|
82
|
+
# Reference: {Executing FaunaDB Queries}[https://fauna.com/documentation#queries]
|
83
83
|
#
|
84
84
|
# :category: Query Methods
|
85
85
|
def query(expression = nil, &expr_block)
|
@@ -94,7 +94,7 @@ module Fauna
|
|
94
94
|
# Creates a Fauna::Page for paging/iterating over a set.
|
95
95
|
#
|
96
96
|
# +set+:: A set query to paginate over.
|
97
|
-
# +params+:: A list of parameters to pass to {paginate}[https://
|
97
|
+
# +params+:: A list of parameters to pass to {paginate}[https://fauna.com/documentation/queries#read_functions-paginate_set].
|
98
98
|
# +fauna_map+:: Optional block to wrap the generated paginate query with. The block will be run in a query context.
|
99
99
|
# The paginate query will be passed into the block as an argument.
|
100
100
|
def paginate(set, params = {}, &fauna_map)
|
@@ -107,7 +107,7 @@ module Fauna
|
|
107
107
|
# +path+:: Path to +GET+.
|
108
108
|
# +query+:: Query parameters to append to the path.
|
109
109
|
#
|
110
|
-
# Reference: {FaunaDB REST API}[https://
|
110
|
+
# Reference: {FaunaDB REST API}[https://fauna.com/documentation/rest]
|
111
111
|
#
|
112
112
|
# :category: REST Methods
|
113
113
|
def get(path, query = {})
|
@@ -120,7 +120,7 @@ module Fauna
|
|
120
120
|
# +path+:: Path to +POST+.
|
121
121
|
# +data+:: Data to post as the body. +data+ is automatically converted to JSON.
|
122
122
|
#
|
123
|
-
# Reference: {FaunaDB REST API}[https://
|
123
|
+
# Reference: {FaunaDB REST API}[https://fauna.com/documentation/rest]
|
124
124
|
#
|
125
125
|
# :category: REST Methods
|
126
126
|
def post(path, data = {})
|
@@ -133,7 +133,7 @@ module Fauna
|
|
133
133
|
# +path+:: Path to +PUT+.
|
134
134
|
# +data+:: Data to post as the body. +data+ is automatically converted to JSON.
|
135
135
|
#
|
136
|
-
# Reference: {FaunaDB REST API}[https://
|
136
|
+
# Reference: {FaunaDB REST API}[https://fauna.com/documentation/rest]
|
137
137
|
#
|
138
138
|
# :category: REST Methods
|
139
139
|
def put(path, data = {})
|
@@ -146,7 +146,7 @@ module Fauna
|
|
146
146
|
# +path+:: Path to +PATCH+.
|
147
147
|
# +data+:: Data to post as the body. +data+ is automatically converted to JSON.
|
148
148
|
#
|
149
|
-
# Reference: {FaunaDB REST API}[https://
|
149
|
+
# Reference: {FaunaDB REST API}[https://fauna.com/documentation/rest]
|
150
150
|
#
|
151
151
|
# :category: REST Methods
|
152
152
|
def patch(path, data = {})
|
@@ -158,7 +158,7 @@ module Fauna
|
|
158
158
|
#
|
159
159
|
# +path+:: Path to +DELETE+.
|
160
160
|
#
|
161
|
-
# Reference: {FaunaDB REST API}[https://
|
161
|
+
# Reference: {FaunaDB REST API}[https://fauna.com/documentation/rest]
|
162
162
|
#
|
163
163
|
# :category: REST Methods
|
164
164
|
def delete(path)
|
@@ -168,7 +168,7 @@ module Fauna
|
|
168
168
|
##
|
169
169
|
# Ping FaunaDB.
|
170
170
|
#
|
171
|
-
# Reference: {FaunaDB Rest API}[https://
|
171
|
+
# Reference: {FaunaDB Rest API}[https://fauna.com/documentation#rest-other].
|
172
172
|
#
|
173
173
|
# :category: REST Methods
|
174
174
|
def ping(params = {})
|
@@ -209,7 +209,22 @@ module Fauna
|
|
209
209
|
path = path.to_s
|
210
210
|
|
211
211
|
start_time = Time.now
|
212
|
-
|
212
|
+
begin
|
213
|
+
response = perform_request action, path, query, data
|
214
|
+
rescue Faraday::ClientError => e
|
215
|
+
end_time = Time.now
|
216
|
+
|
217
|
+
message = e.class.name
|
218
|
+
unless e.message.nil?
|
219
|
+
message += ": #{e.message}"
|
220
|
+
end
|
221
|
+
|
222
|
+
request_result = RequestResult.new(self,
|
223
|
+
action, path, query, data,
|
224
|
+
nil, nil, nil, nil,
|
225
|
+
start_time, end_time)
|
226
|
+
raise UnexpectedError.new(message, request_result)
|
227
|
+
end
|
213
228
|
end_time = Time.now
|
214
229
|
|
215
230
|
response_raw = response.body
|
@@ -223,7 +238,7 @@ module Fauna
|
|
223
238
|
|
224
239
|
@observer.call(request_result) unless @observer.nil?
|
225
240
|
|
226
|
-
if response_json.nil?
|
241
|
+
if response_json.nil? && response.status != 503
|
227
242
|
fail UnexpectedError.new('Invalid JSON.', request_result)
|
228
243
|
end
|
229
244
|
|
@@ -237,6 +252,8 @@ module Fauna
|
|
237
252
|
req.body = FaunaJson.to_json(data) unless data.nil?
|
238
253
|
req.url(path || '')
|
239
254
|
end
|
255
|
+
rescue Faraday::ConnectionFailed, Faraday::TimeoutError, Faraday::SSLError => e
|
256
|
+
raise UnavailableError.new(e)
|
240
257
|
end
|
241
258
|
end
|
242
259
|
|
data/lib/fauna/context.rb
CHANGED
@@ -46,7 +46,7 @@ module Fauna
|
|
46
46
|
# +path+:: Path to +GET+.
|
47
47
|
# +query+:: Query parameters to append to the path.
|
48
48
|
#
|
49
|
-
# Reference: {FaunaDB REST API}[https://
|
49
|
+
# Reference: {FaunaDB REST API}[https://fauna.com/documentation/rest]
|
50
50
|
#
|
51
51
|
# :category: Client Methods
|
52
52
|
def self.get(path, query = {})
|
@@ -59,7 +59,7 @@ module Fauna
|
|
59
59
|
# +path+:: Path to +POST+.
|
60
60
|
# +data+:: Data to post as the body.
|
61
61
|
#
|
62
|
-
# Reference: {FaunaDB REST API}[https://
|
62
|
+
# Reference: {FaunaDB REST API}[https://fauna.com/documentation/rest]
|
63
63
|
#
|
64
64
|
# :category: Client Methods
|
65
65
|
def self.post(path, data = {})
|
@@ -72,7 +72,7 @@ module Fauna
|
|
72
72
|
# +path+:: Path to +PUT+.
|
73
73
|
# +data+:: Data to post as the body.
|
74
74
|
#
|
75
|
-
# Reference: {FaunaDB REST API}[https://
|
75
|
+
# Reference: {FaunaDB REST API}[https://fauna.com/documentation/rest]
|
76
76
|
#
|
77
77
|
# :category: Client Methods
|
78
78
|
def self.put(path, data = {})
|
@@ -85,7 +85,7 @@ module Fauna
|
|
85
85
|
# +path+:: Path to +PATCH+.
|
86
86
|
# +data+:: Data to post as the body.
|
87
87
|
#
|
88
|
-
# Reference: {FaunaDB REST API}[https://
|
88
|
+
# Reference: {FaunaDB REST API}[https://fauna.com/documentation/rest]
|
89
89
|
#
|
90
90
|
# :category: Client Methods
|
91
91
|
def self.patch(path, data = {})
|
@@ -98,7 +98,7 @@ module Fauna
|
|
98
98
|
# +path+:: Path to +DELETE+.
|
99
99
|
# +data+:: Data to post as the body.
|
100
100
|
#
|
101
|
-
# Reference: {FaunaDB REST API}[https://
|
101
|
+
# Reference: {FaunaDB REST API}[https://fauna.com/documentation/rest]
|
102
102
|
#
|
103
103
|
# :category: Client Methods
|
104
104
|
def self.delete(path)
|
@@ -108,7 +108,7 @@ module Fauna
|
|
108
108
|
##
|
109
109
|
# Issues a query to FaunaDB with the current client context.
|
110
110
|
#
|
111
|
-
# Queries are built via the Query helpers. See {FaunaDB Query API}[https://
|
111
|
+
# Queries are built via the Query helpers. See {FaunaDB Query API}[https://fauna.com/documentation/queries]
|
112
112
|
# for information on constructing queries.
|
113
113
|
#
|
114
114
|
# +expression+:: A query expression
|
@@ -122,7 +122,7 @@ module Fauna
|
|
122
122
|
# Creates a Fauna::Page for paging/iterating over a set with the current client context.
|
123
123
|
#
|
124
124
|
# +set+:: A set query to paginate over.
|
125
|
-
# +params+:: A list of parameters to pass to {paginate}[https://
|
125
|
+
# +params+:: A list of parameters to pass to {paginate}[https://fauna.com/documentation/queries#read_functions-paginate_set].
|
126
126
|
# +fauna_map+:: Optional block to wrap the generated paginate query with. The block will be run in a query context.
|
127
127
|
# The paginate query will be passed into the block as an argument.
|
128
128
|
def self.paginate(set, params = {}, &fauna_map)
|
data/lib/fauna/errors.rb
CHANGED
@@ -20,7 +20,7 @@ module Fauna
|
|
20
20
|
|
21
21
|
##
|
22
22
|
# Error returned by the FaunaDB server.
|
23
|
-
# For documentation of error types, see the docs[https://
|
23
|
+
# For documentation of error types, see the docs[https://fauna.com/documentation#errors].
|
24
24
|
class FaunaError < RuntimeError
|
25
25
|
# List of ErrorData objects returned by the server.
|
26
26
|
attr_reader :errors
|
@@ -55,34 +55,52 @@ module Fauna
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
# Creates a new error from a given RequestResult.
|
58
|
+
# Creates a new error from a given RequestResult or Exception.
|
59
59
|
def initialize(request_result)
|
60
|
-
|
61
|
-
errors_raw = UnexpectedError.get_or_raise request_result, request_result.response_content, :errors
|
62
|
-
@errors = catch :invalid_response do
|
63
|
-
throw :invalid_response unless errors_raw.is_a? Array
|
64
|
-
errors_raw.map { |error| ErrorData.from_hash(error) }
|
65
|
-
end
|
60
|
+
message = nil
|
66
61
|
|
67
|
-
if
|
68
|
-
|
69
|
-
elsif @errors.empty?
|
70
|
-
fail UnexpectedError.new('Error data returned was blank.', request_result)
|
71
|
-
end
|
62
|
+
if request_result.is_a? RequestResult
|
63
|
+
@request_result = request_result
|
72
64
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
65
|
+
begin
|
66
|
+
errors_raw = UnexpectedError.get_or_raise request_result, request_result.response_content, :errors
|
67
|
+
@errors = catch :invalid_response do
|
68
|
+
throw :invalid_response unless errors_raw.is_a? Array
|
69
|
+
errors_raw.map { |error| ErrorData.from_hash(error) }
|
70
|
+
end
|
77
71
|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
72
|
+
if @errors.nil?
|
73
|
+
fail UnexpectedError.new('Error data has an unexpected format.', request_result)
|
74
|
+
elsif @errors.empty?
|
75
|
+
fail UnexpectedError.new('Error data returned was blank.', request_result)
|
76
|
+
end
|
83
77
|
|
84
|
-
|
85
|
-
|
78
|
+
message = @errors.map do |error|
|
79
|
+
msg = 'Error'
|
80
|
+
msg += " at #{error.position}" unless error.position.nil?
|
81
|
+
msg += ": #{error.code} - #{error.description}"
|
82
|
+
|
83
|
+
unless error.failures.nil?
|
84
|
+
msg += ' (' + error.failures.map do |failure|
|
85
|
+
"Failure at #{failure.field}: #{failure.code} - #{failure.description}"
|
86
|
+
end.join(' ') + ')'
|
87
|
+
end
|
88
|
+
|
89
|
+
msg
|
90
|
+
end.join(' ')
|
91
|
+
rescue UnexpectedError => e
|
92
|
+
if request_result.status_code != 503
|
93
|
+
raise e
|
94
|
+
end
|
95
|
+
|
96
|
+
message = request_result.response_raw
|
97
|
+
end
|
98
|
+
elsif request_result.is_a? Exception
|
99
|
+
message = request_result.class.name
|
100
|
+
unless request_result.message.nil?
|
101
|
+
message += ": #{request_result.message}"
|
102
|
+
end
|
103
|
+
end
|
86
104
|
|
87
105
|
super(message)
|
88
106
|
end
|
@@ -117,7 +135,7 @@ module Fauna
|
|
117
135
|
##
|
118
136
|
# Error code.
|
119
137
|
#
|
120
|
-
# Reference: {FaunaDB Error codes}[https://
|
138
|
+
# Reference: {FaunaDB Error codes}[https://fauna.com/documentation#errors]
|
121
139
|
attr_reader :code
|
122
140
|
# Error description.
|
123
141
|
attr_reader :description
|
@@ -148,7 +166,7 @@ module Fauna
|
|
148
166
|
|
149
167
|
##
|
150
168
|
# Part of ErrorData.
|
151
|
-
# For more information, see the {docs}[https://
|
169
|
+
# For more information, see the {docs}[https://fauna.com/documentation#errors-invalid_data].
|
152
170
|
class Failure
|
153
171
|
# Failure code.
|
154
172
|
attr_reader :code
|
data/lib/fauna/objects.rb
CHANGED
@@ -2,7 +2,7 @@ module Fauna
|
|
2
2
|
##
|
3
3
|
# A Ref.
|
4
4
|
#
|
5
|
-
# Reference: {FaunaDB Special Types}[https://
|
5
|
+
# Reference: {FaunaDB Special Types}[https://fauna.com/documentation/queries-values-special_types]
|
6
6
|
class Ref
|
7
7
|
# The raw ref string.
|
8
8
|
attr_accessor :value
|
@@ -63,7 +63,7 @@ module Fauna
|
|
63
63
|
##
|
64
64
|
# A SetRef.
|
65
65
|
#
|
66
|
-
# Reference: {FaunaDB Special Types}[https://
|
66
|
+
# Reference: {FaunaDB Special Types}[https://fauna.com/documentation/queries-values-special_types]
|
67
67
|
class SetRef
|
68
68
|
# The raw set hash.
|
69
69
|
attr_accessor :value
|
@@ -73,7 +73,7 @@ module Fauna
|
|
73
73
|
#
|
74
74
|
# +params+:: Hash of parameters to build the SetRef with.
|
75
75
|
#
|
76
|
-
# Reference: {FaunaDB Special Types}[https://
|
76
|
+
# Reference: {FaunaDB Special Types}[https://fauna.com/documentation/queries-values-special_types]
|
77
77
|
def initialize(params = {})
|
78
78
|
self.value = params
|
79
79
|
end
|
data/lib/fauna/page.rb
CHANGED
@@ -46,7 +46,7 @@ module Fauna
|
|
46
46
|
#
|
47
47
|
# +client+:: Client to execute queries with.
|
48
48
|
# +set+:: A set query to paginate over.
|
49
|
-
# +params+:: A list of parameters to pass to {paginate}[https://
|
49
|
+
# +params+:: A list of parameters to pass to {paginate}[https://fauna.com/documentation/queries#read_functions-paginate_set].
|
50
50
|
# +lambda+:: Optional lambda to map the generated paginate query with. The block will be run in a query context.
|
51
51
|
# An element from the current page will be passed into the block as an argument. See #map for more info.
|
52
52
|
def initialize(client, set, params = {}, &lambda)
|
@@ -128,7 +128,7 @@ module Fauna
|
|
128
128
|
##
|
129
129
|
# Returns a copy of the page with the given +params+ set.
|
130
130
|
#
|
131
|
-
# See {paginate}[https://
|
131
|
+
# See {paginate}[https://fauna.com/documentation/queries#read_functions-paginate_set] for more details.
|
132
132
|
def with_params(params = {})
|
133
133
|
with_dup do |page|
|
134
134
|
page_params = page.instance_variable_get(:@params)
|
data/lib/fauna/query.rb
CHANGED
@@ -42,7 +42,7 @@ module Fauna
|
|
42
42
|
##
|
43
43
|
# Construct a ref value
|
44
44
|
#
|
45
|
-
# Reference: {FaunaDB Values}[https://
|
45
|
+
# Reference: {FaunaDB Values}[https://fauna.com/documentation/queries#values]
|
46
46
|
def ref(str, id = nil)
|
47
47
|
if id.nil?
|
48
48
|
Ref.new(str)
|
@@ -59,7 +59,7 @@ module Fauna
|
|
59
59
|
# Fauna.query { { x: 1, y: add(1, 2) } }
|
60
60
|
# Fauna.query { object(x: 1, y: add(1, 2)) }
|
61
61
|
#
|
62
|
-
# Reference: {FaunaDB Basic Forms}[https://
|
62
|
+
# Reference: {FaunaDB Basic Forms}[https://fauna.com/documentation/queries#basic_forms]
|
63
63
|
def object(fields)
|
64
64
|
Expr.new object: Expr.wrap_values(fields)
|
65
65
|
end
|
@@ -75,7 +75,7 @@ module Fauna
|
|
75
75
|
#
|
76
76
|
# Expression example: <code>Fauna.query { let({ x: 2 }, add(1, var(:x))) }</code>.
|
77
77
|
#
|
78
|
-
# Reference: {FaunaDB Basic Forms}[https://
|
78
|
+
# Reference: {FaunaDB Basic Forms}[https://fauna.com/documentation/queries#basic_forms]
|
79
79
|
def let(vars, expr = nil, &block)
|
80
80
|
in_ =
|
81
81
|
if block.nil?
|
@@ -97,7 +97,7 @@ module Fauna
|
|
97
97
|
##
|
98
98
|
# A var expression
|
99
99
|
#
|
100
|
-
# Reference: {FaunaDB Basic Forms}[https://
|
100
|
+
# Reference: {FaunaDB Basic Forms}[https://fauna.com/documentation/queries#basic_forms]
|
101
101
|
def var(name)
|
102
102
|
Expr.new var: Expr.wrap(name)
|
103
103
|
end
|
@@ -105,7 +105,7 @@ module Fauna
|
|
105
105
|
##
|
106
106
|
# An if expression
|
107
107
|
#
|
108
|
-
# Reference: {FaunaDB Basic Forms}[https://
|
108
|
+
# Reference: {FaunaDB Basic Forms}[https://fauna.com/documentation/queries#basic_forms]
|
109
109
|
def if_(condition, then_, else_)
|
110
110
|
Expr.new if: Expr.wrap(condition), then: Expr.wrap(then_), else: Expr.wrap(else_)
|
111
111
|
end
|
@@ -113,7 +113,7 @@ module Fauna
|
|
113
113
|
##
|
114
114
|
# A do expression
|
115
115
|
#
|
116
|
-
# Reference: {FaunaDB Basic Forms}[https://
|
116
|
+
# Reference: {FaunaDB Basic Forms}[https://fauna.com/documentation/queries#basic_forms]
|
117
117
|
def do_(*expressions)
|
118
118
|
Expr.new do: Expr.wrap_varargs(expressions)
|
119
119
|
end
|
@@ -121,7 +121,7 @@ module Fauna
|
|
121
121
|
##
|
122
122
|
# A lambda expression
|
123
123
|
#
|
124
|
-
# Reference: {FaunaDB Basic Forms}[https://
|
124
|
+
# Reference: {FaunaDB Basic Forms}[https://fauna.com/documentation/queries#basic_forms]
|
125
125
|
#
|
126
126
|
# This form generates #var objects for you, and is called like:
|
127
127
|
#
|
@@ -159,7 +159,7 @@ module Fauna
|
|
159
159
|
##
|
160
160
|
# A raw lambda expression
|
161
161
|
#
|
162
|
-
# Reference: {FaunaDB Basic Forms}[https://
|
162
|
+
# Reference: {FaunaDB Basic Forms}[https://fauna.com/documentation/queries#basic_forms]
|
163
163
|
#
|
164
164
|
# See also #lambda.
|
165
165
|
def lambda_expr(var, expr)
|
@@ -174,7 +174,7 @@ module Fauna
|
|
174
174
|
# Only one of +lambda_expr+ or +lambda_block+ should be provided.
|
175
175
|
# For example: <code>Fauna.query { map(collection) { |a| add a, 1 } }</code>.
|
176
176
|
#
|
177
|
-
# Reference: {FaunaDB Collections}[https://
|
177
|
+
# Reference: {FaunaDB Collections}[https://fauna.com/documentation/queries#collection_functions]
|
178
178
|
def map(collection, lambda_expr = nil, &lambda_block)
|
179
179
|
Expr.new map: Expr.wrap(lambda_expr || lambda_block), collection: Expr.wrap(collection)
|
180
180
|
end
|
@@ -185,7 +185,7 @@ module Fauna
|
|
185
185
|
# Only one of +lambda_expr+ or +lambda_block+ should be provided.
|
186
186
|
# For example: <code>Fauna.query { foreach(collection) { |a| delete a } }</code>.
|
187
187
|
#
|
188
|
-
# Reference: {FaunaDB Collections}[https://
|
188
|
+
# Reference: {FaunaDB Collections}[https://fauna.com/documentation/queries#collection_functions]
|
189
189
|
def foreach(collection, lambda_expr = nil, &lambda_block)
|
190
190
|
Expr.new foreach: Expr.wrap(lambda_expr || lambda_block), collection: Expr.wrap(collection)
|
191
191
|
end
|
@@ -196,7 +196,7 @@ module Fauna
|
|
196
196
|
# Only one of +lambda_expr+ or +lambda_block+ should be provided.
|
197
197
|
# For example: <code>Fauna.query { filter(collection) { |a| equals a, 1 } }</code>.
|
198
198
|
#
|
199
|
-
# Reference: {FaunaDB Collections}[https://
|
199
|
+
# Reference: {FaunaDB Collections}[https://fauna.com/documentation/queries#collection_functions]
|
200
200
|
def filter(collection, lambda_expr = nil, &lambda_block)
|
201
201
|
Expr.new filter: Expr.wrap(lambda_expr || lambda_block), collection: Expr.wrap(collection)
|
202
202
|
end
|
@@ -204,7 +204,7 @@ module Fauna
|
|
204
204
|
##
|
205
205
|
# A take expression
|
206
206
|
#
|
207
|
-
# Reference: {FaunaDB Collections}[https://
|
207
|
+
# Reference: {FaunaDB Collections}[https://fauna.com/documentation/queries#collection_functions]
|
208
208
|
def take(number, collection)
|
209
209
|
Expr.new take: Expr.wrap(number), collection: Expr.wrap(collection)
|
210
210
|
end
|
@@ -212,7 +212,7 @@ module Fauna
|
|
212
212
|
##
|
213
213
|
# A drop expression
|
214
214
|
#
|
215
|
-
# Reference: {FaunaDB Collections}[https://
|
215
|
+
# Reference: {FaunaDB Collections}[https://fauna.com/documentation/queries#collection_functions]
|
216
216
|
def drop(number, collection)
|
217
217
|
Expr.new drop: Expr.wrap(number), collection: Expr.wrap(collection)
|
218
218
|
end
|
@@ -220,7 +220,7 @@ module Fauna
|
|
220
220
|
##
|
221
221
|
# A prepend expression
|
222
222
|
#
|
223
|
-
# Reference: {FaunaDB Collections}[https://
|
223
|
+
# Reference: {FaunaDB Collections}[https://fauna.com/documentation/queries#collection_functions]
|
224
224
|
def prepend(collection, elements)
|
225
225
|
Expr.new prepend: Expr.wrap(elements), collection: Expr.wrap(collection)
|
226
226
|
end
|
@@ -228,7 +228,7 @@ module Fauna
|
|
228
228
|
##
|
229
229
|
# An append expression
|
230
230
|
#
|
231
|
-
# Reference: {FaunaDB Collections}[https://
|
231
|
+
# Reference: {FaunaDB Collections}[https://fauna.com/documentation/queries#collection_functions]
|
232
232
|
def append(collection, elements)
|
233
233
|
Expr.new append: Expr.wrap(elements), collection: Expr.wrap(collection)
|
234
234
|
end
|
@@ -238,7 +238,7 @@ module Fauna
|
|
238
238
|
##
|
239
239
|
# A get expression
|
240
240
|
#
|
241
|
-
# Reference: {FaunaDB Read functions}[https://
|
241
|
+
# Reference: {FaunaDB Read functions}[https://fauna.com/documentation/queries#read_functions]
|
242
242
|
def get(ref, params = {})
|
243
243
|
Expr.new Expr.wrap_values(params).merge(get: Expr.wrap(ref))
|
244
244
|
end
|
@@ -246,7 +246,7 @@ module Fauna
|
|
246
246
|
##
|
247
247
|
# A paginate expression
|
248
248
|
#
|
249
|
-
# Reference: {FaunaDB Read functions}[https://
|
249
|
+
# Reference: {FaunaDB Read functions}[https://fauna.com/documentation/queries#read_functions]
|
250
250
|
def paginate(set, params = {})
|
251
251
|
Expr.new Expr.wrap_values(params).merge(paginate: Expr.wrap(set))
|
252
252
|
end
|
@@ -254,25 +254,17 @@ module Fauna
|
|
254
254
|
##
|
255
255
|
# An exists expression
|
256
256
|
#
|
257
|
-
# Reference: {FaunaDB Read functions}[https://
|
257
|
+
# Reference: {FaunaDB Read functions}[https://fauna.com/documentation/queries#read_functions]
|
258
258
|
def exists(ref, params = {})
|
259
259
|
Expr.new Expr.wrap_values(params).merge(exists: Expr.wrap(ref))
|
260
260
|
end
|
261
261
|
|
262
|
-
##
|
263
|
-
# A count expression
|
264
|
-
#
|
265
|
-
# Reference: {FaunaDB Read functions}[https://faunadb.com/documentation/queries#read_functions]
|
266
|
-
def count(set, params = {})
|
267
|
-
Expr.new Expr.wrap_values(params).merge(count: Expr.wrap(set))
|
268
|
-
end
|
269
|
-
|
270
262
|
# :section: Write Functions
|
271
263
|
|
272
264
|
##
|
273
265
|
# A create expression
|
274
266
|
#
|
275
|
-
# Reference: {FaunaDB Write functions}[https://
|
267
|
+
# Reference: {FaunaDB Write functions}[https://fauna.com/documentation/queries#write_functions]
|
276
268
|
def create(class_ref, params)
|
277
269
|
Expr.new create: Expr.wrap(class_ref), params: Expr.wrap(params)
|
278
270
|
end
|
@@ -280,7 +272,7 @@ module Fauna
|
|
280
272
|
##
|
281
273
|
# An update expression
|
282
274
|
#
|
283
|
-
# Reference: {FaunaDB Write functions}[https://
|
275
|
+
# Reference: {FaunaDB Write functions}[https://fauna.com/documentation/queries#write_functions]
|
284
276
|
def update(ref, params)
|
285
277
|
Expr.new update: Expr.wrap(ref), params: Expr.wrap(params)
|
286
278
|
end
|
@@ -288,7 +280,7 @@ module Fauna
|
|
288
280
|
##
|
289
281
|
# A replace expression
|
290
282
|
#
|
291
|
-
# Reference: {FaunaDB Write functions}[https://
|
283
|
+
# Reference: {FaunaDB Write functions}[https://fauna.com/documentation/queries#write_functions]
|
292
284
|
def replace(ref, params)
|
293
285
|
Expr.new replace: Expr.wrap(ref), params: Expr.wrap(params)
|
294
286
|
end
|
@@ -296,7 +288,7 @@ module Fauna
|
|
296
288
|
##
|
297
289
|
# A delete expression
|
298
290
|
#
|
299
|
-
# Reference: {FaunaDB Write functions}[https://
|
291
|
+
# Reference: {FaunaDB Write functions}[https://fauna.com/documentation/queries#write_functions]
|
300
292
|
def delete(ref)
|
301
293
|
Expr.new delete: Expr.wrap(ref)
|
302
294
|
end
|
@@ -304,7 +296,7 @@ module Fauna
|
|
304
296
|
##
|
305
297
|
# An insert expression
|
306
298
|
#
|
307
|
-
# Reference: {FaunaDB Write functions}[https://
|
299
|
+
# Reference: {FaunaDB Write functions}[https://fauna.com/documentation/queries#write_functions]
|
308
300
|
def insert(ref, ts, action, params)
|
309
301
|
Expr.new insert: Expr.wrap(ref), ts: Expr.wrap(ts), action: Expr.wrap(action), params: Expr.wrap(params)
|
310
302
|
end
|
@@ -312,17 +304,49 @@ module Fauna
|
|
312
304
|
##
|
313
305
|
# A remove expression
|
314
306
|
#
|
315
|
-
# Reference: {FaunaDB Write functions}[https://
|
307
|
+
# Reference: {FaunaDB Write functions}[https://fauna.com/documentation/queries#write_functions]
|
316
308
|
def remove(ref, ts, action)
|
317
309
|
Expr.new remove: Expr.wrap(ref), ts: Expr.wrap(ts), action: Expr.wrap(action)
|
318
310
|
end
|
319
311
|
|
312
|
+
##
|
313
|
+
# A create class expression
|
314
|
+
#
|
315
|
+
# Reference: {FaunaDB Write functions}[https://fauna.com/documentation/queries#write_functions]
|
316
|
+
def create_class(params)
|
317
|
+
Expr.new create_class: Expr.wrap(params)
|
318
|
+
end
|
319
|
+
|
320
|
+
##
|
321
|
+
# A create index expression
|
322
|
+
#
|
323
|
+
# Reference: {FaunaDB Write functions}[https://fauna.com/documentation/queries#write_functions]
|
324
|
+
def create_index(params)
|
325
|
+
Expr.new create_index: Expr.wrap(params)
|
326
|
+
end
|
327
|
+
|
328
|
+
##
|
329
|
+
# A create database expression
|
330
|
+
#
|
331
|
+
# Reference: {FaunaDB Write functions}[https://fauna.com/documentation/queries#write_functions]
|
332
|
+
def create_database(params)
|
333
|
+
Expr.new create_database: Expr.wrap(params)
|
334
|
+
end
|
335
|
+
|
336
|
+
##
|
337
|
+
# A create key expression
|
338
|
+
#
|
339
|
+
# Reference: {FaunaDB Write functions}[https://fauna.com/documentation/queries#write_functions]
|
340
|
+
def create_key(params)
|
341
|
+
Expr.new create_key: Expr.wrap(params)
|
342
|
+
end
|
343
|
+
|
320
344
|
# :section: Set Functions
|
321
345
|
|
322
346
|
##
|
323
347
|
# A match expression
|
324
348
|
#
|
325
|
-
# Reference: {FaunaDB Sets}[https://
|
349
|
+
# Reference: {FaunaDB Sets}[https://fauna.com/documentation/queries#sets]
|
326
350
|
def match(index, *terms)
|
327
351
|
Expr.new match: Expr.wrap(index), terms: Expr.wrap_varargs(terms)
|
328
352
|
end
|
@@ -330,7 +354,7 @@ module Fauna
|
|
330
354
|
##
|
331
355
|
# A union expression
|
332
356
|
#
|
333
|
-
# Reference: {FaunaDB Sets}[https://
|
357
|
+
# Reference: {FaunaDB Sets}[https://fauna.com/documentation/queries#sets]
|
334
358
|
def union(*sets)
|
335
359
|
Expr.new union: Expr.wrap_varargs(sets)
|
336
360
|
end
|
@@ -338,7 +362,7 @@ module Fauna
|
|
338
362
|
##
|
339
363
|
# An intersection expression
|
340
364
|
#
|
341
|
-
# Reference: {FaunaDB Sets}[https://
|
365
|
+
# Reference: {FaunaDB Sets}[https://fauna.com/documentation/queries#sets]
|
342
366
|
def intersection(*sets)
|
343
367
|
Expr.new intersection: Expr.wrap_varargs(sets)
|
344
368
|
end
|
@@ -346,7 +370,7 @@ module Fauna
|
|
346
370
|
##
|
347
371
|
# A difference expression
|
348
372
|
#
|
349
|
-
# Reference: {FaunaDB Sets}[https://
|
373
|
+
# Reference: {FaunaDB Sets}[https://fauna.com/documentation/queries#sets]
|
350
374
|
def difference(*sets)
|
351
375
|
Expr.new difference: Expr.wrap_varargs(sets)
|
352
376
|
end
|
@@ -354,7 +378,7 @@ module Fauna
|
|
354
378
|
##
|
355
379
|
# A distinct expression
|
356
380
|
#
|
357
|
-
# Reference: {FaunaDB Sets}[https://
|
381
|
+
# Reference: {FaunaDB Sets}[https://fauna.com/documentation/queries#sets]
|
358
382
|
def distinct(set)
|
359
383
|
Expr.new distinct: Expr.wrap(set)
|
360
384
|
end
|
@@ -365,7 +389,7 @@ module Fauna
|
|
365
389
|
# Only one of +target_expr+ or +target_block+ should be provided.
|
366
390
|
# For example: <code>Fauna.query { join(source) { |x| match some_index, x } }</code>.
|
367
391
|
#
|
368
|
-
# Reference: {FaunaDB Sets}[https://
|
392
|
+
# Reference: {FaunaDB Sets}[https://fauna.com/documentation/queries#sets]
|
369
393
|
def join(source, target_expr = nil, &target_block)
|
370
394
|
Expr.new join: Expr.wrap(source), with: Expr.wrap(target_expr || target_block)
|
371
395
|
end
|
@@ -375,7 +399,7 @@ module Fauna
|
|
375
399
|
##
|
376
400
|
# A login function
|
377
401
|
#
|
378
|
-
# Reference: {FaunaDB Authentication}[https://
|
402
|
+
# Reference: {FaunaDB Authentication}[https://fauna.com/documentation/queries#auth_functions]
|
379
403
|
def login(ref, params)
|
380
404
|
Expr.new login: Expr.wrap(ref), params: Expr.wrap(params)
|
381
405
|
end
|
@@ -383,7 +407,7 @@ module Fauna
|
|
383
407
|
##
|
384
408
|
# A logout function
|
385
409
|
#
|
386
|
-
# Reference: {FaunaDB Authentication}[https://
|
410
|
+
# Reference: {FaunaDB Authentication}[https://fauna.com/documentation/queries#auth_functions]
|
387
411
|
def logout(all_tokens)
|
388
412
|
Expr.new logout: Expr.wrap(all_tokens)
|
389
413
|
end
|
@@ -391,7 +415,7 @@ module Fauna
|
|
391
415
|
##
|
392
416
|
# An identify function
|
393
417
|
#
|
394
|
-
# Reference: {FaunaDB Authentication}[https://
|
418
|
+
# Reference: {FaunaDB Authentication}[https://fauna.com/documentation/queries#auth_functions]
|
395
419
|
def identify(ref, password)
|
396
420
|
Expr.new identify: Expr.wrap(ref), password: Expr.wrap(password)
|
397
421
|
end
|
@@ -401,7 +425,7 @@ module Fauna
|
|
401
425
|
##
|
402
426
|
# A concat function
|
403
427
|
#
|
404
|
-
# Reference: {FaunaDB String Functions}[https://
|
428
|
+
# Reference: {FaunaDB String Functions}[https://fauna.com/documentation/queries#string_functions]
|
405
429
|
def concat(strings, separator = nil)
|
406
430
|
if separator.nil?
|
407
431
|
Expr.new concat: Expr.wrap(strings)
|
@@ -413,7 +437,7 @@ module Fauna
|
|
413
437
|
##
|
414
438
|
# A casefold function
|
415
439
|
#
|
416
|
-
# Reference: {FaunaDB String Functions}[https://
|
440
|
+
# Reference: {FaunaDB String Functions}[https://fauna.com/documentation/queries#string_functions]
|
417
441
|
def casefold(string)
|
418
442
|
Expr.new casefold: Expr.wrap(string)
|
419
443
|
end
|
@@ -423,7 +447,7 @@ module Fauna
|
|
423
447
|
##
|
424
448
|
# A time expression
|
425
449
|
#
|
426
|
-
# Reference: {FaunaDB Time Functions}[https://
|
450
|
+
# Reference: {FaunaDB Time Functions}[https://fauna.com/documentation/queries#time_functions]
|
427
451
|
def time(string)
|
428
452
|
Expr.new time: Expr.wrap(string)
|
429
453
|
end
|
@@ -431,7 +455,7 @@ module Fauna
|
|
431
455
|
##
|
432
456
|
# An epoch expression
|
433
457
|
#
|
434
|
-
# Reference: {FaunaDB Time Functions}[https://
|
458
|
+
# Reference: {FaunaDB Time Functions}[https://fauna.com/documentation/queries#time_functions]
|
435
459
|
def epoch(number, unit)
|
436
460
|
Expr.new epoch: Expr.wrap(number), unit: Expr.wrap(unit)
|
437
461
|
end
|
@@ -439,7 +463,7 @@ module Fauna
|
|
439
463
|
##
|
440
464
|
# A date expression
|
441
465
|
#
|
442
|
-
# Reference: {FaunaDB Time Functions}[https://
|
466
|
+
# Reference: {FaunaDB Time Functions}[https://fauna.com/documentation/queries#time_functions]
|
443
467
|
def date(string)
|
444
468
|
Expr.new date: Expr.wrap(string)
|
445
469
|
end
|
@@ -449,15 +473,39 @@ module Fauna
|
|
449
473
|
##
|
450
474
|
# A next_id function
|
451
475
|
#
|
452
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
476
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation#queries-misc_functions]
|
453
477
|
def next_id
|
454
478
|
Expr.new next_id: nil
|
455
479
|
end
|
456
480
|
|
481
|
+
##
|
482
|
+
# A database function
|
483
|
+
#
|
484
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation#queries-misc_functions]
|
485
|
+
def database(name)
|
486
|
+
Expr.new database: Expr.wrap(name)
|
487
|
+
end
|
488
|
+
|
489
|
+
##
|
490
|
+
# A class function
|
491
|
+
#
|
492
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation#queries-misc_functions]
|
493
|
+
def class_(name)
|
494
|
+
Expr.new class: Expr.wrap(name)
|
495
|
+
end
|
496
|
+
|
497
|
+
##
|
498
|
+
# An index function
|
499
|
+
#
|
500
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation#queries-misc_functions]
|
501
|
+
def index(name)
|
502
|
+
Expr.new index: Expr.wrap(name)
|
503
|
+
end
|
504
|
+
|
457
505
|
##
|
458
506
|
# An equals function
|
459
507
|
#
|
460
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
508
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation#queries-misc_functions]
|
461
509
|
def equals(*values)
|
462
510
|
Expr.new equals: Expr.wrap_varargs(values)
|
463
511
|
end
|
@@ -465,7 +513,7 @@ module Fauna
|
|
465
513
|
##
|
466
514
|
# A contains function
|
467
515
|
#
|
468
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
516
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
469
517
|
def contains(path, in_)
|
470
518
|
Expr.new contains: Expr.wrap(path), in: Expr.wrap(in_)
|
471
519
|
end
|
@@ -473,7 +521,7 @@ module Fauna
|
|
473
521
|
##
|
474
522
|
# A select function
|
475
523
|
#
|
476
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
524
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
477
525
|
def select(path, from, params = {})
|
478
526
|
Expr.new Expr.wrap_values(params).merge(select: Expr.wrap(path), from: Expr.wrap(from))
|
479
527
|
end
|
@@ -481,7 +529,7 @@ module Fauna
|
|
481
529
|
##
|
482
530
|
# An add function
|
483
531
|
#
|
484
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
532
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
485
533
|
def add(*numbers)
|
486
534
|
Expr.new add: Expr.wrap_varargs(numbers)
|
487
535
|
end
|
@@ -489,7 +537,7 @@ module Fauna
|
|
489
537
|
##
|
490
538
|
# A multiply function
|
491
539
|
#
|
492
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
540
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
493
541
|
def multiply(*numbers)
|
494
542
|
Expr.new multiply: Expr.wrap_varargs(numbers)
|
495
543
|
end
|
@@ -497,7 +545,7 @@ module Fauna
|
|
497
545
|
##
|
498
546
|
# A subtract function
|
499
547
|
#
|
500
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
548
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
501
549
|
def subtract(*numbers)
|
502
550
|
Expr.new subtract: Expr.wrap_varargs(numbers)
|
503
551
|
end
|
@@ -505,7 +553,7 @@ module Fauna
|
|
505
553
|
##
|
506
554
|
# A divide function
|
507
555
|
#
|
508
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
556
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
509
557
|
def divide(*numbers)
|
510
558
|
Expr.new divide: Expr.wrap_varargs(numbers)
|
511
559
|
end
|
@@ -513,7 +561,7 @@ module Fauna
|
|
513
561
|
##
|
514
562
|
# A modulo function
|
515
563
|
#
|
516
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
564
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
517
565
|
def modulo(*numbers)
|
518
566
|
Expr.new modulo: Expr.wrap_varargs(numbers)
|
519
567
|
end
|
@@ -521,7 +569,7 @@ module Fauna
|
|
521
569
|
##
|
522
570
|
# A less than function
|
523
571
|
#
|
524
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
572
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
525
573
|
def lt(*values)
|
526
574
|
Expr.new lt: Expr.wrap_varargs(values)
|
527
575
|
end
|
@@ -529,7 +577,7 @@ module Fauna
|
|
529
577
|
##
|
530
578
|
# A less than or equal function
|
531
579
|
#
|
532
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
580
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
533
581
|
def lte(*values)
|
534
582
|
Expr.new lte: Expr.wrap_varargs(values)
|
535
583
|
end
|
@@ -537,7 +585,7 @@ module Fauna
|
|
537
585
|
##
|
538
586
|
# A greater than function
|
539
587
|
#
|
540
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
588
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
541
589
|
def gt(*values)
|
542
590
|
Expr.new gt: Expr.wrap_varargs(values)
|
543
591
|
end
|
@@ -545,7 +593,7 @@ module Fauna
|
|
545
593
|
##
|
546
594
|
# A greater than or equal function
|
547
595
|
#
|
548
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
596
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
549
597
|
def gte(*values)
|
550
598
|
Expr.new gte: Expr.wrap_varargs(values)
|
551
599
|
end
|
@@ -553,7 +601,7 @@ module Fauna
|
|
553
601
|
##
|
554
602
|
# An and function
|
555
603
|
#
|
556
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
604
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
557
605
|
def and_(*booleans)
|
558
606
|
Expr.new and: Expr.wrap_varargs(booleans)
|
559
607
|
end
|
@@ -561,7 +609,7 @@ module Fauna
|
|
561
609
|
##
|
562
610
|
# An or function
|
563
611
|
#
|
564
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
612
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
565
613
|
def or_(*booleans)
|
566
614
|
Expr.new or: Expr.wrap_varargs(booleans)
|
567
615
|
end
|
@@ -569,7 +617,7 @@ module Fauna
|
|
569
617
|
##
|
570
618
|
# A not function
|
571
619
|
#
|
572
|
-
# Reference: {FaunaDB Miscellaneous Functions}[https://
|
620
|
+
# Reference: {FaunaDB Miscellaneous Functions}[https://fauna.com/documentation/queries#misc_functions]
|
573
621
|
def not_(boolean)
|
574
622
|
Expr.new not: Expr.wrap(boolean)
|
575
623
|
end
|
data/lib/fauna/version.rb
CHANGED
data/spec/errors_spec.rb
CHANGED
@@ -31,6 +31,15 @@ RSpec.describe 'Fauna Errors' do
|
|
31
31
|
Fauna::Client.new(adapter: [:test, stubs])
|
32
32
|
end
|
33
33
|
|
34
|
+
# Create client with stub adapter responding to / with the given exception
|
35
|
+
def stub_error(exception)
|
36
|
+
stubs = Faraday::Adapter::Test::Stubs.new
|
37
|
+
stubs.get '/' do
|
38
|
+
fail exception
|
39
|
+
end
|
40
|
+
Fauna::Client.new(adapter: [:test, stubs])
|
41
|
+
end
|
42
|
+
|
34
43
|
it 'sets request result' do
|
35
44
|
expect { client.post '', foo: 'bar' }.to raise_error do |err|
|
36
45
|
expect(err).to be_a(Fauna::BadRequest)
|
@@ -114,10 +123,25 @@ RSpec.describe 'Fauna Errors' do
|
|
114
123
|
end
|
115
124
|
|
116
125
|
describe Fauna::UnavailableError do
|
117
|
-
it '
|
126
|
+
it 'handles fauna 503' do
|
118
127
|
stub_client = stub_get 503, '{"errors": [{"code": "unavailable", "description": "on vacation"}]}'
|
119
128
|
expect { stub_client.get '' }.to raise_fauna_error(Fauna::UnavailableError, 'unavailable')
|
120
129
|
end
|
130
|
+
|
131
|
+
it 'handles upstream 503' do
|
132
|
+
stub_client = stub_get 503, 'Unable to reach server'
|
133
|
+
expect { stub_client.get '' }.to raise_error(Fauna::UnavailableError, 'Unable to reach server')
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'handles timeout error' do
|
137
|
+
stub_client = stub_error Faraday::TimeoutError.new('timeout')
|
138
|
+
expect { stub_client.get '' }.to raise_error(Fauna::UnavailableError, 'Faraday::TimeoutError: timeout')
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'handles connection error' do
|
142
|
+
stub_client = stub_error Faraday::ConnectionFailed.new('connection refused')
|
143
|
+
expect { stub_client.get '' }.to raise_error(Fauna::UnavailableError, 'Faraday::ConnectionFailed: connection refused')
|
144
|
+
end
|
121
145
|
end
|
122
146
|
|
123
147
|
describe Fauna::UnexpectedError do
|
@@ -144,5 +168,9 @@ RSpec.describe 'Fauna Errors' do
|
|
144
168
|
it 'raised for empty errors' do
|
145
169
|
expect { stub_get(500, '{"errors": []}').get('') }.to raise_error(Fauna::UnexpectedError, /blank/)
|
146
170
|
end
|
171
|
+
|
172
|
+
it 'raised for parsing error' do
|
173
|
+
expect { stub_error(Faraday::ParsingError.new('parse error')).get('') }.to raise_error(Fauna::UnexpectedError, /parse error/)
|
174
|
+
end
|
147
175
|
end
|
148
176
|
end
|
data/spec/fauna_helper.rb
CHANGED
@@ -23,6 +23,11 @@ module FaunaTestHelpers
|
|
23
23
|
@server_client
|
24
24
|
end
|
25
25
|
|
26
|
+
def admin_client
|
27
|
+
fail 'Admin client not initialized' if @admin_client.nil?
|
28
|
+
@admin_client
|
29
|
+
end
|
30
|
+
|
26
31
|
def create_test_db
|
27
32
|
@db_ref = Fauna::Ref.new "databases/faunadb-ruby-test-#{random_string}"
|
28
33
|
|
@@ -31,6 +36,7 @@ module FaunaTestHelpers
|
|
31
36
|
|
32
37
|
begin
|
33
38
|
server_key = root.query { create ref('keys'), database: @db_ref, role: 'server' }
|
39
|
+
admin_key = root.query { create ref('keys'), database: @db_ref, role: 'admin' }
|
34
40
|
rescue
|
35
41
|
root.query { delete @db_ref }
|
36
42
|
@db_ref = nil
|
@@ -39,6 +45,8 @@ module FaunaTestHelpers
|
|
39
45
|
|
40
46
|
@server_secret = server_key[:secret]
|
41
47
|
@server_client = get_client secret: @server_secret
|
48
|
+
@admin_secret = admin_key[:secret]
|
49
|
+
@admin_client = get_client secret: @admin_secret
|
42
50
|
end
|
43
51
|
|
44
52
|
def destroy_test_db
|
data/spec/query_spec.rb
CHANGED
@@ -320,20 +320,6 @@ RSpec.describe Fauna::Query do
|
|
320
320
|
end
|
321
321
|
end
|
322
322
|
|
323
|
-
describe '#count' do
|
324
|
-
before do
|
325
|
-
@x_value = random_number
|
326
|
-
@x_refs = (1..3).collect { create_instance(x: @x_value)[:ref] }
|
327
|
-
end
|
328
|
-
|
329
|
-
it 'performs count' do
|
330
|
-
set = Fauna::Query.match(@test_by_x, @x_value)
|
331
|
-
|
332
|
-
# Count is only approximate; should be equal to @x_refs.length
|
333
|
-
expect(client.query { count set }).to be_a(Integer)
|
334
|
-
end
|
335
|
-
end
|
336
|
-
|
337
323
|
describe '#create' do
|
338
324
|
it 'performs create' do
|
339
325
|
instance = client.query { create(@test_class, {}) }
|
@@ -406,6 +392,48 @@ RSpec.describe Fauna::Query do
|
|
406
392
|
end
|
407
393
|
end
|
408
394
|
|
395
|
+
describe '#create_class' do
|
396
|
+
it 'creates a class' do
|
397
|
+
# Create a class
|
398
|
+
ref = client.query { create_class(name: random_string) }[:ref]
|
399
|
+
|
400
|
+
# Assert it was created
|
401
|
+
expect(client.query { exists(ref) }).to be(true)
|
402
|
+
end
|
403
|
+
end
|
404
|
+
|
405
|
+
describe '#create_index' do
|
406
|
+
it 'creates an index' do
|
407
|
+
# Create an index
|
408
|
+
class_ref = client.query { create(ref('classes'), name: random_string) }[:ref]
|
409
|
+
ref = client.query { create_index(name: random_string, source: class_ref) }[:ref]
|
410
|
+
|
411
|
+
# Assert it was created
|
412
|
+
expect(client.query { exists(ref) }).to be(true)
|
413
|
+
end
|
414
|
+
end
|
415
|
+
|
416
|
+
describe '#create_database' do
|
417
|
+
it 'creates a database' do
|
418
|
+
# Create a database
|
419
|
+
ref = admin_client.query { create_database(name: random_string) }[:ref]
|
420
|
+
|
421
|
+
# Assert it was created
|
422
|
+
expect(admin_client.query { exists(ref) }).to be(true)
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
426
|
+
describe '#create_key' do
|
427
|
+
it 'creates a key' do
|
428
|
+
# Create a key
|
429
|
+
db_ref = admin_client.query { create(ref('databases'), name: random_string) }[:ref]
|
430
|
+
ref = admin_client.query { create_key(database: db_ref, role: 'server') }[:ref]
|
431
|
+
|
432
|
+
# Assert it was created
|
433
|
+
expect(admin_client.query { exists(ref) }).to be(true)
|
434
|
+
end
|
435
|
+
end
|
436
|
+
|
409
437
|
describe 'sets' do
|
410
438
|
before do
|
411
439
|
@x_value = random_number
|
@@ -593,6 +621,40 @@ RSpec.describe Fauna::Query do
|
|
593
621
|
end
|
594
622
|
end
|
595
623
|
|
624
|
+
describe '#database' do
|
625
|
+
it 'gets an existing database' do
|
626
|
+
# Create a database
|
627
|
+
name = random_string
|
628
|
+
ref = admin_client.query { create_database(name: name) }[:ref]
|
629
|
+
|
630
|
+
# Get the database ref
|
631
|
+
expect(admin_client.query { database(name) }).to eq(ref)
|
632
|
+
end
|
633
|
+
end
|
634
|
+
|
635
|
+
describe '#class' do
|
636
|
+
it 'gets an existing class' do
|
637
|
+
# Create a class
|
638
|
+
name = random_string
|
639
|
+
ref = client.query { create_class(name: name) }[:ref]
|
640
|
+
|
641
|
+
# Get the class ref
|
642
|
+
expect(client.query { class_(name) }).to eq(ref)
|
643
|
+
end
|
644
|
+
end
|
645
|
+
|
646
|
+
describe '#index' do
|
647
|
+
it 'gets an existing index' do
|
648
|
+
# Create an index
|
649
|
+
class_ref = client.query { create_class(name: random_string) }[:ref]
|
650
|
+
name = random_string
|
651
|
+
ref = client.query { create_index(name: name, source: class_ref) }[:ref]
|
652
|
+
|
653
|
+
# Get the index ref
|
654
|
+
expect(client.query { index(name) }).to eq(ref)
|
655
|
+
end
|
656
|
+
end
|
657
|
+
|
596
658
|
describe '#equals' do
|
597
659
|
it 'performs equals' do
|
598
660
|
expect(client.query { equals(1, 1, 1) }).to be(true)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fauna
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fauna, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -81,21 +81,21 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 0.38.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: codecov
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.
|
89
|
+
version: 0.1.5
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
96
|
+
version: 0.1.5
|
97
97
|
description: Ruby driver for FaunaDB.
|
98
|
-
email: priority@
|
98
|
+
email: priority@fauna.com
|
99
99
|
executables: []
|
100
100
|
extensions: []
|
101
101
|
extra_rdoc_files:
|
@@ -158,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
158
158
|
version: '0'
|
159
159
|
requirements: []
|
160
160
|
rubyforge_project:
|
161
|
-
rubygems_version: 2.5.1
|
161
|
+
rubygems_version: 2.4.5.1
|
162
162
|
signing_key:
|
163
163
|
specification_version: 4
|
164
164
|
summary: FaunaDB Ruby driver
|