slipcover 0.2.65 → 0.2.66

Sign up to get free protection for your applications and to get access to all the features.
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