fauna 2.2.0 → 2.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 79e3f29b34209d1fd34ebfb3a878fe2210cc6a34
4
- data.tar.gz: eb8887d649b435f9e1064717c04232ace5af76d2
3
+ metadata.gz: d8996ca66ac2a5d3c0eb4d33251e3148e4a1e4de
4
+ data.tar.gz: 4b29fdaad2dc9b4a6f704bd5e6df7111abf25b0a
5
5
  SHA512:
6
- metadata.gz: 9b23b487d4202f26858139562129d66132cfdc0d313067381acd077504a80bee7b74b22e084dc0cc4b4564857ad8ff90c9145dc3f58e7b9c79432ba458e0468f
7
- data.tar.gz: 0ae0ecc0c29346e8aeb64228c67e9ca8f059de588c9acaa3de2b4cd165ab9228ef5dd8aaf5276263b1bc5ff98400c27ecf11357951a21e21888221a1841036d3
6
+ metadata.gz: fa414baf0fff3c8a3e07c14fb7ec3ce000bbb4d306be7b1286be7c9495281584398d34b71505a4bc6d58ad34ebf8620f521bdc415c7822992be35f9018304045
7
+ data.tar.gz: e40f66fc8c23f1fb10d5e918e4788142503a017e76c74c444768c7b0efc7a2d3b6b76f729b3583d5f740c4531f782f890b21243f7402f8e58c4bfda9ae151be9
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ 2.3.0
2
+ * Change default domain to `db.fauna.com`.
3
+ * Added `key_from_secret` and `at` query functions.
4
+ * Added support for `@bytes` type (via `Fauna::Bytes`).
5
+
1
6
  2.2.0
2
7
  * Added `create_class`, `create_index`, `create_database`, `create_key`, `database`, `class`,
3
8
  and `index` query functions.
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2015 Fauna, Inc.
1
+ Copyright 2017 Fauna, Inc.
2
2
 
3
3
  Licensed under the Mozilla Public License, Version 2.0 (the "License"); you may
