search_flip 4.0.0.beta3 → 4.0.0.beta8
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/.github/workflows/test.yml +3 -2
- data/.rubocop.yml +2 -1
- data/CHANGELOG.md +14 -0
- data/README.md +30 -33
- data/lib/search_flip.rb +1 -0
- data/lib/search_flip/bulk.rb +1 -1
- data/lib/search_flip/config.rb +7 -1
- data/lib/search_flip/connection.rb +30 -15
- data/lib/search_flip/http_client.rb +26 -5
- data/lib/search_flip/index.rb +3 -1
- data/lib/search_flip/json.rb +3 -3
- data/lib/search_flip/to_json.rb +1 -29
- data/lib/search_flip/version.rb +1 -1
- data/search_flip.gemspec +1 -0
- data/spec/search_flip/http_client_spec.rb +7 -3
- data/spec/search_flip/json_spec.rb +18 -4
- metadata +16 -4
- data/spec/search_flip/to_json_spec.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d63abc415f8eaad5ade7de6fc4ca424a8695b72016266a49a1d221f49530ca49
|
4
|
+
data.tar.gz: a6170648ed2663b769b123ae443c5d0863a4456ec39be35c2762186b93383cff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c7879bcf95f3e53c5186ec50592cf7e46b703b819c34e7d7e91229972652daf132b7a73b3f85051c6d86117f66278f83b5ac2f2b12c23272bb36130b0e7aa72
|
7
|
+
data.tar.gz: a04b20cbcf16eceb905798d1e5e2ea8dd60bb27b45bee9a0ab6f52aaed7d58e648a2f3139981117332a9824570db429f069ed749873dffd27ceb7cc274b3a7b4
|
data/.github/workflows/test.yml
CHANGED
@@ -11,11 +11,11 @@ jobs:
|
|
11
11
|
- elasticsearch:5.4
|
12
12
|
- docker.elastic.co/elasticsearch/elasticsearch:6.7.0
|
13
13
|
- docker.elastic.co/elasticsearch/elasticsearch:7.0.0
|
14
|
-
- docker.elastic.co/elasticsearch/elasticsearch:7.
|
14
|
+
- docker.elastic.co/elasticsearch/elasticsearch:7.11.2
|
15
15
|
ruby:
|
16
|
-
- 2.5
|
17
16
|
- 2.6
|
18
17
|
- 2.7
|
18
|
+
- 3.0
|
19
19
|
services:
|
20
20
|
elasticsearch:
|
21
21
|
image: ${{ matrix.elasticsearch }}
|
@@ -28,6 +28,7 @@ jobs:
|
|
28
28
|
- uses: actions/setup-ruby@v1
|
29
29
|
with:
|
30
30
|
ruby-version: ${{ matrix.ruby }}
|
31
|
+
- run: gem install bundler
|
31
32
|
- run: bundle
|
32
33
|
- run: sleep 10
|
33
34
|
- run: bundle exec rspec
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -11,6 +11,20 @@
|
|
11
11
|
* Added `SearchFlip::Connection#get_cluster_settings` and
|
12
12
|
`#update_cluster_settings`
|
13
13
|
|
14
|
+
## v3.4.0
|
15
|
+
|
16
|
+
* Expose `Http#timeout` via `SearchFlip::HTTPClient`
|
17
|
+
|
18
|
+
## v3.3.0
|
19
|
+
|
20
|
+
* Update httprb
|
21
|
+
* Changed oj default options
|
22
|
+
* Allow to set oj json options
|
23
|
+
|
24
|
+
## v3.2.1
|
25
|
+
|
26
|
+
* Fix `refresh` having a empty body breaking in elasticsearch 7.11
|
27
|
+
|
14
28
|
## v3.2.0
|
15
29
|
|
16
30
|
* Fix `index_scope` not being passed in `each_record` without block
|
data/README.md
CHANGED
@@ -51,7 +51,7 @@ CommentIndex.search("hello world").where(available: true).sort(id: "desc").aggre
|
|
51
51
|
|
52
52
|
```
|
53
53
|
|
54
|
-
Finally, SearchFlip comes with a minimal set of dependencies
|
54
|
+
Finally, SearchFlip comes with a minimal set of dependencies.
|
55
55
|
|
56
56
|
## Reference Docs
|
57
57
|
|
@@ -756,7 +756,7 @@ end
|
|
756
756
|
This allows to use different clusters per index e.g. when migrating indices to
|
757
757
|
new versions of Elasticsearch.
|
758
758
|
|
759
|
-
You can specify basic auth, additional headers, etc via:
|
759
|
+
You can specify basic auth, additional headers, request timeouts, etc via:
|
760
760
|
|
761
761
|
```ruby
|
762
762
|
http_client = SearchFlip::HTTPClient.new
|
@@ -773,6 +773,9 @@ http_client = http_client.via("proxy.host", 8080)
|
|
773
773
|
# Custom headers
|
774
774
|
http_client = http_client.headers(key: "value")
|
775
775
|
|
776
|
+
# Timeouts
|
777
|
+
http_client = http_client.timeout(20)
|
778
|
+
|
776
779
|
SearchFlip::Connection.new(base_url: "...", http_client: http_client)
|
777
780
|
```
|
778
781
|
|
@@ -882,52 +885,46 @@ Thus, if your ORM supports `.find_each`, `#id` and `#where` you are already
|
|
882
885
|
good to go. Otherwise, simply add your custom implementation of those methods
|
883
886
|
that work with whatever ORM you use.
|
884
887
|
|
885
|
-
##
|
886
|
-
|
887
|
-
Elasticsearch requires dates and timestamps to have one of the formats listed
|
888
|
-
here: [https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html#strict-date-time](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html#strict-date-time).
|
888
|
+
## JSON
|
889
889
|
|
890
|
-
|
890
|
+
SearchFlip is using the [Oj gem](https://github.com/ohler55/oj) to generate
|
891
|
+
JSON. More concretely, SearchFlip is using:
|
891
892
|
|
892
893
|
```ruby
|
893
|
-
|
894
|
-
# => "{\"time\":\"2018-02-22 18:19:33 UTC\"}"
|
894
|
+
Oj.dump({ key: "value" }, mode: :custom, use_to_json: true, time_format: :xmlschema, bigdecimal_as_decimal: false)
|
895
895
|
```
|
896
896
|
|
897
|
-
|
898
|
-
|
899
|
-
However,
|
900
|
-
|
897
|
+
The `use_to_json` option is used for maximum compatibility, most importantly
|
898
|
+
when using rails `ActiveSupport::TimeWithZone` timestamps, which `oj` can not
|
899
|
+
serialize natively. However, `use_to_json` adds performance overhead. You can
|
900
|
+
change the json options via:
|
901
901
|
|
902
902
|
```ruby
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
|
907
|
-
|
903
|
+
SearchFlip::Config[:json_options] = {
|
904
|
+
mode: :custom,
|
905
|
+
use_to_json: false,
|
906
|
+
time_format: :xmlschema,
|
907
|
+
bigdecimal_as_decimal: false
|
908
|
+
}
|
908
909
|
```
|
909
910
|
|
910
|
-
|
911
|
-
JSON. More concretely, SearchFlip is using:
|
911
|
+
However, you then have to convert timestamps manually for indexation via e.g.:
|
912
912
|
|
913
913
|
```ruby
|
914
|
-
|
915
|
-
|
914
|
+
class MyIndex
|
915
|
+
# ...
|
916
916
|
|
917
|
-
|
917
|
+
def self.serialize(model)
|
918
|
+
{
|
919
|
+
# ...
|
918
920
|
|
919
|
-
|
920
|
-
|
921
|
-
|
921
|
+
created_at: model.created_at.to_time
|
922
|
+
}
|
923
|
+
end
|
924
|
+
end
|
922
925
|
```
|
923
926
|
|
924
|
-
|
925
|
-
`Date` and `DateTime` to get proper serialization. You can either add them on
|
926
|
-
your own, via other libraries or by simply using:
|
927
|
-
|
928
|
-
```ruby
|
929
|
-
require "search_flip/to_json"
|
930
|
-
```
|
927
|
+
Please check out the oj docs for more details.
|
931
928
|
|
932
929
|
## Feature Support
|
933
930
|
|
data/lib/search_flip.rb
CHANGED
data/lib/search_flip/bulk.rb
CHANGED
data/lib/search_flip/config.rb
CHANGED
@@ -5,6 +5,12 @@ module SearchFlip
|
|
5
5
|
bulk_limit: 1_000,
|
6
6
|
bulk_max_mb: 100,
|
7
7
|
auto_refresh: false,
|
8
|
-
instrumenter: NullInstrumenter.new
|
8
|
+
instrumenter: NullInstrumenter.new,
|
9
|
+
json_options: {
|
10
|
+
mode: :custom,
|
11
|
+
use_to_json: true,
|
12
|
+
time_format: :xmlschema,
|
13
|
+
bigdecimal_as_decimal: false
|
14
|
+
}
|
9
15
|
}
|
10
16
|
end
|
@@ -28,7 +28,9 @@ module SearchFlip
|
|
28
28
|
# @return [Hash] The cluster settings
|
29
29
|
|
30
30
|
def get_cluster_settings
|
31
|
-
http_client.get("#{base_url}/_cluster/settings")
|
31
|
+
response = http_client.get("#{base_url}/_cluster/settings")
|
32
|
+
|
33
|
+
SearchFlip::JSON.parse(response.to_s)
|
32
34
|
end
|
33
35
|
|
34
36
|
# Updates the cluster settings according to the specified payload
|
@@ -55,7 +57,11 @@ module SearchFlip
|
|
55
57
|
|
56
58
|
def version
|
57
59
|
@version_mutex.synchronize do
|
58
|
-
@version ||=
|
60
|
+
@version ||= begin
|
61
|
+
response = http_client.headers(accept: "application/json").get("#{base_url}/")
|
62
|
+
|
63
|
+
SearchFlip::JSON.parse(response.to_s)["version"]["number"]
|
64
|
+
end
|
59
65
|
end
|
60
66
|
end
|
61
67
|
|
@@ -67,7 +73,9 @@ module SearchFlip
|
|
67
73
|
# @return [Hash] The raw response
|
68
74
|
|
69
75
|
def cluster_health
|
70
|
-
http_client.headers(accept: "application/json").get("#{base_url}/_cluster/health")
|
76
|
+
response = http_client.headers(accept: "application/json").get("#{base_url}/_cluster/health")
|
77
|
+
|
78
|
+
SearchFlip::JSON.parse(response.to_s)
|
71
79
|
end
|
72
80
|
|
73
81
|
# Uses the Elasticsearch Multi Search API to execute multiple search requests
|
@@ -117,10 +125,11 @@ module SearchFlip
|
|
117
125
|
# @return [Hash] The raw response
|
118
126
|
|
119
127
|
def update_aliases(payload)
|
120
|
-
http_client
|
128
|
+
response = http_client
|
121
129
|
.headers(accept: "application/json", content_type: "application/json")
|
122
130
|
.post("#{base_url}/_aliases", body: SearchFlip::JSON.generate(payload))
|
123
|
-
|
131
|
+
|
132
|
+
SearchFlip::JSON.parse(response.to_s)
|
124
133
|
end
|
125
134
|
|
126
135
|
# Sends an analyze request to Elasticsearch. Raises
|
@@ -132,10 +141,11 @@ module SearchFlip
|
|
132
141
|
# @return [Hash] The raw response
|
133
142
|
|
134
143
|
def analyze(request, params = {})
|
135
|
-
http_client
|
144
|
+
response = http_client
|
136
145
|
.headers(accept: "application/json")
|
137
146
|
.post("#{base_url}/_analyze", json: request, params: params)
|
138
|
-
|
147
|
+
|
148
|
+
SearchFlip::JSON.parse(response.to_s)
|
139
149
|
end
|
140
150
|
|
141
151
|
# Fetches information about the specified index aliases. Raises
|
@@ -151,10 +161,11 @@ module SearchFlip
|
|
151
161
|
# @return [Hash] The raw response
|
152
162
|
|
153
163
|
def get_aliases(index_name: "*", alias_name: "*")
|
154
|
-
http_client
|
164
|
+
response = http_client
|
155
165
|
.headers(accept: "application/json", content_type: "application/json")
|
156
166
|
.get("#{base_url}/#{index_name}/_alias/#{alias_name}")
|
157
|
-
|
167
|
+
|
168
|
+
SearchFlip::JSON.parse(response.to_s)
|
158
169
|
end
|
159
170
|
|
160
171
|
# Returns whether or not the associated Elasticsearch alias already
|
@@ -186,10 +197,11 @@ module SearchFlip
|
|
186
197
|
# @return [Array] The raw response
|
187
198
|
|
188
199
|
def get_indices(name = "*", params: {})
|
189
|
-
http_client
|
200
|
+
response = http_client
|
190
201
|
.headers(accept: "application/json", content_type: "application/json")
|
191
202
|
.get("#{base_url}/_cat/indices/#{name}", params: params)
|
192
|
-
|
203
|
+
|
204
|
+
SearchFlip::JSON.parse(response.to_s)
|
193
205
|
end
|
194
206
|
|
195
207
|
alias_method :cat_indices, :get_indices
|
@@ -286,10 +298,11 @@ module SearchFlip
|
|
286
298
|
# @return [Hash] The index settings
|
287
299
|
|
288
300
|
def get_index_settings(index_name)
|
289
|
-
http_client
|
301
|
+
response = http_client
|
290
302
|
.headers(accept: "application/json")
|
291
303
|
.get("#{index_url(index_name)}/_settings")
|
292
|
-
|
304
|
+
|
305
|
+
SearchFlip::JSON.parse(response.to_s)
|
293
306
|
end
|
294
307
|
|
295
308
|
# Sends a refresh request to Elasticsearch. Raises
|
@@ -299,7 +312,7 @@ module SearchFlip
|
|
299
312
|
# @return [Boolean] Returns true or raises SearchFlip::ResponseError
|
300
313
|
|
301
314
|
def refresh(index_names = nil)
|
302
|
-
http_client.post("#{index_names ? index_url(Array(index_names).join(",")) : base_url}/_refresh"
|
315
|
+
http_client.post("#{index_names ? index_url(Array(index_names).join(",")) : base_url}/_refresh")
|
303
316
|
|
304
317
|
true
|
305
318
|
end
|
@@ -337,7 +350,9 @@ module SearchFlip
|
|
337
350
|
url = type_name ? type_url(index_name, type_name) : index_url(index_name)
|
338
351
|
params = type_name && version.to_f >= 6.7 ? { include_type_name: true } : {}
|
339
352
|
|
340
|
-
http_client.headers(accept: "application/json").get("#{url}/_mapping", params: params)
|
353
|
+
response = http_client.headers(accept: "application/json").get("#{url}/_mapping", params: params)
|
354
|
+
|
355
|
+
SearchFlip::JSON.parse(response.to_s)
|
341
356
|
end
|
342
357
|
|
343
358
|
# Deletes the specified index from Elasticsearch. Raises
|
@@ -1,7 +1,28 @@
|
|
1
1
|
module SearchFlip
|
2
|
-
# The SearchFlip::HTTPClient class wraps the http gem
|
3
|
-
#
|
4
|
-
# with
|
2
|
+
# The SearchFlip::HTTPClient class wraps the http gem and responsible for the
|
3
|
+
# http request/response handling, ie communicating with Elasticsearch. You
|
4
|
+
# only need to use it directly if you need authentication to communicate with
|
5
|
+
# Elasticsearch or if you want to set some custom http settings.
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# http_client = SearchFlip::HTTPClient.new
|
9
|
+
#
|
10
|
+
# # Basic Auth
|
11
|
+
# http_client = http_client.basic_auth(user: "username", pass: "password")
|
12
|
+
#
|
13
|
+
# # Raw Auth Header
|
14
|
+
# http_client = http_client.auth("Bearer VGhlIEhUVFAgR2VtLCBST0NLUw")
|
15
|
+
#
|
16
|
+
# # Proxy Settings
|
17
|
+
# http_client = http_client.via("proxy.host", 8080)
|
18
|
+
#
|
19
|
+
# # Custom headers
|
20
|
+
# http_client = http_client.headers(key: "value")
|
21
|
+
#
|
22
|
+
# # Timeouts
|
23
|
+
# http_client = http_client.timeout(20)
|
24
|
+
#
|
25
|
+
# SearchFlip::Connection.new(base_url: "...", http_client: http_client)
|
5
26
|
|
6
27
|
class HTTPClient
|
7
28
|
attr_accessor :request, :plugins
|
@@ -14,11 +35,11 @@ module SearchFlip
|
|
14
35
|
class << self
|
15
36
|
extend Forwardable
|
16
37
|
|
17
|
-
def_delegators :new, :headers, :via, :basic_auth, :auth
|
38
|
+
def_delegators :new, :headers, :via, :basic_auth, :auth, :timeout
|
18
39
|
def_delegators :new, :get, :post, :put, :delete, :head
|
19
40
|
end
|
20
41
|
|
21
|
-
[:headers, :via, :basic_auth, :auth].each do |method|
|
42
|
+
[:headers, :via, :basic_auth, :auth, :timeout].each do |method|
|
22
43
|
define_method method do |*args|
|
23
44
|
dup.tap do |client|
|
24
45
|
client.request = request.send(method, *args)
|
data/lib/search_flip/index.rb
CHANGED
@@ -487,7 +487,9 @@ module SearchFlip
|
|
487
487
|
# @return [Hash] The raw response
|
488
488
|
|
489
489
|
def analyze(request, params = {})
|
490
|
-
connection.http_client.headers(accept: "application/json").post("#{index_url}/_analyze", json: request, params: params)
|
490
|
+
response = connection.http_client.headers(accept: "application/json").post("#{index_url}/_analyze", json: request, params: params)
|
491
|
+
|
492
|
+
SearchFlip::JSON.parse(response.to_s)
|
491
493
|
end
|
492
494
|
|
493
495
|
# Sends a index refresh request to Elasticsearch. Raises
|
data/lib/search_flip/json.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
module SearchFlip
|
2
2
|
class JSON
|
3
3
|
def self.generate(obj)
|
4
|
-
Oj.dump(obj,
|
4
|
+
Oj.dump(obj, SearchFlip::Config[:json_options])
|
5
5
|
end
|
6
6
|
|
7
|
-
def self.parse(
|
8
|
-
|
7
|
+
def self.parse(json)
|
8
|
+
::JSON.parse(json)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
data/lib/search_flip/to_json.rb
CHANGED
@@ -1,29 +1 @@
|
|
1
|
-
|
2
|
-
require "date"
|
3
|
-
require "json"
|
4
|
-
|
5
|
-
class Time
|
6
|
-
def to_json(*args)
|
7
|
-
iso8601(6).to_json
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
class Date
|
12
|
-
def to_json(*args)
|
13
|
-
iso8601.to_json
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
class DateTime
|
18
|
-
def to_json(*args)
|
19
|
-
iso8601(6).to_json
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
if defined?(ActiveSupport)
|
24
|
-
class ActiveSupport::TimeWithZone
|
25
|
-
def to_json(*args)
|
26
|
-
iso8601(6).to_json
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
1
|
+
warn "[DEPRECATION] Using search_flip/to_json is not neccessary anymore"
|
data/lib/search_flip/version.rb
CHANGED
data/search_flip.gemspec
CHANGED
@@ -7,7 +7,7 @@ class HttpTestRequest
|
|
7
7
|
self.calls = []
|
8
8
|
end
|
9
9
|
|
10
|
-
[:via, :basic_auth, :auth].each do |method|
|
10
|
+
[:headers, :via, :basic_auth, :auth, :timeout].each do |method|
|
11
11
|
define_method method do |*args|
|
12
12
|
dup.tap do |request|
|
13
13
|
request.calls = calls + [[method, args]]
|
@@ -20,7 +20,7 @@ RSpec.describe SearchFlip::HTTPClient do
|
|
20
20
|
describe "delegation" do
|
21
21
|
subject { SearchFlip::HTTPClient }
|
22
22
|
|
23
|
-
[:headers, :via, :basic_auth, :auth].each do |method|
|
23
|
+
[:headers, :via, :basic_auth, :auth, :timeout].each do |method|
|
24
24
|
it { should delegate(method).to(:new) }
|
25
25
|
end
|
26
26
|
|
@@ -56,8 +56,12 @@ RSpec.describe SearchFlip::HTTPClient do
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
[:via, :basic_auth, :auth].each do |method|
|
59
|
+
[:headers, :via, :basic_auth, :auth, :timeout].each do |method|
|
60
60
|
describe "##{method}" do
|
61
|
+
it "is understood by HTTP" do
|
62
|
+
expect(HTTP.respond_to?(method)).to eq(true)
|
63
|
+
end
|
64
|
+
|
61
65
|
it "creates a dupped instance" do
|
62
66
|
client = SearchFlip::HTTPClient.new
|
63
67
|
client.request = HttpTestRequest.new
|
@@ -2,6 +2,16 @@ require File.expand_path("../spec_helper", __dir__)
|
|
2
2
|
|
3
3
|
RSpec.describe SearchFlip::JSON do
|
4
4
|
describe ".generate" do
|
5
|
+
it "encodes timestamps correctly" do
|
6
|
+
Timecop.freeze "2020-06-01 12:00:00 UTC" do
|
7
|
+
expect(described_class.generate(timestamp: Time.now.utc)).to eq('{"timestamp":"2020-06-01T12:00:00.000Z"}')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
it "encodes bigdecimals as string" do
|
12
|
+
expect(described_class.generate(value: BigDecimal(1))).to eq('{"value":"1.0"}')
|
13
|
+
end
|
14
|
+
|
5
15
|
it "delegates to Oj" do
|
6
16
|
allow(Oj).to receive(:dump)
|
7
17
|
|
@@ -9,7 +19,7 @@ RSpec.describe SearchFlip::JSON do
|
|
9
19
|
|
10
20
|
described_class.generate(payload)
|
11
21
|
|
12
|
-
expect(Oj).to have_received(:dump).with(payload, mode: :custom, use_to_json: true)
|
22
|
+
expect(Oj).to have_received(:dump).with(payload, mode: :custom, use_to_json: true, time_format: :xmlschema, bigdecimal_as_decimal: false)
|
13
23
|
end
|
14
24
|
|
15
25
|
it "generates json" do
|
@@ -18,14 +28,18 @@ RSpec.describe SearchFlip::JSON do
|
|
18
28
|
end
|
19
29
|
|
20
30
|
describe ".parse" do
|
21
|
-
it "
|
22
|
-
|
31
|
+
it "returns the parsed json payload" do
|
32
|
+
expect(described_class.parse('{"key":"value"}')).to eq("key" => "value")
|
33
|
+
end
|
34
|
+
|
35
|
+
it "delegates to JSON" do
|
36
|
+
allow(JSON).to receive(:parse)
|
23
37
|
|
24
38
|
payload = '{"key":"value"}'
|
25
39
|
|
26
40
|
described_class.parse(payload)
|
27
41
|
|
28
|
-
expect(
|
42
|
+
expect(JSON).to have_received(:parse).with(payload)
|
29
43
|
end
|
30
44
|
end
|
31
45
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: search_flip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.0.
|
4
|
+
version: 4.0.0.beta8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Vetter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -164,6 +164,20 @@ dependencies:
|
|
164
164
|
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: json
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: oj
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -250,7 +264,6 @@ files:
|
|
250
264
|
- spec/search_flip/null_instrumenter_spec.rb
|
251
265
|
- spec/search_flip/response_spec.rb
|
252
266
|
- spec/search_flip/result_spec.rb
|
253
|
-
- spec/search_flip/to_json_spec.rb
|
254
267
|
- spec/spec_helper.rb
|
255
268
|
homepage: https://github.com/mrkamel/search_flip
|
256
269
|
licenses:
|
@@ -292,5 +305,4 @@ test_files:
|
|
292
305
|
- spec/search_flip/null_instrumenter_spec.rb
|
293
306
|
- spec/search_flip/response_spec.rb
|
294
307
|
- spec/search_flip/result_spec.rb
|
295
|
-
- spec/search_flip/to_json_spec.rb
|
296
308
|
- spec/spec_helper.rb
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require File.expand_path("../spec_helper", __dir__)
|
2
|
-
require "search_flip/to_json"
|
3
|
-
|
4
|
-
RSpec.describe "to_json" do
|
5
|
-
it "uses the correct format for Time" do
|
6
|
-
Timecop.freeze Time.parse("2018-01-01 12:00:00 UTC") do
|
7
|
-
expect(Time.now.utc.to_json).to eq("\"2018-01-01T12:00:00.000000Z\"")
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
it "uses the correct format for Date" do
|
12
|
-
Timecop.freeze Time.parse("2018-01-01 12:00:00 UTC") do
|
13
|
-
expect(Date.today.to_json).to eq("\"2018-01-01\"")
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
it "uses the correct format for DateTime" do
|
18
|
-
Timecop.freeze Time.parse("2018-01-01 12:00:00 UTC") do
|
19
|
-
expect(Time.now.utc.to_json).to eq("\"2018-01-01T12:00:00.000000Z\"")
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
it "uses the correct format for TimeWithZone" do
|
24
|
-
Timecop.freeze Time.parse("2018-01-01 12:00:00 UTC") do
|
25
|
-
expect(Time.find_zone("UTC").now.to_json).to eq("\"2018-01-01T12:00:00.000000Z\"")
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|