pusher_rails 0.1.2 → 0.1.3

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.
@@ -1,3 +1,8 @@
1
+ v0.1.3
2
+ ======
3
+ - Upgraded to pusher.js 1.9.4
4
+ - Upgraded to pusher-gem 0.8.4
5
+
1
6
  v0.1.2
2
7
  ======
3
8
  - Added dependency to pusher (~>0.8.2)
data/README.md CHANGED
@@ -2,8 +2,8 @@
2
2
  =====================
3
3
 
4
4
  Adds:
5
- - [pusher-gem v0.8.2](https://github.com/pusher/pusher-gem/tree/v0.8.2)
6
- - [pusher.js v1.9.1](https://github.com/pusher/pusher-js/tree/v1.9.1)
5
+ - [pusher-gem v0.8.4](https://github.com/pusher/pusher-gem/tree/v0.8.4)
6
+ - [pusher.js v1.9.4](https://github.com/pusher/pusher-js/tree/v1.9.4)
7
7
  - [backpusher.js](https://github.com/pusher/backpusher/commit/e61c9d7a761fcb48f312416408d1bf4ed418735b#diff-1)
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.9.1
24
+ * Pusher JavaScript Library v1.9.4
25
25
  * http://pusherapp.com/
26
26
  *
27
27
  * Copyright 2011, Pusher
@@ -33,4 +33,4 @@ Licenses
33
33
  // Backpusher may be freely distributed under the MIT license.
34
34
  // For all details and documentation:
35
35
  // http://github.com/pusher/backpusher
36
-
36
+
@@ -3,15 +3,15 @@ $:.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.1.2'
6
+ s.version = '0.1.3'
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["David Grandinetti"]
9
9
  s.email = ["dave@wegoto12.com"]
10
10
  s.summary = 'Pusher integration for Rails 3.1+'
11
- s.description = 'Adds pusher.js/backpusher.js to the asset pipeline and pusher-gemto to your app.'
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.8.2"
14
+ s.add_dependency "pusher", "~> 0.8.4"
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.9.1
2
+ * Pusher JavaScript Library v1.9.4
3
3
  * http://pusherapp.com/
4
4
  *
5
5
  * Copyright 2011, Pusher
@@ -85,12 +85,16 @@ Pusher.prototype = {
85
85
  var self = this;
86
86
  var channel = this.channels.add(channel_name, this);
87
87
  if (this.connection.state === 'connected') {
88
- channel.authorize(this, function(data) {
89
- self.send_event('pusher:subscribe', {
90
- channel: channel_name,
91
- auth: data.auth,
92
- channel_data: data.channel_data
93
- });
88
+ channel.authorize(this, function(err, data) {
89
+ if (err) {
90
+ channel.emit('subscription_error', data);
91
+ } else {
92
+ self.send_event('pusher:subscribe', {
93
+ channel: channel_name,
94
+ auth: data.auth,
95
+ channel_data: data.channel_data
96
+ });
97
+ }
94
98
  });
95
99
  }
96
100
  return channel;
@@ -168,7 +172,7 @@ Pusher.debug = function() {
168
172
  }
169
173
 
170
174
  // Pusher defaults
171
- Pusher.VERSION = '1.9.1';
175
+ Pusher.VERSION = '1.9.4';
172
176
 
173
177
  Pusher.host = 'ws.pusherapp.com';
174
178
  Pusher.ws_port = 80;
@@ -391,6 +395,9 @@ Example:
391
395
 
392
396
  this.options = Pusher.Util.extend({encrypted: false}, options || {});
393
397
 
398
+ this.netInfo = new Pusher.NetInfo();
399
+ Pusher.EventsDispatcher.call(this.netInfo);
400
+
394
401
  // define the state machine that runs the connection
395
402
  this._machine = new Pusher.Machine(self, 'initialized', machineTransitions, {
396
403
 
@@ -414,7 +421,16 @@ Example:
414
421
  informUser('connecting_in', self.connectionWait);
415
422
  }
416
423
 
417
- if (self.connectionAttempts > 4) {
424
+ if (netInfoSaysOffline() || self.connectionAttempts > 4) {
425
+ if(netInfoSaysOffline())
426
+ {
427
+ // called by some browsers upon reconnection to router
428
+ self.netInfo.bind('online', function() {
429
+ if(self._machine.is('waiting'))
430
+ self._machine.transition('connecting');
431
+ });
432
+ }
433
+
418
434
  triggerStateChange('unavailable');
419
435
  } else {
420
436
  triggerStateChange('connecting');
@@ -460,9 +476,7 @@ Example:
460
476
  openPre: function() {
461
477
  self.socket.onmessage = ws_onMessage;
462
478
  self.socket.onerror = ws_onError;
463
- self.socket.onclose = function() {
464
- self._machine.transition('waiting');
465
- };
479
+ self.socket.onclose = transitionToWaiting;
466
480
 
467
481
  // allow time to get connected-to-Pusher message, otherwise close socket, try again
468
482
  self._openTimer = setTimeout(TransitionToImpermanentClosing, self.connectedTimeout);
@@ -488,6 +502,11 @@ Example:
488
502
  self.socket.onclose = function() {
489
503
  self._machine.transition('waiting');
490
504
  };
505
+ // onoffline called by some browsers on loss of connection to router
506
+ self.netInfo.bind('offline', function() {
507
+ if(self._machine.is('connected'))
508
+ self.socket.close();
509
+ });
491
510
 
492
511
  resetConnectionParameters(self);
493
512
  },
@@ -655,6 +674,13 @@ Example:
655
674
  self.emit('state_change', {previous: prevState, current: newState});
656
675
  self.emit(newState, data);
657
676
  }
677
+
678
+ // Offline means definitely offline (no connection to router).
679
+ // Inverse does NOT mean definitely online (only currently supported in Safari
680
+ // and even there only means the device has a connection to the router).
681
+ function netInfoSaysOffline() {
682
+ return self.netInfo.isOnLine() === false;
683
+ }
658
684
  };
659
685
 
660
686
  Connection.prototype.connect = function() {
@@ -695,8 +721,29 @@ Example:
695
721
  };
696
722
 
697
723
  Pusher.Util.extend(Connection.prototype, Pusher.EventsDispatcher.prototype);
698
-
699
724
  this.Pusher.Connection = Connection;
725
+
726
+ /*
727
+ A little bauble to interface with window.navigator.onLine,
728
+ window.ononline and window.onoffline. Easier to mock.
729
+ */
730
+ var NetInfo = function() {
731
+ var self = this;
732
+ window.ononline = function() {
733
+ self.emit('online', null);
734
+ };
735
+ window.onoffline = function() {
736
+ self.emit('offline', null);
737
+ };
738
+ };
739
+
740
+ NetInfo.prototype.isOnLine = function() {
741
+ return window.navigator.onLine;
742
+ };
743
+
744
+ Pusher.Util.extend(NetInfo.prototype, Pusher.EventsDispatcher.prototype);
745
+ this.Pusher.Connection.NetInfo = NetInfo;
746
+
700
747
  }).call(this);
701
748
 
702
749
  Pusher.Channels = function() {
@@ -741,13 +788,13 @@ Pusher.Channel = function(channel_name, pusher) {
741
788
  Pusher.Channel.prototype = {
742
789
  // inheritable constructor
743
790
  init: function(){
744
-
791
+
745
792
  },
746
-
793
+
747
794
  disconnect: function(){
748
-
795
+
749
796
  },
750
-
797
+
751
798
  // Activate after successful subscription. Called on top-level pusher:subscription_succeeded
752
799
  acknowledge_subscription: function(data){
753
800
  this.subscribed = true;
@@ -756,13 +803,13 @@ Pusher.Channel.prototype = {
756
803
  is_private: function(){
757
804
  return false;
758
805
  },
759
-
806
+
760
807
  is_presence: function(){
761
808
  return false;
762
809
  },
763
-
810
+
764
811
  authorize: function(pusher, callback){
765
- callback({}); // normal channels don't require auth
812
+ callback(false, {}); // normal channels don't require auth
766
813
  },
767
814
 
768
815
  trigger: function(event, data) {
@@ -789,9 +836,10 @@ Pusher.authorizers = {
789
836
  if (xhr.readyState == 4) {
790
837
  if (xhr.status == 200) {
791
838
  var data = JSON.parse(xhr.responseText);
792
- callback(data);
839
+ callback(false, data);
793
840
  } else {
794
841
  Pusher.debug("Couldn't get auth info from your webapp", status);
842
+ callback(true, xhr.status);
795
843
  }
796
844
  }
797
845
  };
@@ -799,8 +847,11 @@ Pusher.authorizers = {
799
847
  },
800
848
  jsonp: function(pusher, callback){
801
849
  var qstring = 'socket_id=' + encodeURIComponent(pusher.connection.socket_id) + '&channel_name=' + encodeURIComponent(this.name);
802
- var script = document.createElement("script");
803
- Pusher.auth_callbacks[this.name] = callback;
850
+ var script = document.createElement("script");
851
+ // Hacked wrapper.
852
+ Pusher.auth_callbacks[this.name] = function(data) {
853
+ callback(false, data);
854
+ };
804
855
  var callback_name = "Pusher.auth_callbacks['" + this.name + "']";
805
856
  script.src = Pusher.channel_auth_endpoint+'?callback='+encodeURIComponent(callback_name)+'&'+qstring;
806
857
  var head = document.getElementsByTagName("head")[0] || document.documentElement;
@@ -812,25 +863,25 @@ Pusher.Channel.PrivateChannel = {
812
863
  is_private: function(){
813
864
  return true;
814
865
  },
815
-
866
+
816
867
  authorize: function(pusher, callback){
817
868
  Pusher.authorizers[Pusher.channel_auth_transport].scopedTo(this)(pusher, callback);
818
869
  }
819
870
  };
820
871
 
821
872
  Pusher.Channel.PresenceChannel = {
822
-
873
+
823
874
  init: function(){
824
875
  this.bind('pusher_internal:subscription_succeeded', function(sub_data){
825
876
  this.acknowledge_subscription(sub_data);
826
877
  this.dispatch_with_all('pusher:subscription_succeeded', this.members);
827
878
  }.scopedTo(this));
828
-
879
+
829
880
  this.bind('pusher_internal:member_added', function(data){
830
881
  var member = this.members.add(data.user_id, data.user_info);
831
882
  this.dispatch_with_all('pusher:member_added', member);
832
883
  }.scopedTo(this))
833
-
884
+
834
885
  this.bind('pusher_internal:member_removed', function(data){
835
886
  var member = this.members.remove(data.user_id);
836
887
  if (member) {
@@ -838,21 +889,21 @@ Pusher.Channel.PresenceChannel = {
838
889
  }
839
890
  }.scopedTo(this))
840
891
  },
841
-
892
+
842
893
  disconnect: function(){
843
894
  this.members.clear();
844
895
  },
845
-
896
+
846
897
  acknowledge_subscription: function(sub_data){
847
898
  this.members._members_map = sub_data.presence.hash;
848
899
  this.members.count = sub_data.presence.count;
849
900
  this.subscribed = true;
850
901
  },
851
-
902
+
852
903
  is_presence: function(){
853
904
  return true;
854
905
  },
855
-
906
+
856
907
  members: {
857
908
  _members_map: {},
858
909
  count: 0,
@@ -882,13 +933,12 @@ Pusher.Channel.PresenceChannel = {
882
933
  },
883
934
 
884
935
  get: function(user_id) {
885
- var user_info = this._members_map[user_id];
886
- if (user_info) {
936
+ if (this._members_map.hasOwnProperty(user_id)) { // have heard of this user user_id
887
937
  return {
888
938
  id: user_id,
889
- info: user_info
939
+ info: this._members_map[user_id]
890
940
  }
891
- } else {
941
+ } else { // have never heard of this user
892
942
  return null;
893
943
  }
894
944
  },
@@ -968,7 +1018,7 @@ var _require = (function () {
968
1018
  var root = cdn + Pusher.VERSION;
969
1019
 
970
1020
  var deps = [];
971
- if (typeof window['JSON'] === undefined) {
1021
+ if (typeof window['JSON'] === 'undefined') {
972
1022
  deps.push(root + '/json2.js');
973
1023
  }
974
1024
  if (typeof window['WebSocket'] === 'undefined') {
@@ -978,6 +1028,8 @@ var _require = (function () {
978
1028
  }
979
1029
 
980
1030
  var initialize = function() {
1031
+ Pusher.NetInfo = Pusher.Connection.NetInfo;
1032
+
981
1033
  if (typeof window['WebSocket'] === 'undefined' && typeof window['MozWebSocket'] === 'undefined') {
982
1034
  return function() {
983
1035
  // This runs after flashfallback.js has loaded
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pusher_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,21 +9,21 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-07-28 00:00:00.000000000Z
12
+ date: 2011-11-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pusher
16
- requirement: &2156325720 !ruby/object:Gem::Requirement
16
+ requirement: &70338432315200 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.8.2
21
+ version: 0.8.4
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2156325720
25
- description: Adds pusher.js/backpusher.js to the asset pipeline and pusher-gemto to
26
- your app.
24
+ version_requirements: *70338432315200
25
+ description: Adds pusher.js/backpusher.js to the asset pipeline and pusher-gem to
26
+ to your app.
27
27
  email:
28
28
  - dave@wegoto12.com
29
29
  executables: []
@@ -57,7 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
57
57
  version: '0'
58
58
  requirements: []
59
59
  rubyforge_project:
60
- rubygems_version: 1.8.5
60
+ rubygems_version: 1.8.10
61
61
  signing_key:
62
62
  specification_version: 3
63
63
  summary: Pusher integration for Rails 3.1+