Skip to content

Commit 2e11780

Browse files
authored
Adds interface to externally set RN Async Storage (#519)
* Adds interface to externally set RN Async Storage * mark method as static * possible speedbump for travis: http://facebook.github.io/jest/docs/en/troubleshooting.html\#tests-are-extremely-slow-on-docker-and-or-continuous-integration-ci-server * use mongodb-runner
1 parent 0d7cb39 commit 2e11780

File tree

5 files changed

+34
-34
lines changed

5 files changed

+34
-34
lines changed

.travis.yml

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,11 @@ branches:
99
- /^greenkeeper/.*$/
1010

1111
env:
12-
- CXX=g++-4.8
12+
- MONGODB_VERSION=3.2.13
1313

1414
services: mongodb
15-
16-
addons:
17-
apt:
18-
sources:
19-
- mongodb-3.0-precise
20-
- ubuntu-toolchain-r-test
21-
packages:
22-
- mongodb-org-server
23-
- g++-4.8
24-
25-
script: npm test && ./run_integration.sh
15+
before_script:
16+
- npm install -g mongodb-runner
17+
- mongodb-runner start
18+
script: npm test -- --maxWorkers=4 && ./run_integration.sh
2619
after_script: cat ./coverage/coverage-final.json | ./node_modules/codecov.io/bin/codecov.io.js && rm -rf ./coverage

src/CoreManager.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,14 @@ module.exports = {
333333
return config['StorageController'];
334334
},
335335

336+
setAsyncStorage(storage: any) {
337+
config['AsyncStorage'] = storage;
338+
},
339+
340+
getAsyncStorage() {
341+
return config['AsyncStorage'];
342+
},
343+
336344
setUserController(controller: UserController) {
337345
requireMethods('UserController', [
338346
'setCurrentUser',

src/Parse.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,17 @@ var Parse = {
4545
CoreManager.set('JAVASCRIPT_KEY', javaScriptKey);
4646
CoreManager.set('MASTER_KEY', masterKey);
4747
CoreManager.set('USE_MASTER_KEY', false);
48+
},
49+
50+
/**
51+
* Call this method to set your AsyncStorage engine
52+
* Starting [email protected], the ParseSDK do not provide a React AsyncStorage as the ReactNative module
53+
* is not provided at a stable path and changes over versions.
54+
* @param {AsyncStorage} storage a react native async storage.
55+
* @static
56+
*/
57+
setAsyncStorage(storage: any) {
58+
CoreManager.setAsyncStorage(storage);
4859
}
4960
};
5061

src/StorageController.react-native.js

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,18 @@
1010
*/
1111

1212
import ParsePromise from './ParsePromise';
13-
14-
// RN packager nonsense
15-
let AsyncStorage;
16-
try {
17-
// for React Native 0.43+
18-
AsyncStorage = require('react-native/Libraries/react-native/react-native-implementation').AsyncStorage;
19-
} catch (error) {
20-
AsyncStorage = require('react-native/Libraries/react-native/react-native.js').AsyncStorage;
21-
}
13+
import CoreManager from './CoreManager';
2214

2315
var StorageController = {
2416
async: 1,
2517

18+
getAsyncStorage(): any {
19+
return CoreManager.getAsyncStorage();
20+
},
21+
2622
getItemAsync(path: string): ParsePromise {
2723
var p = new ParsePromise();
28-
AsyncStorage.getItem(path, function(err, value) {
24+
this.getAsyncStorage().getItem(path, function(err, value) {
2925
if (err) {
3026
p.reject(err);
3127
} else {
@@ -37,7 +33,7 @@ var StorageController = {
3733

3834
setItemAsync(path: string, value: string): ParsePromise {
3935
var p = new ParsePromise();
40-
AsyncStorage.setItem(path, value, function(err) {
36+
this.getAsyncStorage().setItem(path, value, function(err) {
4137
if (err) {
4238
p.reject(err);
4339
} else {
@@ -49,7 +45,7 @@ var StorageController = {
4945

5046
removeItemAsync(path: string): ParsePromise {
5147
var p = new ParsePromise();
52-
AsyncStorage.removeItem(path, function(err) {
48+
this.getAsyncStorage().removeItem(path, function(err) {
5349
if (err) {
5450
p.reject(err);
5551
} else {
@@ -60,7 +56,7 @@ var StorageController = {
6056
},
6157

6258
clear() {
63-
AsyncStorage.clear();
59+
this.getAsyncStorage().clear();
6460
}
6561
};
6662

src/__tests__/Storage-test.js

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,6 @@ var mockRNStorageInterface = {
2929
},
3030
};
3131

32-
// for React Native 0.43+
33-
jest.mock('react-native/Libraries/react-native/react-native-implementation', () => {
34-
return {AsyncStorage: mockRNStorageInterface};
35-
}, {virtual: true});
36-
37-
jest.mock('react-native/Libraries/react-native/react-native.js', () => {
38-
return {AsyncStorage: mockRNStorageInterface};
39-
}, {virtual: true});
40-
4132
var CoreManager = require('../CoreManager');
4233
var ParsePromise = require('../ParsePromise').default;
4334

@@ -106,6 +97,7 @@ var RNStorageController = require('../StorageController.react-native');
10697

10798
describe('React Native StorageController', () => {
10899
beforeEach(() => {
100+
CoreManager.setAsyncStorage(mockRNStorageInterface);
109101
RNStorageController.clear();
110102
});
111103

0 commit comments

Comments
 (0)