lib/leanback.rb in leanback-0.3.3 vs lib/leanback.rb in leanback-0.3.4
- old
+ new
@@ -256,32 +256,67 @@
hash = Yajl::Parser.parse(e.response.to_s)
raise CouchdbException.new(hash), "CouchDB: Error - " + hash.values[0] + ". Reason - " + hash.values[1]
end
end
+def self.get_params(options)
+ params = ""
+ if options.has_key?(:startkey)
+ if options[:startkey].is_a? String
+ params = 'startkey="' + options[:startkey] + '"'
+ else
+ params = 'startkey=' + options[:startkey].to_s # for complex keys
+ end
+ end
+ if options.has_key?(:endkey)
+ if options[:endkey].is_a? String
+ params = params + '&endkey="' + options[:endkey] + '"'
+ else
+ params = params + '&endkey=' + options[:endkey].to_s #for complex keys
+ end
+ end
+
+ if options.has_key?(:limit)
+ params = params + "&" + "limit=" + options[:limit].to_s
+ end
+
+ if options.has_key?(:skip)
+ params = params + "&" + "skip=" + options[:skip].to_s
+ end
+
+ if options.has_key?(:descending)
+ params = params + "&" + "descending=true"
+ end
+
+ return params
+end
+
+
#query a permanent view
-def self.find(doc,auth_session = "",key=nil)
+def self.find(doc,auth_session = "", key=nil, options = {})
set_address
db_name = doc[:database]
design_doc_name = doc[:design_doc]
view_name = doc[:view]
+ params = get_params(options)
+
begin
if key == nil
- response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name + '/_view/' + view_name,{:cookies => {"AuthSession" => auth_session}}
+ response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name + '/_view/' + view_name + '?' + URI.escape(params),{:cookies => {"AuthSession" => auth_session}}
else
- response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name + '/_view/' + view_name + URI.escape('?key="' + key + '"'),{:cookies => {"AuthSession" => auth_session}}
+ key = URI.escape('?key="' + key + '"')
+ response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name + '/_view/' + view_name + key + '&' + URI.escape(params) ,{:cookies => {"AuthSession" => auth_session}}
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
- #puts e.inspect
hash = Yajl::Parser.parse(e.response.to_s)
raise CouchdbException.new(hash), "CouchDB: Error - " + hash.values[0] + ". Reason - " + hash.values[1]
end
end
@@ -309,29 +344,29 @@
raise CouchdbException.new(hash), "CouchDB: Error - " + hash.values[0] + ". Reason - " + hash.values[1]
end
end
#Query view, create view on fly if it dosen't already exist
-def self.find_on_fly(doc,auth_session = "",key = nil)
+def self.find_on_fly(doc,auth_session = "",key = nil, options = {})
db_name = doc[:database]
design_doc = doc[:design_doc]
view = doc[:view]
json_doc = doc[:json_doc]
begin
if( key == nil)
- docs = find({:database => db_name, :design_doc => design_doc, :view => view},auth_session)
+ docs = find({:database => db_name, :design_doc => design_doc, :view => view},auth_session,key=nil,options)
else
- docs = find({:database => db_name, :design_doc => design_doc, :view => view},auth_session,key)
+ docs = find({:database => db_name, :design_doc => design_doc, :view => view},auth_session,key,options)
end
rescue CouchdbException => e
document = { :database => db_name, :design_doc => design_doc, :json_doc => json_doc}
create_design document,auth_session
if( key == nil)
- docs = find({:database => db_name, :design_doc => design_doc, :view => view},auth_session)
+ docs = find({:database => db_name, :design_doc => design_doc, :view => view},auth_session,key=nil,options)
else
- docs = find({:database => db_name, :design_doc => design_doc, :view => view},auth_session,key)
+ docs = find({:database => db_name, :design_doc => design_doc, :view => view},auth_session,key,options)
end
end
return docs
end
@@ -407,25 +442,25 @@
count = docs[0]
return count.to_i
end
#find by key
-def self.find_by(options,auth_session = "")
+def self.find_by(options,auth_session = "", params = {})
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
begin
view = { :database => db_name, :design_doc => design_doc_name, :view => view_name}
- docs = find view,auth_session,search_term
+ docs = find view,auth_session,search_term,params
rescue CouchdbException => e
#add a finder/index if one doesn't already exist in the database
#then find_by_key
add_finder({:database => db_name, :key => index},auth_session)
- docs = find view,auth_session,search_term
+ docs = find view,auth_session,search_term,params
end
return docs
end
#return a list of all docs in the database