leanback 0.2.4 → 0.2.5
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 +15 -1
- data/README.rdoc +70 -5
- data/VERSION +1 -1
- data/leanback.gemspec +2 -2
- data/lib/leanback.rb +12 -0
- data/test/test_leanback.rb +7 -0
- metadata +4 -4
    
        data/Changelog.rdoc
    CHANGED
    
    | @@ -1,13 +1,26 @@ | |
| 1 | 
            +
            =Leanback 0.2.5
         | 
| 2 | 
            +
            August 2, 2011:-
         | 
| 3 | 
            +
            * Added dynamic updates for documents. This makes it easy to update documents without deleting old fields or having to track the _rev value. 
         | 
| 4 | 
            +
            To update a document now:
         | 
| 5 | 
            +
             data = {"age" => "53" }
         | 
| 6 | 
            +
               doc = { :database => 'contacts', :doc_id => 'john', :data => data}   
         | 
| 7 | 
            +
               Document.update doc 
         | 
| 8 | 
            +
            This will update the document and change the John's age to 53. See README for details
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            =Leanback 0.2.4
         | 
| 11 | 
            +
            July 20, 2011:-
         | 
| 12 | 
            +
            * find_by(database,key) has a bug in version 0.2.3, please use version 0.2.4 instead
         | 
| 13 | 
            +
             | 
| 1 14 | 
             
            =Leanback 0.2.3
         | 
| 2 15 | 
             
            July 19, 2011:-
         | 
| 3 16 | 
             
            * Added better error handling all database operations now raise a CouchdbException when something goes wrong. It's now easy to track exceptions.
         | 
| 17 | 
            +
             | 
| 4 18 | 
             
               begin 	
         | 
| 5 19 | 
             
               Couchdb.create 'contacts'
         | 
| 6 20 | 
             
              rescue => e
         | 
| 7 21 | 
             
               puts "Error message: " + e.to_s
         | 
| 8 22 | 
             
               puts "Error value: " + e.error
         | 
| 9 23 | 
             
              end 
         | 
| 10 | 
            -
             | 
| 11 24 | 
             
             # => Error message: CouchDB: Error - file_exists. Reason - The database could not be created, the file already exists.
         | 
| 12 25 | 
             
                  Error value: file_exists
         | 
| 13 26 |  | 
| @@ -21,3 +34,4 @@ The method: | |
| 21 34 | 
             
             Couchdb.find_by( :database => 'contacts', :email => 'nancy@mail.com')  
         | 
| 22 35 | 
             
            will add the finder to the database if one doesn't already exist. No need to call  
         | 
| 23 36 | 
             
             Couchdb.add_finder(:database => 'contacts', :key => 'email')
         | 
| 37 | 
            +
             | 
    
        data/README.rdoc
    CHANGED
    
    | @@ -22,14 +22,17 @@ Require the leanback Gem | |
| 22 22 |  | 
| 23 23 | 
             
            Create a CouchDB database
         | 
| 24 24 | 
             
             Couchdb.create 'contacts'
         | 
| 25 | 
            +
             | 
| 25 26 | 
             
             # => {"ok"=>true}
         | 
| 26 27 |  | 
| 27 28 | 
             
            Delete a database
         | 
| 28 29 | 
             
             Couchdb.delete 'contacts'
         | 
| 30 | 
            +
             | 
| 29 31 | 
             
             # => {"ok"=>true} 
         | 
| 30 32 |  | 
| 31 33 | 
             
            Return a list of all Databases
         | 
| 32 34 | 
             
             Couchdb.all
         | 
| 35 | 
            +
             | 
| 33 36 | 
             
             # => ["maps", "inventory", "monitors", "contacts", "books"]
         | 
| 34 37 |  | 
| 35 38 | 
             
            Create a new document
         | 
| @@ -40,30 +43,68 @@ Create a new document | |
| 40 43 |  | 
| 41 44 | 
             
             doc = {:database => 'contacts', :doc_id => 'Linda', :data => data}
         | 
| 42 45 | 
             
             Document.create doc
         | 
| 46 | 
            +
             | 
| 43 47 | 
             
             # => {"ok"=>true, "id"=>"Linda", "rev"=>"1-6f16274513f51e922ff1f745452a92b6"} 
         | 
| 44 48 | 
             
            This will create a new document in the 'contacts' database, with document id 'Linda'.
         | 
| 45 49 |  | 
| 46 | 
            -
             | 
| 50 | 
            +
            Let's update that document to change the email address
         | 
