one_drive 0.0.1 → 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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +39 -3
- data/lib/one_drive.rb +141 -4
- data/lib/one_drive/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: bfde019139370bb07e616302ea584b75d42aa336
         | 
| 4 | 
            +
              data.tar.gz: d265a39c310a3d5849ec2a9b5ae5571f4953f461
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: b4d2c291f46763c5b6420886f3898c969143dd3469c94ec15692b238082facbd979000078de1ac994c0ffd434407fda89e1b0279f1efa7aa5781c49b496dc1c3
         | 
| 7 | 
            +
              data.tar.gz: ec1d0e9ef5d319345a158235814ec9d3972e0d1b90b13baa30ba867538c9c36769bba76f28218a5092ec41e15a13865699d716a78d227caab9fd3613e5bbf6d9
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,8 +1,9 @@ | |
| 1 1 | 
             
            # OneDrive
         | 
| 2 2 |  | 
| 3 | 
            -
            Welcome to your new gem | 
| 3 | 
            +
            Welcome to your new gem one_drive!
         | 
| 4 | 
            +
            You can use this gem to list your Microsoft OneDrive drives and read and write them.
         | 
| 5 | 
            +
            To experiment with that code, run `bin/console` for an interactive prompt.
         | 
| 4 6 |  | 
| 5 | 
            -
            TODO: Delete this and the text above, and describe your gem
         | 
| 6 7 |  | 
| 7 8 | 
             
            ## Installation
         | 
| 8 9 |  | 
| @@ -22,7 +23,42 @@ Or install it yourself as: | |
| 22 23 |  | 
| 23 24 | 
             
            ## Usage
         | 
| 24 25 |  | 
| 25 | 
            -
             | 
| 26 | 
            +
            1. Initialize
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                ` @one_drive = OneDrive::V1.new(client_id, redirect_uri, scope) `
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            2. Generate code url to get refresh_token
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                ` @one_drive.code_url `
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            Or Directly generate token url
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                ` @one_drive.token_url `
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            Visit the url to generate the token
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            3. Set your token which you get on visiting the above url
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                ` @one_drive.set_token token `
         | 
| 43 | 
            +
            Note: only token is required you can leave expires_in and token_type as blank for expires_in=3600 and token_type='bearer'
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            4. List out all your drives
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                ` @drives = @one_drive.get_drives `
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            After calling the last function you can fetch last drive list which you fetched by calling
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                ` @one_drive.drives `
         | 
| 52 | 
            +
            5. Search
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            6. Download Item
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            7. Recent Drive
         | 
| 57 | 
            +
             | 
| 58 | 
            +
            8. Special Folder
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            9. My Drive
         | 
| 61 | 
            +
             | 
| 26 62 |  | 
| 27 63 | 
             
            ## Development
         | 
| 28 64 |  | 
    
        data/lib/one_drive.rb
    CHANGED
    
    | @@ -1,13 +1,26 @@ | |
| 1 1 | 
             
            require "one_drive/version"
         | 
| 2 2 | 
             
            require "httparty"
         | 
| 3 3 | 
             
            module OneDrive
         | 
| 4 | 
            +
              class OneDriveExceptions < StandardError
         | 
| 5 | 
            +
                attr_reader :detail
         | 
| 6 | 
            +
                def initialize(message="OneDriveExceptions", detail="")
         | 
| 7 | 
            +
                  @detail = detail
         | 
| 8 | 
            +
                  super(message)
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 4 12 | 
             
              class V1
         | 
| 5 | 
            -
                attr_accessor :client_id,:scope,:redirect_uri,:code,:token,:drives,:items,:current_drive | 
| 13 | 
            +
                attr_accessor :client_id,:scope,:redirect_uri,:code,:token,:drives,:items,:current_drive,
         | 
| 14 | 
            +
                :current_item,:expires_in,:token_type,:my_drive,:recent_drive,:special_drive,:special_items,
         | 
| 15 | 
            +
                :item
         | 
| 6 16 | 
             
                def initialize(client_id,redirect_uri,scope='files.read')
         | 
| 7 17 | 
             
                  @client_id = client_id
         | 
| 8 18 | 
             
                  @scope = scope
         | 
| 9 19 | 
             
                  @redirect_uri = redirect_uri
         | 
| 10 20 | 
             
                end
         | 
| 21 | 
            +
                def base_api_url
         | 
| 22 | 
            +
                  "https://graph.microsoft.com/v1.0"
         | 
