rbox 0.1.0
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/.gitignore +19 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +23 -0
- data/lib/rbox.rb +33 -0
- data/lib/rbox/authentication.rb +43 -0
- data/lib/rbox/client.rb +20 -0
- data/lib/rbox/connection.rb +31 -0
- data/lib/rbox/download.rb +9 -0
- data/lib/rbox/item.rb +43 -0
- data/lib/rbox/response/authentication/auth_token.rb +25 -0
- data/lib/rbox/response/authentication/get_account_info.rb +16 -0
- data/lib/rbox/response/authentication/logout.rb +7 -0
- data/lib/rbox/response/authentication/register_new_account.rb +29 -0
- data/lib/rbox/response/authentication/ticket.rb +29 -0
- data/lib/rbox/response/authentication/verify_registration_email.rb +7 -0
- data/lib/rbox/response/base.rb +24 -0
- data/lib/rbox/response/items/account_tree.rb +33 -0
- data/lib/rbox/response/items/file.rb +57 -0
- data/lib/rbox/response/items/folder.rb +64 -0
- data/lib/rbox/utils/collect_nested_key.rb +26 -0
- data/rbox.gemspec +17 -0
- metadata +88 -0
    
        data/.gitignore
    ADDED
    
    
    
        data/Gemfile
    ADDED
    
    
    
        data/Gemfile.lock
    ADDED
    
    | @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            GEM
         | 
| 2 | 
            +
              remote: http://rubygems.org/
         | 
| 3 | 
            +
              specs:
         | 
| 4 | 
            +
                faraday (0.8.0)
         | 
| 5 | 
            +
                  multipart-post (~> 1.1)
         | 
| 6 | 
            +
                faraday_middleware (0.8.7)
         | 
| 7 | 
            +
                  faraday (>= 0.7.4, < 0.9)
         | 
| 8 | 
            +
                minitest (2.11.1)
         | 
| 9 | 
            +
                multi_xml (0.4.1)
         | 
| 10 | 
            +
                multipart-post (1.1.5)
         | 
| 11 | 
            +
                rake (0.9.2.2)
         | 
| 12 | 
            +
                vcr (2.1.1)
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            PLATFORMS
         | 
| 15 | 
            +
              ruby
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            DEPENDENCIES
         | 
| 18 | 
            +
              faraday (>= 0.7.0)
         | 
| 19 | 
            +
              faraday_middleware (>= 0.7.0)
         | 
| 20 | 
            +
              minitest
         | 
| 21 | 
            +
              multi_xml (~> 0.4.1)
         | 
| 22 | 
            +
              rake
         | 
| 23 | 
            +
              vcr
         | 
    
        data/lib/rbox.rb
    ADDED
    
    | @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            # Client modules
         | 
| 2 | 
            +
            require 'rbox/connection'
         | 
| 3 | 
            +
            require 'rbox/authentication'
         | 
| 4 | 
            +
            require 'rbox/download'
         | 
| 5 | 
            +
            require 'rbox/item'
         | 
| 6 | 
            +
            # Client class
         | 
| 7 | 
            +
            require 'rbox/client'
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            # Utility methods modules
         | 
| 10 | 
            +
            require 'rbox/utils/collect_nested_key'
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            # Base response module
         | 
| 13 | 
            +
            require 'rbox/response/base'
         | 
| 14 | 
            +
            # Authentication response classes
         | 
| 15 | 
            +
            require 'rbox/response/authentication/ticket'
         | 
| 16 | 
            +
            require 'rbox/response/authentication/get_account_info'
         | 
| 17 | 
            +
            require 'rbox/response/authentication/verify_registration_email'
         | 
| 18 | 
            +
            require 'rbox/response/authentication/auth_token'
         | 
| 19 | 
            +
            require 'rbox/response/authentication/logout'
         | 
| 20 | 
            +
            require 'rbox/response/authentication/register_new_account'
         | 
| 21 | 
            +
            # Items response classes
         | 
| 22 | 
            +
            require 'rbox/response/items/account_tree'
         | 
| 23 | 
            +
            require 'rbox/response/items/folder'
         | 
| 24 | 
            +
            require 'rbox/response/items/file'
         | 
| 25 | 
            +
             | 
| 26 | 
            +
             | 
| 27 | 
            +
            module Rbox
         | 
| 28 | 
            +
              class << self
         | 
