nsisam 0.2.8 → 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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.8
1
+ 0.3.0
data/lib/nsisam/client.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "json"
2
2
  require "net/http"
3
+ require "digest/sha1"
3
4
  require File.dirname(__FILE__) + '/errors'
4
5
 
5
6
  module NSISam
@@ -56,10 +57,12 @@ module NSISam
56
57
  # @raise [NSISam::Errors::Client::KeyNotFoundError] When the key doesn't exists
57
58
  # @example
58
59
  # nsisam.get("some key")
59
- def get(key)
60
+ def get(key, expected_checksum=nil)
60
61
  request_data = {:key => key}.to_json
61
62
  request = prepare_request :GET, request_data
62
- execute_request(request)
63
+ response = execute_request(request)
64
+ verify_checksum(response["data"], expected_checksum) unless expected_checksum.nil?
65
+ response
63
66
  end
64
67
 
65
68
  # Update data stored at a given SAM key
@@ -95,5 +98,11 @@ module NSISam
95
98
  raise NSISam::Errors::Client::KeyNotFoundError if response.code == "404"
96
99
  JSON.parse(response.body)
97
100
  end
101
+
102
+ def verify_checksum(data, expected_checksum)
103
+ sha1_checksum = Digest::SHA1.hexdigest(data)
104
+ raise NSISam::Errors::Client::ChecksumMismatchError unless sha1_checksum == expected_checksum
105
+ end
106
+
98
107
  end
99
108
  end
data/lib/nsisam/errors.rb CHANGED
@@ -3,6 +3,9 @@ module NSISam
3
3
  module Client
4
4
  class KeyNotFoundError < RuntimeError
5
5
  end
6
+
7
+ class ChecksumMismatchError < RuntimeError
8
+ end
6
9
  end
7
10
  end
8
11
  end
data/nsisam.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "nsisam"
8
- s.version = "0.2.8"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Douglas Camata"]
12
- s.date = "2012-03-01"
12
+ s.date = "2012-03-13"
13
13
  s.description = "A simple gem to access a SAM node. For more info about SAM\n visit www.github.com/nsi-iff/sam_buildout."
14
14
  s.email = "d.camata@gmail.com"
15
15
  s.extra_rdoc_files = [
data/spec/nsisam_spec.rb CHANGED
@@ -40,6 +40,19 @@ describe NSISam do
40
40
  response["data"].should == "data for key retrieve this"
41
41
  end
42
42
 
43
+ it "can retrieve a stored value and automaticly verify its checksum" do
44
+ @nsisam.should_receive(:verify_checksum).with('data for key retrieve this', 0).and_return(0)
45
+ @nsisam.store("retrieve this")["key"].should == 'value retrieve this stored'
46
+ response = @nsisam.get('retrieve this', 0)
47
+ response["data"].should == "data for key retrieve this"
48
+ end
49
+
50
+ it "raises errors when expected checksum doesn't match the calculated one" do
51
+ wrong_checksum = 333
52
+ @nsisam.store("retrieve this")["key"].should == 'value retrieve this stored'
53
+ expect { @nsisam.get('retrieve this', 333) }.to raise_error(NSISam::Errors::Client::ChecksumMismatchError)
54
+ end
55
+
43
56
  it "raises error when key not found" do
44
57
  expect { @nsisam.get("i dont exist") }.to raise_error(NSISam::Errors::Client::KeyNotFoundError)
45
58
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nsisam
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-01 00:00:00.000000000 Z
12
+ date: 2012-03-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &13220200 !ruby/object:Gem::Requirement
16
+ requirement: &12790140 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *13220200
24
+ version_requirements: *12790140
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sinatra
27
- requirement: &13775780 !ruby/object:Gem::Requirement
27
+ requirement: &12789460 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *13775780
35
+ version_requirements: *12789460
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &13775140 !ruby/object:Gem::Requirement
38
+ requirement: &12788920 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *13775140
46
+ version_requirements: *12788920
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: yard
49
- requirement: &13774500 !ruby/object:Gem::Requirement
49
+ requirement: &12788200 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *13774500
57
+ version_requirements: *12788200
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &13773540 !ruby/object:Gem::Requirement
60
+ requirement: &12803900 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 2.8.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *13773540
68
+ version_requirements: *12803900
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
- requirement: &13772660 !ruby/object:Gem::Requirement
71
+ requirement: &12803220 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.0.0
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *13772660
79
+ version_requirements: *12803220
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: jeweler
82
- requirement: &13771920 !ruby/object:Gem::Requirement
82
+ requirement: &12802460 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: 1.8.3
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *13771920
90
+ version_requirements: *12802460
91
91
  description: ! "A simple gem to access a SAM node. For more info about SAM\n visit
92
92
  www.github.com/nsi-iff/sam_buildout."
93
93
  email: d.camata@gmail.com
@@ -126,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
126
126
  version: '0'
127
127
  segments:
128
128
  - 0
129
- hash: 934113303097294613
129
+ hash: 2289717822035617714
130
130
  required_rubygems_version: !ruby/object:Gem::Requirement
131
131
  none: false
132
132
  requirements: