search-kit 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +88 -0
  3. data/coverage/assets/0.10.0/application.css +799 -0
  4. data/coverage/assets/0.10.0/application.js +1707 -0
  5. data/coverage/assets/0.10.0/colorbox/border.png +0 -0
  6. data/coverage/assets/0.10.0/colorbox/controls.png +0 -0
  7. data/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
  8. data/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
  9. data/coverage/assets/0.10.0/favicon_green.png +0 -0
  10. data/coverage/assets/0.10.0/favicon_red.png +0 -0
  11. data/coverage/assets/0.10.0/favicon_yellow.png +0 -0
  12. data/coverage/assets/0.10.0/loading.gif +0 -0
  13. data/coverage/assets/0.10.0/magnify.png +0 -0
  14. data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  15. data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  16. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  17. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  18. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  19. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  20. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  21. data/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  22. data/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  23. data/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  24. data/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  25. data/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  26. data/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  27. data/coverage/index.html +446 -0
  28. data/demo/videos +112 -0
  29. data/demo/videos.json +14292 -0
  30. data/lib/search_kit/configuration.rb +8 -3
  31. data/lib/search_kit/logger.rb +1 -2
  32. data/lib/search_kit/version.rb +1 -1
  33. data/log/service-layer-development.log +282 -0
  34. data/log/service-layer-test.log +2874 -0
  35. data/pkg/search-kit-0.0.3.gem +0 -0
  36. data/search-kit.gemspec +5 -11
  37. data/spec/integrations/subscriber_model_spec.rb +91 -0
  38. data/spec/search_kit/cli/documents_spec.rb +234 -0
  39. data/spec/search_kit/cli/events_spec.rb +243 -0
  40. data/spec/search_kit/cli/indices_spec.rb +273 -0
  41. data/spec/search_kit/cli/search_spec.rb +77 -0
  42. data/spec/search_kit/cli/subscribers_spec.rb +108 -0
  43. data/spec/search_kit/clients/documents_spec.rb +210 -0
  44. data/spec/search_kit/clients/events_spec.rb +202 -0
  45. data/spec/search_kit/clients/indices_spec.rb +193 -0
  46. data/spec/search_kit/clients/keys_spec.rb +216 -0
  47. data/spec/search_kit/clients/populate_spec.rb +195 -0
  48. data/spec/search_kit/clients/scaffold_spec.rb +70 -0
  49. data/spec/search_kit/clients/search_spec.rb +87 -0
  50. data/spec/search_kit/clients/subscribers_spec.rb +166 -0
  51. data/spec/search_kit/configuration_spec.rb +25 -0
  52. data/spec/search_kit/messages_spec.rb +45 -0
  53. data/spec/search_kit/models/document_spec.rb +34 -0
  54. data/spec/search_kit/models/documents_spec.rb +12 -0
  55. data/spec/search_kit/models/event_spec.rb +14 -0
  56. data/spec/search_kit/models/events_spec.rb +12 -0
  57. data/spec/search_kit/models/key_spec.rb +26 -0
  58. data/spec/search_kit/models/keys_spec.rb +39 -0
  59. data/spec/search_kit/models/subscriber_spec.rb +22 -0
  60. data/spec/search_kit/polling/process_spec.rb +65 -0
  61. data/spec/search_kit/polling_spec.rb +24 -0
  62. data/spec/search_kit_spec.rb +7 -0
  63. data/spec/spec_helper.rb +29 -0
  64. data/tmp/modeling.rb +22 -0
  65. data/tmp/vidya.json +1 -0
  66. metadata +101 -19
  67. data/.gitignore +0 -16
  68. data/.rspec +0 -2
  69. data/.rubocop.yml +0 -39
  70. data/.ruby-version +0 -1
  71. data/.travis.yml +0 -4
Binary file
data/search-kit.gemspec CHANGED
@@ -14,23 +14,18 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = "https://github.com/qbox-io/search-kit"
15
15
  spec.license = "MIT"
16
16
 
17
- spec.bindir = "bin"
17
+ spec.files = Dir.glob('**/*')
18
+ spec.test_files = Dir.glob('spec/**/*')
18
19
  spec.require_paths = ["lib"]
19
20
 
20
- spec.files = `git ls-files -z`.split("\x0").reject do |file|
21
- file.match(%r{^(test|spec|features)/})
22
- end
23
-
24
- spec.executables = spec.files.grep(%r{^bin/}) do |file|
25
- File.basename(file)
26
- end
21
+ spec.executables << 'search-kit'
27
22
 