| 51 | 
            +
             data = {"email" => "linda@mail.com" }
         | 
| 52 | 
            +
             doc = { :database => 'contacts', :doc_id => 'Linda', :data => data}   
         | 
| 53 | 
            +
             Document.update doc 
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            Let's add gender and age 
         | 
| 56 | 
            +
             data = {"age" => "32","gender" => "female" }
         | 
| 57 | 
            +
             doc = { :database => 'contacts', :doc_id => 'Linda', :data => data}   
         | 
| 58 | 
            +
             Document.update doc 
         | 
| 59 | 
            +
             | 
| 60 | 
            +
             | 
| 61 | 
            +
            To change phone# and add a fax number
         | 
| 62 | 
            +
             data = {"phone" => "718-234-2904","fax" => "646-309-4049" }
         | 
| 63 | 
            +
             doc = { :database => 'contacts', :doc_id => 'Linda', :data => data}   
         | 
| 64 | 
            +
             Document.update doc
         | 
| 65 | 
            +
             
         | 
| 66 | 
            +
            Let's add twitter account, facebook account and website url
         | 
| 67 | 
            +
              data = {"twitter" => "http://twitter.com/#!/linda", 
         | 
| 68 | 
            +
                       "faceboook" => "http://facebook.com/linda", 
         | 
| 69 | 
            +
                       "website" => "http://linda-blogs.com" }
         | 
| 70 | 
            +
             | 
| 71 | 
            +
               doc = { :database => 'contacts', :doc_id => 'Linda', :data => data}   
         | 
| 72 | 
            +
               Document.update doc 
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            Retrieve/view the document 
         | 
| 75 | 
            +
             doc = {:database => 'contacts', :doc_id => 'Linda'}
         | 
| 76 | 
            +
             Couchdb.view doc
         | 
| 77 | 
            +
             | 
| 78 | 
            +
             #=> {"_id"=>"Linda", "_rev"=>"5-f99fd63f2c784b5e2f7b7d92b2df9a1e", "firstname"=>"Linda", "lastname"=>"smith", 
         | 
| 79 | 
            +
               "phone"=>"718-234-2904", "email"=>"linda@mail.com", "age"=>"32", "gender"=>"female", 
         | 
| 80 | 
            +
                  "fax"=>"646-309-4049", "twitter"=>"http://twitter.com/#!/linda", 
         | 
| 81 | 
            +
                         "faceboook"=>"http://facebook.com/linda", "website"=>"http://linda-blogs.com"}
         | 
| 82 | 
            +
             | 
| 83 | 
            +
            To edit the document and replace it with a new one
         | 
| 47 84 | 
             
             data = {:firstname => 'Linda', 
         | 
| 48 85 | 
             
                     :lastname =>'smith', 
         | 
| 49 86 | 
             
                     :email => 'linda@mail.com',
         | 
| 50 87 | 
             
                     :gender=>'female',
         | 
| 51 88 | 
             
                     :phone =>'718-245-5611',
         | 
| 52 | 
            -
                     :_rev=>' | 
| 89 | 
            +
                     :_rev=>'5-f99fd63f2c784b5e2f7b7d92b2df9a1e'}
         | 
| 53 90 |  | 
| 54 91 | 
             
             doc = {:database => 'contacts', :doc_id => 'Linda', :data => data}
         | 
| 55 92 | 
             
             Document.edit doc
         | 
| 56 | 
            -
             | 
| 93 | 
            +
             | 
| 94 | 
            +
             # => {"ok"=>true, "id"=>"Linda", "rev"=>"6-211ebb68bdd4ba8799387214b4a3b445"}
         | 
| 95 | 
            +
            This replaces the existing document with a new one, the _rev property must be included in the data.
         | 
| 57 96 |  | 
| 58 97 | 
             
            Retrieve/view the document 
         | 
| 59 98 | 
             
             doc = {:database => 'contacts', :doc_id => 'Linda'}
         | 
| 60 99 | 
             
             Couchdb.view doc
         | 
| 61 | 
            -
             | 
| 100 | 
            +
             | 
| 101 | 
            +
              #=> {"_id"=>"Linda", "_rev"=>"6-211ebb68bdd4ba8799387214b4a3b445", "firstname"=>"Linda", 
         | 
| 62 102 | 
             
                              "lastname"=>"smith", "email"=>"linda@mail.com", "gender"=>"female", "phone"=>"718-245-5611"} 
         | 
| 63 103 |  | 
| 64 104 | 
             
            Delete the document
         | 
