uploadcare 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in uploadcare.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # Uploadcare Ruby Gem
2
+
3
+ Simple ruby gem to interact with the Uploadcare API
4
+
5
+ ## Example Usage
6
+
7
+ require 'uploadcare'
8
+ pubkey = "d1531fba1b7fd176feaec8d1e7d86650ac549b9644e9279197a8c901243509dc"
9
+ pvtkey = "2f769cf086ece700f69fc58fb61e64a7708fee777068dc3f75798ae6166891f1"
10
+ file_id = "b6nn9f2d-1aj2-6q87-ofk0-265d8nki0diu"
11
+ ucare = Uploadcare.new(pubkey, pvtkey)
12
+ file = ucare.file(file_id)
13
+ file.info # Returns the files info hash
14
+ file.keep # Returns the updated info hash
15
+
16
+ ## Example Info Hashes
17
+
18
+ ### Preclaim Hash:
19
+
20
+ {
21
+ "upload_date"=>"2011-10-25 02:05:50",
22
+ "last_keep_claim"=>nil,
23
+ "on_s3"=>true,
24
+ "url"=>"http://api.uploadcare.com/api/files/b6nn9f2d-1aj2-6q87-ofk0-265d8nki0diu/",
25
+ "file_id"=>"b6nn9f2d-1aj2-6q87-ofk0-265d8nki0diu",
26
+ "original_filename"=>"test-image.png",
27
+ "original_file_url"=>nil
28
+ }
29
+
30
+ ### Postclaim Hash:
31
+
32
+ {
33
+ "upload_date"=>"2011-10-25 02:05:50",
34
+ "last_keep_claim"=>"2011-10-25 02:19:06",
35
+ "on_s3"=>true,
36
+ "url"=>"http://api.uploadcare.com/api/files/b6nn9f2d-1aj2-6q87-ofk0-265d8nki0diu/",
37
+ "file_id"=>"b6nn9f2d-1aj2-6q87-ofk0-265d8nki0diu",
38
+ "original_filename"=>"test-image.png",
39
+ "original_file_url"=>"http://s3.amazonaws.com/uploadcare/b6nn9f2d-1aj2-6q87-ofk0-265d8nki0diu/testimage.png"
40
+ }
41
+
42
+ ## Notes
43
+ All data in the examples (pubkey, pvtkey, file_id, example hashses) are intended to show usage and format. These values are randomly generated strings for this example and are therefore not valid. You must use your own public and private key, as well as a valid file id.
44
+ Since the API is still very limited, thats about the extent of what you can do. Once delete functionallity is added to the API I will update the gem
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/lib/uploadcare.rb ADDED
@@ -0,0 +1,9 @@
1
+ module Uploadcare
2
+ def self.new(public_key, private_key)
3
+ Uploadcare.new(public_key, private_key)
4
+ end
5
+ end
6
+
7
+ require 'uploadcare/uploadcare'
8
+ require 'uploadcare/version'
9
+ require 'uploadcare/file'
@@ -0,0 +1,36 @@
1
+ module Uploadcare
2
+ class File
3
+ def initialize(ucare, file_id)
4
+ @ucare = ucare
5
+ @file_id = file_id
6
+ @file_info = nil
7
+ @file_url = nil
8
+ end
9
+
10
+ def api_uri
11
+ "/files/#{@file_id}/"
12
+ end
13
+
14
+ def update_info
15
+ @file_info = @ucare.make_request('GET', api_uri).parsed_response
16
+ end
17
+
18
+ def info
19
+ update_info unless @file_info
20
+ @file_info
21
+ end
22
+
23
+ def url
24
+ @file_url = info['original_file_url'] unless @file_url
25
+ @file_url
26
+ end
27
+
28
+ def url=(file_url)
29
+ @file_url = file_url
30
+ end
31
+
32
+ def keep
33
+ @file_info = @ucare.make_request('POST', api_uri, {'keep' => 1}).parsed_response
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,39 @@
1
+ require 'httparty'
2
+ require 'openssl'
3
+ require 'json'
4
+
5
+ module Uploadcare
6
+ class Uploadcare
7
+ include HTTParty
8
+ def initialize(public_key, private_key, timeout=5, api_base='http://api.uploadcare.com')
9
+ @public_key = public_key
10
+ @private_key = private_key
11
+ @timeout = timeout
12
+ self.class.base_uri api_base
13
+ end
14
+
15
+ def make_request(verb, uri, data={})
16
+ content = data.to_json
17
+ content = '' if data.empty?
18
+ content_type = 'application/json'
19
+ content_hash = Digest::MD5.hexdigest(content)
20
+ date = Time.now.gmtime.rfc2822.to_s
21
+ sign_string = [verb, content_hash, content_type, date, uri].join("\n")
22
+ sign = OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new('sha1'), @private_key, sign_string)
23
+ headers = {'Authentication' => "UploadCare #{@public_key}:#{sign}", 'Date' => date, 'Content-Type' => content_type}
24
+ self.class.send(verb.downcase, uri, :headers => headers, :body => content)
25
+ end
26
+
27
+ def uuid_regex
28
+ /[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}/
29
+ end
30
+
31
+ def file(file_serialized)
32
+ raise "could not find uuid" unless file_serialized =~ uuid_regex
33
+ file_id = file_serialized.match(uuid_regex)[0]
34
+ file = File.new(self, file_id)
35
+ file.url = file_serialized if file_serialized.start_with?('http')
36
+ file
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,3 @@
1
+ module Uploadcare
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "uploadcare/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "uploadcare"
7
+ s.version = Uploadcare::VERSION
8
+ s.authors = ["Geoffrey Byers"]
9
+ s.email = ["geoff@seaandco.com"]
10
+ s.homepage = "https://github.com/gdcbyers/uploadcare"
11
+ s.summary = "Uploadcare.com API Wrapper"
12
+ s.description = "Allow easy access to the Uploadcare.com API"
13
+
14
+ s.rubyforge_project = "uploadcare"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency "rake"
22
+ s.add_runtime_dependency "httparty"
23
+ s.add_runtime_dependency "json"
24
+ end
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: uploadcare
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Geoffrey Byers
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-10-25 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &70254936882000 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70254936882000
25
+ - !ruby/object:Gem::Dependency
26
+ name: httparty
27
+ requirement: &70254936881000 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70254936881000
36
+ - !ruby/object:Gem::Dependency
37
+ name: json
38
+ requirement: &70254936879840 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70254936879840
47
+ description: Allow easy access to the Uploadcare.com API
48
+ email:
49
+ - geoff@seaandco.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - .gitignore
55
+ - Gemfile
56
+ - README.md
57
+ - Rakefile
58
+ - lib/uploadcare.rb
59
+ - lib/uploadcare/file.rb
60
+ - lib/uploadcare/uploadcare.rb
61
+ - lib/uploadcare/version.rb
62
+ - uploadcare.gemspec
63
+ homepage: https://github.com/gdcbyers/uploadcare
64
+ licenses: []
65
+ post_install_message:
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ! '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ segments:
76
+ - 0
77
+ hash: -4309817857322054467
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ segments:
85
+ - 0
86
+ hash: -4309817857322054467
87
+ requirements: []
88
+ rubyforge_project: uploadcare
89
+ rubygems_version: 1.8.6
90
+ signing_key:
91
+ specification_version: 3
92
+ summary: Uploadcare.com API Wrapper
93
+ test_files: []