28
23
  spec.add_dependency "ansi", "~> 1.5"
29
24
  spec.add_dependency "faraday", "~> 0.9"
30
- spec.add_dependency "thor", "~> 0.19"
31
- spec.add_dependency "user_config", "~> 0.0"
32
25
  spec.add_dependency "highline", "~> 1.7"
33
26
  spec.add_dependency "i18n", "~> 0.7"
27
+ spec.add_dependency "thor", "~> 0.19"
28
+ spec.add_dependency "user_config", "~> 0.0"
34
29
  spec.add_dependency "virtus", "~> 1.0"
35
30
 
36
31
  spec.add_development_dependency "bundler", "~> 1.8"
@@ -40,5 +35,4 @@ Gem::Specification.new do |spec|
40
35
  spec.add_development_dependency "rack-test", "~> 0.6"
41
36
  spec.add_development_dependency "simplecov", "~> 0.10"
42
37
  spec.add_development_dependency "ruby-prof", "~> 0.15"
43
-
44
38
  end
@@ -0,0 +1,91 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Modeling incoming subscriber data" do
4
+ let(:subscriber_id) { "5659f64d21de3bfe6c000004" }
5
+ let(:subscriber_email) { "joseph@qbox.io" }
6
+ let(:subscriber_uri) { "/api/subscribers" }
7
+
8
+ let(:key_token) { "2bad61a9ea4f5adf1d36952e59ddda2b" }
9
+ let(:key_name) { "Universal access key" }
10
+ let(:key_id) { "5659f64d21de3bfe6c000005" }
11
+ let(:key_uri) { "/api/keys/5659f64d21de3bfe6c000005" }
12
+
13
+ let(:response) do
14
+ {
15
+ data: {
16
+ type: "subscribers",
17
+ id: subscriber_id,
18
+ attributes: { id: subscriber_id, email: subscriber_email },
19
+ links: { self: subscriber_uri },
20
+ relationships: {
21
+ keys: [
22
+ {
23
+ type: "keys",
24
+ id: key_id,
25
+ attributes: {
26
+ id: key_id,
27
+ name: key_name,
28
+ token: key_token,
29
+ privilege: "creator"
30
+ },
31
+ links: { self: key_uri }
32
+ }
33
+ ]
34
+ }
35
+ }
36
+ }
37
+ end
38
+
39
+ let(:subscriber) do
40
+ SearchKit::Models::Subscriber.new(response.fetch(:data))
41
+ end
42
+
43
+ subject { subscriber }
44
+
45
+ describe '#creator_tokens' do
46
+ subject { subscriber.creator_tokens.first }
47
+ it { is_expected.to eq key_token }
48
+ end
49
+
50
+ describe '#email' do
51
+ subject { subscriber.email }
52
+ it { is_expected.to eq subscriber_email }
53
+ end
54
+
55
+ describe '#id' do
56
+ subject { subscriber.id }
57
+ it { is_expected.to eq subscriber_id }
58
+ end
59
+
60
+ describe '#keys' do
61
+ let(:key) { subscriber.keys.first }
62
+
63
+ subject { key }
64
+
65
+ describe '#id' do
66
+ subject { key.id }
67
+ it { is_expected.to eq key_id }
68
+ end
69
+
70
+ describe '#name' do
71
+ subject { key.name }
72
+ it { is_expected.to eq key_name }
73
+ end
74
+
75
+ describe '#token' do
76
+ subject { key.token }
77
+ it { is_expected.to eq key_token }
78
+ end
79
+
80
+ describe '#uri' do
81
+ subject { key.uri }
82
+ it { is_expected.to eq key_uri }
83
+ end
84
+ end
85
+
86
+ describe '#uri' do
87
+ subject { subscriber.uri }
88
+ it { is_expected.to eq subscriber_uri }
89
+ end
90
+
91
+ end
@@ -0,0 +1,234 @@
1
+ require 'spec_helper'
2
+
3
+ describe SearchKit::CLI::Documents do
4
+ let(:cli) { described_class.new }
5
+ let(:json) { response.to_json }
6
+ let(:response) { {} }
7
+ let(:slug) { "an-index-slug" }
8
+
9
+ subject { cli }
10
+
11
+ describe '#create' do
12
+ before { allow(cli.client).to receive(:create).and_return(response) }
13
+
14
+ subject { cli.create(slug, json) }
15
+
16
+ it "parses the given document json" do
17
+ expect(JSON).to receive(:parse).with(json, symbolize_names: true)
18
+ subject
19
+ end
20
+
21
+ it "calls client.create with the slug and document" do
22
+ expect(cli.client).to receive(:create).with(slug, {})
23
+ subject
24
+ end
25
+
26
+ it "reports on its results" do
27
+ expect(cli.messages).to receive(:info).with(response.to_json)
28
+ subject
29
+ end
30
+
31
+ context 'when given bad json' do
32
+ let(:json) { "Arglebargle" }
33
+ it "reports an error" do
34
+ expect(cli.messages).to receive(:json_parse_error)
35
+ subject
36
+ end
37
+ end
38
+
39
+ context 'error handling' do
40
+ before { allow(cli.client).to receive(:create).and_raise(*error) }
41
+
42
+ context 'not found error' do
43
+ let(:error) { SearchKit::Errors::IndexNotFound }
44
+
45
+ it do
46
+ expect(cli.messages).to receive(:not_found)
47
+ subject
48
+ end
49
+ end
50
+
51
+ context 'bad request error' do
52
+ let(:error) { SearchKit::Errors::BadRequest }
53
+
54
+ it do
55
+ expect(cli.messages).to receive(:bad_request)
56
+ subject
57
+ end
58
+ end
59
+
60
+ context 'unprocessable error' do
61
+ let(:error) { SearchKit::Errors::Unprocessable }
62
+
63
+ it do
64
+ expect(cli.messages).to receive(:unprocessable)
65
+ subject
66
+ end
67
+ end
68
+
69
+ context 'not found error' do
70
+ let(:error) { [Faraday::ConnectionFailed, "Message"] }
71
+
72
+ it do
73
+ expect(cli.messages).to receive(:no_service)
74
+ subject
75
+ end
76
+ end
77
+
78
+ end
79
+ end
80
+
81
+ describe '#delete' do
82
+ let(:id) { 1 }
83
+
84
+ before { allow(cli.client).to receive(:delete).and_return(response) }
85
+
86
+ subject { cli.delete(slug, id) }
87
+
88
+ it "calls client.create with the slug and document" do
89
+ expect(cli.client).to receive(:delete).with(slug, id)
90
+ subject
91
+ end
92
+
93
+ it "reports on its results" do
94
+ expect(cli.messages).to receive(:info).with(response.to_json)
95
+ subject
96
+ end
97
+
98
+ context 'error handling' do
99
+ before { allow(cli.client).to receive(:delete).and_raise(*error) }
100
+
101
+ context 'not found error' do
102
+ let(:error) { SearchKit::Errors::IndexNotFound }
103
+
104
+ it do
105
+ expect(cli.messages).to receive(:not_found)
106
+ subject
107
+ end
108
+ end
109
+
110
+ context 'not found error' do
111
+ let(:error) { [Faraday::ConnectionFailed, "Message"] }
112
+
113
+ it do
114
+ expect(cli.messages).to receive(:no_service)
115
+ subject
116
+ end
117
+ end
118
+
119
+ end
120
+ end
121
+
122
+ describe '#show' do
123
+ let(:id) { 1 }
124
+
125
+ before { allow(cli.client).to receive(:show).and_return(response) }
126
+
127
+ subject { cli.show(slug, id) }
128
+
129
+ it "calls client.create with the slug and document" do
130
+ expect(cli.client).to receive(:show).with(slug, id)
131
+ subject
132
+ end
133
+
134
+ it "reports on its results" do
135
+ expect(cli.messages).to receive(:info).with(response.to_json)
136
+ subject
137
+ end
138
+
139
+ context 'error handling' do
140
+ before { allow(cli.client).to receive(:show).and_raise(*error) }
141
+
142
+ context 'not found error' do
143
+ let(:error) { SearchKit::Errors::IndexNotFound }
144
+
145
+ it do
146
+ expect(cli.messages).to receive(:not_found)
147
+ subject
148
+ end
149
+ end
150
+
151
+ context 'not found error' do
152
+ let(:error) { [Faraday::ConnectionFailed, "Message"] }
153
+
154
+ it do
155
+ expect(cli.messages).to receive(:no_service)
156
+ subject
157
+ end
158
+ end
159
+
160
+ end
161
+ end
162
+
163
+ describe '#update' do
164
+ let(:id) { 1 }
165
+
166
+ before { allow(cli.client).to receive(:update).and_return(response) }
167
+
168
+ subject { cli.update(slug, id, json) }
169
+
170
+ it "parses the given document json" do
171
+ expect(JSON).to receive(:parse).with(json, symbolize_names: true)
172
+ subject
173
+ end
174
+
175
+ it "calls client.create with the slug and document" do
176
+ expect(cli.client).to receive(:update).with(slug, id, {})
177
+ subject
178
+ end
179
+
180
+ it "reports on its results" do
181
+ expect(cli.messages).to receive(:info).with(response.to_json)
182
+ subject
183
+ end
184
+
185
+ context 'when given bad json' do
186
+ let(:json) { "Arglebargle" }
187
+ it "reports an error" do
188
+ expect(cli.messages).to receive(:json_parse_error)
189
+ subject
190
+ end
191
+ end
192
+
193
+ context 'error handling' do
194
+ before { allow(cli.client).to receive(:update).and_raise(*error) }
195
+
196
+ context 'not found error' do
197
+ let(:error) { SearchKit::Errors::IndexNotFound }
198
+
199
+ it do
200
+ expect(cli.messages).to receive(:not_found)
201
+ subject
202
+ end
203
+ end
204
+
205
+ context 'bad request error' do
206
+ let(:error) { SearchKit::Errors::BadRequest }
207
+
208
+ it do
209
+ expect(cli.messages).to receive(:bad_request)
210
+ subject
211
+ end
212
+ end
213
+
214
+ context 'unprocessable error' do
215
+ let(:error) { SearchKit::Errors::Unprocessable }
216
+
217
+ it do
218
+ expect(cli.messages).to receive(:unprocessable)
219
+ subject
220
+ end
221
+ end
222
+
223
+ context 'not found error' do
224
+ let(:error) { [Faraday::ConnectionFailed, "Message"] }
225
+
226
+ it do
227
+ expect(cli.messages).to receive(:no_service)
228
+ subject
229
+ end
230
+ end
231
+
232
+ end
233
+ end
234
+ end
@@ -0,0 +1,243 @@
1
+ require 'spec_helper'
2
+
3
+ describe SearchKit::CLI::Events do
4
+ let(:channel) { "colon:separated:values" }
5
+ let(:cli) { described_class.new }
6
+ let(:json) { response.to_json }
7
+ let(:response) { {} }
8
+ let(:event) { SearchKit::Models::Event.new }
9
+ let(:events) { SearchKit::Models::Events.new }
10
+ let(:slug) { "an-index-slug" }
11
+
12
+ subject { cli }
13
+
14
+ describe '#complete' do
15
+ let(:id) { 1 }
16
+
17
+ before { allow(cli.client).to receive(:complete).and_return(event) }
18
+
19
+ subject { cli.complete(id) }
20
+
21
+ it "calls client.complete with the event id" do
22
+ expect(cli.client).to receive(:complete).with(id)
23
+ subject
24
+ end
25
+
26
+ it "reports on its results" do
27
+ expect(cli.messages).to receive(:info).with(an_instance_of(String))
28
+ subject
29
+ end
30
+
31
+ context 'error handling' do
32
+ before { allow(cli.client).to receive(:complete).and_raise(*error) }
33
+
34
+ context 'not found error' do
35
+ let(:error) { SearchKit::Errors::EventNotFound }
36
+
37
+ it do
38
+ expect(cli.messages).to receive(:not_found)
39
+ subject
40
+ end
41
+ end
42
+
43
+ context 'not found error' do
44
+ let(:error) { [Faraday::ConnectionFailed, "Message"] }
45
+
46
+ it do
47
+ expect(cli.messages).to receive(:no_service)
48
+ subject
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ describe '#pending' do
55
+ before do
56
+ allow(cli.client).to receive(:index).and_return(events)
57
+ allow(cli.client).to receive(:pending).and_return(events)
58
+ end
59
+
60
+ subject { cli.pending(channel) }
61
+
62
+ context 'when given a channel' do
63
+ it "calls client.pending with the channel" do
64
+ expect(cli.client).to receive(:pending).with(channel)
65
+ subject
66
+ end
67
+ end
68
+
69
+ context 'otherwise' do
70
+ let(:channel) { nil }
71
+
72
+ it "calls client.index" do
73
+ expect(cli.client).to receive(:index)
74
+ subject
75
+ end
76
+ end
77
+
78
+ it "reports on its results" do
79
+ expect(cli.messages).to receive(:info).with(an_instance_of(String))
80
+ subject
81
+ end
82
+
83
+ context 'error handling' do
84
+ before do
85
+ allow(cli.client).to receive(:index).and_raise(*error)
86
+ allow(cli.client).to receive(:pending).and_raise(*error)
87
+ end
88
+
89
+ context 'not found error' do
90
+ let(:error) { SearchKit::Errors::Unauthorized }
91
+
92
+ it do
93
+ expect(cli.messages).to receive(:unauthorized)
94
+ subject
95
+ end
96
+ end
97
+
98
+ context 'bad request error' do
99
+ let(:error) { SearchKit::Errors::BadRequest }
100
+
101
+ it do
102
+ expect(cli.messages).to receive(:bad_request)
103
+ subject
104
+ end
105
+ end
106
+
107
+ context 'unprocessable error' do
108
+ let(:error) { SearchKit::Errors::Unprocessable }
109
+
110
+ it do
111
+ expect(cli.messages).to receive(:unprocessable)
112
+ subject
113
+ end
114
+ end
115
+
116
+ context 'not found error' do
117
+ let(:error) { [Faraday::ConnectionFailed, "Message"] }
118
+
119
+ it do
120
+ expect(cli.messages).to receive(:no_service)
121
+ subject
122
+ end
123
+ end
124
+
125
+ end
126
+ end
127
+
128
+ describe '#publish' do
129
+ let(:payload) { { one_fish: true, two_fish: true } }
130
+ let(:payload_json) { payload.to_json }
131
+
132
+ before do
133
+ allow(cli.client).to receive(:publish).and_return(event)
134
+ end
135
+
136
+ subject { cli.publish(channel, payload_json) }
137
+
138
+ it "parses the given document json" do
139
+ expect(JSON).to receive(:parse).with(payload_json, symbolize_names: true)
140
+ subject
141
+ end
142
+
143
+ it "calls client.create with the slug and document" do
144
+ expect(cli.client).to receive(:publish).with(channel, payload)
145
+ subject
146
+ end
147
+
148
+ it "reports on its results" do
149
+ expect(cli.messages).to receive(:info).with(an_instance_of(String))
150
+ subject
151
+ end
152
+
153
+ context 'when given bad json' do
154
+ let(:payload) { "Arglebargle" }
155
+
156
+ it "reports an error" do
157
+ expect(cli.messages).to receive(:json_parse_error)
158
+ subject
159
+ end
160
+ end
161
+
162
+ context 'error handling' do
163
+ before { allow(cli.client).to receive(:publish).and_raise(*error) }
164
+
165
+ context 'not found error' do
166
+ let(:error) { SearchKit::Errors::Unauthorized }
167
+
168
+ it do
169
+ expect(cli.messages).to receive(:unauthorized)
170
+ subject
171
+ end
172
+ end
173
+
174
+ context 'bad request error' do
175
+ let(:error) { SearchKit::Errors::BadRequest }
176
+
177
+ it do
178
+ expect(cli.messages).to receive(:bad_request)
179
+ subject
180
+ end
181
+ end
182
+
183
+ context 'unprocessable error' do
184
+ let(:error) { SearchKit::Errors::Unprocessable }
185
+
186
+ it do
187
+ expect(cli.messages).to receive(:unprocessable)
188
+ subject
189
+ end
190
+ end
191
+
192
+ context 'not found error' do
193
+ let(:error) { [Faraday::ConnectionFailed, "Message"] }
194
+
195
+ it do
196
+ expect(cli.messages).to receive(:no_service)
197
+ subject
198
+ end
199
+ end
200
+
201
+ end
202
+ end
203
+
204
+ describe '#status' do
205
+ let(:id) { 1 }
206
+
207
+ before { allow(cli.client).to receive(:show).and_return(event) }
208
+
209
+ subject { cli.status(id) }
210
+
211
+ it "calls client.show with the event id" do
212
+ expect(cli.client).to receive(:show).with(id)
213
+ subject
214
+ end
215
+
216
+ it "reports on its results" do
217
+ expect(cli.messages).to receive(:info).with(an_instance_of(String))
218
+ subject
219
+ end
220
+
221
+ context 'error handling' do
222
+ before { allow(cli.client).to receive(:show).and_raise(*error) }
223
+
224
+ context 'not found error' do
225
+ let(:error) { SearchKit::Errors::EventNotFound }
226
+
227
+ it do
228
+ expect(cli.messages).to receive(:not_found)
229
+ subject
230
+ end
231
+ end
232
+
233
+ context 'not found error' do
234
+ let(:error) { [Faraday::ConnectionFailed, "Message"] }
235
+
236
+ it do
237
+ expect(cli.messages).to receive(:no_service)
238
+ subject
239
+ end
240
+ end
241
+ end
242
+ end
243
+ end