| 65 105 | 
             
             doc = {:database => 'contacts', :doc_id => 'Linda', :rev => '2-e813a0e902e3ac114400ff3959a2adde'}
         | 
| 66 106 | 
             
             Document.delete doc
         | 
| 107 | 
            +
             | 
| 67 108 | 
             
             # => {"ok"=>true, "id"=>"Linda", "rev"=>"3-48580d1806983b32cb03f114efb064e3"} 
         | 
| 68 109 |  | 
| 69 110 | 
             
            Retrieve all documents in a database
         | 
| @@ -81,16 +122,19 @@ Retrieve all documents in a database | |
| 81 122 | 
             
            ===To Find documents by key
         | 
| 82 123 | 
             
            To find documents by email key (example: to find all contacts with email = 'nancy@mail.com')
         | 
| 83 124 | 
             
             Couchdb.find_by( :database => 'contacts', :email => 'nancy@mail.com')  
         | 
| 125 | 
            +
             | 
| 84 126 | 
             
             # => [{"_id"=>"Nancy", "_rev"=>"1-d15a83d2a23b495c19df2595b636ecc8", "firstname"=>"Nancy", "lastname"=>"Lee",
         | 
| 85 127 | 
             
                               "phone"=>"347-808-3734", "email"=>"nancy@mail.com", "gender"=>"female"}]
         | 
| 86 128 |  | 
| 87 129 | 
             
            To find all contacts with lastname = 'Smith'
         | 
| 88 130 | 
             
             Couchdb.find_by( :database => 'contacts', :lastname => 'Smith')  
         | 
| 131 | 
            +
             | 
| 89 132 | 
             
             # => [{"_id"=>"john", "_rev"=>"5-642689e0a50843d6fa508159a01b4fd4", "firstname"=>"John", "lastname"=>"Smith",
         | 
| 90 133 | 
             
                               "email"=>"john@mail.com", "gender"=>"male"}]
         | 
| 91 134 |  | 
| 92 135 | 
             
            To find all female contacts 
         | 
| 93 136 | 
             
             Couchdb.find_by( :database => 'contacts', :gender => 'female') 
         | 
| 137 | 
            +
             | 
| 94 138 | 
             
             # => [{"_id"=>"Nancy", "_rev"=>"1-d15a83d2a23b495c19df2595b636ecc8", "firstname"=>"Nancy", "lastname"=>"Lee",
         | 
| 95 139 | 
             
                              "phone"=>"347-808-3734", "email"=>"nancy@mail.com", "gender"=>"female"}]
         | 
| 96 140 |  | 
| @@ -144,6 +188,7 @@ You can do | |
| 144 188 | 
             
            ===Query a permanent view
         | 
| 145 189 | 
             
             view = { :database => "contacts", :design_doc => 'my_views', :view => 'get_female_contacts'}
         | 
| 146 190 | 
             
             Couchdb.find view 
         | 
| 191 | 
            +
             | 
| 147 192 | 
             
             # => [{"_id"=>"Mary", "_rev"=>"5-bfcd67fd17dbb6a875af8f6dc497b15f", "firstname"=>"Mary", "lastname"=>"smith", 
         | 
| 148 193 | 
             
                                                     "phone"=>"212-234-1234", "email"=>"mary@mail.com", "gender"=>"female"}, 
         | 
| 149 194 | 
             
             {"_id"=>"Nancy", "_rev"=>"1-d15a83d2a23b495c19df2595b636ecc8", "firstname"=>"Nancy", "lastname"=>"Lee", 
         | 
| @@ -155,6 +200,21 @@ For the above example | |
| 155 200 | 
             
             GET http://127.0.0.1:5984/contacts/_design/my_views/_view/get_female_contacts
         | 
| 156 201 | 
             
            Leanback parses the native JSON results to return only the data values.
         | 
| 157 202 |  | 
| 203 | 
            +
            ===Query a view by key 
         | 
| 204 | 
            +
             view = { :database => "contacts", :design_doc => 'the_view', :view => 'age'}
         | 
| 205 | 
            +
             age = "36"
         | 
| 206 | 
            +
             Couchdb.find(view,key = age)
         | 
| 207 | 
            +
             | 
| 208 | 
            +
             # => [{"_id"=>"Nancy", "_rev"=>"2-4404d0a5a1a3dff103fd46faf1e46c30", "firstname"=>"Nancy", "lastname"=>"Lee", 
         | 
| 209 | 
            +
                             "phone"=>"347-808-3734", "email"=>"nancy@mail.com", "gender"=>"female", "age"=>"36"}]
         | 
