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