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
@@ -0,0 +1,87 @@
1
+ require 'ostruct'
2
+ require 'spec_helper'
3
+
4
+ describe SearchKit::Clients::Search do
5
+ let(:client) { described_class.new }
6
+ let(:json) { response_body.to_json }
7
+ let(:response_body) { { data: {} } }
8
+ let(:response) { OpenStruct.new(body: json, status: status) }
9
+ let(:status) { 200 }
10
+ let(:token) { SearchKit.config.app_token }
11
+
12
+ before do
13
+ allow(client.connection).to receive(:post).and_return(response)
14
+ allow(JSON).to receive(:parse).and_return(response_body)
15
+ end
16
+
17
+ subject { client }
18
+
19
+ it { is_expected.to respond_to :token }
20
+
21
+ describe '#connection' do
22
+ subject { client.connection }
23
+ it { is_expected.to be_instance_of Faraday::Connection }
24
+ end
25
+
26
+ describe '#search' do
27
+ let(:filters) { { size: 10.5, width: "Wide", gender: "Mens" } }
28
+ let(:options) { { phrase: phrase, filters: filters } }
29
+ let(:phrase) { "red boots" }
30
+ let(:slug) { "an-index-slug" }
31
+
32
+ let(:params) do
33
+ {
34
+ token: token,
35
+ data: { type: 'searches', attributes: options }
36
+ }
37
+ end
38
+
39
+ subject { client.search(slug, options) }
40
+
41
+ it { is_expected.to be_instance_of SearchKit::Models::Search }
42
+
43
+ it "calls #connection.get with the base events path" do
44
+ expect(client.connection).to receive(:post).with(slug, params)
45
+ subject
46
+ end
47
+
48
+ it "parses the json response" do
49
+ expect(JSON).to receive(:parse).with(json, symbolize_names: true)
50
+
51
+ subject
52
+ end
53
+
54
+ context 'when the response status is 400' do
55
+ let(:status) { 400 }
56
+
57
+ it "raises a bad request error" do
58
+ expect { subject }.to raise_exception(SearchKit::Errors::BadRequest)
59
+ end
60
+ end
61
+
62
+ context 'when the response status is 401' do
63
+ let(:status) { 401 }
64
+
65
+ it "raises an unauthorized error" do
66
+ expect { subject }.to raise_exception(SearchKit::Errors::Unauthorized)
67
+ end
68
+ end
69
+
70
+ context 'when the response status is 404' do
71
+ let(:status) { 404 }
72
+
73
+ it "raises an index not found error" do
74
+ expect { subject }.to raise_exception(SearchKit::Errors::IndexNotFound)
75
+ end
76
+ end
77
+
78
+ context 'when the response status is 422' do
79
+ let(:status) { 422 }
80
+
81
+ it "raises an unprocessable error" do
82
+ expect { subject }.to raise_exception(SearchKit::Errors::Unprocessable)
83
+ end
84
+ end
85
+
86
+ end
87
+ end
@@ -0,0 +1,166 @@
1
+ require 'ostruct'
2
+ require 'spec_helper'
3
+
4
+ describe SearchKit::Clients::Subscribers do
5
+ let(:client) { described_class.new }
6
+ let(:email) { "email@example.com" }
7
+ let(:json) { response_body.to_json }
8
+ let(:password) { "password" }
9
+ let(:response_body) { { data: {} } }
10
+ let(:response) { OpenStruct.new(status: status, body: json) }
11
+ let(:subscriber) { SearchKit::Models::Subscriber.new }
12
+ let(:status) { 200 }
13
+ let(:token) { SearchKit.config.app_token }
14
+
15
+ before do
16
+ allow(client.connection).to receive(:get).and_return(response)
17
+ allow(client.connection).to receive(:patch).and_return(response)
18
+ allow(client.connection).to receive(:post).and_return(response)
19
+ allow(JSON).to receive(:parse).and_return(response_body)
20
+ end
21
+
22
+ subject { client }
23
+
24
+ it { is_expected.to respond_to :token }
25
+
26
+ describe '#connection' do
27
+ subject { client.connection }
28
+ it { is_expected.to be_instance_of Faraday::Connection }
29
+ end
30
+
31
+ describe '#create' do
32
+ let(:params) do
33
+ {
34
+ data: {
35
+ type: 'subscribers',
36
+ attributes: { email: email, password: password }
37
+ }
38
+ }
39
+ end
40
+
41
+ subject { client.create(email: email, password: password) }
42
+
43
+ it { is_expected.to be_instance_of SearchKit::Models::Subscriber }
44
+
45
+ it "calls #connection.post with given name" do
46
+ expect(client.connection).to receive(:post).with('', params)
47
+ subject
48
+ end
49
+
50
+ it "parses the json response" do
51
+ expect(JSON).to receive(:parse).with(json, symbolize_names: true)
52
+ subject
53
+ end
54
+
55
+ context 'when given status 400' do
56
+ let(:status) { 400 }
57
+
58
+ it "throws a bad request error" do
59
+ expect { subject }.to raise_exception SearchKit::Errors::BadRequest
60
+ end
61
+ end
62
+
63
+ context 'when given status 422' do
64
+ let(:status) { 422 }
65
+
66
+ it "throws an unprocessable error" do
67
+ expect { subject }.to raise_exception SearchKit::Errors::Unprocessable
68
+ end
69
+ end
70
+
71
+ end
72
+
73
+ describe '#info' do
74
+ subject { client.info }
75
+
76
+ it { is_expected.to be_instance_of SearchKit::Models::Subscriber }
77
+
78
+ it "calls #connection.get" do
79
+ expect(client.connection).to receive(:get).with("", token: token)
80
+ subject
81
+ end
82
+
83
+ it "parses the json response" do
84
+ expect(JSON).to receive(:parse).with(json, symbolize_names: true)
85
+ subject
86
+ end
87
+
88
+ context 'when given status 401' do
89
+ let(:status) { 401 }
90
+
91
+ it "throws an unauthorized error" do
92
+ expect { subject }.to raise_exception SearchKit::Errors::Unauthorized
93
+ end
94
+ end
95
+
96
+ context 'when given status 404' do
97
+ let(:status) { 404 }
98
+
99
+ it "throws a not found error" do
100
+ expect { subject }
101
+ .to raise_exception SearchKit::Errors::SubscriberNotFound
102
+ end
103
+ end
104
+
105
+ end
106
+
107
+ describe '#update' do
108
+ let(:params) do
109
+ {
110
+ token: token,
111
+ data: {
112
+ type: 'subscribers',
113
+ attributes: { email: email, password: password }
114
+ }
115
+ }
116
+ end
117
+
118
+ subject { client.update(email: email, password: password) }
119
+
120
+ it { is_expected.to be_instance_of SearchKit::Models::Subscriber }
121
+
122
+ it "calls #connection.patch with given id and attributes" do
123
+ expect(client.connection).to receive(:patch).with("", params)
124
+ subject
125
+ end
126
+
127
+ it "parses the json response" do
128
+ expect(JSON).to receive(:parse).with(json, symbolize_names: true)
129
+ subject
130
+ end
131
+
132
+ context 'when given status 400' do
133
+ let(:status) { 400 }
134
+
135
+ it "throws a bad request error" do
136
+ expect { subject }.to raise_exception SearchKit::Errors::BadRequest
137
+ end
138
+ end
139
+
140
+ context 'when given status 401' do
141
+ let(:status) { 401 }
142
+
143
+ it "throws a not found error" do
144
+ expect { subject }.to raise_exception SearchKit::Errors::Unauthorized
145
+ end
146
+ end
147
+
148
+ context 'when given status 404' do
149
+ let(:status) { 404 }
150
+
151
+ it "throws a not found error" do
152
+ expect { subject }
153
+ .to raise_exception SearchKit::Errors::SubscriberNotFound
154
+ end
155
+ end
156
+
157
+ context 'when given status 422' do
158
+ let(:status) { 422 }
159
+
160
+ it "throws an Unprocessable error" do
161
+ expect { subject }.to raise_exception SearchKit::Errors::Unprocessable
162
+ end
163
+ end
164
+
165
+ end
166
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe SearchKit::Configuration do
4
+ let(:klass) { Class.new }
5
+
6
+ before { klass.extend(described_class) }
7
+
8
+ subject { klass }
9
+
10
+ it { is_expected.to respond_to :config }
11
+ it { is_expected.to respond_to :configure }
12
+
13
+ describe "Arbitrary assignment" do
14
+ it "allows any arbitrary setting to hold a value" do
15
+ expect {
16
+ klass.configure do |config|
17
+ config.arbitrary_setting = "value"
18
+ end
19
+ }.to change { klass.config.arbitrary_setting }
20
+ .from(nil)
21
+ .to("value")
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ describe SearchKit::Messages do
4
+ let(:messages) { described_class.new }
5
+ let(:message) { "Just about any string" }
6
+
7
+ before do
8
+ SearchKit.config.verbose = true
9
+
10
+ allow(Kernel).to receive(:warn)
11
+ allow(Kernel).to receive(:puts)
12
+ allow(SearchKit.logger).to receive(:warn)
13
+ allow(SearchKit.logger).to receive(:info)
14
+ end
15
+
16
+ after { SearchKit.config.verbose = false }
17
+
18
+ describe "#info" do
19
+ subject { messages.info(message) }
20
+
21
+ it "warns in stderr" do
22
+ expect(Kernel).to receive(:puts)
23
+ subject
24
+ end
25
+
26
+ it "logs a warning" do
27
+ expect(SearchKit.logger).to receive(:info).with(message)
28
+ subject
29
+ end
30
+ end
31
+
32
+ describe "#warning" do
33
+ subject { messages.warning(message) }
34
+
35
+ it "warns in stderr" do
36
+ expect(Kernel).to receive(:warn)
37
+ subject
38
+ end
39
+
40
+ it "logs a warning" do
41
+ expect(SearchKit.logger).to receive(:warn).with(message)
42
+ subject
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe SearchKit::Models::Document do
4
+ let(:document_data) { {} }
5
+ let(:document) { described_class.new(document_data) }
6
+
7
+ subject { document }
8
+
9
+ it { is_expected.to respond_to :id }
10
+ it { is_expected.to respond_to :source }
11
+ it { is_expected.to respond_to :score }
12
+
13
+ describe '#get' do
14
+ let(:key) { :a_key }
15
+
16
+ subject { document.get(key) }
17
+
18
+ context 'when the source has the available content' do
19
+ let(:content) { :key_content }
20
+ let(:document_data) { { attributes: { key => content } } }
21
+
22
+ it "returns the content" do
23
+ expect(subject).to eq content
24
+ end
25
+ end
26
+
27
+ context 'otherwise' do
28
+ it "raises an attribute not found error" do
29
+ expect { subject }
30
+ .to raise_exception(described_class::AttributeNotFound)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe SearchKit::Models::Documents do
4
+ let(:document_data) { [{}] }
5
+ let(:documents) { described_class.new(document_data) }
6
+
7
+ subject { documents }
8
+
9
+ it { is_expected.to respond_to :contents }
10
+ it { is_expected.to respond_to :each }
11
+
12
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe SearchKit::Models::Event do
4
+ let(:event_data) { {} }
5
+ let(:event) { described_class.new(event_data) }
6
+
7
+ subject { event }
8
+
9
+ it { is_expected.to respond_to :id }
10
+ it { is_expected.to respond_to :channel }
11
+ it { is_expected.to respond_to :payload }
12
+ it { is_expected.to respond_to :state }
13
+
14
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe SearchKit::Models::Events do
4
+ let(:event_data) { [{}] }
5
+ let(:events) { described_class.new(event_data) }
6
+
7
+ subject { events }
8
+
9
+ it { is_expected.to respond_to :contents }
10
+ it { is_expected.to respond_to :each }
11
+
12
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe SearchKit::Models::Key do
4
+ let(:model) { described_class.new }
5
+
6
+ subject { model }
7
+
8
+ it { is_expected.to be_instance_of SearchKit::Models::Key }
9
+ it { is_expected.to respond_to :uri }
10
+ it { is_expected.to respond_to :token }
11
+ it { is_expected.to respond_to :name }
12
+
13
+ describe '#creator?' do
14
+ subject { model.creator? }
15
+
16
+ context 'when #privilege is set to "creator"' do
17
+ before { model.privilege = 'creator' }
18
+ it { is_expected.to be true }
19
+ end
20
+
21
+ context 'otherwise' do
22
+ it { is_expected.to be false }
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe SearchKit::Models::Keys do
4
+ let(:creator_key) do
5
+ SearchKit::Models::Key.new(
6
+ attributes: {
7
+ privilege: 'creator',
8
+ token: creator_token
9
+ }
10
+ )
11
+ end
12
+
13
+ let(:consumer_key) do
14
+ SearchKit::Models::Key.new(
15
+ attributes: {
16
+ privilege: 'consumer',
17
+ token: consumer_token
18
+ }
19
+ )
20
+ end
21
+
22
+ let(:creator_token) { "12345" }
23
+ let(:consumer_token) { "67890" }
24
+ let(:keys) { [ creator_key, consumer_key ] }
25
+ let(:model) { described_class.new(keys) }
26
+
27
+ subject { model }
28
+
29
+ describe "#creator" do
30
+ subject { model.creator }
31
+ it { is_expected.to be_instance_of described_class }
32
+ it { is_expected.to match described_class.new([creator_key]) }
33
+ end
34
+
35
+ describe "#tokens" do
36
+ subject { model.tokens }
37
+ it { is_expected.to match [creator_token, consumer_token] }
38
+ end
39
+ end