| 23 | 
            +
                end
         | 
| 11 24 | 
             
                def token_url
         | 
| 12 25 | 
             
                  # OAuth URI token
         | 
| 13 26 | 
             
                  # GET https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id={client_id}&scope={scope}
         | 
| @@ -27,6 +40,47 @@ module OneDrive | |
| 27 40 | 
             
                  # client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}
         | 
| 28 41 | 
             
                  # &refresh_token={refresh_token}&grant_type=refresh_token
         | 
| 29 42 | 
             
                end
         | 
| 43 | 
            +
                # Get a drive by ID
         | 
| 44 | 
            +
                def get_drive drive_id
         | 
| 45 | 
            +
                  url = base_api_url + "/drives/#{drive_id}"
         | 
| 46 | 
            +
                  @drives = JSON.parse(HTTParty.get(url,headers: set_headers).body)
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
                # Get a user's OneDrive
         | 
| 49 | 
            +
                def get_users_drive id_or_user_principal_name
         | 
| 50 | 
            +
                  url = base_api_url + "/users/#{id_or_user_principal_name}/drive"
         | 
| 51 | 
            +
                  @drives = JSON.parse(HTTParty.get(url,headers: set_headers).body)
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
                # Get a current user's OneDrive
         | 
| 54 | 
            +
                def get_my_drive
         | 
| 55 | 
            +
                  url = base_api_url + "/me/drive"
         | 
| 56 | 
            +
                  @my_drive = JSON.parse(HTTParty.get(url,headers: set_headers).body)
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
                # Get the document library for a site
         | 
| 59 | 
            +
                def get_library_for_site site_id
         | 
| 60 | 
            +
                  url = base_api_url + "/sites/#{site_id}/drive"
         | 
| 61 | 
            +
                  @drives = JSON.parse(HTTParty.get(url,headers: set_headers).body)
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
                # Get a special folder by name
         | 
| 64 | 
            +
                def get_special_folder_by_name name
         | 
| 65 | 
            +
                  url = base_api_url + "/me/drive/special/#{name}"
         | 
| 66 | 
            +
                  @special_drive = JSON.parse(HTTParty.get(url,headers: set_headers).body)
         | 
| 67 | 
            +
                end
         | 
| 68 | 
            +
                # Get children of a special folder
         | 
| 69 | 
            +
                def get_children_of_special_folder name
         | 
| 70 | 
            +
                  url = base_api_url + "/me/drive/special/#{name}/children"
         | 
| 71 | 
            +
                  @special_items = JSON.parse(HTTParty.get(url,headers: set_headers).body)
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
                # List items shared with the signed-in user
         | 
| 74 | 
            +
                def items_shared_with_me
         | 
| 75 | 
            +
                  url = base_api_url + "/me/drive/sharedWithMe"
         | 
| 76 | 
            +
                  @shared_items = JSON.parse(HTTParty.get(url,headers: set_headers).body)
         | 
| 77 | 
            +
                end
         | 
| 78 | 
            +
                # GET /drives/{remoteItem-driveId}/items/{remoteItem-id}
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                def recent
         | 
| 81 | 
            +
                  url = base_api_url + '/me/drive/recent'
         | 
| 82 | 
            +
                  @recent_drive = JSON.parse(HTTParty.get(url,headers: set_headers).body)
         | 
| 83 | 
            +
                end
         | 
| 30 84 | 
             
                def get_drives type = nil,id=nil
         | 
| 31 85 | 
             
                  # GET /me/drives
         | 
| 32 86 | 
             
                  # GET /users/{userId}/drives
         | 
| @@ -54,7 +108,8 @@ module OneDrive | |
| 54 108 | 
             
                def set_code code
         | 
| 55 109 | 
             
                  @code = code
         | 
| 56 110 | 
             
                end
         | 
| 57 | 
            -
                def get_item
         | 
| 111 | 
            +
                def get_item options={}
         | 
| 112 | 
            +
                  url = "https://graph.microsoft.com/v1.0"
         | 
| 58 113 | 
             
                  # Get item
         | 
| 59 114 | 
             
                  # GET /drives/{drive-id}/items/{item-id}
         | 
| 60 115 | 
             
                  # GET /drives/{drive-id}/root:/{item-path}
         | 
| @@ -66,8 +121,46 @@ module OneDrive | |
| 66 121 | 
             
                  # GET /sites/{siteId}/drive/root:/{item-path}
         | 
