search-kit 0.0.2 → 0.0.3
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/.gitignore +1 -0
- data/config/locales/en.yml +112 -3
- data/lib/search_kit.rb +5 -6
- data/lib/search_kit/cli.rb +45 -10
- data/lib/search_kit/cli/documents.rb +75 -0
- data/lib/search_kit/cli/events.rb +88 -0
- data/lib/search_kit/cli/indices.rb +96 -0
- data/lib/search_kit/cli/search.rb +60 -0
- data/lib/search_kit/cli/subscribers.rb +45 -0
- data/lib/search_kit/clients.rb +12 -0
- data/lib/search_kit/clients/documents.rb +71 -0
- data/lib/search_kit/clients/events.rb +77 -0
- data/lib/search_kit/clients/indices.rb +70 -0
- data/lib/search_kit/clients/keys.rb +78 -0
- data/lib/search_kit/clients/populate.rb +72 -0
- data/lib/search_kit/clients/scaffold.rb +36 -0
- data/lib/search_kit/clients/search.rb +33 -0
- data/lib/search_kit/clients/subscribers.rb +54 -0
- data/lib/search_kit/configuration.rb +0 -1
- data/lib/search_kit/errors.rb +4 -1
- data/lib/search_kit/messages.rb +41 -0
- data/lib/search_kit/messages/messaging.rb +64 -0
- data/lib/search_kit/models.rb +14 -0
- data/lib/search_kit/models/document.rb +30 -0
- data/lib/search_kit/models/documents.rb +31 -0
- data/lib/search_kit/models/event.rb +18 -0
- data/lib/search_kit/models/events.rb +31 -0
- data/lib/search_kit/models/key.rb +26 -0
- data/lib/search_kit/models/keys.rb +38 -0
- data/lib/search_kit/models/search.rb +17 -0
- data/lib/search_kit/models/subscriber.rb +26 -0
- data/lib/search_kit/polling.rb +30 -0
- data/lib/search_kit/polling/process.rb +40 -0
- data/lib/search_kit/thor.rb +12 -0
- data/lib/search_kit/version.rb +1 -1
- data/search-kit.gemspec +2 -0
- metadata +58 -20
- data/lib/search_kit/documents.rb +0 -59
- data/lib/search_kit/documents/cli.rb +0 -70
- data/lib/search_kit/events.rb +0 -59
- data/lib/search_kit/events/cli.rb +0 -52
- data/lib/search_kit/events/cli/complete.rb +0 -34
- data/lib/search_kit/events/cli/list.rb +0 -48
- data/lib/search_kit/events/cli/pending.rb +0 -48
- data/lib/search_kit/events/cli/publish.rb +0 -42
- data/lib/search_kit/events/cli/status.rb +0 -43
- data/lib/search_kit/events/poll.rb +0 -32
- data/lib/search_kit/events/poll/process.rb +0 -42
- data/lib/search_kit/events/publish.rb +0 -48
- data/lib/search_kit/indices.rb +0 -58
- data/lib/search_kit/indices/cli.rb +0 -65
- data/lib/search_kit/messaging.rb +0 -44
- data/lib/search_kit/search.rb +0 -30
- data/lib/search_kit/search/cli.rb +0 -49
- data/lib/search_kit/search/cli/actions.rb +0 -104
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'search_kit/thor'
|
3
|
+
|
4
|
+
module SearchKit
|
5
|
+
class CLI < Thor
|
6
|
+
class Search < Thor
|
7
|
+
namespace :search
|
8
|
+
|
9
|
+
no_commands do
|
10
|
+
def client
|
11
|
+
@client ||= Search.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def messages
|
15
|
+
@messages ||= Messages.new
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
document :create
|
20
|
+
option :display, aliases: ['-d'], type: :array, required: false
|
21
|
+
def create(slug, phrase)
|
22
|
+
search = client.search(slug, phrase: phrase)
|
23
|
+
head_path = 'cli.search.create.success.headline'
|
24
|
+
info_path = 'cli.search.create.success.info'
|
25
|
+
headline = I18n.t(head_path, slug: slug, phrase: phrase)
|
26
|
+
info = I18n.t(info_path, count: search.results, time: search.time)
|
27
|
+
lines = [ headline, info ]
|
28
|
+
display = options.fetch('display', [])
|
29
|
+
|
30
|
+
lines += search.documents.map do |document|
|
31
|
+
if display.any?
|
32
|
+
fields = display.map { |field| document.get(field) }
|
33
|
+
" -- #{fields.join(' | ')} | score: #{document.score}"
|
34
|
+
else
|
35
|
+
" -- #{document.id} | score: #{document.score}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
lines.each(&messages.method(:info))
|
40
|
+
rescue Errors::Unauthorized
|
41
|
+
messages.unauthorized
|
42
|
+
rescue Errors::IndexNotFound
|
43
|
+
messages.not_found
|
44
|
+
rescue Errors::BadRequest
|
45
|
+
messages.bad_request
|
46
|
+
rescue Errors::Unprocessable
|
47
|
+
messages.unprocessable
|
48
|
+
rescue Faraday::ConnectionFailed
|
49
|
+
messages.no_service
|
50
|
+
end
|
51
|
+
|
52
|
+
no_commands do
|
53
|
+
alias_method :search, :create
|
54
|
+
alias_method :c, :create
|
55
|
+
alias_method :s, :search
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'search_kit/thor'
|
3
|
+
|
4
|
+
module SearchKit
|
5
|
+
class CLI < Thor
|
6
|
+
class Subscribers < Thor
|
7
|
+
namespace :subscribers
|
8
|
+
|
9
|
+
no_commands do
|
10
|
+
def client
|
11
|
+
@client ||= SearchKit::Clients::Subscribers.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def messages
|
15
|
+
@messages ||= Messages.new
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
document :create
|
20
|
+
def create(email, password)
|
21
|
+
subscriber = client.create(email: email, password: password)
|
22
|
+
messages.info(subscriber.to_json)
|
23
|
+
rescue Errors::BadRequest
|
24
|
+
messages.bad_request
|
25
|
+
rescue Errors::Unprocessable
|
26
|
+
messages.unprocessable
|
27
|
+
rescue Faraday::ConnectionFailed
|
28
|
+
messages.no_service
|
29
|
+
end
|
30
|
+
|
31
|
+
document :info
|
32
|
+
def info
|
33
|
+
subscriber = client.info
|
34
|
+
messages.info(subscriber.to_json)
|
35
|
+
rescue Errors::SubscriberNotFound
|
36
|
+
messages.not_found
|
37
|
+
rescue Errors::Unauthorized
|
38
|
+
messages.unauthorized
|
39
|
+
rescue Faraday::ConnectionFailed
|
40
|
+
messages.no_service
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module SearchKit
|
2
|
+
module Clients
|
3
|
+
autoload :Documents, 'search_kit/clients/documents'
|
4
|
+
autoload :Events, 'search_kit/clients/events'
|
5
|
+
autoload :Indices, 'search_kit/clients/indices'
|
6
|
+
autoload :Keys, 'search_kit/clients/keys'
|
7
|
+
autoload :Populate, 'search_kit/clients/populate'
|
8
|
+
autoload :Scaffold, 'search_kit/clients/scaffold'
|
9
|
+
autoload :Search, 'search_kit/clients/search'
|
10
|
+
autoload :Subscribers, 'search_kit/clients/subscribers'
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module SearchKit
|
5
|
+
module Clients
|
6
|
+
class Documents
|
7
|
+
attr_reader :connection, :token
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
uri = [SearchKit.config.app_uri, "documents"].join("/")
|
11
|
+
@connection = Faraday.new(uri)
|
12
|
+
@token = SearchKit.config.app_token
|
13
|
+
end
|
14
|
+
|
15
|
+
def create(slug, options)
|
16
|
+
document = {
|
17
|
+
token: token,
|
18
|
+
data: { type: "documents", attributes: options }
|
19
|
+
}
|
20
|
+
|
21
|
+
response = connection.post(slug, document)
|
22
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
23
|
+
|
24
|
+
fail Errors::BadRequest if response.status == 400
|
25
|
+
fail Errors::Unauthorized if response.status == 401
|
26
|
+
fail Errors::IndexNotFound if response.status == 404
|
27
|
+
fail Errors::Unprocessable if response.status == 422
|
28
|
+
|
29
|
+
body
|
30
|
+
end
|
31
|
+
|
32
|
+
def delete(slug, id)
|
33
|
+
response = connection.delete("#{slug}/#{id}", token: token)
|
34
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
35
|
+
|
36
|
+
fail Errors::Unauthorized if response.status == 401
|
37
|
+
fail Errors::IndexNotFound if response.status == 404
|
38
|
+
|
39
|
+
body
|
40
|
+
end
|
41
|
+
|
42
|
+
def show(slug, id)
|
43
|
+
response = connection.get("#{slug}/#{id}", token: token)
|
44
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
45
|
+
|
46
|
+
fail Errors::Unauthorized if response.status == 401
|
47
|
+
fail Errors::IndexNotFound if response.status == 404
|
48
|
+
|
49
|
+
body
|
50
|
+
end
|
51
|
+
|
52
|
+
def update(slug, id, options)
|
53
|
+
document = {
|
54
|
+
token: token,
|
55
|
+
data: { type: "documents", id: id, attributes: options }
|
56
|
+
}
|
57
|
+
|
58
|
+
response = connection.patch("#{slug}/#{id}", document)
|
59
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
60
|
+
|
61
|
+
fail Errors::BadRequest if response.status == 400
|
62
|
+
fail Errors::Unauthorized if response.status == 401
|
63
|
+
fail Errors::IndexNotFound if response.status == 404
|
64
|
+
fail Errors::Unprocessable if response.status == 422
|
65
|
+
|
66
|
+
body
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module SearchKit
|
5
|
+
module Clients
|
6
|
+
class Events
|
7
|
+
attr_reader :connection, :token
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
uri = [ SearchKit.config.app_uri, "events" ].join("/")
|
11
|
+
@connection = Faraday.new(uri)
|
12
|
+
@token = SearchKit.config.app_token
|
13
|
+
end
|
14
|
+
|
15
|
+
def complete(id)
|
16
|
+
response = connection.delete(id, token: token)
|
17
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
18
|
+
|
19
|
+
fail Errors::Unauthorized if response.status == 401
|
20
|
+
fail Errors::EventNotFound if response.status == 404
|
21
|
+
|
22
|
+
SearchKit::Models::Event.new body.fetch(:data, {})
|
23
|
+
end
|
24
|
+
|
25
|
+
def index
|
26
|
+
response = connection.get(token: token)
|
27
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
28
|
+
|
29
|
+
fail Errors::Unauthorized if response.status == 401
|
30
|
+
|
31
|
+
SearchKit::Models::Events.new body.fetch(:data, [])
|
32
|
+
end
|
33
|
+
|
34
|
+
def pending(channel)
|
35
|
+
params = { "filter[channel]" => channel, token: token }
|
36
|
+
response = connection.get('', params)
|
37
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
38
|
+
|
39
|
+
fail Errors::BadRequest if response.status == 400
|
40
|
+
fail Errors::Unauthorized if response.status == 401
|
41
|
+
fail Errors::Unprocessable if response.status == 422
|
42
|
+
|
43
|
+
SearchKit::Models::Events.new body.fetch(:data, [])
|
44
|
+
end
|
45
|
+
|
46
|
+
def publish(channel, payload)
|
47
|
+
params = {
|
48
|
+
token: token,
|
49
|
+
data: {
|
50
|
+
type: 'events',
|
51
|
+
attributes: { channel: channel, payload: payload }
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
response = connection.post("", params)
|
56
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
57
|
+
|
58
|
+
fail Errors::BadRequest if response.status == 400
|
59
|
+
fail Errors::Unauthorized if response.status == 401
|
60
|
+
fail Errors::Unprocessable if response.status == 422
|
61
|
+
|
62
|
+
SearchKit::Models::Event.new body.fetch(:data, {})
|
63
|
+
end
|
64
|
+
|
65
|
+
def show(id)
|
66
|
+
response = connection.get(id, token: token)
|
67
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
68
|
+
|
69
|
+
fail Errors::Unauthorized if response.status == 401
|
70
|
+
fail Errors::EventNotFound if response.status == 404
|
71
|
+
|
72
|
+
SearchKit::Models::Event.new body.fetch(:data, {})
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module SearchKit
|
5
|
+
module Clients
|
6
|
+
class Indices
|
7
|
+
attr_reader :connection, :token
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
uri = [SearchKit.config.app_uri, "indices"].join("/")
|
11
|
+
@connection = Faraday.new(uri)
|
12
|
+
@token = SearchKit.config.app_token
|
13
|
+
end
|
14
|
+
|
15
|
+
def archive(slug)
|
16
|
+
response = connection.delete(slug, token: token)
|
17
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
18
|
+
|
19
|
+
fail Errors::Unauthorized if response.status == 401
|
20
|
+
fail Errors::IndexNotFound if response.status == 404
|
21
|
+
|
22
|
+
body
|
23
|
+
end
|
24
|
+
|
25
|
+
def create(name)
|
26
|
+
options = {
|
27
|
+
token: token,
|
28
|
+
data: { type: 'indices', attributes: { name: name } }
|
29
|
+
}
|
30
|
+
|
31
|
+
response = connection.post('', options)
|
32
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
33
|
+
|
34
|
+
fail Errors::Unauthorized if response.status == 401
|
35
|
+
fail Errors::BadRequest if response.status == 400
|
36
|
+
fail Errors::Unprocessable if response.status == 422
|
37
|
+
|
38
|
+
body
|
39
|
+
end
|
40
|
+
|
41
|
+
def show(slug)
|
42
|
+
response = connection.get(slug, token: token)
|
43
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
44
|
+
|
45
|
+
fail Errors::Unauthorized if response.status == 401
|
46
|
+
fail Errors::IndexNotFound if response.status == 404
|
47
|
+
|
48
|
+
body
|
49
|
+
end
|
50
|
+
|
51
|
+
def update(slug, options)
|
52
|
+
options = {
|
53
|
+
token: token,
|
54
|
+
data: { type: 'indices', attributes: options }
|
55
|
+
}
|
56
|
+
|
57
|
+
response = connection.patch(slug, options)
|
58
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
59
|
+
|
60
|
+
fail Errors::BadRequest if response.status == 400
|
61
|
+
fail Errors::Unauthorized if response.status == 401
|
62
|
+
fail Errors::IndexNotFound if response.status == 404
|
63
|
+
fail Errors::Unprocessable if response.status == 422
|
64
|
+
|
65
|
+
body
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module SearchKit
|
5
|
+
module Clients
|
6
|
+
class Keys
|
7
|
+
attr_reader :connection, :token
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
uri = [SearchKit.config.app_uri, "keys"].join("/")
|
11
|
+
@connection = Faraday.new(uri)
|
12
|
+
@token = SearchKit.config.app_token
|
13
|
+
end
|
14
|
+
|
15
|
+
def create(name, options = {})
|
16
|
+
options = {
|
17
|
+
token: token,
|
18
|
+
data: { type: 'keys', attributes: { name: name }.merge(options) }
|
19
|
+
}
|
20
|
+
|
21
|
+
response = connection.post('', options)
|
22
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
23
|
+
|
24
|
+
fail Errors::BadRequest if response.status == 400
|
25
|
+
fail Errors::Unauthorized if response.status == 401
|
26
|
+
fail Errors::Unprocessable if response.status == 422
|
27
|
+
|
28
|
+
body
|
29
|
+
end
|
30
|
+
|
31
|
+
def expire(id)
|
32
|
+
response = connection.delete(id, token: token)
|
33
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
34
|
+
|
35
|
+
fail Errors::Unauthorized if response.status == 401
|
36
|
+
fail Errors::KeyNotFound if response.status == 404
|
37
|
+
|
38
|
+
body
|
39
|
+
end
|
40
|
+
|
41
|
+
def index
|
42
|
+
response = connection.get("", token: token)
|
43
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
44
|
+
|
45
|
+
fail Errors::Unauthorized if response.status == 401
|
46
|
+
|
47
|
+
body
|
48
|
+
end
|
49
|
+
|
50
|
+
def show(id)
|
51
|
+
response = connection.get(id, token: token)
|
52
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
53
|
+
|
54
|
+
fail Errors::Unauthorized if response.status == 401
|
55
|
+
fail Errors::KeyNotFound if response.status == 404
|
56
|
+
|
57
|
+
body
|
58
|
+
end
|
59
|
+
|
60
|
+
def update(id, options)
|
61
|
+
options = {
|
62
|
+
token: token, data: { type: 'keys', attributes: options }
|
63
|
+
}
|
64
|
+
|
65
|
+
response = connection.patch(id, options)
|
66
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
67
|
+
|
68
|
+
fail Errors::BadRequest if response.status == 400
|
69
|
+
fail Errors::Unauthorized if response.status == 401
|
70
|
+
fail Errors::KeyNotFound if response.status == 404
|
71
|
+
fail Errors::Unprocessable if response.status == 422
|
72
|
+
|
73
|
+
body
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module SearchKit
|
5
|
+
module Clients
|
6
|
+
class Populate
|
7
|
+
attr_reader :connection, :token
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
uri = [SearchKit.config.app_uri, "populate"].join("/")
|
11
|
+
@connection = Faraday.new(uri)
|
12
|
+
@token = SearchKit.config.app_token
|
13
|
+
end
|
14
|
+
|
15
|
+
def create(slug, documents)
|
16
|
+
documents = documents.map do |document|
|
17
|
+
{ type: 'documents', attributes: document }
|
18
|
+
end
|
19
|
+
|
20
|
+
params = { token: token, data: documents }
|
21
|
+
response = connection.post(slug, params)
|
22
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
23
|
+
|
24
|
+
fail Errors::BadRequest if response.status == 400
|
25
|
+
fail Errors::Unauthorized if response.status == 401
|
26
|
+
fail Errors::IndexNotFound if response.status == 404
|
27
|
+
fail Errors::Unprocessable if response.status == 422
|
28
|
+
|
29
|
+
body
|
30
|
+
end
|
31
|
+
|
32
|
+
def update(slug, documents)
|
33
|
+
documents = documents.map do |document|
|
34
|
+
{
|
35
|
+
type: 'documents',
|
36
|
+
id: document.fetch(:id, nil),
|
37
|
+
attributes: document
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
params = { token: token, data: documents }
|
42
|
+
response = connection.patch(slug, params)
|
43
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
44
|
+
|
45
|
+
fail Errors::BadRequest if response.status == 400
|
46
|
+
fail Errors::Unauthorized if response.status == 401
|
47
|
+
fail Errors::IndexNotFound if response.status == 404
|
48
|
+
fail Errors::Unprocessable if response.status == 422
|
49
|
+
|
50
|
+
body
|
51
|
+
end
|
52
|
+
|
53
|
+
def delete(slug, ids)
|
54
|
+
documents = ids.map do |id|
|
55
|
+
{ type: 'documents', id: id, attributes: { id: id } }
|
56
|
+
end
|
57
|
+
|
58
|
+
params = { token: token, data: documents }
|
59
|
+
response = connection.delete(slug, params)
|
60
|
+
body = JSON.parse(response.body, symbolize_names: true)
|
61
|
+
|
62
|
+
fail Errors::BadRequest if response.status == 400
|
63
|
+
fail Errors::Unauthorized if response.status == 401
|
64
|
+
fail Errors::IndexNotFound if response.status == 404
|
65
|
+
fail Errors::Unprocessable if response.status == 422
|
66
|
+
|
67
|
+
body
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|