search-kit 0.0.7 → 0.0.8

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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +159 -9
  3. data/lib/search_kit/cli/search.rb +1 -1
  4. data/lib/search_kit/clients/documents.rb +4 -4
  5. data/lib/search_kit/clients/search.rb +1 -1
  6. data/lib/search_kit/models/document.rb +10 -0
  7. data/lib/search_kit/version.rb +1 -1
  8. data/search-kit.gemspec +3 -2
  9. data/spec/search_kit/cli/search_spec.rb +3 -3
  10. data/spec/search_kit/clients/search_spec.rb +2 -2
  11. data/spec/search_kit/models/document_spec.rb +11 -1
  12. metadata +2 -45
  13. data/Gemfile +0 -4
  14. data/Gemfile.lock +0 -88
  15. data/LICENSE.txt +0 -21
  16. data/Rakefile +0 -6
  17. data/config/locales/en.yml +0 -113
  18. data/coverage/assets/0.10.0/application.css +0 -799
  19. data/coverage/assets/0.10.0/application.js +0 -1707
  20. data/coverage/assets/0.10.0/colorbox/border.png +0 -0
  21. data/coverage/assets/0.10.0/colorbox/controls.png +0 -0
  22. data/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
  23. data/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
  24. data/coverage/assets/0.10.0/favicon_green.png +0 -0
  25. data/coverage/assets/0.10.0/favicon_red.png +0 -0
  26. data/coverage/assets/0.10.0/favicon_yellow.png +0 -0
  27. data/coverage/assets/0.10.0/loading.gif +0 -0
  28. data/coverage/assets/0.10.0/magnify.png +0 -0
  29. data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  30. data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  31. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  32. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  33. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  34. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  35. data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  36. data/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  37. data/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  38. data/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  39. data/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  40. data/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  41. data/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  42. data/coverage/index.html +0 -26500
  43. data/demo/videos +0 -112
  44. data/demo/videos.json +0 -14292
  45. data/log/search-kit-development.log +0 -53
  46. data/log/search-kit-test.log +0 -74
  47. data/log/service-layer-development.log +0 -282
  48. data/log/service-layer-test.log +0 -2874
  49. data/pkg/search-kit-0.0.3.gem +0 -0
  50. data/pkg/search-kit-0.0.4.gem +0 -0
  51. data/pkg/search-kit-0.0.5.gem +0 -0
  52. data/pkg/search-kit-0.0.6.gem +0 -0
  53. data/scripts/console +0 -7
  54. data/tmp/modeling.rb +0 -22
  55. data/tmp/vidya.json +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15db1362c1d79c7ec4580c019952b4292f53977e
4
- data.tar.gz: 56008480e65b1da0791b2ff4f7611c337bc228fd
3
+ metadata.gz: 1e88f01855db98a5cfca7a2495d41db74a5e1c41
4
+ data.tar.gz: 36fbbf38dfdc51d4b678c84655fb871df6938cba
5
5
  SHA512:
6
- metadata.gz: 93e1eef4d91c3ce6f4147467b5c97deca380809f9b481195a538415fdf503c9a13292ba53f2a46df618922e91d17806bf558cf0f6b1c7e7f1e967758e5d55b7e
7
- data.tar.gz: f030af5547d2120e5fc9091cb6881d5e452ab476dc237028462daf88b9dd286e411c3cf12d9ccfe328a6288c15cca1f57a94b89fc841eb824f543077e4bf3c2c
6
+ metadata.gz: f16ab3ea6602464d5f5e190004b6eb2fabd662f2bca19000e64ce51f4e734d9d422c0eaa3052fc5471d51e14902b294dae0d5680bb44d22d9f0d12d0f38aa10b
7
+ data.tar.gz: 75654d3e93280299cf3261b8cec6358815173bb0d0fc0864f520ac7df6787ff75406b97c8d1ac8c3b43fd23c5240088094550e81c8274389029388615150c418
data/README.md CHANGED
@@ -4,18 +4,168 @@ Welcome to your new gem! In this directory, you'll find the files you need to be
4
4
 
5
5
  ## Installation
6
6
 
7
- * Notes about pulling, renaming, and spots to rename.
7
+ You can start by [installing the ruby CLI tools](https://github.com/qbox-io/search-kit), which requires Ruby 2.0 or later:
8
8
 
9
- ## Usage
9
+ gem install search-kit
10
10
 
11
- * Details about configuration and ENV variables.
12
- * APP_ENV / app_env
13
- * APP_DIR / app_dir
14
- * APP_URI / app_uri
15
- * LOG_DIR / log_dir
11
+ Now set it up, by creating a SearchKit account:
16
12
 
17
- ## Development
13
+ ```
14
+ $ search-kit setup
15
+ --> [ development ]: Setting up a new SearchKit account
16
+ --> [ development ]:
17
+ --> [ development ]: Email:
18
+ --> [ development ]: Password:
19
+ ```
20
+
21
+ Put in a name and password which you'd like to use. Afterward, your
22
+ kit will be automatically configured with an API key:
23
+
24
+ ```
25
+ --> [ development ]: Set app_token: <token>
26
+ --> [ development ]: Alright! Your search-kit install has been set up.
27
+ ```
28
+
29
+ This gives you a subscriber account for SearchKit, and an access token which can be used to access the API. This first token is a creator token, which has universal permissions - don't worry, you can make a consumer (read-only) key later if you're concerned about security.
30
+
31
+ ## Getting Started: Search in five minutes
32
+
33
+ Building an index is your first major step. Let's assume you have a collection of documents which look a bit like this:
34
+
35
+ ```json
36
+ {
37
+ "body": "Some lorem ipsum",
38
+ "id": "document_1",
39
+ "title": "Blog post"
40
+ }
41
+ ```
42
+ ### Anatomy and document schema
43
+
44
+ The `id` field, here, is important. SearchKit requires the `id` field for all documents, or it will throw a bad request at you. On the other hand, the `id` isn't necessarily a number - it's stored on our end as a string, and it can be any unique value you can think of.
45
+
46
+ As far as anatomy goes, a flat, universal representation of what you expect to create is important. It's easier to understand and navigate through flat JSON than an elaborate nested structure.
47
+
48
+ Finally, SearchKit has no knowledge of relationships between documents. Because of that, we recommend that you have a clear idea of what you want use you're going to put a particular index to.
49
+
50
+ ### Scaffolding
51
+
52
+ To quickly create a searchable index using the CLI:
53
+
54
+ ```
55
+ $ search-kit scaffolds create "My Blog Posts" '[{
56
+ "body": "Some lorem ipsum",
57
+ "id": "document_1",
58
+ "title": "Blog post"
59
+ }]'
60
+ ```
61
+
62
+ Here, we're submitting in the form of a raw JSON array - SearchKit will parse the JSON, build an index named "My Blog Posts", and populate it with the given document.
63
+
64
+ Or, if you just want to use the Ruby client:
65
+
66
+ ```ruby
67
+ documents = [{
68
+ body: "Some lorem ipsum",
69
+ id: "document_1",
70
+ title: "Blog post"
71
+ }]
72
+
73
+ scaffold = SearchKit::Clients::Scaffold.new
74
+ scaffold.create("My Blog Posts", documents)
75
+ ```
76
+
77
+ In most cases, the Ruby client attempts to coerce API responses into [Virtus](https://github.com/solnic/virtus) models, so that you'll have access to some nice ruby [barewords](http://devblog.avdi.org/2012/10/01/barewords/) on your response objects.
78
+
79
+ ### Index identity
80
+
81
+ If you don't want to create and populate an index in one fell stroke, you can do it programmatically or through the CLI.
82
+
83
+ #### CLI:
84
+
85
+ ```
86
+ search-kit indices create "My Blog Posts"
87
+ ```
88
+
89
+ #### Ruby
90
+
91
+ ```ruby
92
+ indices = SearchKit::Clients::Indices.new
93
+ indices.create("My Blog Posts")
94
+ ```
95
+
96
+ So you've created an index. You've given it the name "My Blog Posts". Now it's out there, linked to your account, accessable by your api token, and it's also been given a distinct uri by turning the name into a `slug`. A slug is derived from an Index name, and is turned into a uri-friendly string. It's always given back in the response body of a successful index creation.
97
+
98
+ In this case, the slug would be `my-blog-posts`. From here on out, you will pass the slug into SearchKit clients to access that index and its child resources (Documents, Populate, Scaffold, Search).
99
+
100
+ In other words, to search the index, we want to use its slug:
101
+
102
+ #### CLI - Searching an index
103
+
104
+ ```
105
+ $ search-kit search create my-blog-posts post
106
+ ```
107
+
108
+ This gives you back a set of results that look a bit like this:
109
+
110
+ ```
111
+ --> [ development ]: Searching `my-blog-psts` for titles matching `post`:
112
+ --> [ development ]: - Found 1 titles in 9ms
113
+ --> [ development ]: -- document_1 | score: 0.8637942
114
+ ```
115
+
116
+ Not too helpful just to get the ID/score back. Let's get some more information:
117
+
118
+ ```
119
+ $ search-kit search create my-blog-posts post -d title
120
+ --> [ development ]: Searching `my-blog-psts` for titles matching `post`:
121
+ --> [ development ]: - Found 1 titles in 9ms
122
+ --> [ development ]: -- Blog post | score: 0.8637942
123
+ ```
124
+
125
+ Better!
126
+
127
+ #### Ruby - Searching an index
128
+
129
+ ```ruby
130
+ search = SearchKit::Clients::Search.new
131
+ search.create("my-blog-posts", phrase: "post")
132
+ ```
133
+
134
+ This one is a great deal friendlier, if you know how to script in Ruby, because it returns a helpful Search model with child document models.
135
+
136
+ ## Overview
137
+
138
+ From there on out, you have a ton of options - whether through the Ruby CLI, the Ruby bindings which power it, or the raw API, itself.
139
+
140
+ You have individual, atomic document control with the Document client:
141
+
142
+ ```ruby
143
+ # Atomic CRUD on individual documents
144
+ #
145
+ documents = SearchKit::Clients::Documents.new
146
+ documents.create('my-blog-posts', blog_post)
147
+ documents.show('my-blog-posts', blog_post_id)
148
+ documents.update('my-blog-posts', blog_post_id, blog_post)
149
+ documents.delete('my-blog-posts', blog_post)
150
+ ```
151
+
152
+ You have batch control with the Populate client:
153
+
154
+ ```ruby
155
+ # Batch CRUD
156
+ #
157
+ populate = SearchKit::Clients::Populate.new
158
+ populate.create('my-blog-posts', blog_posts)
159
+ populate.update('my-blog-posts', blog_posts)
160
+ populate.delete('my-blog-posts', blog_post_ids)
161
+ ```
162
+
163
+ And so on. The various domains of the API will be explained in depth soon.
164
+
165
+ ## One last thing
166
+
167
+ SearchKit is heavily influenced by the [jsonapi spec](http://jsonapi.org). All response bodies follow this hypermedia representation, contain resource links, and exist in a data namespace. It isn't 100% compliant yet, but it is _close_, and it does recognize the API format. So in other words, if you know how to use or design hypermedia clients, you're in luck.
18
168
 
19
169
  ## Contributing
20
170
 
21
- Bug reports and pull requests are welcome on GitHub at https://github.com/esmevane/service-layer.
171
+ Bug reports and pull requests are welcome on GitHub at https://github.com/qbox-io/search-kit - please don't hesitate!
@@ -21,7 +21,7 @@ module SearchKit
21
21
  document :create
22
22
  option :display, aliases: ['-d'], type: :array, required: false
23
23
  def create(slug, phrase)
24
- search = client.search(slug, phrase: phrase)
24
+ search = client.create(slug, phrase: phrase)
25
25
  head_path = 'cli.search.create.success.headline'
26
26
  info_path = 'cli.search.create.success.info'
27
27
  headline = I18n.t(head_path, slug: slug, phrase: phrase)
@@ -12,10 +12,10 @@ module SearchKit
12
12
  @token = SearchKit.config.app_token
13
13
  end
14
14
 
15
- def create(slug, options)
15
+ def create(slug, document)
16
16
  document = {
17
17
  token: token,
18
- data: { type: "documents", attributes: options }
18
+ data: { type: "documents", attributes: document }
19
19
  }
20
20
 
21
21
  response = connection.post(slug, document)
@@ -49,10 +49,10 @@ module SearchKit
49
49
  body
50
50
  end
51
51
 
52
- def update(slug, id, options)
52
+ def update(slug, id, document)
53
53
  document = {
54
54
  token: token,
55
- data: { type: "documents", id: id, attributes: options }
55
+ data: { type: "documents", id: id, attributes: document }
56
56
  }
57
57
 
58
58
  response = connection.patch("#{slug}/#{id}", document)
@@ -12,7 +12,7 @@ module SearchKit
12
12
  @token = SearchKit.config.app_token
13
13
  end
14
14
 
15
- def search(slug, options)
15
+ def create(slug, options)
16
16
  params = {
17
17
  token: token, data: { type: "searches", attributes: options }
18
18
  }
@@ -23,6 +23,16 @@ module SearchKit
23
23
  fail AttributeNotFound, field
24
24
  end
25
25
 
26
+ def respond_to_missing?(method_name, include_private = false)
27
+ source.has_key?(method_name) || super(method_name, include_private)
28
+ end
29
+
30
+ def method_missing(method_name, *arguments, &block)
31
+ get(method_name)
32
+ rescue AttributeNotFound
33
+ super(method_name, *arguments, &block)
34
+ end
35
+
26
36
  end
27
37
  end
28
38
  end
@@ -12,7 +12,7 @@ module SearchKit
12
12
  module VERSION
13
13
  MAJOR = 0
14
14
  MINOR = 0
15
- TINY = 7
15
+ TINY = 8
16
16
  PRE = nil
17
17
 
18
18
  STRING = [ MAJOR, MINOR, TINY, PRE ].compact.join(".")
@@ -14,8 +14,9 @@ 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.files = Dir.glob('**/*')
18
- spec.test_files = Dir.glob('spec/**/*')
17
+ spec.files = %w[search-kit.gemspec]
18
+ spec.files += Dir['*.md', 'bin/*', 'lib/**/*.rb']
19
+ spec.test_files = Dir['spec/**/*.rb']
19
20
  spec.require_paths = ["lib"]
20
21
 
21
22
  spec.executables << 'search-kit'
@@ -10,12 +10,12 @@ describe SearchKit::CLI::Search do
10
10
  subject { cli }
11
11
 
12
12
  describe '#create' do
13
- before { allow(cli.client).to receive(:search).and_return(response) }
13
+ before { allow(cli.client).to receive(:create).and_return(response) }
14
14
 
15
15
  subject { cli.create(slug, phrase) }
16
16
 
17
17
  it "calls client.search with the slug, and phrase" do
18
- expect(cli.client).to receive(:search).with(slug, phrase: phrase)
18
+ expect(cli.client).to receive(:create).with(slug, phrase: phrase)
19
19
  subject
20
20
  end
21
21
 
@@ -25,7 +25,7 @@ describe SearchKit::CLI::Search do
25
25
  end
26
26
 
27
27
  context 'error handling' do
28
- before { allow(cli.client).to receive(:search).and_raise(*error) }
28
+ before { allow(cli.client).to receive(:create).and_raise(*error) }
29
29
 
30
30
  context 'unauthorized error' do
31
31
  let(:error) { SearchKit::Errors::Unauthorized }
@@ -23,7 +23,7 @@ describe SearchKit::Clients::Search do
23
23
  it { is_expected.to be_instance_of Faraday::Connection }
24
24
  end
25
25
 
26
- describe '#search' do
26
+ describe '#create' do
27
27
  let(:filters) { { size: 10.5, width: "Wide", gender: "Mens" } }
28
28
  let(:options) { { phrase: phrase, filters: filters } }
29
29
  let(:phrase) { "red boots" }
@@ -36,7 +36,7 @@ describe SearchKit::Clients::Search do
36
36
  }
37
37
  end
38
38
 
39
- subject { client.search(slug, options) }
39
+ subject { client.create(slug, options) }
40
40
 
41
41
  it { is_expected.to be_instance_of SearchKit::Models::Search }
42
42
 
@@ -17,11 +17,16 @@ describe SearchKit::Models::Document do
17
17
 
18
18
  context 'when the source has the available content' do
19
19
  let(:content) { :key_content }
20
- let(:document_data) { { attributes: { key => content } } }
20
+ let(:document_data) { { source: { key => content } } }
21
21
 
22
22
  it "returns the content" do
23
23
  expect(subject).to eq content
24
24
  end
25
+
26
+ context 'method missing coverage' do
27
+ it { expect(document).to respond_to :a_key }
28
+ it { expect(document.a_key).to eq content }
29
+ end
25
30
  end
26
31
 
27
32
  context 'otherwise' do
@@ -29,6 +34,11 @@ describe SearchKit::Models::Document do
29
34
  expect { subject }
30
35
  .to raise_exception(described_class::AttributeNotFound)
31
36
  end
37
+
38
+ context 'method missing coverage' do
39
+ it { expect(document).not_to respond_to :a_key }
40
+ it { expect { document.a_key }.to raise_exception(NoMethodError) }
41
+ end
32
42
  end
33
43
  end
34
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: search-kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joseph McCormick
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-30 00:00:00.000000000 Z
11
+ date: 2015-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ansi
@@ -215,40 +215,8 @@ extensions: []
215
215
  extra_rdoc_files: []
216
216
  files:
217
217
  - CODE_OF_CONDUCT.md
218
- - Gemfile
219
- - Gemfile.lock
220
- - LICENSE.txt
221
218
  - README.md
222
- - Rakefile
223
219
  - bin/search-kit
224
- - config/locales/en.yml
225
- - coverage/assets/0.10.0/application.css
226
- - coverage/assets/0.10.0/application.js
227
- - coverage/assets/0.10.0/colorbox/border.png
228
- - coverage/assets/0.10.0/colorbox/controls.png
229
- - coverage/assets/0.10.0/colorbox/loading.gif
230
- - coverage/assets/0.10.0/colorbox/loading_background.png
231
- - coverage/assets/0.10.0/favicon_green.png
232
- - coverage/assets/0.10.0/favicon_red.png
233
- - coverage/assets/0.10.0/favicon_yellow.png
234
- - coverage/assets/0.10.0/loading.gif
235
- - coverage/assets/0.10.0/magnify.png
236
- - coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
237
- - coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
238
- - coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
239
- - coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
240
- - coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png
241
- - coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
242
- - coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
243
- - coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
244
- - coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png
245
- - coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png
246
- - coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png
247
- - coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png
248
- - coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png
249
- - coverage/index.html
250
- - demo/videos
251
- - demo/videos.json
252
220
  - lib/search_kit.rb
253
221
  - lib/search_kit/cli.rb
254
222
  - lib/search_kit/cli/all.rb
@@ -285,15 +253,6 @@ files:
285
253
  - lib/search_kit/polling/process.rb
286
254
  - lib/search_kit/thor.rb
287
255
  - lib/search_kit/version.rb
288
- - log/search-kit-development.log
289
- - log/search-kit-test.log
290
- - log/service-layer-development.log
291
- - log/service-layer-test.log
292
- - pkg/search-kit-0.0.3.gem
293
- - pkg/search-kit-0.0.4.gem
294
- - pkg/search-kit-0.0.5.gem
295
- - pkg/search-kit-0.0.6.gem
296
- - scripts/console
297
256
  - search-kit.gemspec
298
257
  - spec/integrations/subscriber_model_spec.rb
299
258
  - spec/search_kit/cli/documents_spec.rb
@@ -323,8 +282,6 @@ files:
323
282
  - spec/search_kit/polling_spec.rb
324
283
  - spec/search_kit_spec.rb
325
284
  - spec/spec_helper.rb
326
- - tmp/modeling.rb
327
- - tmp/vidya.json
328
285
  homepage: https://github.com/qbox-io/search-kit
329
286
  licenses:
330
287
  - MIT
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in service-layer.gemspec
4
- gemspec
@@ -1,88 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- search-kit (0.0.6)
5
- ansi (~> 1.5)
6
- faraday (~> 0.9)
7
- highline (~> 1.7)
8
- i18n (~> 0.7)
9
- thor (~> 0.19)
10
- user_config (~> 0.0)
11
- virtus (~> 1.0)
12
-
13
- GEM
14
- remote: https://rubygems.org/
15
- specs:
16
- ansi (1.5.0)
17
- axiom-types (0.1.1)
18
- descendants_tracker (~> 0.0.4)
19
- ice_nine (~> 0.11.0)
20
- thread_safe (~> 0.3, >= 0.3.1)
21
- coderay (1.1.0)
22
- coercible (1.0.0)
23
- descendants_tracker (~> 0.0.1)
24
- descendants_tracker (0.0.4)
25
- thread_safe (~> 0.3, >= 0.3.1)
26
- diff-lcs (1.2.5)
27
- docile (1.1.5)
28
- equalizer (0.0.11)
29
- faraday (0.9.2)
30
- multipart-post (>= 1.2, < 3)
31
- highline (1.7.8)
32
- i18n (0.7.0)
33
- ice_nine (0.11.1)
34
- json (1.8.3)
35
- method_source (0.8.2)
36
- multipart-post (2.0.0)
37
- pry (0.10.3)
38
- coderay (~> 1.1.0)
39
- method_source (~> 0.8.1)
40
- slop (~> 3.4)
41
- rack (1.6.4)
42
- rack-test (0.6.3)
43
- rack (>= 1.0)
44
- rake (10.4.2)
45
- rspec (3.4.0)
46
- rspec-core (~> 3.4.0)
47
- rspec-expectations (~> 3.4.0)
48
- rspec-mocks (~> 3.4.0)
49
- rspec-core (3.4.0)
50
- rspec-support (~> 3.4.0)
51
- rspec-expectations (3.4.0)
52
- diff-lcs (>= 1.2.0, < 2.0)
53
- rspec-support (~> 3.4.0)
54
- rspec-mocks (3.4.0)
55
- diff-lcs (>= 1.2.0, < 2.0)
56
- rspec-support (~> 3.4.0)
57
- rspec-support (3.4.0)
58
- ruby-prof (0.15.8)
59
- simplecov (0.10.0)
60
- docile (~> 1.1.0)
61
- json (~> 1.8)
62
- simplecov-html (~> 0.10.0)
63
- simplecov-html (0.10.0)
64
- slop (3.6.0)
65
- thor (0.19.1)
66
- thread_safe (0.3.5)
67
- user_config (0.0.4)
68
- virtus (1.0.5)
69
- axiom-types (~> 0.1)
70
- coercible (~> 1.0)
71
- descendants_tracker (~> 0.0, >= 0.0.3)
72
- equalizer (~> 0.0, >= 0.0.9)
73
-
74
- PLATFORMS
75
- ruby
76
-
77
- DEPENDENCIES
78
- bundler (~> 1.8)
79
- pry (~> 0.10)
80
- rack-test (~> 0.6)
81
- rake (~> 10.0)
82
- rspec (~> 3.3)
83
- ruby-prof (~> 0.15)
84
- search-kit!
85
- simplecov (~> 0.10)
86
-
87
- BUNDLED WITH
88
- 1.10.6