| 29 | 
            +
                def new(*arg)
         | 
| 30 | 
            +
                  Rbox::Client.new(*arg)
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
| @@ -0,0 +1,43 @@ | |
| 1 | 
            +
            module Rbox
         | 
| 2 | 
            +
              module Authentication
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                def get_ticket
         | 
| 5 | 
            +
                  response = action(:get_ticket)
         | 
| 6 | 
            +
                  Response::Ticket.new(response, self)
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def get_auth_token
         | 
| 10 | 
            +
                  raise 'Ticket is require for this operation' unless ticket
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  response = action(:get_auth_token) do |req|
         | 
| 13 | 
            +
                    req.params[:ticket] = ticket        
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                  Response::AuthToken.new(response, self)
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def logout
         | 
| 19 | 
            +
                  response = action(:logout)
         | 
| 20 | 
            +
                  Response::Logout.new(response, self)
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def register_new_user(login, password)
         | 
| 24 | 
            +
                  response = action(:register_new_user)
         | 
| 25 | 
            +
                  Response::RegisterNewUser.new(response, self)
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def verify_registration_email
         | 
| 29 | 
            +
                  response = action(:verify_registration_email)
         | 
| 30 | 
            +
                  Response::VerifyRegistrationEmail.new(response, self)
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                def get_account_info
         | 
| 34 | 
            +
                  response = action(:get_account_info)
         | 
| 35 | 
            +
                  Response::GetAccountInfo.new(response, self)
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                def authorize_url
         | 
| 39 | 
            +
                  "https://www.box.net/api/1.0/auth/#{@ticket}"
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
            end
         | 
    
        data/lib/rbox/client.rb
    ADDED
    
    | @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            module Rbox
         | 
| 2 | 
            +
              class Client
         | 
| 3 | 
            +
                include Connection
         | 
| 4 | 
            +
                include Authentication
         | 
| 5 | 
            +
                include Download
         | 
| 6 | 
            +
                include Item
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                attr_accessor :config, :api_token, :auth_token, :ticket
         | 
| 9 | 
            +
                attr_reader :connection
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def initialize(options = {})
         | 
| 12 | 
            +
                  @config = options
         | 
| 13 | 
            +
                  @api_token = @config[:api_token]
         | 
| 14 | 
            +
                  @auth_token = @config[:auth_token]
         | 
| 15 | 
            +
                  @ticket = @config[:ticket]
         | 
| 16 | 
            +
                  @connection = default_connection
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            require 'faraday'
         | 
| 2 | 
            +
            require 'faraday_middleware'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Rbox
         | 
| 5 | 
            +
              module Connection
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              private
         | 
| 8 | 
            +
                def action(action, options = {}, &block)
         | 
| 9 | 
            +
                  params = { :action => action.to_s }
         | 
| 10 | 
            +
                  params[:api_key] = api_token if api_token
         | 
| 11 | 
            +
                  params[:auth_token] = auth_token if auth_token
         | 
| 12 | 
            +
                  connection.get('/api/1.0/rest') do |req|
         | 
| 13 | 
            +
                    req.params = req.params.merge(params)
         | 
| 14 | 
            +
                    block.call(req) if block_given?
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def default_connection
         | 
| 19 | 
            +
                  Faraday.new(:url => 'https://www.box.net/') do |builder|
         | 
| 20 | 
            +
                    builder.use Faraday::Response::ParseXml
         | 
| 21 | 
            +
                    builder.use Faraday::Request::UrlEncoded
         | 
| 22 | 
            +
                    builder.use Faraday::Response::Logger if @config[:logger]
         | 
| 23 | 
            +
                    builder.use Faraday::Adapter::NetHttp
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                def set_connection(*arg, &block)
         | 
| 28 | 
            +
                  @connection = Faraday.send(:new, *args, &block)
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
    
        data/lib/rbox/item.rb
    ADDED
    
    | @@ -0,0 +1,43 @@ | |
| 1 | 
            +
            module Rbox
         | 
| 2 | 
            +
              module Item
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                def get_account_tree(options = { :folder_id => 0 })
         | 
| 5 | 
            +
                  raise 'Auth token and api key is require for this operation' unless auth_token and api_token
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  response = action(:get_account_tree) do |req|
         | 
| 8 | 
            +
                    req.params['params[]'] = 'nozip'
         | 
| 9 | 
            +
                    req.params.merge!(options)
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
                  Response::AccountTree.new(response, self)
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             
         | 
| 14 | 
            +
                def get_file_info(file_id, options = {} )
         | 
| 15 | 
            +
                  raise 'Auth token and api key is require for this operation' unless auth_token and api_token
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  response = action(:get_file_info) do |req|
         | 
| 18 | 
            +
                    req.params.merge!(options)
         | 
| 19 | 
            +
                    req.params[:file_id] = file_id
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  response_file = response.body['response']['info']
         | 
| 23 | 
            +
                  response_file['id'] = response_file['file_id']
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  Response::File.new(response_file, self)
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def public_share(target_id, target_type = 'file')
         | 
| 29 | 
            +
                  response = action(:public_share) do |req|
         | 
| 30 | 
            +
                    req.params[:target] = target_type
         | 
| 31 | 
            +
                    req.params[:target_id] = target_id
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    # Yes, we need those empty strings
         | 
| 34 | 
            +
                    %w(password message emails[]).each do |key|
         | 
| 35 | 
            +
                      req.params[key] = ''
         | 
| 36 | 
            +
                    end
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  response.body['response']['public_name']
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            module Rbox
         | 
| 2 | 
            +
              module Response
         | 
| 3 | 
            +
                class AuthToken
         | 
| 4 | 
            +
                  include Base
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  def initialize(*arg)
         | 
| 7 | 
            +
                    super(*arg)
         | 
| 8 | 
            +
                    @client.auth_token = auth_token
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def auth_token
         | 
| 12 | 
            +
                    @body_response['auth_token']
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def user
         | 
| 16 | 
            +
                    @body_response['user']
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def attributes
         | 
| 20 | 
            +
                    { :user => user, :auth_token => auth_token }
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            module Rbox
         | 
| 2 | 
            +
              module Response
         | 
| 3 | 
            +
                class RegisterNewAccount
         | 
| 4 | 
            +
                  include Base
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  def initialize(*arg)
         | 
| 7 | 
            +
                    super(*arg)
         | 
| 8 | 
            +
                    @client.auth_token = auth_token
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def auth_token
         | 
| 12 | 
            +
                    @body_response['auth_token']
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def user
         | 
| 16 | 
            +
                    @body_response['user']
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def attributes
         | 
| 20 | 
            +
                    { :user => user, :auth_token => auth_token }
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def success?
         | 
| 24 | 
            +
                    !!(status == 'successful_register')
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            module Rbox
         | 
| 2 | 
            +
              module Response
         | 
| 3 | 
            +
                class Ticket
         | 
| 4 | 
            +
                  include Base
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  def initialize(*arg)
         | 
| 7 | 
            +
                    super(*arg)
         | 
| 8 | 
            +
                    @client.ticket = ticket
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def ticket
         | 
| 12 | 
            +
                    @body_response['ticket']
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def authentization_url
         | 
| 16 | 
            +
                    "https://www.box.net/api/1.0/auth/#{ticket}"
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def auth_token
         | 
| 20 | 
            +
                    @client.auth_token(ticket)
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def attributes
         | 
| 24 | 
            +
                    { :ticket => @body_response['ticket'] }
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            module Rbox
         | 
| 2 | 
            +
              module Response
         | 
| 3 | 
            +
                module Base
         | 
| 4 | 
            +
                  def initialize(response, client)
         | 
| 5 | 
            +
                    @response = response
         | 
| 6 | 
            +
                    @body_response = response.body['response']
         | 
| 7 | 
            +
                    @client = client
         | 
| 8 | 
            +
                    raise "Response failure with status code \"#{status}\"" unless success?
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def success?
         | 
| 12 | 
            +
                    !!(status =~ /_ok\z/)
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def status
         | 
| 16 | 
            +
                    @body_response['status']
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def method_missing(name, *args, &block)
         | 
| 20 | 
            +
                    @client.send(name, *args, &block)
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
            end
         | 
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            module Rbox
         | 
| 2 | 
            +
              module Response
         | 
| 3 | 
            +
                class AccountTree
         | 
| 4 | 
            +
                  include Base
         | 
| 5 | 
            +
                  include CollectNestedKey
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  def root_folder
         | 
| 8 | 
            +
                    @root_folder ||= Folder.new(@body_response['tree']['folder'], @client)
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
                  alias :tree :root_folder
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def files
         | 
| 13 | 
            +
                    @files ||= collect_nested_key(@body_response['tree'], 'file').map {|f| File.new(f, @client) }
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def folders
         | 
| 17 | 
            +
                    @folder ||= collect_nested_key(@body_response['tree'], 'folder').map {|f| Folder.new(f, @client) }
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def to_array
         | 
| 21 | 
            +
                    root_folder.folders.map {|f| f.to_hash } + root_folder.files.map {|f| f.to_hash }
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                  alias :to_a :to_array
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def to_hash
         | 
| 26 | 
            +
                    root_folder.to_hash
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
                  alias :to_h :to_hash
         | 
| 29 | 
            +
                  alias :attributes :to_hash
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
| @@ -0,0 +1,57 @@ | |
| 1 | 
            +
            module Rbox
         | 
| 2 | 
            +
              module Response
         | 
| 3 | 
            +
                class File
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  ATTRIBUTES = %w(id file_name shared sha1 size shared_link description user_id thumbnail small_thumbnail large_thumbnail larger_thumbnail preview_thumbnail permissions tags)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  ATTRIBUTES.each do |attr_name|
         | 
| 8 | 
            +
                    define_method(attr_name) do
         | 
| 9 | 
            +
                      instance_variable_get(:@attributes)[attr_name]
         | 
| 10 | 
            +
                    end
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  %w(created updated).each do |attr_name|
         | 
| 14 | 
            +
                    define_method(attr_name) do
         | 
| 15 | 
            +
                      Time.at(instance_variable_get(:@attributes)[attr_name])
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def initialize(attributes, client, parent_folder = nil)
         | 
| 20 | 
            +
                    @attributes = attributes.dup
         | 
| 21 | 
            +
                    @client = client
         | 
| 22 | 
            +
                    @parent_folder = parent_folder
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def attributes
         | 
| 26 | 
            +
                    @attributes
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def download_url
         | 
| 30 | 
            +
                    @client.download_url(id)
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  # public share
         | 
| 34 | 
            +
                  # https://www.box.net/api/1.0/rest?action=public_share&api_key=rrc1d3ntb53tt6b2vhail6rdtrsxov3v&auth_token=rpuis3lincpbyz60gyym8s3xhnc6gbcl&target=folder&target_id=709&password=&message=hey&emails[]=email@example.com&emails[]=email2@example.com
         | 
| 35 | 
            +
                  def public_share!
         | 
| 36 | 
            +
                    @public_name ||= @client.public_share(self.id, 'file')
         | 
| 37 | 
            +
                    true
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  def public_share_url
         | 
| 41 | 
            +
                    if @public_link.nil? || @public_link.empty?
         | 
| 42 | 
            +
                      public_share!
         | 
| 43 | 
            +
                      "https://www.box.net/s/#{@public_name}"
         | 
| 44 | 
            +
                    else
         | 
| 45 | 
            +
                      @public_link
         | 
| 46 | 
            +
                    end
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  def to_hash
         | 
| 50 | 
            +
                    hash = ATTRIBUTES.inject({}) {|h,k,v| h[k.to_sym]= @attributes[k]; h }
         | 
| 51 | 
            +
                    hash[:type] = 'file'
         | 
| 52 | 
            +
                    hash[:parent_folder_id] = @parent_folder.id if @parent_folder
         | 
| 53 | 
            +
                    hash
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
              end
         | 
| 57 | 
            +
            end
         | 
| @@ -0,0 +1,64 @@ | |
| 1 | 
            +
            module Rbox
         | 
| 2 | 
            +
              module Response
         | 
| 3 | 
            +
                class Folder
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  ATTRIBUTES = %w(id name description user_id shared shared_link permissions size file_count tags)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  ATTRIBUTES.each do |attr_name|
         | 
| 8 | 
            +
                    define_method(attr_name) do
         | 
| 9 | 
            +
                      instance_variable_get(:@attributes)[attr_name]
         | 
| 10 | 
            +
                    end
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  %w(created updated).each do |attr_name|
         | 
| 14 | 
            +
                    define_method(attr_name) do
         | 
| 15 | 
            +
                      Time.at(instance_variable_get(:@attributes)[attr_name])
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def initialize(attributes, client, parent_folder = nil)
         | 
| 20 | 
            +
                    @attributes = attributes.dup
         | 
| 21 | 
            +
                    @client = client
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    @parent_folder = parent_folder
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    @folders_attr = [@attributes['folders']['folder']].flatten rescue []
         | 
| 26 | 
            +
                    @attributes.delete('folders')
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                    # lol, { files => { file => [file, ...] } }
         | 
| 29 | 
            +
                    @files_attr = [@attributes['files']['file']].flatten  rescue []
         | 
| 30 | 
            +
                    @attributes.delete('files')
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  def folders
         | 
| 34 | 
            +
                    @folders ||= @folders_attr.map {|f| Folder.new(f, @client, self) }
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  def create_folder(name, options = {})
         | 
| 38 | 
            +
                    options[:parent_id] = id
         | 
| 39 | 
            +
                    @client.create_folder(name, options)
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def files
         | 
| 43 | 
            +
                    @files ||= @files_attr.map {|f| File.new(f, @client, self) }
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  def attributes
         | 
| 47 | 
            +
                    @attributes
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  def root?
         | 
| 51 | 
            +
                    id == '0'
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  def to_hash
         | 
| 55 | 
            +
                    hash = ATTRIBUTES.inject({}) {|h,k,v| h[k.to_sym]= @attributes[k]; h }
         | 
| 56 | 
            +
                    hash[:files]   = files.map {|f| f.to_hash }
         | 
| 57 | 
            +
                    hash[:folders] = folders.map {|f| f.to_hash }
         | 
| 58 | 
            +
                    hash[:type] = 'folder'
         | 
| 59 | 
            +
                    hash[:parent_folder_id] = @parent_folder.id if @parent_folder
         | 
| 60 | 
            +
                    hash
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
              end
         | 
| 64 | 
            +
            end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            module Rbox
         | 
| 2 | 
            +
              module CollectNestedKey
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                def collect_nested_key(obj, key)
         | 
| 5 | 
            +
                  result = []
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  case obj
         | 
| 8 | 
            +
                  when Hash
         | 
| 9 | 
            +
                    if obj.key? key
         | 
| 10 | 
            +
                      result << obj[key]
         | 
| 11 | 
            +
                    else
         | 
| 12 | 
            +
                      obj.each do |k, child|
         | 
| 13 | 
            +
                        result += collect_nested_key(child, key)
         | 
| 14 | 
            +
                      end
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  when Array
         | 
| 17 | 
            +
                    obj.each do |child|
         | 
| 18 | 
            +
                      result += collect_nested_key(child, key)
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  result.flatten
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
    
        data/rbox.gemspec
    ADDED
    
    | @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Gem::Specification.new do |gem|
         | 
| 4 | 
            +
              gem.add_dependency 'faraday', '>= 0.7'
         | 
| 5 | 
            +
              gem.add_dependency 'multi_xml', '~> 0.4.1'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              gem.authors = ["Charles Barbier"]
         | 
| 8 | 
            +
              gem.description = %q{A Ruby wrapper for box.com}
         | 
| 9 | 
            +
              gem.email = ['unixcharles@gmail.com']
         | 
| 10 | 
            +
              gem.files = `git ls-files`.split("\n")
         | 
| 11 | 
            +
              gem.homepage = 'https://github.com/unixcharles/rbox'
         | 
| 12 | 
            +
              gem.name = 'rbox'
         | 
| 13 | 
            +
              gem.require_paths = ['lib']
         | 
| 14 | 
            +
              gem.summary = %q{box.com API wrapper}
         | 
| 15 | 
            +
              gem.test_files = `git ls-files -- {spec}/*`.split("\n")
         | 
| 16 | 
            +
              gem.version = '0.1.0'
         | 
| 17 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,88 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: rbox
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 | 
            +
              prerelease: 
         | 
| 6 | 
            +
            platform: ruby
         | 
| 7 | 
            +
            authors:
         | 
| 8 | 
            +
            - Charles Barbier
         | 
| 9 | 
            +
            autorequire: 
         | 
| 10 | 
            +
            bindir: bin
         | 
| 11 | 
            +
            cert_chain: []
         | 
| 12 | 
            +
            date: 2012-05-14 00:00:00.000000000 Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            +
              name: faraday
         | 
| 16 | 
            +
              requirement: &70133377507860 !ruby/object:Gem::Requirement
         | 
| 17 | 
            +
                none: false
         | 
| 18 | 
            +
                requirements:
         | 
| 19 | 
            +
                - - ! '>='
         | 
| 20 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 21 | 
            +
                    version: '0.7'
         | 
| 22 | 
            +
              type: :runtime
         | 
| 23 | 
            +
              prerelease: false
         | 
| 24 | 
            +
              version_requirements: *70133377507860
         | 
| 25 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 26 | 
            +
              name: multi_xml
         | 
| 27 | 
            +
              requirement: &70133377507360 !ruby/object:Gem::Requirement
         | 
| 28 | 
            +
                none: false
         | 
| 29 | 
            +
                requirements:
         | 
| 30 | 
            +
                - - ~>
         | 
| 31 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            +
                    version: 0.4.1
         | 
| 33 | 
            +
              type: :runtime
         | 
| 34 | 
            +
              prerelease: false
         | 
| 35 | 
            +
              version_requirements: *70133377507360
         | 
| 36 | 
            +
            description: A Ruby wrapper for box.com
         | 
| 37 | 
            +
            email:
         | 
| 38 | 
            +
            - unixcharles@gmail.com
         | 
| 39 | 
            +
            executables: []
         | 
| 40 | 
            +
            extensions: []
         | 
| 41 | 
            +
            extra_rdoc_files: []
         | 
| 42 | 
            +
            files:
         | 
| 43 | 
            +
            - .gitignore
         | 
| 44 | 
            +
            - Gemfile
         | 
| 45 | 
            +
            - Gemfile.lock
         | 
| 46 | 
            +
            - lib/rbox.rb
         | 
| 47 | 
            +
            - lib/rbox/authentication.rb
         | 
| 48 | 
            +
            - lib/rbox/client.rb
         | 
| 49 | 
            +
            - lib/rbox/connection.rb
         | 
| 50 | 
            +
            - lib/rbox/download.rb
         | 
| 51 | 
            +
            - lib/rbox/item.rb
         | 
| 52 | 
            +
            - lib/rbox/response/authentication/auth_token.rb
         | 
| 53 | 
            +
            - lib/rbox/response/authentication/get_account_info.rb
         | 
| 54 | 
            +
            - lib/rbox/response/authentication/logout.rb
         | 
| 55 | 
            +
            - lib/rbox/response/authentication/register_new_account.rb
         | 
| 56 | 
            +
            - lib/rbox/response/authentication/ticket.rb
         | 
| 57 | 
            +
            - lib/rbox/response/authentication/verify_registration_email.rb
         | 
| 58 | 
            +
            - lib/rbox/response/base.rb
         | 
| 59 | 
            +
            - lib/rbox/response/items/account_tree.rb
         | 
| 60 | 
            +
            - lib/rbox/response/items/file.rb
         | 
| 61 | 
            +
            - lib/rbox/response/items/folder.rb
         | 
| 62 | 
            +
            - lib/rbox/utils/collect_nested_key.rb
         | 
| 63 | 
            +
            - rbox.gemspec
         | 
| 64 | 
            +
            homepage: https://github.com/unixcharles/rbox
         | 
| 65 | 
            +
            licenses: []
         | 
| 66 | 
            +
            post_install_message: 
         | 
| 67 | 
            +
            rdoc_options: []
         | 
| 68 | 
            +
            require_paths:
         | 
| 69 | 
            +
            - lib
         | 
| 70 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 71 | 
            +
              none: false
         | 
| 72 | 
            +
              requirements:
         | 
| 73 | 
            +
              - - ! '>='
         | 
| 74 | 
            +
                - !ruby/object:Gem::Version
         | 
| 75 | 
            +
                  version: '0'
         | 
| 76 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 77 | 
            +
              none: false
         | 
| 78 | 
            +
              requirements:
         | 
| 79 | 
            +
              - - ! '>='
         | 
| 80 | 
            +
                - !ruby/object:Gem::Version
         | 
| 81 | 
            +
                  version: '0'
         | 
| 82 | 
            +
            requirements: []
         | 
| 83 | 
            +
            rubyforge_project: 
         | 
| 84 | 
            +
            rubygems_version: 1.8.10
         | 
| 85 | 
            +
            signing_key: 
         | 
| 86 | 
            +
            specification_version: 3
         | 
| 87 | 
            +
            summary: box.com API wrapper
         | 
| 88 | 
            +
            test_files: []
         |