| 210 | 
            +
             | 
| 211 | 
            +
            This is similar to sending a
         | 
| 212 | 
            +
             GET http://127.0.0.1:5984/[database]/_design/[design_doc]/_view/[view_name]?key="searchterm"
         | 
| 213 | 
            +
            For the above example
         | 
| 214 | 
            +
             GET http://127.0.0.1:5984/contacts/_design/the_view/_view/age?key="36"
         | 
| 215 | 
            +
            Leanback parses the native JSON results to return only the data values.
         | 
| 216 | 
            +
             
         | 
| 217 | 
            +
             | 
| 158 218 | 
             
            ===Create a design document with permanent views:
         | 
| 159 219 | 
             
            First define the views in a JSON file 
         | 
| 160 220 | 
             
             //my_views.json
         | 
| @@ -173,17 +233,19 @@ First define the views in a JSON file | |
| 173 233 | 
             
            Now create the design document and add the json file
         | 
| 174 234 | 
             
             doc = { :database => 'contacts', :design_doc => 'more_views', :json_doc => '/path/to/my_views.json' }
         | 
| 175 235 | 
             
             Couchdb.create_design doc 
         | 
| 236 | 
            +
             | 
| 176 237 | 
             
             # => {"ok"=>true, "id"=>"_design/more_views", "rev"=>"1-d67ae97ff03a98f68ddc300bf9ae5048"}
         | 
| 177 238 |  | 
| 178 239 | 
             
            To query the view
         | 
| 179 240 | 
             
             view = { :database => "contacts", :design_doc => 'more_views', :view => 'get_email'}
         | 
| 180 241 | 
             
             Couchdb.find view 
         | 
| 242 | 
            +
             | 
| 181 243 | 
             
             # => [{"Firstname"=>"Nancy", "Lastname"=>"Lee", "Email"=>"nancy@mail.com"}, 
         | 
| 182 244 | 
             
                     {"Firstname"=>"john", "Lastname"=>"smith", "Email"=>"john@mail.com"}]
         | 
| 183 245 |  | 
| 184 246 |  | 
| 185 247 | 
             
            ===Create View on the fly if it doesn't already exist 
         | 
| 186 | 
            -
            Let's say we want to query a view and create it on the fly if it doesn't already exist, and still return the values. In this example we will query a view called get_emails view (which returns emails of all contacts), if this view doesn't already exist it will be added to the database.
         | 
| 248 | 
            +
            Let's say we want to query a view, and create it on the fly if it doesn't already exist, and still return the values. In this example we will query a view called get_emails view (which returns emails of all contacts), if this view doesn't already exist it will be added to the database.
         | 
| 187 249 |  | 
| 188 250 | 
             
             def get_emails
         | 
| 189 251 | 
             
              begin  
         | 
| @@ -198,6 +260,7 @@ Let's say we want to query a view and create it on the fly if it doesn't already | |
| 198 260 |  | 
| 199 261 | 
             
             email_list = get_emails()
         | 
| 200 262 | 
             
             puts email_list.inspect
         | 
| 263 | 
            +
             | 
| 201 264 | 
             
             # => [{"Name"=>"Nancy", "Email"=>"nancy@mail.com"}, {"Name"=>"John", "Email"=>"john@mail.com"}]
         | 
| 202 265 |  | 
| 203 266 | 
             
            In get_emails(), 
         | 
| @@ -236,6 +299,7 @@ Every database operation raises a CouchdbException when things go wrong. | |
| 236 299 | 
             
            Attempting to create a database that already exists
         | 
| 237 300 | 
             
              begin 	
         | 
| 238 301 | 
             
               Couchdb.create 'contacts'
         | 
| 302 | 
            +
               #create static views
         | 
| 239 303 | 
             
              rescue CouchdbException => e
         | 
| 240 304 | 
             
               puts "Error message: " + e.to_s
         | 
| 241 305 | 
             
               puts "Error value: " + e.error
         | 
| @@ -305,3 +369,4 @@ To change it back to default bind address at anytime, simply set the values to n | |
| 305 369 | 
             
            Copyright (c) 2011 Obi Akubue. See LICENSE.txt for
         | 
| 306 370 | 
             
            further details.
         | 
| 307 371 |  | 
| 372 | 
            +
             | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.2. | 
| 1 | 
            +
            0.2.5
         | 
    
        data/leanback.gemspec
    CHANGED
    
    | @@ -5,11 +5,11 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = %q{leanback}
         | 
