abbey 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "abbey"
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Pavel Kalvoda"]
12
- s.date = "2011-12-03"
12
+ s.date = "2011-12-08"
13
13
  s.description = "Primitive JSON data store. Key-value structure with namespaces."
14
14
  s.email = "me@pavelkalvoda.com"
15
15
  s.extra_rdoc_files = [
@@ -48,12 +48,25 @@ module Abbey
48
48
  # @param namespace [String, Fixnum, Symbol or any other object whose #to_s method returns string]
49
49
  # @param key [String, Fixnum, Symbol or any other object whose #to_s method returns string]
50
50
  # @return [Object]
51
+ # @raise [ItemNotFoundError]
51
52
  def get(namespace, key)
52
53
  path = make_path(namespace, key)
53
54
  raise ItemNotFoundError, "Item '#{make_key(namespace,key)}' not found" unless exists?(namespace, key)
54
55
  settings.logger.info("Read #{make_key(namespace, key)}")
55
56
  MultiJson.decode(File.read(path))
56
57
  end
58
+
59
+ # Fetch an item or return nil
60
+ # @param namespace [String, Fixnum, Symbol or any other object whose #to_s method returns string]
61
+ # @param key [String, Fixnum, Symbol or any other object whose #to_s method returns string]
62
+ # @return [Object]
63
+ def try_get(namespace, key)
64
+ begin
65
+ return get(namespace, key)
66
+ rescue ItemNotFoundError
67
+ return nil
68
+ end
69
+ end
57
70
 
58
71
  # Does the item exist?
59
72
  # @param namespace [String, Fixnum, Symbol or any other object whose #to_s method returns string]
@@ -70,6 +83,7 @@ module Abbey
70
83
  # @param key [String, Fixnum, Symbol or any other object whose #to_s method returns string]
71
84
  # @param data [Object]
72
85
  # @return void
86
+ # @raise [ItemAlreadyPresentError]
73
87
  def save(namespace, key, data)
74
88
  raise ItemAlreadyPresentError, "Item '#{make_key(namespace,key)}' already exists" if exists?(namespace, key)
75
89
  unsafe_save(namespace, key, data)
@@ -80,6 +94,7 @@ module Abbey
80
94
  # @param key [String, Fixnum, Symbol or any other object whose #to_s method returns string]
81
95
  # @param data [Object]
82
96
  # @return void
97
+ # @raise [ItemNotFoundError]
83
98
  def update(namespace, key, data)
84
99
  raise ItemNotFoundError, "Item '#{make_key(namespace,key)}' not found" unless exists?(namespace, key)
85
100
  unsafe_save(namespace, key, data)
@@ -89,6 +104,7 @@ module Abbey
89
104
  # @param namespace [String, Fixnum, Symbol or any other object whose #to_s method returns string]
90
105
  # @param key [String, Fixnum, Symbol or any other object whose #to_s method returns string]
91
106
  # @return void
107
+ # @raise [ItemNotFoundError]
92
108
  def delete(namespace, key)
93
109
  path = make_path(namespace, key)
94
110
  raise ItemNotFoundError, "Item '#{make_key(namespace,key)}' not found" unless exists?(namespace, key)
@@ -2,7 +2,7 @@ module Abbey
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 1
5
- PATCH = 2
5
+ PATCH = 3
6
6
  BUILD = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
@@ -71,6 +71,13 @@ class AbbeyTest < Test::Unit::TestCase
71
71
  assert_equal({:key => {"a" => 1}, :key2 => %w{a b c}}, @abbey.get_all(:ns1))
72
72
  end
73
73
 
74
+ def test_optional_get
75
+ @abbey.set_up!
76
+ @abbey.save(:ns1, :key, [1,2,3])
77
+ assert_equal nil, @abbey.try_get(:whatever, :nonexistent)
78
+ assert_equal [1,2,3] , @abbey.try_get(:ns1, :key)
79
+ end
80
+
74
81
  def test_it_updates_items
75
82
  @abbey.set_up!
76
83
  @abbey.save(:ns1, :key, {"a" => 1})
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abbey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
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: 2011-12-03 00:00:00.000000000 Z
12
+ date: 2011-12-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: multi_json
16
- requirement: &20705080 !ruby/object:Gem::Requirement
16
+ requirement: &13833040 !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: *20705080
24
+ version_requirements: *13833040
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &20704580 !ruby/object:Gem::Requirement
27
+ requirement: &13847000 !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: *20704580
35
+ version_requirements: *13847000
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &20704040 !ruby/object:Gem::Requirement
38
+ requirement: &13846100 !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: *20704040
46
+ version_requirements: *13846100
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &20703520 !ruby/object:Gem::Requirement
49
+ requirement: &13845040 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.6.4
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *20703520
57
+ version_requirements: *13845040
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rcov
60
- requirement: &20702840 !ruby/object:Gem::Requirement
60
+ requirement: &13843640 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *20702840
68
+ version_requirements: *13843640
69
69
  description: Primitive JSON data store. Key-value structure with namespaces.
70
70
  email: me@pavelkalvoda.com
71
71
  executables: []
@@ -104,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
104
  version: '0'
105
105
  segments:
106
106
  - 0
107
- hash: -3484515229656058223
107
+ hash: 3559583671516927692
108
108
  required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  none: false
110
110
  requirements: