ruby-box 1.0.0 → 1.0.1
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.
- checksums.yaml +8 -8
- data/README.markdown +6 -1
- data/VERSION +1 -1
- data/lib/ruby-box/discussion.rb +1 -6
- data/lib/ruby-box/file.rb +2 -6
- data/lib/ruby-box/folder.rb +3 -19
- data/lib/ruby-box/item.rb +35 -0
- data/lib/ruby-box/session.rb +7 -4
- data/ruby-box.gemspec +1 -1
- data/spec/folder_spec.rb +10 -0
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            !binary "U0hBMQ==":
         | 
| 3 3 | 
             
              metadata.gz: !binary |-
         | 
| 4 | 
            -
                 | 
| 4 | 
            +
                MzQwYmEzNDcwZTkzZDk3MTMzNjMwZDFhODY5NjM2MjllZmVjOWEyNQ==
         | 
| 5 5 | 
             
              data.tar.gz: !binary |-
         | 
| 6 | 
            -
                 | 
| 6 | 
            +
                YjQ3Yzc4YjgzZmRiOTdhMjE4NWM5NTJiYmY1MDg1YjkyMDlhMDM2Yw==
         | 
| 7 7 | 
             
            !binary "U0hBNTEy":
         | 
| 8 8 | 
             
              metadata.gz: !binary |-
         | 
| 9 | 
            -
                 | 
| 10 | 
            -
                 | 
| 11 | 
            -
                 | 
| 9 | 
            +
                NmY5ZmE2ZDI0YTk0OWQzMGU4ZDNkOTZiM2I1ZTdlZmZmODNiNGFmYjQxM2Rm
         | 
| 10 | 
            +
                YjQ3ZTFjYjI4Nzc2MTlkOGQ5NjA2OGExNzBhMmMzYzYxMWZhYjM4YjMzNTJm
         | 
| 11 | 
            +
                Njg0YWRlYWM5ZTU3MDVkZThkOGJjZThhOTBiZTNmMjcxZGFkYmI=
         | 
| 12 12 | 
             
              data.tar.gz: !binary |-
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                 | 
| 15 | 
            -
                 | 
| 13 | 
            +
                YWQwNTliOTU4NTQ2MTUzODA2MTA2ODNiOTBiOGM2ZDY0YmY2YTA3OTIwZmRl
         | 
| 14 | 
            +
                ZWFjOGVjNjU3MzgyMjgwN2Y2NDViYjhmNmY2YTNhMmYxNTVjZDI4MzgzZTU5
         | 
| 15 | 
            +
                ODFkZTFiMmQ1NzliZmM2YWQ4OGYwOTcyN2YwYmE0MmNjYmM2MGI=
         | 
    
        data/README.markdown
    CHANGED
    
    | @@ -26,7 +26,12 @@ authorize_url = session.authorize_url('https://redirect-url-in-app-settings') | |
| 26 26 | 
             
            __2)__ After redirecting to the authorize_url, exchange the _code_ given for an _access\_token_
         | 
| 27 27 |  | 
| 28 28 | 
             
            ```ruby
         | 
| 29 | 
            -
            session.get_access_token('code-returned-to-redirect_url')
         | 
| 29 | 
            +
            @token = session.get_access_token('code-returned-to-redirect_url')
         | 
| 30 | 
            +
            p '@token.token' # the access token.
         | 
| 31 | 
            +
            p '@token.refresh_token' # token that can be exchanged for a new access_token once the access_token expires.
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            # refreshing token.
         | 
| 34 | 
            +
            @token = session.refresh_token('refresh-token-string')
         | 
| 30 35 | 
             
            ```
         | 
| 31 36 |  | 
| 32 37 | 
             
            __3)__ Create a client using a session initialized with the _access\_token_.
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            1.0. | 
| 1 | 
            +
            1.0.1
         | 
    
        data/lib/ruby-box/discussion.rb
    CHANGED
    
    
    
        data/lib/ruby-box/file.rb
    CHANGED
    
    | @@ -1,6 +1,8 @@ | |
| 1 1 | 
             
            module RubyBox
         | 
| 2 2 | 
             
              class File < Item
         | 
| 3 3 |  | 
| 4 | 
            +
                has_many :comments
         | 
| 5 | 
            +
             | 
| 4 6 | 
             
                def download
         | 
| 5 7 | 
             
                  resp = stream.read
         | 
| 6 8 | 
             
                end
         | 
| @@ -10,12 +12,6 @@ module RubyBox | |
| 10 12 | 
             
                  @session.do_stream( url, opts )
         | 
| 11 13 | 
             
                end
         | 
| 12 14 |  | 
| 13 | 
            -
                def comments
         | 
| 14 | 
            -
                  url = "#{RubyBox::API_URL}/#{resource_name}/#{id}/comments"
         | 
| 15 | 
            -
                  resp = @session.get( url )
         | 
| 16 | 
            -
                  resp['entries'].map {|i| Comment.new(@session, i)}
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
             | 
