pusher_rails 0.2.5 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []