abbey 0.1.2 → 0.1.3

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.
@@ -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: