README.md in rapidshare-ext-0.0.6 vs README.md in rapidshare-ext-0.1.0

- old
+ new

@@ -1,222 +1,244 @@ -# Rapidshare::Ext - -Makes your interactions with the Rapidshare API more pleasant by providing new handy features: creating/moving/deleting files/folders in a user friendly way, upload files, etc. - -This gem extends the existing one - https://github.com/defkode/rapidshare, so it has all features have been implemented by the authors of the original gem at the moment. - -## Installation - -Add this line to your Gemfile: - - gem 'rapidshare-ext' - -And then execute: - - $ bundle - -Or install it yourself as: - - $ gem install rapidshare-ext - -## Usage - -First, create an instance: -```ruby -api = Rapidshare::API.new(:login => 'my_login', :password => 'my_password') -api = Rapidshare::API.new(:cookie => 'cookie_here') # More preferable way -``` - -### Files - -Now you can perform file downloading in two ways: by HTTP url or by absolute path. - -First, by the HTTP url, as it has worked before: -```ruby -@rs.download "https://rapidshare.com/files/4226120320/upload_file_1.txt", - :downloads_dir => "/tmp", - :save_as => "file2.txt" # This doesn't work in the original gem at the moment because of Rapidshare API changes - - # With a default local file name - @rs.download "https://rapidshare.com/files/4226120320/upload_file_1.txt", - :downloads_dir => "/tmp" -``` - -Download by absolute path from account you owned: -```ruby -@rs.download "/foo/bar/baz/upload_file_1.txt", - :downloads_dir => "/tmp" -``` - -In both the first and second samples the result will be the same. - -File uploading is also became very simple: -```ruby -api.upload("/home/odiszapc/my_damn_cat.mov", :to => "/gallery/video", :as => "cat1.mov") -# => { -# :id => 1, -# :size => 12345, # File size in bytes -# :checksum => <MD5>, -# :url => <DOWNLOAD_URL>, # https://rapidshare/....... -# :already_exists? => true/false # Does the file already exists within a specific folder, real uploading will not being performed in this case -#} -``` -Destination folder will be created automatically. -After uploading has been completed the file will be stored in a Rapidshare as "/gallery/video/cat1.mov" -You can easily get a download url after uploading: -```ruby -result = api.upload("/home/odiszapc/my_damn_cat.mov", :to => "/gallery/video", :as => "cat1.mov") -result[:url] -``` - -By default, file is uploaded into the root folder: -```ruby -api.upload("/home/odiszapc/my_damn_humster.mov") -``` - -Rapidshare allows to store multiple files having equal names under the same folder. I believe this behaviour is absolutely wrong. -Therefore, each time upload performed it checks if the file with the given name already exists in a folder. -If it's true, the upload() just returns info about the existing file with the :already_exists? flag is set to true without any real upload being performed. -To force file being overwritten set the :overwrite parameter to true: - -```ruby -api.upload "/home/odiszapc/my_damn_cat.mov", - :to => "/gallery/video", - :as => "cat1.mov" - -# No upload will be performed -api.upload "/home/odiszapc/my_damn_cat.mov", - :to => "/gallery/video", - :as => "cat1.mov" - -# With the following notation file will be uploaded with overwriting the existing one -api.upload "/home/odiszapc/my_damn_cat.mov", - :to => "/gallery/video", - :as => "cat1.mov", - :overwrite => true -``` - -Deleting files: -```ruby -api.remove_file("/putin/is/a/good/reason/to/live/abroad/ticket_to_Nicaragua.jpg") -``` - -Renaming files: -```ruby -api.rename_file("/foo/bar.rar", "baz.rar") -``` - -Moving files: -```ruby -api.move_file("/foo/bar/baz.rar", :to => "/foo") # new file path: "/foo/baz.rar" -api.move_file("/foo/bar/baz.rar") # move to a root folder -``` - -Get the file ID: -```ruby -api.file_id("/foo/bar/baz.rar") # => <ID> -``` - -### Folders -As you note it's possible having a hierarchy of folders in your account. - -Creating folder hierarchy: -```ruby -folder_id = api.add_folder "a/b/c" # => <FOLDER ID> -``` - -Deleting folders: -```ruby -api.remove_folder("/a/b/c") -``` - -Moving folders: -```ruby -api.move_folder("/a/b/c", :to => "/a") -``` -This moves the folder "c" from the directory "/a/b/" and places it under the directory "/a" - -You can get hierarchy of all the folders in account: -```ruby -api.folders_hierarchy -# => { -# <folder ID> => { -# :parent => <parent folder ID>, -# :name => <folder name>, -# :path => <folder absolute path> -# }, -# ... -# } -``` - -Note, that after the folder hierarchy is generated first time it's cached permanently to improve performance. - -So, if you want to invalidate the cache just call the above method with trailing "!": -```ruby -api.folders_hierarchy! -``` - -If folder tree is inconsistent (orphans are found, see next paragraph for details) the Exception will be thrown when you perform #folders_hierarchy. -To automatically normalize the tree, call the method with the :consistent flag: -```ruby -api.folders_hierarchy :consistent => true -``` -Be careful with the tree consistency, orphan folders may contain a critical data. - -A more secure way to deal with folder consistency is to fix all orphans first and then generate folder tree: -```ruby -api.add_folder "/garbage" -api.move_orphans :to => "/garbage" # Collect all orphans and place them under the /garbage folder -tree = api.folders_hierarchy -``` - -Get the folder ID or path: -```ruby -id = api.folder_id("/foo/bar") # <ID> -api.folder_path(id) # "/foo/bar" -``` - -### Orphans -As mentioned earlier, the Rapidshare has its common problem: the chance of orphan folders to be appeared. -What does it mean? When you delete parent folder by its ID the folder will be deleted without any of its child folders being deleted. -For example, let we have the basic directory tree: -``` -ROOT -`-a <- Raw Rapidshare API allows you to delete JUST THIS folder, so hierarchy relation between folders will be lost and the folders "c" and "b" will became orphans - `-b - `-c -``` - -**Know-how:** orphan folders become invisible in your File Manager on the Rapidshare web site, so you may want to hide all the data in this way (stupid idea) - -So, the best way to delete a directory tree without washing away consistency of account folder hierarchy is the following: -```ruby -api.remove_folder "/a" # This will delete all the child directories correctly -``` - -However, if you already have orphans in your account there is possible to fix them. -So ,the next method detects all orphan folders in your account and moves them into a specific folder: -```ruby -api.move_orphans :to => "/" -``` - -Or we can just delete all of them (be careful): -```ruby -api.remove_orphans! -``` - -### Account -You can null your account by deleting all the data stored inside: -```ruby -api.erase_all_data! -``` - -**Be careful with it, because you stake losing all your data** - -## Contributing - -1. Fork it -2. Create your feature branch (`git checkout -b my-new-feature`) -3. Commit your changes (`git commit -am 'Added some feature'`) -4. Push to the branch (`git push origin my-new-feature`) -5. Create new Pull Request +# Rapidshare::Ext + +Makes your interactions with the Rapidshare API more pleasant by providing new handy features: creating/moving/deleting files/folders in a user friendly way, upload files, etc. + +Until Jan 2013 this gem has extended the existing one - https://github.com/defkode/rapidshare, so it has all features have been implemented by the authors of the original gem at the moment. +From Jan 2013 Rapidshare-Ext gem has branched out and ships as a standalone library. + +## Installation + +Add this line to your Gemfile: + + gem 'rapidshare-ext' + +And then execute: + + $ bundle + +Or install it yourself as: + + $ gem install rapidshare-ext + +## Usage + +First, create an instance: +```ruby +api = Rapidshare::API.new(:login => 'my_login', :password => 'my_password') +api = Rapidshare::API.new(:cookie => 'cookie_here') # More preferable way +``` + +### Files + +Now you can perform file download in two ways: by HTTP/HTTPS url or by absolute path. + +First, by the HTTP url, as it has worked before: +```ruby +@rs.download 'https://rapidshare.com/files/4226120320/upload_file_1.txt', + :downloads_dir => '/tmp', + :save_as => 'file2.txt' # This doesn't work in the original gem at the moment because of Rapidshare API changes + + # With a default local file name + @rs.download 'https://rapidshare.com/files/4226120320/upload_file_1.txt', + :downloads_dir => '/tmp' +``` + +Download by absolute path from account you owned: +```ruby +@rs.download '/foo/bar/baz/upload_file_1.txt', + :downloads_dir => '/tmp' +``` + +In both the first and second samples the result will be the same. + +It's possible to implement a custom progress bar functionality by providing a codeblock to #download method +```ruby +@rs.download '/foo/bar.txt', :downloads_dir => '/tmp' +do |chunk_size, downloaded, total, progress| + # chunk_size has the default value of 16384 bytes for Ruby 1.9 + # downloaded is a aggregated size of file part has already been downloaded at the moment + # total represents a file total size + # progress is a progress bar value in percents + # + # Example: While user downloading a 102598 bytes file the valuse will be as follows: + # Iter 1: chunk_size=0, downloaded=0, total=102598, progress=0 + # Iter 2: chunk_size=16384, downloaded=0, total=102598, progress=15.97 + # Iter 3: chunk_size=16384, downloaded=0, total=102598, progress=31.94 + # Iter 4: chunk_size=16384, downloaded=0, total=102598, progress=47.91 + # Iter 5: chunk_size=16384, downloaded=0, total=102598, progress=63.88 + # Iter 6: chunk_size=16384, downloaded=0, total=102598, progress=79.85 + # Iter 7: chunk_size=16384, downloaded=0, total=102598, progress=95.81 + # Iter 8: chunk_size=4294, downloaded=0, total=102598, progress=100.00 +end +``` + +File uploading is also became very simple: +```ruby +api.upload('/home/odiszapc/my_damn_cat.mov', :to => '/gallery/video', :as => 'cat1.mov') +# => { +# :id => 1, +# :size => 12345, # File size in bytes +# :checksum => <MD5>, +# :url => <DOWNLOAD_URL>, # https://rapidshare/....... +# :already_exists? => true/false # Does the file already exists within a specific folder, real uploading will not being performed in this case +#} +``` +Destination folder will be created automatically. +After uploading has been completed the file will be stored in a Rapidshare as '/gallery/video/cat1.mov' +You can easily get a download url after uploading: +```ruby +result = api.upload('/home/odiszapc/my_damn_cat.mov', :to => '/gallery/video', :as => 'cat1.mov') +result[:url] +``` + +By default, file is uploaded into the root folder: +```ruby +api.upload('/home/odiszapc/my_damn_humster.mov') +``` + +Rapidshare allows to store multiple files having equal names under the same folder. I believe this behaviour is absolutely wrong. +Therefore, each time upload performed it checks if the file with the given name already exists in a folder. +If it's true, the upload() just returns info about the existing file with the :already_exists? flag is set to true without any real upload being performed. +To force file being overwritten set the :overwrite parameter to true: + +```ruby +api.upload '/home/odiszapc/my_damn_cat.mov', + :to => '/gallery/video', + :as => 'cat1.mov' + +# No upload will be performed +api.upload '/home/odiszapc/my_damn_cat.mov', + :to => '/gallery/video', + :as => 'cat1.mov' + +# With the following notation file will be uploaded with overwriting the existing one +api.upload '/home/odiszapc/my_damn_cat.mov', + :to => '/gallery/video', + :as => 'cat1.mov', + :overwrite => true +``` + +Deleting files: +```ruby +api.remove_file('/putin/is/a/good/reason/to/live/abroad/ticket_to_Nicaragua.jpg') +``` + +Renaming files: +```ruby +api.rename_file('/foo/bar.rar', 'baz.rar') +``` + +Moving files: +```ruby +api.move_file('/foo/bar/baz.rar', :to => '/foo') # new file path: '/foo/baz.rar' +api.move_file('/foo/bar/baz.rar') # move to a root folder +``` + +Get the file ID: +```ruby +api.file_id('/foo/bar/baz.rar') # => <ID> +``` + +### Folders +As you note it's possible having a hierarchy of folders in your account. + +Creating folder hierarchy: +```ruby +folder_id = api.add_folder 'a/b/c' # => <FOLDER ID> +``` + +Deleting folders: +```ruby +api.remove_folder('/a/b/c') +``` + +Moving folders: +```ruby +api.move_folder('/a/b/c', :to => '/a') +``` +This moves the folder 'c' from the directory '/a/b/' and places it under the directory '/a' + +You can get hierarchy of all the folders in account: +```ruby +api.folders_hierarchy +# => { +# <folder ID> => { +# :parent => <parent folder ID>, +# :name => <folder name>, +# :path => <folder absolute path> +# }, +# ... +# } +``` + +Note, that after the folder hierarchy is generated first time it's cached permanently to improve performance. + +So, if you want to invalidate the cache just call the above method with trailing '!': +```ruby +api.folders_hierarchy! +``` + +If folder tree is inconsistent (orphans are found, see next paragraph for details) the Exception will be thrown when you perform #folders_hierarchy. +To automatically normalize the tree, call the method with the :consistent flag: +```ruby +api.folders_hierarchy :consistent => true +``` +Be careful with the tree consistency, orphan folders may contain a critical data. + +A more secure way to deal with folder consistency is to fix all orphans first and then generate folder tree: +```ruby +api.add_folder '/garbage' +api.move_orphans :to => '/garbage' # Collect all orphans and place them under the /garbage folder +tree = api.folders_hierarchy +``` + +Get the folder ID or path: +```ruby +id = api.folder_id('/foo/bar') # <ID> +api.folder_path(id) # '/foo/bar' +``` + +### Orphans +As mentioned earlier, the Rapidshare has its common problem: the chance of orphan folders to be appeared. +What does it mean? When you delete parent folder by its ID the folder will be deleted without any of its child folders being deleted. +For example, let we have the basic directory tree: +``` +ROOT +`-a <- Raw Rapidshare API allows you to delete JUST THIS folder, so hierarchy relation between folders will be lost and the folders 'c' and 'b' will became orphans + `-b + `-c +``` + +**Know-how:** orphan folders become invisible in your File Manager on the Rapidshare web site, so you may want to hide all the data in this way (stupid idea) + +So, the best way to delete a directory tree without washing away consistency of account folder hierarchy is the following: +```ruby +api.remove_folder '/a' # This will delete all the child directories correctly +``` + +However, if you already have orphans in your account there is possible to fix them. +So ,the next method detects all orphan folders in your account and moves them into a specific folder: +```ruby +api.move_orphans :to => '/' +``` + +Or we can just delete all of them (be careful): +```ruby +api.remove_orphans! +``` + +### Account +You can null your account by deleting all the data stored inside: +```ruby +api.erase_all_data! +``` + +**Be careful with it, because you stake losing all your data** + +## Contributing + +1. Fork it +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Commit your changes (`git commit -am 'Added some feature'`) +4. Push to the branch (`git push origin my-new-feature`) +5. Create new Pull Request 6. Open beer \ No newline at end of file