snapshot-ruby 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,8 @@
1
+ require 'base64'
2
+ require 'openssl'
3
+ require 'restclient'
1
4
  require 'uri'
5
+ require 'time'
2
6
 
3
7
  module Snapshot
4
8
  class Connection
@@ -22,19 +26,38 @@ module Snapshot
22
26
  end
23
27
  end
24
28
 
25
- # Returns an authenticated RestClient::Resource
26
- #
27
- def resource
28
- @resource ||= RestClient::Resource.new(self.url, {
29
- :user => self.access_key,
30
- :password => self.secret_key
31
- })
29
+ def delete(path)
30
+ request(:delete, path)
32
31
  end
33
32
 
33
+ def get(path)
34
+ request(:get, path)
35
+ end
36
+
37
+ def post(path, payload={})
38
+ request(:post, path, payload)
39
+ end
40
+
34
41
  # Returns a URL to Snapshot for the connection
35
42
  #
36
43
  def url
37
- "http://#{domain}/"
44
+ "http://#{domain}"
45
+ end
46
+
47
+ private
48
+
49
+ def request(method, path, payload = nil)
50
+ date = Time.now.httpdate
51
+
52
+ sha1 = OpenSSL::Digest::Digest.new('sha1')
53
+ message = "#{method.to_s.upcase}\n#{path}\n#{date}"
54
+ digest = Base64.encode64(OpenSSL::HMAC.digest(sha1, secret_key, message))
55
+
56
+ headers = { authorization: "HMAC #{access_key}:#{digest}", date: date }
57
+
58
+ params = { method: method, url: "#{url}#{path}", headers: headers }
59
+ params[:payload] = payload unless payload.nil?
60
+ RestClient::Request.execute(params)
38
61
  end
39
62
  end
40
63
  end
@@ -1,5 +1,4 @@
1
1
  require 'json'
2
- require 'rest_client'
3
2
 
4
3
  module Snapshot
5
4
  class Image
@@ -27,7 +26,7 @@ module Snapshot
27
26
  #
28
27
  def create(file)
29
28
  file = File.open(file) if file.is_a?(String)
30
- result = Snapshot.connection.resource.post(:file => file)
29
+ result = Snapshot.connection.post('/', file: file)
31
30
  info = JSON.parse(result)['file']
32
31
 
33
32
  self.new.tap do |img|
@@ -65,7 +64,7 @@ module Snapshot
65
64
  # Snapshot::Image.find('a45af9b9e6ebab9c685faef4e72e7a14f3e24e1a')
66
65
  #
67
66
  def find(id)
68
- result = Snapshot.connection.resource["#{id}"].get
67
+ result = Snapshot.connection.get("/#{id}")
69
68
  info = JSON.parse(result)
70
69
 
71
70
  self.new.tap do |img|
@@ -90,7 +89,7 @@ module Snapshot
90
89
  # img.destroy
91
90
  #
92
91
  def destroy
93
- Snapshot.connection.resource["#{id}"].delete
92
+ Snapshot.connection.delete("/#{id}")
94
93
  true
95
94
  rescue RestClient::ResourceNotFound
96
95
  nil
@@ -0,0 +1,19 @@
1
+ module Snapshot
2
+ class Token
3
+ attr_accessor :expires_in, :token
4
+
5
+ def self.create
6
+ result = Snapshot.connection.post('/token')
7
+ info = JSON.parse(result)
8
+
9
+ self.new.tap do |t|
10
+ t.expires_in = info['expires_in']
11
+ t.token = info['token']
12
+ end
13
+ end
14
+
15
+ def to_s
16
+ token
17
+ end
18
+ end
19
+ end
data/lib/snapshot/url.rb CHANGED
@@ -10,7 +10,7 @@ module Snapshot
10
10
  end
11
11
 
12
12
  def method_missing(processor, *options)
13
- @options << [processor.to_s, options]
13
+ @options << [":#{processor}", options]
14
14
  end
15
15
 
16
16
  def to_s
@@ -1,3 +1,3 @@
1
1
  module Snapshot
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
data/lib/snapshot.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'snapshot/connection'
2
2
  require 'snapshot/image'
3
+ require 'snapshot/token'
3
4
  require 'snapshot/url'
4
5
  require 'snapshot/version'
5
6
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snapshot-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,52 +9,72 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-05 00:00:00.000000000 Z
12
+ date: 2013-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &70118439875340 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - =
19
+ - - '='
20
20
  - !ruby/object:Gem::Version
21
21
  version: 1.6.5
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70118439875340
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.6.5
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rest-client
27
- requirement: &70118439874500 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
- - - =
35
+ - - '='
31
36
  - !ruby/object:Gem::Version
32
37
  version: 1.6.7
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70118439874500
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.6.7
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: fakeweb
38
- requirement: &70118439873700 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
- - - =
51
+ - - '='
42
52
  - !ruby/object:Gem::Version
43
53
  version: '1.3'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70118439873700
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rspec
49
- requirement: &70118439866760 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
- - - =
67
+ - - '='
53
68
  - !ruby/object:Gem::Version
54
69
  version: 2.4.0
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70118439866760
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: 2.4.0
58
78
  description: Snap is a very simple image storage and processing services for developers.
59
79
  email:
60
80
  - jeremy@jeremyboles.com
@@ -64,6 +84,7 @@ extra_rdoc_files: []
64
84
  files:
65
85
  - lib/snapshot/connection.rb
66
86
  - lib/snapshot/image.rb
87
+ - lib/snapshot/token.rb
67
88
  - lib/snapshot/url.rb
68
89
  - lib/snapshot/version.rb
69
90
  - lib/snapshot.rb
@@ -88,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
109
  version: 1.3.7
89
110
  requirements: []
90
111
  rubyforge_project: snapshot-ruby
91
- rubygems_version: 1.8.11
112
+ rubygems_version: 1.8.24
92
113
  signing_key:
93
114
  specification_version: 3
94
115
  summary: Ruby wrapper for storing and manipulating images via Snapshot.