1
0
mirror of https://github.com/ascribe/onion.git synced 2024-06-28 08:37:59 +02:00

Specify and applying naming conventions 📃 for source and store methods

This commit is contained in:
Tim Daubenschütz 2015-11-02 16:32:55 +01:00
parent 7ce7f4d17d
commit f0325f2473
4 changed files with 72 additions and 9 deletions

View File

@ -7,9 +7,9 @@ class UserActions {
constructor() {
this.generateActions(
'fetchCurrentUser',
'receiveCurrentUser',
'successFetchCurrentUser',
'logoutCurrentUser',
'deleteCurrentUser',
'successLogoutCurrentUser',
'currentUserFailed'
);
}

View File

@ -0,0 +1,59 @@
# Naming conventions for sources
## Introduction
When using alt.js's sources, we don't want the source's method to clash with the store/action's method names.
While actions will still be named by the following schema:
```
<verb><ObjectToManipulateInTheStore>
```
e.g.
```
fetchCurrentUser
logoutCurrentUser
fetchApplication
refreshApplicationToken
```
we cannot repeat this for a sources' methods as patterns like this would emerge in the stores:
```javascript
onFetchCurrentUser(invalidateCache) {
this.invalidateCache = invalidateCache;
if(!this.getInstance().isLoading()) {
this.getInstance().fetchCurrentUser(); // does not call a flux "action" but a method in user_source.js - which is confusing
}
}
```
Therefore we're introducing the following naming convention:
## Rules
1. All source methods that perform a data lookup of any kind (be it cached or not), are called `lookup<ObjectToManipulateInTheStore>`. As a mnemonic aid, "You *lookup* something in a *source*".
2. For all methods that do not fit 1.), we prepend `perform`.
## Examples
### Examples for Rule 1.)
*HTTP GET'ing the current User*
```javascript
UserActions.fetchCurrentUser
UserStore.onFetchCurrentUser
UserSource.lookupCurrentUser
```
### Examples for Rule 2.)
*HTTP GET'ing a certain user endpoint, that logs the user out :sad_face:(, as this should not be a GET request anyway)*
```javascript
UserActions.logoutCurrentUser
UserStore.onLogoutCurrentUser
UserSource.performLogoutCurrentUser
```

View File

@ -7,7 +7,7 @@ import UserActions from '../actions/user_actions';
const UserSource = {
fetchCurrentUser: {
lookupCurrentUser: {
remote() {
return requests.get('user');
},
@ -15,18 +15,18 @@ const UserSource = {
local(state) {
return state.currentUser && state.currentUser.email ? state : {};
},
success: UserActions.receiveCurrentUser,
success: UserActions.successFetchCurrentUser,
error: UserActions.currentUserFailed,
shouldFetch(state) {
return state.invalidateCache || state.currentUser && !state.currentUser.email;
}
},
logoutCurrentUser: {
performLogoutCurrentUser: {
remote() {
return requests.get(ApiUrls.users_logout);
},
success: UserActions.deleteCurrentUser,
success: UserActions.successLogoutCurrentUser,
error: UserActions.currentUserFailed
}
};

View File

@ -20,16 +20,20 @@ class UserStore {
this.invalidateCache = invalidateCache;
if(!this.getInstance().isLoading()) {
this.getInstance().fetchCurrentUser();
this.getInstance().lookupCurrentUser();
}
}
onReceiveCurrentUser({users: [user]}) {
onSuccessFetchCurrentUser({users: [user]}) {
this.invalidateCache = false;
this.currentUser = user;
}
onDeleteCurrentUser() {
onLogoutCurrentUser() {
this.getInstance().performLogoutCurrentUser();
}
onSuccessLogoutCurrentUser() {
this.currentUser = {};
}