| 19 15 | 
             
                def upload_content( data )
         | 
| 20 16 | 
             
                  url = "#{RubyBox::UPLOAD_URL}/#{resource_name}/content"
         | 
| 21 17 | 
             
                  uri = URI.parse(url)
         | 
    
        data/lib/ruby-box/folder.rb
    CHANGED
    
    | @@ -1,18 +1,8 @@ | |
| 1 1 | 
             
            module RubyBox
         | 
| 2 2 | 
             
              class Folder < Item
         | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
                      url = "#{RubyBox::API_URL}/#{resource_name}/#{id}/items?limit=#{item_limit}&offset=#{offset}"
         | 
| 7 | 
            -
                      resp = @session.get( url )
         | 
| 8 | 
            -
                      resp['entries'].each do |entry|
         | 
| 9 | 
            -
                        yielder.yield(RubyBox::Item.factory(@session, entry))
         | 
| 10 | 
            -
                      end
         | 
| 11 | 
            -
                      offset += resp['entries'].count
         | 
| 12 | 
            -
                      break if resp['offset'].to_i + resp['limit'].to_i >= resp['total_count'].to_i
         | 
| 13 | 
            -
                    end
         | 
| 14 | 
            -
                  end
         | 
| 15 | 
            -
                end
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                has_many :discussions
         | 
| 5 | 
            +
                has_many_paginated :items
         | 
| 16 6 |  | 
| 17 7 | 
             
                def files(name=nil, item_limit=100, offset=0)
         | 
| 18 8 | 
             
                  items(item_limit, offset).select do |item|
         | 
| @@ -26,12 +16,6 @@ module RubyBox | |
| 26 16 | 
             
                  end
         | 
| 27 17 | 
             
                end
         | 
| 28 18 |  | 
| 29 | 
            -
                def discussions
         | 
| 30 | 
            -
                  url = "#{RubyBox::API_URL}/#{resource_name}/#{id}/discussions"
         | 
| 31 | 
            -
                  resp = @session.get( url )
         | 
| 32 | 
            -
                  resp['entries'].map {|i| Discussion.new(@session, i)}
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
             | 
| 35 19 | 
             
                def upload_file(filename, data)
         | 
