couchrest 2.0.0.rc2 → 2.0.0.rc3

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: e11ffbb5106aa947148918e8df2dca90b71e7760
4
- data.tar.gz: 5cb76649c5af7b0b7be771a1238b9d4d2a9c4748
3
+ metadata.gz: 47b17f1a8431dbf297df05649b3e3ef50da87ec5
4
+ data.tar.gz: d6c33fc6dfd9651d3cafb18d75a91a363542026f
5
5
  SHA512:
6
- metadata.gz: 82bd9c1a4249d4ada2e838462b8bd1a56b02b709262aa3906da17bba1e2e0f142a4daebfe7ae9dff11f85782bbd8dac4cfac0953a72204c40b931993e3fcd312
7
- data.tar.gz: cc004a48286023ccf7c68ba48f4c5380729391c62ef160860b94a262295b43b8d400ccc92b983d6f734bb5dfc71c86fbff142a947748c734945cf6a0b21f046c
6
+ metadata.gz: c690201c7ca0cde422405fc26e1399e18d0b98c435cfb6ca37e38fb2dd194351f06188930ebe805fd7201fb5f089dbde9df1fea1f12913c8ecf0be8f602ef4c9
7
+ data.tar.gz: 0d012252eb5d4a89302d2f069d76b855763aba3e65d6a17dbfe6f78b2d129ff381211ed96d08250ae6bef6edea8224983a03245db5bf06b0851af8a777bb5d35
@@ -1,4 +1,5 @@
1
1
  rvm:
2
+ - 2.3.0
2
3
  - 2.2.0
3
4
  - 2.1.0
4
5
  - 2.0.0
@@ -6,3 +7,5 @@ rvm:
6
7
  - jruby
7
8
  - rbx
8
9
  services: couchdb
10
+ before_install:
11
+ - gem install bundler
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0.rc2
1
+ 2.0.0.rc3
@@ -27,11 +27,12 @@ Gem::Specification.new do |s|
27
27
  s.rubygems_version = %q{1.3.7}
28
28
  s.summary = %q{Lean and RESTful interface to CouchDB.}
29
29
 
30
- s.add_dependency("httpclient", ["~> 2.6.0"])
30
+ s.add_dependency("httpclient", ["~> 2.7"])
31
31
  s.add_dependency("mime-types", [">= 1.15"])
32
32
  s.add_dependency("multi_json", ["~> 1.7"])
33
33
  s.add_development_dependency("json", [">= 1.7.0"])
34
34
  s.add_development_dependency("rspec", "~> 2.14.1")
35
35
  s.add_development_dependency("rake")
36
36
  s.add_development_dependency("webmock")
37
+ s.add_development_dependency("mime-types", "2.6.2") # Avoid Errors with 3.0 series
37
38
  end
@@ -6,7 +6,7 @@ db = couch.database('word-count-example')
6
6
 
7
7
  puts "Now that we've parsed all those books into CouchDB, the queries we can run are incredibly flexible."
8
8
  puts "\nThe simplest query we can run is the total word count for all words in all documents:"
9
- puts "this will take a few minutes the first time. if it times out, just rerun this script in a few few minutes."
9
+ puts "this will take a few minutes the first time. if it times out, just rerun this script in a few minutes."
10
10
  puts db.view('word_count/words').inspect
11
11
 
12
12
  puts "\nWe can also narrow the query down to just one word, across all documents. Here is the count for 'flight' in all three books:"
@@ -37,4 +37,4 @@ puts params.inspect
37
37
  puts
38
38
  puts 'The url looks like this:'
39
39
  puts 'http://127.0.0.1:5984/word-count-example/_view/word_count/count?key=["flight","da-vinci"]'
40
- puts "\nTry dropping that in your browser..."
40
+ puts "\nTry dropping that in your browser..."
@@ -1,4 +1,15 @@
1
- == 2.0.0.rc2
1
+ == 2.0.0.rc3
2
+
3
+ * Major Changes
4
+ * At the risk of causing chaos, `Database#get` now returns nil for 404 (@samlown)
5
+
6
+ * Minor changes
7
+ * Updating HTTPClient dependency to > 2.7 for Ruby 2.3 support. (@samlown)
8
+ * Added `:ssl_ca_file` configuration option (@joelnb)
9
+ * Return headers content for HEAD requests (@solenko)
10
+ * Changing to options hash for bulk_save (@samlown via @matthiasjakel)
11
+
12
+ == 2.0.0.rc2 - 2015-08-18
2
13
 
3
14
  * Minor changes
4
15
  * Forcing HTTP basic connections when user+pass provided to avoid 401 (@samlown via @cloudant)
@@ -25,7 +25,9 @@ module CouchRest
25
25
  # * `:payload` override the document or data sent in the message body (only PUT or POST).
26
26
  # * `:headers` any additional headers (overrides :content_type and :accept)
27
27
  # * `:timeout` (or `:read_timeout`) and `:open_timeout` the time in miliseconds to wait for the request, see the [Net HTTP Persistent documentation](http://docs.seattlerb.org/net-http-persistent/Net/HTTP/Persistent.html#attribute-i-read_timeout) for more details.
28
- # * `:verify_ssl`, `:ssl_client_cert`, `:ssl_client_key`, and `:ssl_ca_file`, SSL handling methods.
28
+ # * `:verify_ssl` verify ssl certificates (or not)
29
+ # * `:ssl_client_cert`, `:ssl_client_key` parameters controlling ssl client certificate authentication
30
+ # * `:ssl_ca_file` load additional CA certificates from a file (or directory)
29
31
  #
30
32
  # When :raw is true in PUT and POST requests, no attempt will be made to convert the document payload to JSON. This is
31
33
  # not normally necessary as IO and Tempfile objects will not be parsed anyway. The result of the request will
@@ -38,7 +40,7 @@ module CouchRest
38
40
 
39
41
  HEADER_CONTENT_SYMBOL_MAP = {
40
42
  :content_type => 'Content-Type',
41
- :accept => 'Accept'
43
+ :accept => 'Accept'
42
44
  }
43
45
 
44
46
  DEFAULT_HEADERS = {
@@ -90,7 +92,7 @@ module CouchRest
90
92
 
91
93
  # Send a HEAD request.
92
94
  def head(path, options = {})
93
- options = options.merge(:raw => true) # No parsing!
95
+ options = options.merge(:head => true) # No parsing!
94
96
  execute('HEAD', path, options)
95
97
  end
96
98
 
@@ -122,6 +124,7 @@ module CouchRest
122
124
  end
123
125
  http.ssl_config.client_cert = opts[:ssl_client_cert] if opts.include?(:ssl_client_cert)
124
126
  http.ssl_config.client_key = opts[:ssl_client_key] if opts.include?(:ssl_client_key)
127
+ http.ssl_config.set_trust_ca(opts[:ssl_ca_file]) if opts.include?(:ssl_ca_file)
125
128
 
126
129
  # Timeout options
127
130
  http.receive_timeout = opts[:timeout] if opts.include?(:timeout)
@@ -164,7 +167,7 @@ module CouchRest
164
167
  else
165
168
  response = send_request(req)
166
169
  handle_response_code(response)
167
- parse_body(response.body, options)
170
+ parse_response(response, options)
168
171
  end
169
172
  end
170
173
 
@@ -177,6 +180,14 @@ module CouchRest
177
180
  raise_response_error(response) unless SUCCESS_RESPONSE_CODES.include?(response.status)
178
181
  end
179
182
 
183
+ def parse_response(response, opts)
184
+ if opts[:head]
185
+ opts[:raw] ? response.http_header.dump : response.headers
186
+ else
187
+ parse_body(response.body, opts)
188
+ end
189
+ end
190
+
180
191
  def parse_body(body, opts)
181
192
  if opts[:raw]
182
193
  # passthru
@@ -90,8 +90,9 @@ module CouchRest
90
90
 
91
91
  # == Retrieving and saving single documents
92
92
 
93
- # GET a document from CouchDB, by id. Returns a Document or Design.
94
- def get(id, params = {})
93
+ # GET a document from CouchDB, by id. Returns a Document, Design, or raises an exception
94
+ # if the document does not exist.
95
+ def get!(id, params = {})
95
96
  slug = escape_docid(id)
96
97
  url = CouchRest.paramify_url("#{path}/#{slug}", params)
97
98
  result = connection.get(url)
@@ -105,6 +106,14 @@ module CouchRest
105
106
  doc
106
107
  end
107
108
 
109
+ # GET the requested document by ID like `get!`, but returns nil if the document
110
+ # does not exist.
111
+ def get(*args)
112
+ get!(*args)
113
+ rescue CouchRest::NotFound
114
+ nil
115
+ end
116
+
108
117
  # Save a document to CouchDB. This will use the <tt>_id</tt> field from
109
118
  # the document as the id for PUT, or request a new UUID from CouchDB, if
110
119
  # no <tt>_id</tt> is present on the document. IDs are attached to
@@ -175,12 +184,13 @@ module CouchRest
175
184
  # missing ids, supply one from the uuid cache.
176
185
  #
177
186
  # If called with no arguments, bulk saves the cache of documents to be bulk saved.
178
- def bulk_save(docs = nil, use_uuids = true, all_or_nothing = false)
187
+ def bulk_save(docs = nil, opts = {})
188
+ opts = { :use_uuids => true, :all_or_nothing => false }.update(opts)
179
189
  if docs.nil?
180
190
  docs = @bulk_save_cache
181
191
  @bulk_save_cache = []
182
192
  end
183
- if (use_uuids)
193
+ if opts[:use_uuids]
184
194
  ids, noids = docs.partition{|d|d['_id']}
185
195
  uuid_count = [noids.length, @server.uuid_batch_count].max
186
196
  noids.each do |doc|
@@ -189,7 +199,7 @@ module CouchRest
189
199
  end
190
200
  end
191
201
  request_body = {:docs => docs}
192
- if all_or_nothing
202
+ if opts[:all_or_nothing]
193
203
  request_body[:all_or_nothing] = true
194
204
  end
195
205
  connection.post "#{path}/_bulk_docs", request_body
@@ -64,22 +64,26 @@ describe CouchRest::Connection do
64
64
  conn = CouchRest::Connection.new(URI "http://user:pass@mock")
65
65
  expect(conn.http.www_auth.basic_auth.set?).to be_true
66
66
  end
67
-
67
+
68
68
  describe "with SSL options" do
69
+
69
70
  it "should leave the default if nothing set" do
70
71
  default = HTTPClient.new.ssl_config.verify_mode
71
72
  conn = CouchRest::Connection.new(URI "https://localhost:5984")
72
73
  expect(conn.http.ssl_config.verify_mode).to eql(default)
73
74
  end
75
+
74
76
  it "should support disabling SSL verify mode" do
75
77
  conn = CouchRest::Connection.new(URI("https://localhost:5984"), :verify_ssl => false)
76
78
  expect(conn.http.ssl_config.verify_mode).to eql(OpenSSL::SSL::VERIFY_NONE)
77
79
  end
80
+
78
81
  it "should support enabling SSL verify mode" do
79
82
  conn = CouchRest::Connection.new(URI("https://localhost:5984"), :verify_ssl => true)
80
83
  expect(conn.http.ssl_config.verify_mode).to eql(OpenSSL::SSL::VERIFY_PEER)
81
84
  end
82
- it "should support setting specific cert, key, and ca" do
85
+
86
+ it "should support setting specific client cert & key" do
83
87
  conn = CouchRest::Connection.new(URI("https://localhost:5984"),
84
88
  :ssl_client_cert => 'cert',
85
89
  :ssl_client_key => 'key',
@@ -88,6 +92,42 @@ describe CouchRest::Connection do
88
92
  expect(conn.http.ssl_config.client_key).to eql('key')
89
93
  end
90
94
 
95
+ it "should support adding the ca to trust from a file" do
96
+ file = Tempfile.new(['server', '.pem'])
97
+ File.write(file.path, "-----BEGIN CERTIFICATE-----
98
+ MIIDrTCCAxagAwIBAgIBADANBgkqhkiG9w0BAQQFADCBnDEbMBkGA1UEChMSVGhl
99
+ IFNhbXBsZSBDb21wYW55MRQwEgYDVQQLEwtDQSBEaXZpc2lvbjEcMBoGCSqGSIb3
100
+ DQEJARYNY2FAc2FtcGxlLmNvbTETMBEGA1UEBxMKTWV0cm9wb2xpczERMA8GA1UE
101
+ CBMITmV3IFlvcmsxCzAJBgNVBAYTAlVTMRQwEgYDVQQDEwtUU0MgUm9vdCBDQTAe
102
+ Fw0wMTEyMDgwNDI3MDVaFw0wMjEyMDgwNDI3MDVaMIGcMRswGQYDVQQKExJUaGUg
103
+ U2FtcGxlIENvbXBhbnkxFDASBgNVBAsTC0NBIERpdmlzaW9uMRwwGgYJKoZIhvcN
104
+ AQkBFg1jYUBzYW1wbGUuY29tMRMwEQYDVQQHEwpNZXRyb3BvbGlzMREwDwYDVQQI
105
+ EwhOZXcgWW9yazELMAkGA1UEBhMCVVMxFDASBgNVBAMTC1RTQyBSb290IENBMIGf
106
+ MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDaiAwfKB6ZBtnTRTIo6ddomt0S9ec0
107
+ NcuvtJogt0s9dXpHowh98FCDjnLtCi8du6LDTZluhlOtTFARPlV/LVnpsbyMCXMs
108
+ G2qpdjJop+XIBdvoCz2HpGXjUmym8WLqt+coWwJqUSwiEba74JG93v7TU+Xcvc00
109
+ 5MWnxmKZzD/R3QIDAQABo4H8MIH5MAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFG/v
110
+ yytrBtEquMX2dreysix/MlPMMIHJBgNVHSMEgcEwgb6AFG/vyytrBtEquMX2drey
111
+ six/MlPMoYGipIGfMIGcMRswGQYDVQQKExJUaGUgU2FtcGxlIENvbXBhbnkxFDAS
112
+ BgNVBAsTC0NBIERpdmlzaW9uMRwwGgYJKoZIhvcNAQkBFg1jYUBzYW1wbGUuY29t
113
+ MRMwEQYDVQQHEwpNZXRyb3BvbGlzMREwDwYDVQQIEwhOZXcgWW9yazELMAkGA1UE
114
+ BhMCVVMxFDASBgNVBAMTC1RTQyBSb290IENBggEAMA0GCSqGSIb3DQEBBAUAA4GB
115
+ ABclymJfsPOUazNQO8aIaxwVbXWS+8AFEkMMRx6O68ICAMubQBvs8Buz3ALXhqYe
116
+ FS5G13pW2ZnAlSdTkSTKkE5wGZ1RYSfyiEKXb+uOKhDN9LnajDzaMPkNDU2NDXDz
117
+ SqHk9ZiE1boQaMzjNLu+KabTLpmL9uXvFA/i+gdenFHv
118
+ -----END CERTIFICATE-----".gsub(/^\s+/, ''))
119
+ conn = CouchRest::Connection.new(URI("https://localhost:5984"),
120
+ :ssl_ca_file => file.path
121
+ )
122
+ conn.http.ssl_config.cert_store_items.should include(file.path)
123
+ end
124
+
125
+ it "should support adding multiple ca certificates from a directory" do
126
+ conn = CouchRest::Connection.new(URI("https://localhost:5984"),
127
+ :ssl_ca_file => '.'
128
+ )
129
+ conn.http.ssl_config.cert_store_items.should include('.')
130
+ end
91
131
  end
92
132
 
93
133
  describe "with timeout options" do
@@ -417,6 +457,26 @@ describe CouchRest::Connection do
417
457
  .to_return(:body => "")
418
458
  expect { mock_conn.head('db/test-head') }.to_not raise_error
419
459
  end
460
+ it "should returns headers hash" do
461
+ response_headers = { "Etag" => "document-version-number" }
462
+ stub_request(:head, "http://mock/db/test-head")
463
+ .to_return(
464
+ :body => "",
465
+ :headers => response_headers
466
+ )
467
+ expect(mock_conn.head('db/test-head')).to eq(response_headers)
468
+ end
469
+
470
+ it "should returns raw headers if opts[:raw] true" do
471
+ response_headers = { "Etag" => "document-version-number" }
472
+ stub_request(:head, "http://mock/db/test-head")
473
+ .to_return(
474
+ :body => "",
475
+ :headers => response_headers
476
+ )
477
+ expect(mock_conn.head('db/test-head', {raw: true})).to include("Etag: document-version-number" )
478
+ end
479
+
420
480
  it "should handle head request when document missing" do
421
481
  stub_request(:head, "http://mock/db/test-missing-head")
422
482
  .to_return(:status => 404)
@@ -233,6 +233,17 @@ describe CouchRest::Database do
233
233
  expect(@db.get(@docid)['will-exist']).to eq 'here'
234
234
  end
235
235
  end
236
+
237
+ describe "GET (document by id) when the doc does not exist)" do
238
+ it "should provide nil" do
239
+ expect(@db.get('fooooobar')).to be_nil
240
+ end
241
+ it "should raise an exception" do
242
+ expect do
243
+ @db.get!('fooooobar')
244
+ end.to raise_error(CouchRest::NotFound)
245
+ end
246
+ end
236
247
 
237
248
  describe "POST (adding bulk documents)" do
238
249
  it "should add them without ids" do
@@ -256,6 +267,13 @@ describe CouchRest::Database do
256
267
 
257
268
  @db.bulk_save(docs)
258
269
  end
270
+
271
+ it "should allow UUID assignment to be disabled" do
272
+ expect(@db.connection).to_not receive(:next_uuid)
273
+ docs = [{'key' => 'value'}, {'_id' => 'totally-uniq'}]
274
+ expect(@db.connection).to receive(:post).with("/couchrest-test/_bulk_docs", {:docs => docs})
275
+ @db.bulk_save(docs, :use_uuids => false)
276
+ end
259
277
 
260
278
  it "should add them with uniq ids" do
261
279
  rs = @db.bulk_save([
@@ -270,9 +288,7 @@ describe CouchRest::Database do
270
288
 
271
289
  it "should empty the bulk save cache if no documents are given" do
272
290
  @db.save_doc({"_id" => "bulk_cache_1", "val" => "test"}, true)
273
- expect do
274
- @db.get('bulk_cache_1')
275
- end.to raise_error(CouchRest::NotFound)
291
+ expect(@db.get('bulk_cache_1')).to be_nil
276
292
  @db.bulk_save
277
293
  expect(@db.get("bulk_cache_1")["val"]).to eq "test"
278
294
  end
@@ -281,7 +297,7 @@ describe CouchRest::Database do
281
297
  docs = [{"_id" => "oneB", "wild" => "and random"}, {"_id" => "twoB", "mild" => "yet local"}]
282
298
  expect(@db.connection).to receive(:post).with("/couchrest-test/_bulk_docs", {:all_or_nothing => true, :docs => docs})
283
299
 
284
- @db.bulk_save(docs, false, true)
300
+ @db.bulk_save(docs, :all_or_nothing => true)
285
301
  end
286
302
 
287
303
  it "should raise an error that is useful for recovery" do
@@ -577,12 +593,8 @@ describe CouchRest::Database do
577
593
  td2 = {"_id" => "td2", "val" => 4}
578
594
  @db.save_doc(td1, true)
579
595
  @db.save_doc(td2, true)
580
- expect do
581
- @db.get(td1["_id"])
582
- end.to raise_error(CouchRest::NotFound)
583
- expect do
584
- @db.get(td2["_id"])
585
- end.to raise_error(CouchRest::NotFound)
596
+ expect(@db.get(td1["_id"])).to be_nil
597
+ expect(@db.get(td2["_id"])).to be_nil
586
598
  td3 = {"_id" => "td3", "val" => "foo"}
587
599
  @db.save_doc(td3, true)
588
600
  expect(@db.get(td1["_id"])["val"]).to eq td1["val"]
@@ -595,9 +607,7 @@ describe CouchRest::Database do
595
607
  td2 = {"_id" => "steve", "val" => 3}
596
608
  @db.bulk_save_cache_limit = 50
597
609
  @db.save_doc(td1, true)
598
- expect do
599
- @db.get(td1["_id"])
600
- end.to raise_error(CouchRest::NotFound)
610
+ expect(@db.get(td1["_id"])).to be_nil
601
611
  @db.save_doc(td2)
602
612
  expect(@db.get(td1["_id"])["val"]).to eq td1["val"]
603
613
  expect(@db.get(td2["_id"])["val"]).to eq td2["val"]
@@ -614,12 +624,12 @@ describe CouchRest::Database do
614
624
  doc = @db.get(@r['id'])
615
625
  expect(doc['and']).to eq 'spain'
616
626
  @db.delete_doc doc
617
- expect(lambda{@db.get @r['id']}).to raise_error
627
+ expect(@db.get(@r['id'])).to be_nil
618
628
  end
619
629
  it "should work with uri id" do
620
630
  doc = @db.get(@docid)
621
631
  @db.delete_doc doc
622
- expect(lambda{@db.get @docid}).to raise_error
632
+ expect(@db.get @docid).to be_nil
623
633
  end
624
634
  it "should fail without an _id" do
625
635
  expect(lambda{@db.delete_doc({"not"=>"a real doc"})}).to raise_error(ArgumentError)
@@ -627,9 +637,9 @@ describe CouchRest::Database do
627
637
  it "should defer actual deletion when using bulk save" do
628
638
  doc = @db.get(@docid)
629
639
  @db.delete_doc doc, true
630
- expect(lambda{@db.get @docid}).not_to raise_error
640
+ expect(@db.get @docid).to_not be_nil
631
641
  @db.bulk_save
632
- expect(lambda{@db.get @docid}).to raise_error
642
+ expect(@db.get @docid).to be_nil
633
643
  end
634
644
 
635
645
  end
@@ -227,7 +227,7 @@ describe CouchRest::Document do
227
227
  doc = CouchRest::Document.new({"_id" => "bulkdoc", "val" => 3})
228
228
  doc.database = @db
229
229
  doc.save(true)
230
- expect(lambda { doc.database.get(doc["_id"]) }).to raise_error(CouchRest::NotFound)
230
+ expect(doc.database.get(doc["_id"])).to be_nil
231
231
  doc.database.bulk_save
232
232
  expect(doc.database.get(doc["_id"])["val"]).to eql doc["val"]
233
233
  end
@@ -267,7 +267,7 @@ describe CouchRest::Document do
267
267
  end
268
268
  it "should make it disappear" do
269
269
  @doc.destroy
270
- expect(lambda{@db.get @resp['id']}).to raise_error
270
+ expect(@db.get @resp['id']).to be_nil
271
271
  end
272
272
  it "should error when there's no db" do
273
273
  @doc = CouchRest::Document.new("key" => [1,2,3], :more => "values")
@@ -288,9 +288,9 @@ describe CouchRest::Document do
288
288
  @doc.destroy(true)
289
289
  expect(@doc['_id']).to be_nil
290
290
  expect(@doc['_rev']).to be_nil
291
- expect(lambda{@db.get @resp['id']}).not_to raise_error
291
+ expect(@db.get @resp['id']).to_not be_nil
292
292
  @db.bulk_save
293
- expect(lambda{@db.get @resp['id']}).to raise_error
293
+ expect(@db.get @resp['id']).to be_nil
294
294
  end
295
295
  end
296
296
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: couchrest
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.rc2
4
+ version: 2.0.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - J. Chris Anderson
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2015-08-18 00:00:00.000000000 Z
15
+ date: 2016-01-08 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: httpclient
@@ -20,14 +20,14 @@ dependencies:
20
20
  requirements:
21
21
  - - "~>"
22
22
  - !ruby/object:Gem::Version
23
- version: 2.6.0
23
+ version: '2.7'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
28
  - - "~>"
29
29
  - !ruby/object:Gem::Version
30
- version: 2.6.0
30
+ version: '2.7'
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: mime-types
33
33
  requirement: !ruby/object:Gem::Requirement
@@ -112,6 +112,20 @@ dependencies:
112
112
  - - ">="
113
113
  - !ruby/object:Gem::Version
114
114
  version: '0'
115
+ - !ruby/object:Gem::Dependency
116
+ name: mime-types
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - '='
120
+ - !ruby/object:Gem::Version
121
+ version: 2.6.2
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - '='
127
+ - !ruby/object:Gem::Version
128
+ version: 2.6.2
115
129
  description: CouchRest provides a simple interface on top of CouchDB's RESTful HTTP
116
130
  API, as well as including some utility scripts for managing views and attachments.
117
131
  email: jchris@apache.org
@@ -206,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
220
  version: 1.3.1
207
221
  requirements: []
208
222
  rubyforge_project:
209
- rubygems_version: 2.4.6
223
+ rubygems_version: 2.5.1
210
224
  signing_key:
211
225
  specification_version: 4
212
226
  summary: Lean and RESTful interface to CouchDB.