lib/leanback.rb in leanback-0.1.8 vs lib/leanback.rb in leanback-0.2.0
- old
+ new
@@ -69,11 +69,10 @@
hash = Yajl::Parser.parse(response.to_str)
rescue => e
hash = Yajl::Parser.parse(e.response.to_s)
end
end
-
#delete a database
def self.delete(database_name)
set_address
begin
@@ -107,27 +106,32 @@
hash = Yajl::Parser.parse(e.response.to_s)
end
end
#query a permanent view
-def self.find(doc)
+def self.find(doc,key=nil)
set_address
db_name = doc[:database]
design_doc_name = doc[:design_doc]
view_name = doc[:view]
begin
+ if key == nil
response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name + '/_view/' + view_name
+ else
+ response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name + '/_view/' + view_name + URI.escape('?key="' + key + '"')
+ end
hash = Yajl::Parser.parse(response.to_str)
rows = hash["rows"]
count = 0
rows.each do |row|
rows[count] = row["value"]
count += 1
end
return rows
rescue => e
- hash = Yajl::Parser.parse(e.response.to_s)
+ puts e.inspect
+ #hash = Yajl::Parser.parse(e.response.to_s)
end
end
#create a design document with views
def self.create_design(doc)
@@ -149,9 +153,49 @@
response = RestClient.put 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name, str, {:content_type => :json, :accept => :json}
hash = Yajl::Parser.parse(response.to_str)
rescue => e
hash = Yajl::Parser.parse(e.response.to_s)
end
+end
+
+#add a finder method to the database
+#this creates a find by key method
+def self.add_finder(options)
+ set_address
+ db_name = options[:database]
+ key = options[:key]
+ design_doc_name = key + '_finder'
+
+ view ='{
+ "language" : "javascript",
+ "views" :{
+ "find_by_'+key+'" : {
+ "map" : "function(doc){
+ if(doc.'+key+')
+ emit(doc.'+key+',doc);
+ }"
+ }
+ }
+}'
+
+ begin
+ response = RestClient.put 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name, view, {:content_type => :json, :accept => :json}
+ rescue => e
+ hash = Yajl::Parser.parse(e.response.to_s)
+ end
+end
+
+#find by key
+def self.find_by(options)
+ set_address
+ db_name = options[:database]
+ index = options.keys[1].to_s
+ search_term = options.values[1]
+ design_doc_name = index + '_finder'
+ view_name = 'find_by_' + index
+
+ view = { :database => db_name, :design_doc => design_doc_name, :view => view_name}
+ find view,search_term
end
#return a list of all docs in the database
def self.docs_from(database_name)
set_address