leanback 0.4.1 → 0.4.2
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.
- data/Changelog.rdoc +17 -1
- data/VERSION +1 -1
- data/leanback.gemspec +2 -2
- data/lib/leanback.rb +21 -13
- data/spec/admin_party/database_spec.rb +31 -5
- data/spec/no_admin_party/database_spec.rb +38 -16
- data/spec/no_admin_party/non_admin_user_spec.rb +9 -4
- metadata +3 -3
data/Changelog.rdoc
CHANGED
@@ -1,7 +1,23 @@
|
|
1
|
+
0.4.2
|
2
|
+
November 16, 2013
|
3
|
+
* Optionally return documents and query results as hashmaps with symbolized keys
|
4
|
+
Example:
|
5
|
+
Couchdb.find_by({:database => 'contacts', :email => 'nancy@mail.com'} ,auth_session, symbolize_keys: true))
|
6
|
+
# => [{:_id =>"Nancy", :_rev =>"1-d15a83d2a23b495c19df2595b636ecc8", :firstname =>"Nancy", :lastname =>"Lee",
|
7
|
+
# :phone =>"347-808-3734", :email =>"nancy@mail.com", :gender =>"female"}]
|
8
|
+
And
|
9
|
+
Couchdb.find_by({:database => 'contacts', :email => 'nancy@mail.com'} , auth_session, symbolize_keys: true)
|
10
|
+
|
11
|
+
# => [{:_id=>"Nancy", :_rev=>"1-d15a83d2a23b495c19df2595b636ecc8", :firstname =>"Nancy", :lastname =>"Lee",
|
12
|
+
# :phone =>"347-808-3734", :email =>"nancy@mail.com", :gender =>"female"}]
|
13
|
+
|
14
|
+
This works for view document results and also works for all finders and queries. See documentation for details.
|
15
|
+
|
1
16
|
0.4.1
|
2
17
|
August 23,2013
|
3
18
|
* Changed bind address to require prefix (http:// or https://)
|
4
|
-
Example:
|
19
|
+
Example:
|
20
|
+
Couchdb.address = "http://whisperservers.cloudant.com"
|
5
21
|
See documentation for details
|
6
22
|
|
7
23
|
=0.4.0
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
data/leanback.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "leanback"
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Obi Akubue"]
|
12
|
-
s.date = "2013-
|
12
|
+
s.date = "2013-11-16"
|
13
13
|
s.description = "lightweight Ruby interface to CouchDB"
|
14
14
|
s.email = "obioraakubue@yahoo.com"
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/leanback.rb
CHANGED
@@ -238,13 +238,13 @@ module Couchdb
|
|
238
238
|
end
|
239
239
|
|
240
240
|
##view a document
|
241
|
-
def self.view(doc,auth_session = "")
|
241
|
+
def self.view(doc,auth_session = "", options = {})
|
242
242
|
set_address
|
243
243
|
db_name = doc[:database]
|
244
244
|
doc_id = doc[:doc_id]
|
245
245
|
begin
|
246
246
|
response = RestClient.get "#{@address}:#{@port}/#{db_name}/#{doc_id}",{:cookies => {"AuthSession" => auth_session}}
|
247
|
-
hash = Yajl::Parser.parse(response.to_str)
|
247
|
+
hash = Yajl::Parser.parse(response.to_str, symbolize_keys(options))
|
248
248
|
rescue => e
|
249
249
|
couch_error(e)
|
250
250
|
end
|
@@ -298,14 +298,16 @@ module Couchdb
|
|
298
298
|
key = URI.escape('?key="' + key + '"')
|
299
299
|
response = RestClient.get "#{@address}:#{@port}/#{db_name}/_design/#{design_doc_name}/_view/#{view_name}#{key}&#{URI.escape(params)}" ,{:cookies => {"AuthSession" => auth_session}}
|
300
300
|
end
|
301
|
-
hash = Yajl::Parser.parse(response.to_str)
|
302
|
-
|
303
|
-
|
301
|
+
hash = Yajl::Parser.parse(response.to_str, symbolize_keys(options))
|
302
|
+
data = []
|
303
|
+
rows = hash["rows"] unless hash["rows"].nil?
|
304
|
+
rows = hash[:rows] unless hash[:rows].nil?
|
304
305
|
rows.each do |row|
|
305
|
-
|
306
|
-
|
306
|
+
value = row["value"] unless row["value"].nil?
|
307
|
+
value = row[:value] unless row[:value].nil?
|
308
|
+
data << value
|
307
309
|
end
|
308
|
-
return
|
310
|
+
return data
|
309
311
|
rescue => e
|
310
312
|
couch_error(e)
|
311
313
|
end
|
@@ -340,20 +342,20 @@ module Couchdb
|
|
340
342
|
design_doc = doc[:design_doc]
|
341
343
|
view = doc[:view]
|
342
344
|
json_doc = doc[:json_doc]
|
343
|
-
|
345
|
+
query_info = {:database => db_name, :design_doc => design_doc, :view => view}
|
344
346
|
begin
|
345
347
|
if( key == nil)
|
346
|
-
docs = find(
|
348
|
+
docs = find(query_info,auth_session,key=nil,options)
|
347
349
|
else
|
348
|
-
docs = find(
|
350
|
+
docs = find(query_info,auth_session,key,options)
|
349
351
|
end
|
350
352
|
rescue CouchdbException => e
|
351
353
|
document = { :database => db_name, :design_doc => design_doc, :json_doc => json_doc}
|
352
354
|
create_design document,auth_session
|
353
355
|
if( key == nil)
|
354
|
-
docs = find(
|
356
|
+
docs = find(query_info,auth_session,key=nil,options)
|
355
357
|
else
|
356
|
-
docs = find(
|
358
|
+
docs = find(query_info,auth_session,key,options)
|
357
359
|
end
|
358
360
|
end
|
359
361
|
return docs
|
@@ -588,7 +590,13 @@ module Couchdb
|
|
588
590
|
couch_error(e)
|
589
591
|
end
|
590
592
|
end
|
593
|
+
|
594
|
+
def self.symbolize_keys(options)
|
595
|
+
return {symbolize_keys: true} if options[:symbolize_keys]
|
596
|
+
return {}
|
597
|
+
end
|
591
598
|
|
599
|
+
private_class_method :symbolize_keys
|
592
600
|
|
593
601
|
class << self
|
594
602
|
attr_accessor :address
|
@@ -37,14 +37,19 @@ it "should create and view document doc" do
|
|
37
37
|
:lastname =>'smith',
|
38
38
|
:phone => '202-234-1234',
|
39
39
|
:email =>'james@mail.com',
|
40
|
-
|
41
|
-
|
40
|
+
:age =>'34',
|
41
|
+
:gender =>'male'}
|
42
42
|
doc = {:database => 'friends', :doc_id => 'john', :data => data}
|
43
43
|
Couchdb.create_doc doc
|
44
44
|
|
45
45
|
doc = {:database => 'friends', :doc_id => 'john'}
|
46
46
|
hash = Couchdb.view doc
|
47
47
|
hash["_id"].should == 'john'
|
48
|
+
|
49
|
+
#view doc and return symbolized keys
|
50
|
+
doc = {:database => 'friends', :doc_id => 'john'}
|
51
|
+
hash = Couchdb.view(doc,'', {symbolize_keys: true})
|
52
|
+
hash.should include(data)
|
48
53
|
end
|
49
54
|
|
50
55
|
it "should count the lastnames named smith" do
|
@@ -227,8 +232,8 @@ it "should test finder options" do
|
|
227
232
|
doc = {:database => 'fishes', :doc_id => 'aaron', :data => data}
|
228
233
|
Couchdb.create_doc doc
|
229
234
|
|
230
|
-
|
231
|
-
doc = {:database => 'fishes', :doc_id => 'john', :data =>
|
235
|
+
data_c = {:firstname => 'john', :gender =>'male', :age => '28', :salary => '60000'}
|
236
|
+
doc = {:database => 'fishes', :doc_id => 'john', :data => data_c}
|
232
237
|
Couchdb.create_doc doc
|
233
238
|
|
234
239
|
data = {:firstname => 'peter', :gender =>'male', :age => '45', :salary => '78000'}
|
@@ -245,6 +250,10 @@ it "should test finder options" do
|
|
245
250
|
h = hash[0]
|
246
251
|
h["firstname"].should == "john"
|
247
252
|
hash.length.should == 2
|
253
|
+
|
254
|
+
#return hash in symbolized keys for find_by_keys
|
255
|
+
hash = Couchdb.find_by_keys({:database => 'fishes', :keys => keys},'', options = {:limit => 2, :skip => 1, :symbolize_keys => true})
|
256
|
+
hash.first.should include(data_c)
|
248
257
|
|
249
258
|
#create the design doc to be queryed in the test
|
250
259
|
Couchdb.find_by({:database => 'fishes', :gender => 'male'})
|
@@ -258,13 +267,24 @@ it "should test finder options" do
|
|
258
267
|
h = hash[0]
|
259
268
|
h["firstname"].should == "john"
|
260
269
|
hash.length.should == 2
|
270
|
+
|
271
|
+
#return results in symbolized keys
|
272
|
+
hash = Couchdb.find view,'',key=nil, options = {:limit => 2, :skip => 1, :symbolize_keys => true}
|
273
|
+
hash.first.should include(data_c)
|
274
|
+
|
275
|
+
#it should not return symbolized keys
|
276
|
+
hash = Couchdb.find view,'',key=nil, options = {:limit => 2, :skip => 1, :symbolize_keys => false}
|
277
|
+
hash.first.should_not include(data_c)
|
278
|
+
hash.first["firstname"].should == "john"
|
261
279
|
|
262
280
|
Couchdb.find_by({:database => 'fishes', :gender => 'male'},"",options = {:limit => 2, :skip => 1})
|
263
281
|
h = hash[0]
|
264
282
|
h["firstname"].should == "john"
|
265
283
|
hash.length.should == 2
|
266
284
|
|
267
|
-
|
285
|
+
#return symbolized results
|
286
|
+
hash = Couchdb.find_by({:database => 'fishes', :gender => 'male'},'',options = {:limit => 2, :skip => 1, :symbolize_keys => true})
|
287
|
+
hash.first.should include(data_c)
|
268
288
|
|
269
289
|
hash = Couchdb.find view,"",key='male', options = {:descending => true}
|
270
290
|
h = hash[0]
|
@@ -338,6 +358,12 @@ it "should test finder options" do
|
|
338
358
|
h0["firstname"].should == "john"
|
339
359
|
h1["firstname"].should == "sam"
|
340
360
|
hash.length.should == 2
|
361
|
+
|
362
|
+
|
363
|
+
#return results as symbolized keys
|
364
|
+
options = {:startkey => ["28","male"], :endkey => ["28","male"], :skip => 1,:symbolize_keys => true}
|
365
|
+
hash = Couchdb.find_on_fly(view,'',key=nil, options)
|
366
|
+
hash.first.should include(data_c)
|
341
367
|
|
342
368
|
|
343
369
|
options = {:startkey => ["28","male"], :endkey => ["28","male"]}
|
@@ -39,17 +39,23 @@ it "should create a database add a finder method to it and then delete the datab
|
|
39
39
|
it "should create and view document doc" do
|
40
40
|
Couchdb.create('contacts',@@auth_session)
|
41
41
|
data = {:firstname => 'John',
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
:lastname =>'smith',
|
43
|
+
:phone => '202-234-1234',
|
44
|
+
:email =>'james@mail.com',
|
45
|
+
:age =>'34',
|
46
|
+
:gender =>'male'}
|
47
|
+
|
47
48
|
doc = {:database => 'contacts', :doc_id => 'john', :data => data}
|
48
49
|
Couchdb.create_doc doc,@@auth_session
|
49
50
|
|
50
51
|
doc = {:database => 'contacts', :doc_id => 'john'}
|
51
52
|
hash = Couchdb.view doc,@@auth_session
|
52
53
|
hash["_id"].should == 'john'
|
54
|
+
|
55
|
+
#view doc and return symbolized keys
|
56
|
+
doc = {:database => 'contacts', :doc_id => 'john'}
|
57
|
+
hash = Couchdb.view(doc,@@auth_session, {symbolize_keys: true})
|
58
|
+
hash.should include(data)
|
53
59
|
end
|
54
60
|
|
55
61
|
it "should count the lastnames named smith" do
|
@@ -233,8 +239,8 @@ it "should test finder options" do
|
|
233
239
|
doc = {:database => 'fishes', :doc_id => 'aaron', :data => data}
|
234
240
|
Couchdb.create_doc doc,@@auth_session
|
235
241
|
|
236
|
-
|
237
|
-
doc = {:database => 'fishes', :doc_id => 'john', :data =>
|
242
|
+
data_c = {:firstname => 'john', :gender =>'male', :age => '28', :salary => '60000'}
|
243
|
+
doc = {:database => 'fishes', :doc_id => 'john', :data => data_c}
|
238
244
|
Couchdb.create_doc doc,@@auth_session
|
239
245
|
|
240
246
|
data = {:firstname => 'peter', :gender =>'male', :age => '45', :salary => '78000'}
|
@@ -248,9 +254,12 @@ it "should test finder options" do
|
|
248
254
|
|
249
255
|
keys = {:age =>'28', :gender => 'male'}
|
250
256
|
hash = Couchdb.find_by_keys({:database => 'fishes', :keys => keys},@@auth_session, options = {:limit => 2, :skip => 1})
|
251
|
-
|
252
|
-
h["firstname"].should == "john"
|
257
|
+
hash.first["firstname"].should == "john"
|
253
258
|
hash.length.should == 2
|
259
|
+
|
260
|
+
#return hash in symbolized keys for find_by_keys
|
261
|
+
hash = Couchdb.find_by_keys({:database => 'fishes', :keys => keys},@@auth_session, options = {:limit => 2, :skip => 1, :symbolize_keys => true})
|
262
|
+
hash.first.should include(data_c)
|
254
263
|
|
255
264
|
#create the design doc to be queryed in the test
|
256
265
|
Couchdb.find_by({:database => 'fishes', :gender => 'male'},@@auth_session)
|
@@ -261,16 +270,25 @@ it "should test finder options" do
|
|
261
270
|
:view => 'find_by_gender'}
|
262
271
|
|
263
272
|
hash = Couchdb.find view,@@auth_session,key=nil, options = {:limit => 2, :skip => 1}
|
264
|
-
|
265
|
-
h["firstname"].should == "john"
|
273
|
+
hash.first["firstname"].should == "john"
|
266
274
|
hash.length.should == 2
|
275
|
+
|
276
|
+
#return results in symbolized keys
|
277
|
+
hash = Couchdb.find view,@@auth_session,key=nil, options = {:limit => 2, :skip => 1, :symbolize_keys => true}
|
278
|
+
hash.first.should include(data_c)
|
279
|
+
|
280
|
+
#it should not return symbolized keys
|
281
|
+
hash = Couchdb.find view,@@auth_session,key=nil, options = {:limit => 2, :skip => 1, :symbolize_keys => false}
|
282
|
+
hash.first.should_not include(data_c)
|
283
|
+
hash.first["firstname"].should == "john"
|
267
284
|
|
268
|
-
Couchdb.find_by({:database => 'fishes', :gender => 'male'},@@auth_session,options = {:limit => 2, :skip => 1})
|
269
|
-
|
270
|
-
h["firstname"].should == "john"
|
285
|
+
hash = Couchdb.find_by({:database => 'fishes', :gender => 'male'},@@auth_session,options = {:limit => 2, :skip => 1})
|
286
|
+
hash.first["firstname"].should == "john"
|
271
287
|
hash.length.should == 2
|
272
288
|
|
273
|
-
|
289
|
+
#return symbolized results
|
290
|
+
hash = Couchdb.find_by({:database => 'fishes', :gender => 'male'},@@auth_session,options = {:limit => 2, :skip => 1, :symbolize_keys => true})
|
291
|
+
hash.first.should include(data_c)
|
274
292
|
|
275
293
|
hash = Couchdb.find view,@@auth_session,key='male', options = {:descending => true}
|
276
294
|
h = hash[0]
|
@@ -344,7 +362,11 @@ it "should test finder options" do
|
|
344
362
|
h0["firstname"].should == "john"
|
345
363
|
h1["firstname"].should == "sam"
|
346
364
|
hash.length.should == 2
|
347
|
-
|
365
|
+
|
366
|
+
#return results as symbolized keys
|
367
|
+
options = {:startkey => ["28","male"], :endkey => ["28","male"], :skip => 1,:symbolize_keys => true}
|
368
|
+
hash = Couchdb.find_on_fly(view,@@auth_session,key=nil, options)
|
369
|
+
hash.first.should include(data_c)
|
348
370
|
|
349
371
|
options = {:startkey => ["28","male"], :endkey => ["28","male"]}
|
350
372
|
|
@@ -1,12 +1,15 @@
|
|
1
1
|
require 'spec_base.rb'
|
2
2
|
|
3
|
+
hash = Couchdb.login(username = 'obi',password ='trusted')
|
4
|
+
@@admin_auth_session = hash["AuthSession"]
|
5
|
+
|
6
|
+
user = { :username => "david", :password => "trusted", :roles => []}
|
7
|
+
Couchdb.add_user(user, @@admin_auth_session)
|
8
|
+
|
3
9
|
#a day in the life of the non-admin user
|
4
10
|
hash = Couchdb.login(username = 'david',password ='trusted')
|
5
11
|
@@auth_session = hash["AuthSession"]
|
6
12
|
|
7
|
-
hash = Couchdb.login(username = 'obi',password ='trusted')
|
8
|
-
@@admin_auth_session = hash["AuthSession"]
|
9
|
-
|
10
13
|
#specs to ensure non-admin users function properly
|
11
14
|
describe "non admin user" do
|
12
15
|
it "should create a document, view, update it" do
|
@@ -55,7 +58,9 @@ it "should delete document" do
|
|
55
58
|
lambda {Couchdb.view(doc,@@auth_session)}.should raise_error(CouchdbException,"CouchDB: Error - not_found. Reason - deleted")
|
56
59
|
end
|
57
60
|
|
58
|
-
it "should delete the database" do
|
61
|
+
it "should delete the database and user" do
|
62
|
+
doc = {:database => '_users', :doc_id => 'org.couchdb.user:david'}
|
63
|
+
Couchdb.delete_doc doc,@@admin_auth_session
|
59
64
|
Couchdb.delete 'contacts',@@admin_auth_session
|
60
65
|
end
|
61
66
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: leanback
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-11-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
@@ -208,7 +208,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
208
208
|
version: '0'
|
209
209
|
segments:
|
210
210
|
- 0
|
211
|
-
hash:
|
211
|
+
hash: 3937638598034080075
|
212
212
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
213
213
|
none: false
|
214
214
|
requirements:
|