From f4188cf86e0fc28c6852416f70953723543b6730 Mon Sep 17 00:00:00 2001 From: 7korobi <7korobi@gmail.com> Date: Wed, 7 May 2014 16:05:26 +0900 Subject: [PATCH] bug fix for result App::Persistence["name"] ||= value --- motion/core/persistence.rb | 7 ++++++- spec/motion/core/persistence_spec.rb | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/motion/core/persistence.rb b/motion/core/persistence.rb index 2dab0876..6c31615e 100644 --- a/motion/core/persistence.rb +++ b/motion/core/persistence.rb @@ -1,6 +1,7 @@ # Persistence module built on top of NSUserDefaults module BubbleWrap module Persistence + class FailSynchronize < RuntimeError; end module_function def app_key @@ -9,7 +10,11 @@ def app_key def []=(key, value) storage.setObject(value, forKey: storage_key(key)) - storage.synchronize + if storage.synchronize + value + else + raise FailSynchronize + end end def [](key) diff --git a/spec/motion/core/persistence_spec.rb b/spec/motion/core/persistence_spec.rb index 37e33e89..44cf16fe 100644 --- a/spec/motion/core/persistence_spec.rb +++ b/spec/motion/core/persistence_spec.rb @@ -30,6 +30,21 @@ def storage.synchronize; @sync_was_called = true; end BubbleWrap::Persistence['arbitraryNumber'] = 42 storage.instance_variable_get(:@sync_was_called).should.equal true end + + it 'return persisted objects' do + persisted_number = (BubbleWrap::Persistence['arbitraryNumber'] ||= 42) + persisted_number.should.equal 42 + end + + it 'raise error if fail synchronize.' do + storage = NSUserDefaults.standardUserDefaults + def storage.synchronize; false; end + + lambda do + BubbleWrap::Persistence['arbitraryNumber'] = 42 + end. + should.raise(BubbleWrap::Persistence::FailSynchronize) + end end describe "storing multiple objects" do