slipcover 0.2.65 → 0.2.66

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: be1ab035455907d50c7cacc7654370f7fbef11df
4
- data.tar.gz: 9d9880467ec35758a35a6710221b658097f3bd19
3
+ metadata.gz: c30eb78e5ec3f19a657da3119d879a03be089de2
4
+ data.tar.gz: 48307fb9bd6423823cf6b00cf11a1b105dafff83
5
5
  SHA512:
6
- metadata.gz: 0811923a620b9217c313c918ca1810bb52ebe57123c7710356068b82dca53ed48b8e86fca845589044aac5e243d4e39e947534121dda274853e39a468da26478
7
- data.tar.gz: 6ae8a159b28ec8390f192153303232eeb133c5cb2313e8c6467cd19036a24a55e93f5f2992091496d64ffbc37532d70a2d850658029d4978a960a4ba126e0bba
6
+ metadata.gz: e9813aea3e0f1cb40c222a551f0890a5b42b28a927a9da0a69a1f41388f2f26e39e143572fe19027f1b793c28ba04e84985aa80115138054fbb1e92b0ae210a9
7
+ data.tar.gz: 0ab91d8b3d9e7a38596eb2fd2be4026f7fab8355607a8735e70f9651f545e65b4ab3ba6c9f229b523c1d551c317dd0ba0819b5b7d64a540ef083ac7c7e4fcf5f
@@ -7,42 +7,53 @@ module Slipcover
7
7
  @view_name = view_name
8
8
  end
9
9
 
10
- def http_adapter
11
- @http_adapter ||= HttpAdapter.new
12
- end
13
-
14
- delegate :get,
15
- to: :http_adapter
16
-
17
10
  def url
18
11
  "#{design_document.url}/_view/#{view_name}"
19
12
  end
20
13
 
21
14
  def all(opts={})
22
- get(url, repackage(opts))[:rows].map{ |row|
15
+ opts_params, body_params = url_params_and_body(opts)
16
+ url_with_qs = add_qs_to_url(url, repackage(opts_params))
17
+
18
+ http_adapter.post(url_with_qs, body_params)[:rows].map do |row|
23
19
  doc_data = opts[:include_docs] ? row["doc"] : row
24
20
  Document.new(database.name, doc_data.symbolize_keys)
25
- }
21
+ end
22
+ end
23
+
24
+ def database
25
+ design_document.database
26
+ end
27
+
28
+ private
29
+
30
+ def url_params_and_body(opts)
31
+ keys_for_body = [:keys]
32
+ [opts.except(*keys_for_body), opts.slice(*keys_for_body)]
26
33
  end
27
34
 
28
35
  def repackage(opts)
29
36
  opts = opts.dup
30
37
 
31
38
  opts.each do |key, value|
32
- opts[key] = escape(value) if escape_key?(key)
39
+ opts[key] = jsonify_param(value) if jsonify_key?(key)
33
40
  end
34
41
  end
35
42
 
36
- def database
37
- design_document.database
43
+ def jsonify_param(value)
44
+ value.to_json
45
+ end
46
+
47
+ def jsonify_key?(key)
48
+ [:key, :startkey, :endkey].include?(key.to_sym)
38
49
  end
39
50
 
40
- def escape(value)
41
- CGI.escape(value.inspect)
51
+ def add_qs_to_url(url, params)
52
+ url + "?" + params.to_query
42
53
  end
43
54
 
44
- def escape_key?(key)
45
- [:key, :keys, :startkey, :startkey_docid, :endkey, :endkey_docid, :stale].include?(key.to_sym)
55
+ def http_adapter
56
+ @http_adapter ||= HttpAdapter.new
46
57
  end
47
58
  end
48
59
  end
@@ -1,3 +1,3 @@
1
1
  module Slipcover
2
- VERSION = "0.2.65"
2
+ VERSION = "0.2.66"
3
3
  end
@@ -42,6 +42,20 @@ describe Slipcover::Query do
42
42
  end
43
43
  end
44
44
 
45
+ it "filters by keys" do
46
+ results = query.all(keys: ["Deepti", "Fito"], include_docs: true)
47
+ results.map {|doc| doc[:name] }.should =~ ["Deepti", "Fito"]
48
+ end
49
+
50
+ # this required POSTing to a Couch view because the URL is too long when
51
+ # there are a lot of keys
52
+ it "can filter by a lot of keys" do
53
+ results = query.all(keys: ["Deepti", "Fito",
54
+ *999.times.map { |i| "Vlad#{i}" }],
55
+ include_docs: true)
56
+ results.map {|doc| doc[:name] }.should =~ ["Deepti", "Fito"]
57
+ end
58
+
45
59
  context 'with a startkey and endkey' do
46
60
  it "return the range of docs" do
47
61
  results = query.all(startkey: 'Da', endkey: 'Fz', include_docs: true)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slipcover
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.65
4
+ version: 0.2.66
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kane Baccigalupi
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2014-10-29 00:00:00.000000000 Z
14
+ date: 2014-12-02 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rest-client