Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Passable options #32

Merged
merged 4 commits into from
Dec 14, 2014
Merged

Added Passable options #32

merged 4 commits into from
Dec 14, 2014

Conversation

Jakobud
Copy link
Contributor

@Jakobud Jakobud commented Dec 11, 2014

I changed settings to an object, and added passable options on instantiation. This allows someone to define settings immediately upon instantiation instead of after. It works like so:

socket = new ReconnectingWebSocket(url, null, {debug:true, reconnectInterval:10000});

The settings object compared to the options and then added to the object. Options that don't exist in the settings will be ignored. So for example, if you passed an option of "hello":"world", it would be ignored, since there is no default setting called "hello". The options are completely optional. You can still change these settings after the fact, just like you can now:

socket = new ReconnectingWebSocket(...);
socket.debug = true;

Therefore, backwards compatibility is preserved with this pull request.

Overall this change will allow some more flexibility in the future. For example, this will allow an "automaticOpen" option to be passed, as previously discussed. Some other things to consider is this approach would open the door for a change that allows event handlers to be passed through these options as well. So for example, you could eventually do:

socket = new ReconnectingWebSocket(url, null, {
    debug:true,
    reconnectInterval:5000,
    onconnecting: function(){
        // some code
    }
});

That approach would fix the previously discussed issue about the socket connecting before the onconnecting event handler can be defined. This pull request does not allow you to do this, but it opens the door for this approach to be implemented at a later time.

…ation. This allows someone to define settings immediately upon instantiation instead of after.

It works like so:

```
socket = new ReconnectingWebSocket(url, null, {debug:true, reconnectInterval:10000});
```

The settings object are merged with the passed options object. Non-existent settings will be ignored when merging. So for example, if you passed an option of "hello":"world", it would be ignored, since there is no setting called "hello".

After the merge, the settings are added to the object (this.debug, this.reconnectInterval, etc.). However you can still change these settings after the fact, just like you can now:

```
socket = new ReconnectingWebSocket(...);
socket.debug = true;
```

Thus, backwards compatibility is preserved with this pull request.

Overall this change will allow some more flexibility in the future. This will allow an "automaticOpen" option to be passed, as previously discussed. Some other thigs to consider is this approach would open the door for a change that allows event handlers to be passed through these options as well. So for example, you could eventually do:

```
socket = new ReconnectingWebSocket(url, null, {
    debug:true,
    reconnectInterval:5000,
    onconnecting: function(){
        // some code
    }
});
```

That approach would fix the previously discussed issue about the socket connecting before the `onconnecting` event handler can be defined. This pull request does not allow you to do this, but it opens the door for this approach.
Moved reconnectAttempts to the read-only section of variables. Not sure why it was with the other settings. It is a read only setting, correct?

Optimized the merging and defining of options and settings. Removed an unnecessary loop.
@Jakobud
Copy link
Contributor Author

Jakobud commented Dec 11, 2014

This pull request opens the door to address both of the problems discussed in #30.

@joewalnes
Copy link
Owner

Nice.

Can you add some documentation explaining this to README and the JS header comments.

… Parameters section with explanations. Added Options section with explanations, accepted and default values.
@Jakobud
Copy link
Contributor Author

Jakobud commented Dec 13, 2014

Done. I added quite a bit to the docs.

joewalnes added a commit that referenced this pull request Dec 14, 2014
@joewalnes joewalnes merged commit 5a883c4 into joewalnes:master Dec 14, 2014
@joewalnes
Copy link
Owner

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants