snapshot-ruby 0.2.1 → 0.3.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.
@@ -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.