fauna 2.1.2 → 2.2.0
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/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
|
+
[](https://travis-ci.org/faunadb/faunadb-ruby)
|
4
|
+
[](https://codecov.io/gh/faunadb/faunadb-ruby/branch/master)
|
5
|
+
[](https://rubygems.org/gems/fauna)
|
6
|
+
[](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
|