class RubyBox::Folder

Public Instance Methods

copy_to(destination, name=nil) click to toggle source

see developers.box.com/docs/#folders-copy-a-folder for a description of the behavior

# File lib/ruby-box/folder.rb, line 72
def copy_to(destination, name=nil)
  parent = {'parent' => {'id' => destination.id}}
  parent.merge!('name' => name) if name

  RubyBox::Folder.new(@session, post(folder_method(:copy), parent))
end
create_collaboration(email, role=:viewer) click to toggle source

see developers.box.com/docs/#collaborations-collaboration-object for a list of valid roles.

# File lib/ruby-box/folder.rb, line 62
def create_collaboration(email, role=:viewer)
  RubyBox::Collaboration.new(@session, {
      'item' => {'id' => id, 'type' => type},
      'accessible_by' => {'login' => email},
      'role' => role.to_s
  }).create
end
create_folder_upload_email(opts = {}) click to toggle source
# File lib/ruby-box/folder.rb, line 79
def create_folder_upload_email(opts = {})
  opts = {
    access: 'open'
  }.merge(opts) if opts

  url = "#{RubyBox::API_URL}/#{resource_name}/#{id}"
  uri = URI.parse(url)

  request = Net::HTTP::Put.new(uri.path, {
    'Content-Type' => 'application/jso'
  })

  request.body = JSON.dump({
    folder_upload_email: opts
  })

  resp = @session.request(uri, request)
  RubyBox::Folder.new(@session, resp)
end
create_subfolder(name) click to toggle source
# File lib/ruby-box/folder.rb, line 51
def create_subfolder(name)
  url = "#{RubyBox::API_URL}/#{resource_name}"
  uri = URI.parse(url)
  request = Net::HTTP::Post.new( uri.request_uri )
  request.body = JSON.dump({ "name" => name, "parent" => {"id" => id} })
  resp = @session.request(uri, request)
  RubyBox::Folder.new(@session, resp)
end
files(name=nil, item_limit=100, offset=0, fields=nil) click to toggle source
# File lib/ruby-box/folder.rb, line 8
def files(name=nil, item_limit=100, offset=0, fields=nil)
  items_by_type(RubyBox::File, name, item_limit, offset, fields)
end
folders(name=nil, item_limit=100, offset=0, fields=nil) click to toggle source
# File lib/ruby-box/folder.rb, line 12
def folders(name=nil, item_limit=100, offset=0, fields=nil)
  items_by_type(RubyBox::Folder, name, item_limit, offset, fields)
end
upload_file(filename, data, overwrite=true) click to toggle source
# File lib/ruby-box/folder.rb, line 16
def upload_file(filename, data, overwrite=true)
  file = RubyBox::File.new(@session, {
    'name' => filename,
    'parent' => RubyBox::Folder.new(@session, {'id' => id})
  })

  begin
    resp = file.upload_content(data) #write a new file. If there is a conflict, update the conflicted file.
  rescue RubyBox::ItemNameInUse => e

    # if overwrite flag is false, simply raise exception.
    raise e unless overwrite

    # otherwise let's attempt to overwrite the file.
    data.rewind

    # The Box API occasionally does not return
    # context info for an ItemNameInUse exception.
    # This is a workaround around:
    begin
      # were were given context information about this conflict?
      file = RubyBox::File.new(@session, {
        'id' => e['context_info']['conflicts'][0]['id']
      })
    rescue
      # we were not given context information about this conflict.
      # attempt to lookup the file.
      file = files(filename, 1000).pop
    end

    raise e unless file # re-raise the ItemNameInUse exception.
    resp = file.update_content( data )
  end
end

Private Instance Methods

folder_method(method) click to toggle source
# File lib/ruby-box/folder.rb, line 111
def folder_method(method)
  "folders/#{id}/#{method}"
end
has_mini_format?() click to toggle source
# File lib/ruby-box/folder.rb, line 115
def has_mini_format?
  true
end
items_by_type(type, name, item_limit, offset, fields) click to toggle source
# File lib/ruby-box/folder.rb, line 119
def items_by_type(type, name, item_limit, offset, fields)

  # allow paramters to be set via
  # a hash rather than a list of arguments.
  if name.is_a?(Hash)
    return items_by_type(type, name[:name], name[:item_limit], name[:offset], name[:fields])
  end

  items(item_limit, offset, fields).select do |item|
    item.kind_of? type and (name.nil? or item.name.casecmp(name) == 0)
  end

end
post(extra_url, body) click to toggle source
# File lib/ruby-box/folder.rb, line 100
def post(extra_url, body)
  uri = URI.parse("#{RubyBox::API_URL}/#{extra_url}")
  post = Net::HTTP::Post.new(uri.request_uri)
  post.body = JSON.dump(body)
  @session.request(uri, post)
end
resource_name() click to toggle source
# File lib/ruby-box/folder.rb, line 107
def resource_name
  'folders'
end