lib/datapimp/sync/dropbox_folder.rb in datapimp-1.0.5 vs lib/datapimp/sync/dropbox_folder.rb in datapimp-1.0.6
- old
+ new
@@ -1,37 +1,71 @@
module Datapimp
class Sync::DropboxFolder < Hashie::Mash
+ # Provides easy access to the Dropbox client
def dropbox
@dropbox ||= Datapimp::Sync.dropbox
end
+ # Provides access to the Dropbox API Delta which will tell us
+ # how to modify the state of `local_path` to match what exists
+ # on Dropbox.
def delta
@delta ||= dropbox.delta(cursor, remote_path)
end
+ # A Pointer to the local path we will be syncing with the Dropbox remote
def local_path
Pathname(local)
end
- def remote_path
- Datapimp::Sync.dropbox.ls(remote)
- end
-
+ # The Dropbox Delta API uses a cursor to keep track of the last state
+ # the local filesystem has synced with. We store this in the syncable folder
+ # itself
def cursor
cursor_path.exist? && cursor_path.read
end
def cursor_path
local_path.join('.dropbox-cursor')
end
- def run(action)
+ def remote_path
+ dropbox.ls(remote)
+ rescue(Dropbox::API::Error::NotFound)
+ nil
+ end
+
+ def remote_path_parent
+ parent, _ = File.split(remote)
+ dropbox.ls(parent)
+ rescue(Dropbox::API::Error::NotFound)
+ nil
+ end
+
+ def remote_path_missing?
+ remote_path.nil?
+ end
+
+ def run(action, options={})
action = action.to_sym
if action == :push
+ if remote_path_missing?
+ dropbox.mkdir(remote)
+ end
- elsif action == :pull
+ Dir[local_path.join("**/*")].each do |f|
+ # Upload the file
+ binding.pry
+ end
+ elsif action == :pull
+ # TODO
+ # Implement the Delta call
end
end
+
+ def ensure_remote_folder_exists
+ end
end
end
+