4
4
  not use this software except in compliance with the License. You may obtain a
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  # FaunaDB
2
2
 
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)
3
+ [![Build Status](https://img.shields.io/travis/fauna/faunadb-ruby/master.svg?maxAge=21600)](https://travis-ci.org/fauna/faunadb-ruby)
4
+ [![Coverage Status](https://img.shields.io/codecov/c/github/fauna/faunadb-ruby/master.svg?maxAge=21600)](https://codecov.io/gh/fauna/faunadb-ruby/branch/master)
5
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)
6
+ [![License](https://img.shields.io/badge/license-MPL_2.0-blue.svg?maxAge=2592000)](https://raw.githubusercontent.com/fauna/faunadb-ruby/master/LICENSE)
7
7
 
8
8
  Ruby driver for [FaunaDB](https://fauna.com).
9
9
 
@@ -23,11 +23,11 @@ And then execute:
23
23
 
24
24
  ## Documentation
25
25
 
26
- The driver documentation is [hosted on GitHub Pages](https://faunadb.github.io/faunadb-ruby/).
26
+ The driver documentation is [hosted on GitHub Pages](https://fauna.github.io/faunadb-ruby/).
27
27
 
28
28
  Please see the [FaunaDB Documentation](https://fauna.com/documentation) for
29
29
  a complete API reference, or look in
30
- [`/test`](https://github.com/faunadb/faunadb-ruby/tree/master/test) for more
30
+ [`/test`](https://github.com/fauna/faunadb-ruby/tree/master/test) for more
31
31
  examples.
32
32
 
33
33
  ## Compatibility
@@ -130,7 +130,7 @@ GitHub pull requests are very welcome.
130
130
 
131
131
  ## LICENSE
132
132
 
133
- Copyright 2016 [Fauna, Inc.](https://fauna.com/)
133
+ Copyright 2017 [Fauna, Inc.](https://fauna.com/)
134
134
 
135
135
  Licensed under the Mozilla Public License, Version 2.0 (the
136
136
  "License"); you may not use this software except in compliance with
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
  s.email = 'priority@fauna.com'
9
9
  s.summary = 'FaunaDB Ruby driver'
10
10
  s.description = 'Ruby driver for FaunaDB.'
11
- s.homepage = 'https://github.com/faunadb/faunadb-ruby'
11
+ s.homepage = 'https://github.com/fauna/faunadb-ruby'
12
12
  s.license = 'MPL-2.0'
13
13
 
14
14
  s.files = %w(CHANGELOG Gemfile LICENSE README.md Rakefile fauna.gemspec lib/fauna.rb) + Dir.glob('lib/fauna/**') + Dir.glob('spec/**')
@@ -5,6 +5,7 @@ require 'faraday'
5
5
  require 'cgi'
6
6
  require 'zlib'
7
7
  require 'time'
8
+ require 'base64'
8
9
 
9
10
  ##
10
11
  # Main namespace for the FaunaDB driver.
@@ -40,7 +40,7 @@ module Fauna
40
40
  # +:observer+:: Callback that will be passed a RequestResult after every completed request.
41
41
  # +:adapter+:: Faraday[https://github.com/lostisland/faraday] adapter to use. Either can be a symbol for the adapter, or an array of arguments.
42
42
  def initialize(params = {})
43
- @domain = params[:domain] || 'cloud.faunadb.com'
43
+ @domain = params[:domain] || 'db.fauna.com'
44
44
  @scheme = params[:scheme] || 'https'
45
45
  @port = params[:port] || (scheme == 'https' ? 443 : 80)
46
46
  @read_timeout = params[:read_timeout] || 60
@@ -20,6 +20,8 @@ module Fauna
20
20
  Time.iso8601 obj[:@ts]
21
21
  elsif obj.key? :@date
22
22
  Date.iso8601 obj[:@date]
23
+ elsif obj.key? :@bytes
24
+ Bytes.from_base64 obj[:@bytes]
23
25
  else
24
26
  Hash[obj.collect { |k, v| [k, deserialize(v)] }]
25
27
  end
@@ -2,7 +2,7 @@ module Fauna
2
2
  ##
3
3
  # A Ref.
4
4
  #
5
- # Reference: {FaunaDB Special Types}[https://fauna.com/documentation/queries-values-special_types]
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://fauna.com/documentation/queries-values-special_types]
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://fauna.com/documentation/queries-values-special_types]
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
@@ -91,4 +91,41 @@ module Fauna
91
91
 
92
92
  alias_method :eql?, :==
93
93
  end
94
+
95
+ ##
96
+ # A Bytes wrapper.
97
+ #
98
+ # Reference: {FaunaDB Special Types}[https://fauna.com/documentation/queries#values-special_types]
99
+ class Bytes
100
+ # The raw bytes.
101
+ attr_accessor :bytes
102
+
103
+ ##
104
+ # Creates a new Bytes wrapper with the given parameters.
105
+ #
106
+ # +bytes+:: The bytes to be wrapped by the Bytes object.
107
+ #
108
+ # Reference: {FaunaDB Special Types}[https://fauna.com/documentation/queries#values-special_types]
109
+ def initialize(bytes)
110
+ self.bytes = bytes
111
+ end
112
+
113
+ # Converts the Bytes to Hash form.
114
+ def to_hash
115
+ { :@bytes => Base64.urlsafe_encode64(bytes) }
116
+ end
117
+
118
+ # Returns +true+ if +other+ is a Bytes and contains the same bytes.
119
+ def ==(other)
120
+ return false unless other.is_a? Bytes
121
+ bytes == other.bytes
122
+ end
123
+
124
+ alias_method :eql?, :==
125
+
126
+ # Create new Bytes object from Base64 encoded bytes.
127
+ def self.from_base64(enc)
128
+ new(Base64.urlsafe_decode64(enc))
129
+ end
130
+ end
94
131
  end
@@ -16,24 +16,24 @@ module Fauna
16
16
  #
17
17
  # Paging over a class index
18
18
  #
19
- # page = Page.new(client, Query.match(Ref('indexes/items')))
19
+ # page = Page.new(client, Query.match(Ref.new('indexes/items')))
20
20
  #
21
21
  # Paging over a class index 5 at a time, mapping the refs to the +data.value+ for each instance
22
22
  #
23
- # page = Page.new(client, Query.match(Ref('indexes/items')), size: 5) do |ref|
23
+ # page = Page.new(client, Query.match(Ref.new('indexes/items')), size: 5) do |ref|
24
24
  # select ['data', 'value'], get(ref)
25
25
  # end
26
26
  #
27
27
  # # Same thing, but using builders instead
28
28
  #
29
- # page = Page.new(client, Query.match(Ref('indexes/items'))).with_params(size: 5).map do |ref|
29
+ # page = Page.new(client, Query.match(Ref.new('indexes/items'))).with_params(size: 5).map do |ref|
30
30
  # select ['data', 'value'], get(ref)
31
31
  # end
32
32
  #
33
33
  # Paging over a class index, mapping refs to the +data.value+ for each instance, filtering out odd numbers, and
34
34
  # multiplying the value:
35
35
  #
36
- # page = Page.new(client, Query.match(Ref('indexes/items'))).map do |ref|
36
+ # page = Page.new(client, Query.match(Ref.new('indexes/items'))).map do |ref|
37
37
  # select ['data', 'value'], get(ref)
38
38
  # end.filter do |value|
39
39
  # equals modulo(value, 2), 0
@@ -66,6 +66,14 @@ module Fauna
66
66
 
67
67
  # :section: Basic forms
68
68
 
69
+ ##
70
+ # An at expression
71
+ #
72
+ # Reference: {FaunaDB Basic Forms}[https://fauna.com/documentation/queries#basic_forms]
73
+ def at(timestamp, expr)
74
+ Expr.new at: Expr.wrap(timestamp), expr: Expr.wrap(expr)
75
+ end
76
+
69
77
  ##
70
78
  # A let expression
71
79
  #
@@ -243,6 +251,14 @@ module Fauna
243
251
  Expr.new Expr.wrap_values(params).merge(get: Expr.wrap(ref))
244
252
  end
245
253
 
254
+ ##
255
+ # A key_from_secret expression
256
+ #
257
+ # Reference: {FaunaDB Read functions}[https://fauna.com/documentation/queries#read_functions]
258
+ def key_from_secret(secret)
259
+ Expr.new key_from_secret: Expr.wrap(secret)
260
+ end
261
+
246
262
  ##
247
263
  # A paginate expression
248
264
  #
@@ -1,4 +1,4 @@
1
1
  module Fauna
2
2
  # The version of the Fauna gem
3
- VERSION = '2.2.0'.freeze
3
+ VERSION = '2.3.0'.freeze
4
4
  end
@@ -0,0 +1,36 @@
1
+ RSpec.describe Fauna::Bytes do
2
+ describe '#initalize' do
3
+ it 'creates from bytes' do
4
+ raw = random_bytes
5
+ expect(Fauna::Bytes.new(raw).bytes).to eq(raw)
6
+ end
7
+ end
8
+
9
+ describe '#from_base64' do
10
+ it 'creates from base64' do
11
+ raw = random_bytes
12
+ encoded = Base64.urlsafe_encode64(raw)
13
+
14
+ expect(Fauna::Bytes.from_base64(encoded).bytes).to eq(raw)
15
+ end
16
+ end
17
+
18
+ describe '#==' do
19
+ it 'equals same bytes' do
20
+ raw = random_bytes
21
+ bytes = Fauna::Bytes.new(raw)
22
+
23
+ expect(bytes).to eq(Fauna::Bytes.new(raw))
24
+ end
25
+
26
+ it 'does not equal different bytes' do
27
+ expect(Fauna::Bytes.new(random_bytes)).not_to eq(Fauna::Bytes.new(random_bytes))
28
+ end
29
+
30
+ it 'does not equal other type' do
31
+ raw = random_bytes
32
+
33
+ expect(Fauna::Bytes.new(raw)).not_to eq(raw)
34
+ end
35
+ end
36
+ end
@@ -73,6 +73,10 @@ module FaunaTestHelpers
73
73
  SecureRandom.random_number(1_000_000)
74
74
  end
75
75
 
76
+ def random_bytes
77
+ SecureRandom.random_bytes(20)
78
+ end
79
+
76
80
  def random_ref_string
77
81
  "classes/#{random_string}/#{random_number}"
78
82
  end
@@ -40,6 +40,15 @@ RSpec.describe Fauna::FaunaJson do
40
40
  expect(Fauna::FaunaJson.deserialize(data)).to eq(obj)
41
41
  end
42
42
 
43
+ it 'deserializes bytes' do
44
+ raw = random_bytes
45
+
46
+ data = { :@bytes => Base64.urlsafe_encode64(raw) }
47
+ obj = Fauna::Bytes.new(raw)
48
+
49
+ expect(Fauna::FaunaJson.deserialize(data)).to eq(obj)
50
+ end
51
+
43
52
  it 'recursively deserializes hashes' do
44
53
  ref = random_ref_string
45
54
 
@@ -100,6 +109,15 @@ RSpec.describe Fauna::FaunaJson do
100
109
  expect(Fauna::FaunaJson.serialize(obj)).to eq(data)
101
110
  end
102
111
 
112
+ it 'serializes bytes' do
113
+ raw = random_bytes
114
+
115
+ data = { :@bytes => Base64.urlsafe_encode64(raw) }
116
+ obj = Fauna::Bytes.new(raw)
117
+
118
+ expect(Fauna::FaunaJson.serialize(obj)).to eq(data)
119
+ end
120
+
103
121
  it 'recursively serializes hashes' do
104
122
  ref = random_ref_string
105
123
  terms = random_string
@@ -123,6 +123,20 @@ RSpec.describe Fauna::Query do
123
123
  end
124
124
  end
125
125
 
126
+ describe '#at' do
127
+ it 'performs at for given expression' do
128
+ instance = create_instance
129
+ ref = instance[:ref]
130
+ ts = instance[:ts]
131
+
132
+ prev_ts = ts - 1
133
+ value = random_number
134
+ client.query { insert(ref, prev_ts, :create, data: { x: value }) }
135
+
136
+ expect(client.query { at(prev_ts, get(ref)) }[:data]).to eq(x: value)
137
+ end
138
+ end
139
+
126
140
  describe '#let' do
127
141
  it 'performs let with expression' do
128
142
  x = random_number
@@ -284,6 +298,16 @@ RSpec.describe Fauna::Query do
284
298
  end
285
299
  end
286
300
 
301
+ describe '#key_from_secret' do
302
+ it 'gets key from secret' do
303
+ # Create a key
304
+ db_ref = admin_client.query { create(ref('databases'), name: random_string) }[:ref]
305
+ key = admin_client.query { create_key(database: db_ref, role: 'server') }
306
+
307
+ expect(admin_client.query { key_from_secret key[:secret] }).to eq(admin_client.query { get key[:ref] })
308
+ end
309
+ end
310
+
287
311
  describe '#paginate' do
288
312
  before do
289
313
  @x_value = random_number
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.2.0
4
+ version: 2.3.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-12-02 00:00:00.000000000 Z
11
+ date: 2017-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -121,6 +121,7 @@ files:
121
121
  - lib/fauna/request_result.rb
122
122
  - lib/fauna/util.rb
123
123
  - lib/fauna/version.rb
124
+ - spec/bytes_spec.rb
124
125
  - spec/client_logger_spec.rb
125
126
  - spec/client_spec.rb
126
127
  - spec/context_spec.rb
@@ -133,7 +134,7 @@ files:
133
134
  - spec/setref_spec.rb
134
135
  - spec/spec_helper.rb
135
136
  - spec/util_spec.rb
136
- homepage: https://github.com/faunadb/faunadb-ruby
137
+ homepage: https://github.com/fauna/faunadb-ruby
137
138
  licenses:
138
139
  - MPL-2.0
139
140
  metadata: {}
@@ -158,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
159
  version: '0'
159
160
  requirements: []
160
161
  rubyforge_project:
161
- rubygems_version: 2.4.5.1
162
+ rubygems_version: 2.6.10
162
163
  signing_key:
163
164
  specification_version: 4
164
165
  summary: FaunaDB Ruby driver
@@ -173,5 +174,6 @@ test_files:
173
174
  - spec/errors_spec.rb
174
175
  - spec/setref_spec.rb
175
176
  - spec/ref_spec.rb
177
+ - spec/bytes_spec.rb
176
178
  - spec/spec_helper.rb
177
179
  - spec/json_spec.rb