| 36 20 | 
             
                  file = RubyBox::File.new(@session, {
         | 
| 37 21 | 
             
                    'name' => filename,
         | 
    
        data/lib/ruby-box/item.rb
    CHANGED
    
    | @@ -3,11 +3,22 @@ require 'time' | |
| 3 3 | 
             
            module RubyBox
         | 
| 4 4 | 
             
              class Item
         | 
| 5 5 |  | 
| 6 | 
            +
                @@has_many = []
         | 
| 7 | 
            +
                @@has_many_paginated = []
         | 
| 8 | 
            +
             | 
| 6 9 | 
             
                def initialize( session, raw_item )
         | 
| 7 10 | 
             
                  @session = session
         | 
| 8 11 | 
             
                  @raw_item = raw_item
         | 
| 9 12 | 
             
                end
         | 
| 10 13 |  | 
| 14 | 
            +
                def self.has_many(*keys)
         | 
| 15 | 
            +
                  keys.each {|key| @@has_many << key.to_s}
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def self.has_many_paginated(*keys)
         | 
| 19 | 
            +
                  keys.each {|key| @@has_many_paginated << key.to_s}
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 11 22 | 
             
                def update
         | 
| 12 23 | 
             
                  reload_meta unless etag
         | 
| 13 24 |  | 
| @@ -37,6 +48,10 @@ module RubyBox | |
| 37 48 |  | 
| 38 49 | 
             
                def method_missing(method, *args, &block)
         | 
| 39 50 | 
             
                  key = method.to_s
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  # Support has many and paginated has many relationships.
         | 
| 53 | 
            +
                  return many(key) if @@has_many.include?(key)
         | 
| 54 | 
            +
                  return paginated(key, args[0] || 100, args[1] || 0) if @@has_many_paginated.include?(key)
         | 
| 40 55 |  | 
| 41 56 | 
             
                  # update @raw_item hash if this appears to be a setter.
         | 
| 42 57 | 
             
                  setter = method.to_s.end_with?('=')
         | 
| @@ -75,6 +90,26 @@ module RubyBox | |
| 75 90 |  | 
| 76 91 | 
             
                private
         | 
| 77 92 |  | 
| 93 | 
            +
                def many(key)
         | 
| 94 | 
            +
                  url = "#{RubyBox::API_URL}/#{resource_name}/#{id}/#{key}"
         | 
| 95 | 
            +
                  resp = @session.get( url )
         | 
| 96 | 
            +
                  resp['entries'].map {|i| RubyBox::Item.factory(@session, i)}
         | 
| 97 | 
            +
                end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                def paginated(key, item_limit=100, offset=0)
         | 
| 100 | 
            +
                  Enumerator.new do |yielder|
         | 
| 101 | 
            +
                    while true
         | 
| 102 | 
            +
                      url = "#{RubyBox::API_URL}/#{resource_name}/#{id}/#{key}?limit=#{item_limit}&offset=#{offset}"
         | 
| 103 | 
            +
                      resp = @session.get( url )
         | 
| 104 | 
            +
                      resp['entries'].each do |entry|
         | 
| 105 | 
            +
                        yielder.yield(RubyBox::Item.factory(@session, entry))
         | 
| 106 | 
            +
                      end
         | 
| 107 | 
            +
                      offset += resp['entries'].count
         | 
| 108 | 
            +
                      break if resp['offset'].to_i + resp['limit'].to_i >= resp['total_count'].to_i
         | 
| 109 | 
            +
                    end
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
             | 
| 78 113 | 
             
                def serialize
         | 
| 79 114 | 
             
                  update_fields.inject({}) {|hash, field| hash[field] = @raw_item[field]; hash}
         | 
| 80 115 | 
             
                end
         | 
    
        data/lib/ruby-box/session.rb
    CHANGED
    
    | @@ -2,7 +2,6 @@ require 'oauth2' | |
| 2 2 |  | 
| 3 3 | 
             
            module RubyBox  
         | 
| 4 4 | 
             
              class Session
         | 
| 5 | 
            -
                attr_accessor :api_key, :auth_token, :oauth2_client, :access_token
         | 
| 6 5 |  | 
| 7 6 | 
             
                OAUTH2_URLS = {
         | 
| 8 7 | 
             
                  :site => 'https://www.box.com',
         | 
| @@ -13,7 +12,7 @@ module RubyBox | |
| 13 12 | 
             
                def initialize(opts={})
         | 
| 14 13 | 
             
                  if opts[:client_id]
         | 
| 15 14 | 
             
                    @oauth2_client = OAuth2::Client.new(opts[:client_id], opts[:client_secret], OAUTH2_URLS)
         | 
| 16 | 
            -
                    @access_token = OAuth2::AccessToken.new(oauth2_client, opts[:access_token]) if opts[:access_token]
         | 
| 15 | 
            +
                    @access_token = OAuth2::AccessToken.new(@oauth2_client, opts[:access_token]) if opts[:access_token]
         | 
| 17 16 | 
             
                  else # Support legacy API for historical reasons.
         | 
| 18 17 | 
             
                    @api_key = opts[:api_key]
         | 
| 19 18 | 
             
                    @auth_token = opts[:auth_token]
         | 
| @@ -26,8 +25,12 @@ module RubyBox | |
| 26 25 | 
             
                end
         | 
| 27 26 |  | 
| 28 27 | 
             
                def get_access_token(code)
         | 
| 29 | 
            -
                  @access_token = @oauth2_client.auth_code.get_token(code | 
| 30 | 
            -
             | 
| 28 | 
            +
                  @access_token = @oauth2_client.auth_code.get_token(code)
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def refresh_token(refresh_token)
         | 
| 32 | 
            +
                  refresh_access_token_obj = OAuth2::AccessToken.new(@oauth2_client, @access_token.token, {'refresh_token' => refresh_token})
         | 
| 33 | 
            +
                  @access_token = refresh_access_token_obj.refresh!
         | 
| 31 34 | 
             
                end
         | 
| 32 35 |  | 
| 33 36 | 
             
                def build_auth_header
         | 
    
        data/ruby-box.gemspec
    CHANGED
    
    | @@ -5,7 +5,7 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = "ruby-box"
         | 
| 8 | 
            -
              s.version = "1.0. | 
| 8 | 
            +
              s.version = "1.0.1"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Benjamin Coe", "Jesse Miller", "Larry Kang"]
         | 
    
        data/spec/folder_spec.rb
    CHANGED
    
    | @@ -89,6 +89,16 @@ describe RubyBox::Folder do | |
| 89 89 |  | 
| 90 90 | 
             
              end
         | 
| 91 91 |  | 
| 92 | 
            +
              describe '#discussions' do
         | 
| 93 | 
            +
                it "should return all the discussions surrounding a folder" do
         | 
| 94 | 
            +
                  item = JSON.parse('{    "id": "0000001", "total_count": 1,    "entries": [ {            "type": "discussion",            "id": "409042867",            "sequence_id": "1",            "etag": "1",            "name": "A choice file"        }   ],    "offset": "0",    "limit": "1"}')
         | 
| 95 | 
            +
                  RubyBox::Session.any_instance.stub(:request).and_return(item)
         | 
| 96 | 
            +
                  session = RubyBox::Session.new
         | 
| 97 | 
            +
                  item = RubyBox::Client.new(session).root_folder.discussions.first
         | 
| 98 | 
            +
                  item.kind_of?(RubyBox::Discussion).should == true
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
              end
         | 
| 101 | 
            +
             | 
| 92 102 | 
             
              describe '#folders' do
         | 
| 93 103 | 
             
                it "should only return items of type folder" do
         | 
| 94 104 | 
             
                  RubyBox::Session.any_instance.stub(:request) { @items.pop }
         |