pusher_rails 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3cabf21e41ef487b94bf5fbb948228d57ad343b9
4
+ data.tar.gz: 01a24e6d002d6d2a22882f9e63bb73c51bccda79
5
+ SHA512:
6
+ metadata.gz: 1020d025a5b2491b67595a4cc7646789984b48c9e4d840da8be9803db4b51c3920c9e3e5ffc2630e1726f3aae241cee5e7e27477254da73f1bd3b7aad2d1e9ea
7
+ data.tar.gz: 9884af8e5537f39f2fdecaaf5c71a69035ccd24cfc2efe1c49eac11fa01a78638c3f442d9cc124b7838e33a7d9cee24971fa6b9e59bb988d325f508c89142674
data/.gitignore CHANGED
@@ -1,2 +1 @@
1
1
  *.gem
2
- .rvmrc
@@ -1,16 +1,3 @@
1
- v0.2.5
2
- ======
3
- - Upgraded to pusher-gem 0.9.4
4
-
5
- v0.2.4
6
- ======
7
- - Upgraded to pusher.js 1.12.2
8
-
9
- v0.2.3
10
- ======
11
- - Upgraded to pusher.js 1.12.1
12
- - Upgraded to pusher-gem 0.9.3
13
-
14
1
  v0.2.2
15
2
  ======
16
3
  - Upgraded to pusher.js 1.12.0
data/README.md CHANGED
@@ -2,8 +2,8 @@
2
2
  =====================
3
3
 
4
4
  Adds:
5
- - [pusher-gem v0.9.4](https://github.com/pusher/pusher-gem/tree/v0.9.4)
6
- - [pusher.js v1.12.2](https://github.com/pusher/pusher-js/tree/v1.12.2)
5
+ - [pusher-gem v0.9.2](https://github.com/pusher/pusher-gem/tree/v0.9.2)
6
+ - [pusher.js v1.12.0](https://github.com/pusher/pusher-js/tree/v1.12.0)
7
7
  - [backpusher.js](https://github.com/pusher/backpusher)
8
8
 
9
9
  This pulls in the *pusher-gem* as well as adding *pusher.js* and *backpusher.js* to the assets pipeline of your Rails 3.1+ app.
@@ -21,7 +21,7 @@ Licenses
21
21
  ========
22
22
 
23
23
  /*!
24
- * Pusher JavaScript Library v1.12.2
24
+ * Pusher JavaScript Library v1.12.0
25
25
  * http://pusherapp.com/
26
26
  *
27
27
  * Copyright 2011, Pusher
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'pusher_rails'
6
- s.version = '0.2.5'
6
+ s.version = '0.3.0'
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["David Grandinetti"]
9
9
  s.email = ["dave@wegoto12.com"]
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.description = 'Adds pusher.js/backpusher.js to the asset pipeline and pusher-gem to to your app.'
12
12
  s.homepage = 'https://github.com/dbgrandi/pusher_rails'
13
13
 
14
- s.add_dependency "pusher", "~> 0.9.4"
14
+ s.add_dependency "pusher", "~> 0.11.3"
15
15
 
16
16
  s.files = `git ls-files`.split("\n")
17
17
  s.require_paths = ["lib"]
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Pusher JavaScript Library v1.12.2
2
+ * Pusher JavaScript Library v1.12.7
3
3
  * http://pusherapp.com/
4
4
  *
5
5
  * Copyright 2011, Pusher
@@ -81,7 +81,7 @@
81
81
  },
82
82
 
83
83
  subscribeAll: function() {
84
- var channel;
84
+ var channelName;
85
85
  for (channelName in this.channels.channels) {
86
86
  if (this.channels.channels.hasOwnProperty(channelName)) {
87
87
  this.subscribe(channelName);
@@ -123,7 +123,8 @@
123
123
  },
124
124
 
125
125
  checkAppKey: function() {
126
- if(this.key === null || this.key === undefined) {
126
+ if (!this.key) {
127
+ // do not allow undefined, null or empty string
127
128
  Pusher.warn('Warning', 'You must pass your app key when you instantiate Pusher.');
128
129
  }
129
130
  }
@@ -183,11 +184,17 @@
183
184
  };
184
185
 
185
186
  // Pusher defaults
186
- Pusher.VERSION = '1.12.2';
187
-
187
+ Pusher.VERSION = '1.12.7';
188
+ // WS connection parameters
188
189
  Pusher.host = 'ws.pusherapp.com';
189
190
  Pusher.ws_port = 80;
190
191
  Pusher.wss_port = 443;
192
+ // SockJS fallback parameters
193
+ Pusher.sockjs_host = 'sockjs.pusher.com';
194
+ Pusher.sockjs_http_port = 80
195
+ Pusher.sockjs_https_port = 443
196
+ Pusher.sockjs_path = "/pusher"
197
+ // Other settings
191
198
  Pusher.channel_auth_endpoint = '/pusher/auth';
192
199
  Pusher.cdn_http = 'http://js.pusher.com/'
193
200
  Pusher.cdn_https = 'https://d3dy5gmtp8yhk7.cloudfront.net/'
@@ -430,27 +437,25 @@ Example:
430
437
  };
431
438
 
432
439
 
433
- // Amount to add to time between connection attemtpts per failed attempt.
434
- var UNSUCCESSFUL_CONNECTION_ATTEMPT_ADDITIONAL_WAIT = 2000;
435
- var UNSUCCESSFUL_OPEN_ATTEMPT_ADDITIONAL_TIMEOUT = 2000;
436
- var UNSUCCESSFUL_CONNECTED_ATTEMPT_ADDITIONAL_TIMEOUT = 2000;
440
+ var OPEN_TIMEOUT_INCREMENT = 2000;
441
+ var CONNECTED_TIMEOUT_INCREMENT = 2000;
437
442
 
438
- var MAX_CONNECTION_ATTEMPT_WAIT = 5 * UNSUCCESSFUL_CONNECTION_ATTEMPT_ADDITIONAL_WAIT;
439
- var MAX_OPEN_ATTEMPT_TIMEOUT = 5 * UNSUCCESSFUL_OPEN_ATTEMPT_ADDITIONAL_TIMEOUT;
440
- var MAX_CONNECTED_ATTEMPT_TIMEOUT = 5 * UNSUCCESSFUL_CONNECTED_ATTEMPT_ADDITIONAL_TIMEOUT;
443
+ var MAX_OPEN_TIMEOUT = 10000;
444
+ var MAX_CONNECTED_TIMEOUT = 10000;
441
445
 
442
446
  function resetConnectionParameters(connection) {
443
447
  connection.connectionWait = 0;
444
448
 
445
- if (Pusher.TransportType === 'flash') {
446
- // Flash needs a bit more time
447
- connection.openTimeout = 5000;
448
- } else {
449
- connection.openTimeout = 2000;
449
+ if (Pusher.TransportType === 'native') {
450
+ connection.openTimeout = 4000;
451
+ } else if (Pusher.TransportType === 'flash') {
452
+ connection.openTimeout = 7000;
453
+ } else { // SockJS
454
+ connection.openTimeout = 6000;
450
455
  }
451
456
  connection.connectedTimeout = 2000;
452
457
  connection.connectionSecure = connection.compulsorySecure;
453
- connection.connectionAttempts = 0;
458
+ connection.failedAttempts = 0;
454
459
  }
455
460
 
456
461
  function Connection(key, options) {
@@ -458,6 +463,7 @@ Example:
458
463
 
459
464
  Pusher.EventsDispatcher.call(this);
460
465
 
466
+ this.ping = true
461
467
  this.options = Pusher.Util.extend({encrypted: false}, options);
462
468
 
463
469
  this.netInfo = new Pusher.NetInfo();
@@ -497,22 +503,25 @@ Example:
497
503
  },
498
504
 
499
505
  waitingPre: function() {
500
- if (self.connectionWait > 0) {
501
- self.emit('connecting_in', self.connectionWait);
502
- }
506
+ if (self.netInfo.isOnLine()) {
507
+ if (self.failedAttempts < 2) {
508
+ updateState('connecting');
509
+ } else {
510
+ updateState('unavailable');
511
+ // Delay 10s between connection attempts on entering unavailable
512
+ self.connectionWait = 10000;
513
+ }
503
514
 
504
- if (self.netInfo.isOnLine() && self.connectionAttempts <= 4) {
505
- updateState('connecting');
506
- } else {
507
- updateState('unavailable');
508
- }
515
+ if (self.connectionWait > 0) {
516
+ self.emit('connecting_in', connectionDelay());
517
+ }
509
518
 
510
- // When in the unavailable state we attempt to connect, but don't
511
- // broadcast that fact
512
- if (self.netInfo.isOnLine()) {
513
519
  self._waitingTimer = setTimeout(function() {
520
+ // Even when unavailable we try connecting (not changing state)
514
521
  self._machine.transition('connecting');
515
522
  }, connectionDelay());
523
+ } else {
524
+ updateState('unavailable');
516
525
  }
517
526
  },
518
527
 
@@ -530,12 +539,27 @@ Example:
530
539
  return;
531
540
  }
532
541
 
533
- var url = formatURL(self.key, self.connectionSecure);
534
- Pusher.debug('Connecting', url);
535
- self.socket = new Pusher.Transport(url);
536
- // now that the socket connection attempt has been started,
537
- // set up the callbacks fired by the socket for different outcomes
538
- self.socket.onopen = ws_onopen;
542
+ var path = connectPath(self.key);
543
+ if (Pusher.TransportType === 'sockjs') {
544
+ Pusher.debug('Connecting to sockjs', Pusher.sockjs);
545
+ var url = buildSockJSURL(self.connectionSecure);
546
+
547
+ self.ping = false
548
+ self.socket = new SockJS(url);
549
+ self.socket.onopen = function() {
550
+ // SockJS does not yet support custom paths and query params
551
+ self.socket.send(JSON.stringify({path: path}));
552
+ self._machine.transition('open');
553
+ }
554
+ } else {
555
+ var url = connectBaseURL(self.connectionSecure) + path;
556
+ Pusher.debug('Connecting', url);
557
+ self.socket = new Pusher.Transport(url);
558
+ self.socket.onopen = function() {
559
+ self._machine.transition('open');
560
+ }
561
+ }
562
+
539
563
  self.socket.onclose = transitionToWaiting;
540
564
  self.socket.onerror = ws_onError;
541
565
 
@@ -639,44 +663,45 @@ Example:
639
663
  -----------------------------------------------*/
640
664
 
641
665
  function updateConnectionParameters() {
642
- if (self.connectionWait < MAX_CONNECTION_ATTEMPT_WAIT) {
643
- self.connectionWait += UNSUCCESSFUL_CONNECTION_ATTEMPT_ADDITIONAL_WAIT;
644
- }
645
-
646
- if (self.openTimeout < MAX_OPEN_ATTEMPT_TIMEOUT) {
647
- self.openTimeout += UNSUCCESSFUL_OPEN_ATTEMPT_ADDITIONAL_TIMEOUT;
666
+ if (self.openTimeout < MAX_OPEN_TIMEOUT) {
667
+ self.openTimeout += OPEN_TIMEOUT_INCREMENT;
648
668
  }
649
669
 
650
- if (self.connectedTimeout < MAX_CONNECTED_ATTEMPT_TIMEOUT) {
651
- self.connectedTimeout += UNSUCCESSFUL_CONNECTED_ATTEMPT_ADDITIONAL_TIMEOUT;
670
+ if (self.connectedTimeout < MAX_CONNECTED_TIMEOUT) {
671
+ self.connectedTimeout += CONNECTED_TIMEOUT_INCREMENT;
652
672
  }
653
673
 
674
+ // Toggle between ws & wss
654
675
  if (self.compulsorySecure !== true) {
655
676
  self.connectionSecure = !self.connectionSecure;
656
677
  }
657
678
 
658
- self.connectionAttempts++;
679
+ self.failedAttempts++;
659
680
  }
660
681
 
661
- function formatURL(key, isSecure) {
662
- var port = Pusher.ws_port;
663
- var protocol = 'ws://';
664
-
665
- // Always connect with SSL if the current page has
666
- // been loaded via HTTPS.
667
- //
668
- // FUTURE: Always connect using SSL.
669
- //
670
- if (isSecure || document.location.protocol === 'https:') {
671
- port = Pusher.wss_port;
672
- protocol = 'wss://';
673
- }
682
+ function connectBaseURL(isSecure) {
683
+ // Always connect with SSL if the current page served over https
684
+ var ssl = (isSecure || document.location.protocol === 'https:');
685
+ var port = ssl ? Pusher.wss_port : Pusher.ws_port;
686
+ var scheme = ssl ? 'wss://' : 'ws://';
674
687
 
675
- var flash = (Pusher.TransportType === "flash") ? "true" : "false";
688
+ return scheme + Pusher.host + ':' + port;
689
+ }
676
690
 
677
- return protocol + Pusher.host + ':' + port + '/app/' + key + '?protocol=5&client=js'
691
+ function connectPath(key) {
692
+ var flash = (Pusher.TransportType === "flash") ? "true" : "false";
693
+ var path = '/app/' + key + '?protocol=5&client=js'
678
694
  + '&version=' + Pusher.VERSION
679
695
  + '&flash=' + flash;
696
+ return path;
697
+ }
698
+
699
+ function buildSockJSURL(isSecure) {
700
+ var ssl = (isSecure || document.location.protocol === 'https:');
701
+ var port = ssl ? Pusher.sockjs_https_port : Pusher.sockjs_http_port;
702
+ var scheme = ssl ? 'https://' : 'http://';
703
+
704
+ return scheme + Pusher.sockjs_host + ':' + port + Pusher.sockjs_path;
680
705
  }
681
706
 
682
707
  // callback for close and retry. Used on timeouts.
@@ -687,13 +712,15 @@ Example:
687
712
  function resetActivityCheck() {
688
713
  if (self._activityTimer) { clearTimeout(self._activityTimer); }
689
714
  // Send ping after inactivity
690
- self._activityTimer = setTimeout(function() {
691
- self.send_event('pusher:ping', {})
692
- // Wait for pong response
715
+ if (self.ping) {
693
716
  self._activityTimer = setTimeout(function() {
694
- self.socket.close();
695
- }, (self.options.pong_timeout || Pusher.pong_timeout))
696
- }, (self.options.activity_timeout || Pusher.activity_timeout))
717
+ self.send_event('pusher:ping', {})
718
+ // Wait for pong response
719
+ self._activityTimer = setTimeout(function() {
720
+ self.socket.close();
721
+ }, (self.options.pong_timeout || Pusher.pong_timeout))
722
+ }, (self.options.activity_timeout || Pusher.activity_timeout))
723
+ }
697
724
  }
698
725
 
699
726
  function stopActivityCheck() {
@@ -723,11 +750,6 @@ Example:
723
750
  WebSocket Callbacks
724
751
  -----------------------------------------------*/
725
752
 
726
- // no-op, as we only care when we get pusher:connection_established
727
- function ws_onopen() {
728
- self._machine.transition('open');
729
- };
730
-
731
753
  function handleCloseCode(code, message) {
732
754
  // first inform the end-developer of this error
733
755
  self.emit('error', {type: 'PusherError', data: {code: code, message: message}});
@@ -998,22 +1020,26 @@ Example:
998
1020
 
999
1021
  var Members = function(channel) {
1000
1022
  var self = this;
1023
+ var channelData = null;
1001
1024
 
1002
1025
  var reset = function() {
1003
- this._members_map = {};
1004
- this.count = 0;
1005
- this.me = null;
1026
+ self._members_map = {};
1027
+ self.count = 0;
1028
+ self.me = null;
1029
+ channelData = null;
1030
+ };
1031
+ reset();
1032
+
1033
+ var subscriptionSucceeded = function(subscriptionData) {
1034
+ self._members_map = subscriptionData.presence.hash;
1035
+ self.count = subscriptionData.presence.count;
1036
+ self.me = self.get(channelData.user_id);
1037
+ channel.emit('pusher:subscription_succeeded', self);
1006
1038
  };
1007
- reset.call(this);
1008
1039
 
1009
1040
  channel.bind('pusher_internal:authorized', function(authorizedData) {
1010
- var channelData = JSON.parse(authorizedData.channel_data);
1011
- channel.bind("pusher_internal:subscription_succeeded", function(subscriptionData) {
1012
- self._members_map = subscriptionData.presence.hash;
1013
- self.count = subscriptionData.presence.count;
1014
- self.me = self.get(channelData.user_id);
1015
- channel.emit('pusher:subscription_succeeded', self);
1016
- });
1041
+ channelData = JSON.parse(authorizedData.channel_data);
1042
+ channel.bind("pusher_internal:subscription_succeeded", subscriptionSucceeded);
1017
1043
  });
1018
1044
 
1019
1045
  channel.bind('pusher_internal:member_added', function(data) {
@@ -1035,7 +1061,8 @@ Example:
1035
1061
  });
1036
1062
 
1037
1063
  channel.bind('pusher_internal:disconnected', function() {
1038
- reset.call(self);
1064
+ reset();
1065
+ channel.unbind("pusher_internal:subscription_succeeded", subscriptionSucceeded);
1039
1066
  });
1040
1067
  };
1041
1068
 
@@ -1070,6 +1097,7 @@ Example:
1070
1097
  return channel;
1071
1098
  };
1072
1099
  }).call(this);
1100
+
1073
1101
  ;(function() {
1074
1102
  Pusher.Channel.Authorizer = function(channel, type, options) {
1075
1103
  this.channel = channel;
@@ -1224,9 +1252,22 @@ var _require = (function() {
1224
1252
  deps.push(root + '/json2' + Pusher.dependency_suffix + '.js');
1225
1253
  }
1226
1254
  if (!window['WebSocket']) {
1227
- // We manually initialize web-socket-js to iron out cross browser issues
1228
- window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true;
1229
- deps.push(root + '/flashfallback' + Pusher.dependency_suffix + '.js');
1255
+ var flashSupported;
1256
+ try {
1257
+ flashSupported = Boolean(new ActiveXObject('ShockwaveFlash.ShockwaveFlash'));
1258
+ } catch (e) {
1259
+ flashSupported = navigator.mimeTypes["application/x-shockwave-flash"] !== undefined;
1260
+ }
1261
+
1262
+ if (flashSupported) {
1263
+ // Try to use web-socket-js (flash WebSocket emulation)
1264
+ window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION = true;
1265
+ window.WEB_SOCKET_SUPPRESS_CROSS_DOMAIN_SWF_ERROR = true;
1266
+ deps.push(root + '/flashfallback' + Pusher.dependency_suffix + '.js');
1267
+ } else {
1268
+ // Use SockJS when Flash is not available
1269
+ deps.push(root + '/sockjs' + Pusher.dependency_suffix + '.js');
1270
+ }
1230
1271
  }
1231
1272
 
1232
1273
  var initialize = function() {
@@ -1249,9 +1290,9 @@ var _require = (function() {
1249
1290
  })
1250
1291
  WebSocket.__initialize();
1251
1292
  } else {
1252
- // Flash must not be installed
1253
- Pusher.Transport = null;
1254
- Pusher.TransportType = 'none';
1293
+ // Flash fallback was not loaded, using SockJS
1294
+ Pusher.Transport = window.SockJS;
1295
+ Pusher.TransportType = 'sockjs';
1255
1296
  Pusher.ready();
1256
1297
  }
1257
1298
  }
@@ -1276,3 +1317,4 @@ var _require = (function() {
1276
1317
  initializeOnDocumentBody();
1277
1318
  }
1278
1319
  })();
1320
+
metadata CHANGED
@@ -1,32 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pusher_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
5
- prerelease:
4
+ version: 0.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - David Grandinetti
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-08-07 00:00:00.000000000 Z
11
+ date: 2013-03-30 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: pusher
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
21
- version: 0.9.4
19
+ version: 0.11.3
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
- version: 0.9.4
26
+ version: 0.11.3
30
27
  description: Adds pusher.js/backpusher.js to the asset pipeline and pusher-gem to
31
28
  to your app.
32
29
  email:
@@ -44,26 +41,25 @@ files:
44
41
  - vendor/assets/javascripts/pusher.js
45
42
  homepage: https://github.com/dbgrandi/pusher_rails
46
43
  licenses: []
44
+ metadata: {}
47
45
  post_install_message:
48
46
  rdoc_options: []
49
47
  require_paths:
50
48
  - lib
51
49
  required_ruby_version: !ruby/object:Gem::Requirement
52
- none: false
53
50
  requirements:
54
- - - ! '>='
51
+ - - '>='
55
52
  - !ruby/object:Gem::Version
56
53
  version: '0'
57
54
  required_rubygems_version: !ruby/object:Gem::Requirement
58
- none: false
59
55
  requirements:
60
- - - ! '>='
56
+ - - '>='
61
57
  - !ruby/object:Gem::Version
62
58
  version: '0'
63
59
  requirements: []
64
60
  rubyforge_project:
65
- rubygems_version: 1.8.24
61
+ rubygems_version: 2.0.3
66
62
  signing_key:
67
- specification_version: 3
63
+ specification_version: 4
68
64
  summary: Pusher integration for Rails 3.1+
69
65
  test_files: []