| 67 122 | 
             
                  # GET /users/{userId}/drive/items/{itemId}
         | 
| 68 123 | 
             
                  # GET /users/{userId}/drive/root:/{item-path}
         | 
| 124 | 
            +
                  if options.include? :drive_id
         | 
| 125 | 
            +
                    url = "/drives/#{options[:drive_id]}/"
         | 
| 126 | 
            +
                  elsif options.include? :group_id
         | 
| 127 | 
            +
                    url = "/groups/#{options[:group_id]}/"
         | 
| 128 | 
            +
                  elsif options.include? :site_id
         | 
| 129 | 
            +
                    url = "/sites/#{options[:site_id]}/"
         | 
| 130 | 
            +
                  elsif options.include? :user_id
         | 
| 131 | 
            +
                    url = "/users/#{options[:user_id]}/"
         | 
| 132 | 
            +
                  else
         | 
| 133 | 
            +
                    url = "/me/drive/"
         | 
| 134 | 
            +
                  end
         | 
| 135 | 
            +
                  if options.include? :item_id
         | 
| 136 | 
            +
                    url = url + "items/#{options[:item_id]}"
         | 
| 137 | 
            +
                  elsif options.include? :item_path
         | 
| 138 | 
            +
                    url = url + "root:/#{options[:item_path]}"
         | 
| 139 | 
            +
                  else
         | 
| 140 | 
            +
                    return "OneDrive URL is not valid"
         | 
| 141 | 
            +
                  end
         | 
| 142 | 
            +
                  @items = JSON.parse(HTTParty.get(url,headers: set_headers).body)
         | 
| 143 | 
            +
                end
         | 
| 144 | 
            +
                def search options ={}
         | 
| 145 | 
            +
                  if options.include? :drive_id
         | 
| 146 | 
            +
                    # GET /drives/{drive-id}/root/search(q='{search-text}')
         | 
| 147 | 
            +
                    url = base_api_url + "/drives/#{options[:drive_id]}/root/search(q='#{options[:search_text]}')"
         | 
| 148 | 
            +
                  elsif options.include? :group_id
         | 
| 149 | 
            +
                    # GET /groups/{group-id}/drive/root/search(q='{search-text}')
         | 
| 150 | 
            +
                    url = base_api_url + "/groups/#{options[:group_id]}/drive/root/search(q='#{options[:search_text]}')"
         | 
| 151 | 
            +
                  elsif options.include? :site_id
         | 
| 152 | 
            +
                    # GET /sites/{site-id}/drive/root/search(q='{search-text}')
         | 
| 153 | 
            +
                    url = base_api_url + "/sites/#{options[:site_id]}/drive/root/search(q='#{options[:search_text]}')"
         | 
| 154 | 
            +
                  elsif options.include? :user_id
         | 
| 155 | 
            +
                    # GET /users/{user-id}/drive/root/search(q='{search-text}')
         | 
| 156 | 
            +
                    url = base_api_url + "/users/#{options[:user_id]}/drive/root/search(q='#{options[:search_text]}')"
         | 
| 157 | 
            +
                  else
         | 
| 158 | 
            +
                    # GET /me/drive/root/search(q='{search-text}')
         | 
| 159 | 
            +
                    url = base_api_url + "/me/drive/root/search(q='#{options[:search_text]}')"
         | 
| 160 | 
            +
                  end
         | 
| 161 | 
            +
                  @items = JSON.parse(HTTParty.get(url,headers: set_headers).body)
         | 
| 69 162 | 
             
                end
         | 
| 70 | 
            -
                def download
         | 
| 163 | 
            +
                def download options ={}
         | 
| 71 164 | 
             
                  # Download
         | 
| 72 165 | 
             
                  # GET /drives/{drive-id}/items/{item-id}/content
         | 
| 73 166 | 
             
                  # GET /groups/{group-id}/drive/items/{item-id}/content
         | 
| @@ -77,17 +170,61 @@ module OneDrive | |
| 77 170 | 
             
                  # GET /users/{userId}/drive/items/{item-id}/content
         | 
| 78 171 | 
             
                  # GET /drive/items/{item-id}/content?format={format}
         | 
| 79 172 | 
             
                  # GET /drive/root:/{path and filename}:/content?format={format}
         | 
| 173 | 
            +
                  url = "https://graph.microsoft.com/v1.0"
         | 
| 174 | 
            +
                  if options.include? :drive_id
         | 
| 175 | 
            +
                    url = url + "/drives/#{options[:drive_id]}/"
         | 
| 176 | 
            +
                  elsif options.include? :group_id
         | 
| 177 | 
            +
                    url = url + "/groups/#{options[:group_id]}/drive/"
         | 
| 178 | 
            +
                  elsif options.include? :site_id
         | 
| 179 | 
            +
                    url = url + "/sites/#{options[:site_id]}/drive/"
         | 
| 180 | 
            +
                  elsif options.include? :user_id
         | 
| 181 | 
            +
                    url = url + "/users/#{options[:user_id]}/drive/"
         | 
| 182 | 
            +
                  else
         | 
| 183 | 
            +
                    url = url + "/me/drive/"
         | 
| 184 | 
            +
                  end
         | 
| 185 | 
            +
                  if options.include? :item_id
         | 
| 186 | 
            +
                    url = url + "items/#{options[:item_id]}/content"
         | 
| 187 | 
            +
                  elsif options.include? :item_path
         | 
| 188 | 
            +
                    url = url + "root:/#{options[:item_path]}:/content"
         | 
| 189 | 
            +
                  else
         | 
| 190 | 
            +
                    return "OneDrive URL : Item id is not valid"
         | 
| 191 | 
            +
                  end
         | 
| 192 | 
            +
                  if options.include? :format
         | 
| 193 | 
            +
                    url = url + "?format=#{options[:format]}"
         | 
| 194 | 
            +
                  end
         | 
| 195 | 
            +
                  @item = (HTTParty.get(url,headers: set_headers).body)
         | 
| 80 196 | 
             
                end
         | 
| 81 | 
            -
                def get_list
         | 
| 197 | 
            +
                def get_list options={}
         | 
| 198 | 
            +
                  url = "https://graph.microsoft.com/v1.0"
         | 
| 199 | 
            +
                  p '------------------------'
         | 
| 82 200 | 
             
                  # Find Children
         | 
| 83 201 | 
             
                  # GET /drives/{drive-id}/items/{item-id}/children
         | 
| 84 202 | 
             
                  # GET /groups/{group-id}/drive/items/{item-id}/children
         | 
| 85 203 | 
             
                  # GET /me/drive/items/{item-id}/children
         | 
| 86 204 | 
             
                  # GET /sites/{site-id}/drive/items/{item-id}/children
         | 
| 87 205 | 
             
                  # GET /users/{user-id}/drive/items/{item-id}/children
         | 
| 206 | 
            +
                  if options.include? :drive_id
         | 
| 207 | 
            +
                    url = url + "/drives/#{options[:drive_id]}/"
         | 
| 208 | 
            +
                  elsif options.include? :group_id
         | 
| 209 | 
            +
                    url = url + "/groups/#{options[:group_id]}/"
         | 
| 210 | 
            +
                  elsif options.include? :site_id
         | 
| 211 | 
            +
                    url = url + "/sites/#{options[:site_id]}/"
         | 
| 212 | 
            +
                  elsif options.include? :user_id
         | 
| 213 | 
            +
                    url = url + "/users/#{options[:user_id]}/"
         | 
| 214 | 
            +
                  else
         | 
| 215 | 
            +
                    url = url + "/me/drive/"
         | 
| 216 | 
            +
                  end
         | 
| 217 | 
            +
                  if options.include? :item_id
         | 
| 218 | 
            +
                    url = url + "items/#{options[:item_id]}/children"
         | 
| 219 | 
            +
                  else
         | 
| 220 | 
            +
                    return "OneDrive URL : Item id is not valid"
         | 
| 221 | 
            +
                  end
         | 
| 222 | 
            +
                  p url
         | 
| 223 | 
            +
                  @items = JSON.parse(HTTParty.get(url,headers: set_headers).body)
         | 
| 88 224 | 
             
                end
         | 
| 89 225 | 
             
                def set_headers
         | 
| 90 226 | 
             
                  {"Content-Type"=> 'application/json',"Authorization"=>"bearer #{@token}"}
         | 
| 91 227 | 
             
                end
         | 
| 228 | 
            +
             | 
| 92 229 | 
             
              end
         | 
| 93 230 | 
             
            end
         | 
    
        data/lib/one_drive/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: one_drive
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0 | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Mohit
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2018-06- | 
| 11 | 
            +
            date: 2018-06-19 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         |