| 8 | 
            -
              s.version = "0.2. | 
| 8 | 
            +
              s.version = "0.2.5"
         | 
| 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 = %q{2011- | 
| 12 | 
            +
              s.date = %q{2011-08-03}
         | 
| 13 13 | 
             
              s.description = %q{lightweight Ruby interface to CouchDB}
         | 
| 14 14 | 
             
              s.email = %q{obioraakubue@yahoo.com}
         | 
| 15 15 | 
             
              s.extra_rdoc_files = [
         | 
    
        data/lib/leanback.rb
    CHANGED
    
    | @@ -44,6 +44,18 @@ module Document | |
| 44 44 | 
             
                  end
         | 
| 45 45 | 
             
              end
         | 
| 46 46 |  | 
| 47 | 
            +
             #update a doc
         | 
| 48 | 
            +
             def self.update (doc)
         | 
| 49 | 
            +
                  db_name = doc[:database]
         | 
| 50 | 
            +
                  doc_id = doc[:doc_id]
         | 
| 51 | 
            +
                  data = doc[:data]
         | 
| 52 | 
            +
                  doc = {:database => db_name, :doc_id => doc_id}
         | 
| 53 | 
            +
                  options = Couchdb.view doc 
         | 
| 54 | 
            +
                  options = options.merge(data)
         | 
| 55 | 
            +
                  doc = {:database => db_name, :doc_id => doc_id, :data => options}
         | 
| 56 | 
            +
                  edit doc
         | 
| 57 | 
            +
             end
         | 
| 58 | 
            +
             | 
| 47 59 | 
             
             #delete a doc
         | 
| 48 60 | 
             
             def self.delete(doc)
         | 
| 49 61 | 
             
               db_name = doc[:database]
         | 
    
        data/test/test_leanback.rb
    CHANGED
    
    | @@ -117,6 +117,13 @@ class TestLeanback < Test::Unit::TestCase | |
| 117 117 | 
             
                  end  
         | 
| 118 118 | 
             
              end
         | 
| 119 119 |  | 
| 120 | 
            +
             should  "update the document" do
         | 
| 121 | 
            +
               #data = {"age" => "42", "lastname" => "arnold", "phone" => "202-456-1234", "hobbies" => "football,running, video gamess" }
         | 
| 122 | 
            +
               data = {"age" => "13" }
         | 
| 123 | 
            +
               doc = { :database => 'contacts', :doc_id => 'john', :data => data}   
         | 
| 124 | 
            +
               Document.update doc 
         | 
| 125 | 
            +
             end
         | 
| 126 | 
            +
             | 
| 120 127 | 
             
             should "edit a document - handle exceptions" do 
         | 
| 121 128 | 
             
                    begin
         | 
| 122 129 | 
             
                     data = {:firstname => 'john', :lastname =>'smith', :email => 'john@mail.com',:gender=>'male', :_rev=>'2-e813a0e902e3ac114400ff3959a2adde'}
         | 
    
        metadata
    CHANGED
    
    | @@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version | |
| 5 5 | 
             
              segments: 
         | 
| 6 6 | 
             
              - 0
         | 
| 7 7 | 
             
              - 2
         | 
| 8 | 
            -
              -  | 
| 9 | 
            -
              version: 0.2. | 
| 8 | 
            +
              - 5
         | 
| 9 | 
            +
              version: 0.2.5
         | 
| 10 10 | 
             
            platform: ruby
         | 
| 11 11 | 
             
            authors: 
         | 
| 12 12 | 
             
            - Obi Akubue
         | 
| @@ -14,7 +14,7 @@ autorequire: | |
| 14 14 | 
             
            bindir: bin
         | 
| 15 15 | 
             
            cert_chain: []
         | 
| 16 16 |  | 
| 17 | 
            -
            date: 2011- | 
| 17 | 
            +
            date: 2011-08-03 00:00:00 -04:00
         | 
| 18 18 | 
             
            default_executable: 
         | 
| 19 19 | 
             
            dependencies: 
         | 
| 20 20 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -136,7 +136,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 136 136 | 
             
              requirements: 
         | 
| 137 137 | 
             
              - - ">="
         | 
| 138 138 | 
             
                - !ruby/object:Gem::Version 
         | 
| 139 | 
            -
                  hash:  | 
| 139 | 
            +
                  hash: 541704349
         | 
| 140 140 | 
             
                  segments: 
         | 
| 141 141 | 
             
                  - 0
         | 
| 142 142 | 
             
                  version: "0"
         |