diff --git a/js/actions/user_actions.js b/js/actions/user_actions.js index 8c127e63..334b6e6c 100644 --- a/js/actions/user_actions.js +++ b/js/actions/user_actions.js @@ -7,9 +7,9 @@ class UserActions { constructor() { this.generateActions( 'fetchCurrentUser', - 'receiveCurrentUser', + 'successFetchCurrentUser', 'logoutCurrentUser', - 'deleteCurrentUser', + 'successLogoutCurrentUser', 'currentUserFailed' ); } diff --git a/js/sources/NAMING_CONVENTIONS.md b/js/sources/NAMING_CONVENTIONS.md new file mode 100644 index 00000000..4bd0e14f --- /dev/null +++ b/js/sources/NAMING_CONVENTIONS.md @@ -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: + +``` + +``` + +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`. 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 +``` \ No newline at end of file diff --git a/js/sources/user_source.js b/js/sources/user_source.js index 28b9448d..05165391 100644 --- a/js/sources/user_source.js +++ b/js/sources/user_source.js @@ -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 } }; diff --git a/js/stores/user_store.js b/js/stores/user_store.js index 3bd69255..cbd7d582 100644 --- a/js/stores/user_store.js +++ b/js/stores/user_store.js @@ -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 = {}; }