diff --git a/README.md b/README.md index 4ef811c..5b9c671 100644 --- a/README.md +++ b/README.md @@ -175,7 +175,8 @@ myApp.controller('MainCtrl', function($scope, localStorageService) { ###get Directly get a value from local storage.
If local storage is not supported, use cookies instead.
-**Returns:** `value from local storage` +**Usage:** `localStorageService.get(key, defaultValue[optional])` +**Returns:** `value from local storage, defaultValue if no value is stored` ```js myApp.controller('MainCtrl', function($scope, localStorageService) { //... diff --git a/bower.json b/bower.json index 6788478..cac508c 100644 --- a/bower.json +++ b/bower.json @@ -28,6 +28,6 @@ ], "devDependencies": { "angular": "~1.x", - "angular-mocks": "~1.2.1" + "angular-mocks": "~1.x" } } diff --git a/package.json b/package.json index caeef92..0f76f46 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "grunt-contrib-concat": "*", "grunt-contrib-jshint": "~0.8.0", "grunt-contrib-uglify": "*", - "grunt-karma": "latest", + "grunt-karma": "~0.11.1", "karma": "~0.12.16", "karma-jasmine": "~0.1.5", "karma-coverage": "^0.2.6", diff --git a/src/angular-local-storage.js b/src/angular-local-storage.js index 0e3048e..cf5e6ab 100644 --- a/src/angular-local-storage.js +++ b/src/angular-local-storage.js @@ -146,21 +146,25 @@ angularLocalStorage.provider('localStorageService', function() { // Directly get a value from local storage // Example use: localStorageService.get('library'); // returns 'angular' - var getFromLocalStorage = function (key) { + var getFromLocalStorage = function (key, defaultValue) { if (!browserSupportsLocalStorage || self.storageType === 'cookie') { if (!browserSupportsLocalStorage) { $rootScope.$broadcast('LocalStorageModule.notification.warning','LOCAL_STORAGE_NOT_SUPPORTED'); } - return getFromCookies(key); + return getFromCookies(key, defaultValue); } var item = webStorage ? webStorage.getItem(deriveQualifiedKey(key)) : null; // angular.toJson will convert null to 'null', so a proper conversion is needed // FIXME not a perfect solution, since a valid 'null' string can't be stored if (!item || item === 'null') { - return null; + if (isUndefined(defaultValue)) { + return null; + } else { + return defaultValue; + } } try { @@ -323,7 +327,7 @@ angularLocalStorage.provider('localStorageService', function() { // Directly get a value from a cookie // Example use: localStorageService.cookie.get('library'); // returns 'angular' - var getFromCookies = function (key) { + var getFromCookies = function (key, defaultValue) { if (!browserSupportsCookies) { $rootScope.$broadcast('LocalStorageModule.notification.error', 'COOKIES_NOT_SUPPORTED'); return false; @@ -344,7 +348,12 @@ angularLocalStorage.provider('localStorageService', function() { } } } - return null; + + if (isUndefined(defaultValue)) { + return null; + } else { + return defaultValue; + } }; var removeFromCookies = function (key) { diff --git a/test/spec/localStorageSpec.js b/test/spec/localStorageSpec.js index 7390c94..723f01c 100644 --- a/test/spec/localStorageSpec.js +++ b/test/spec/localStorageSpec.js @@ -280,6 +280,20 @@ describe('localStorageService', function() { expectRemoving('ls.lorem.ipsum') )); + it('should be able to get with a default value', inject(function($rootScope, localStorageService) { + expect([1,2,3]).toEqual(localStorageService.get('property', [1,2,3])); + })); + + it('should be able to get with a default value and honor stored value', inject(function($rootScope, localStorageService) { + localStorageService.set('property', 'hello'); + expect('hello').toEqual(localStorageService.get('property', [1,2,3])); + })); + + it('should be able to get with a default value and not store default', inject(function(localStorageService) { + expect([1,2,3]).toEqual(localStorageService.get('property', [1,2,3])); + expect(null).toEqual(localStorageService.get('property')); + })); + it('should be able to remove multiple items', inject(function($window, localStorageService) { elmSpy = spyOn($window.localStorage, 'removeItem').andCallThrough(); localStorageService.remove('lorem.ipsum1', 'lorem.ipsum2', 'lorem.ipsum3'); @@ -600,6 +614,20 @@ describe('localStorageService', function() { expect(localStorageService.get('cookieKey')).toEqual('cookieValue'); })); + it('should be able to get cookie with a default value', inject(function($rootScope, localStorageService) { + expect([1,2,3]).toEqual(localStorageService.get('cookieKey', [1,2,3])); + })); + + it('should be able to get cookie with a default value and honor stored value', inject(function($rootScope, localStorageService) { + localStorageService.set('cookieKey', 'hello'); + expect('hello').toEqual(localStorageService.get('cookieKey', [1,2,3])); + })); + + it('should be able to get cookie with a default value and not store default', inject(function(localStorageService) { + expect([1,2,3]).toEqual(localStorageService.get('cookieKey', [1,2,3])); + expect(null).toEqual(localStorageService.get('cookieKey')); + })); + it('should be able to set individual cookie with expiry', function() { inject(expectCookieExpiry(new Date().addDays(10))); });