hookly 0.9.0 → 0.9.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8fa80ff4c39928e6d5e8a0a6f789c7346d0da23f
4
- data.tar.gz: e751e4408f4e131e8a9856d2315b10ff21ba359f
3
+ metadata.gz: 6b1c6a8c96900792edf0f88eedff82ed285e5b3e
4
+ data.tar.gz: 881fbe2841f6b04b9f536945c2ca0cbe28d1c2bc
5
5
  SHA512:
6
- metadata.gz: 7bb848c28200fbfe0fc742091f34b8196dcfd2100189fa16c609e6dede135ae7295c15883c073861993b8e713e4b93680303d2c4f4671d6243ae53395e68aef5
7
- data.tar.gz: cc8ae03b69889979098c526bce2da03b5f8c9164ef2f1646df0ad218085ae7ab235e8b4b69d11df3d88b007a2712e0179c07408fe689c895f3dfe153afbabfec
6
+ metadata.gz: 5440266294ac5618862dbfaad96c16fe9c9105641a5fa942ec48d49194e9f843a3524951ab9e8e13d96baddcc0b41b5b02f538d4b080d88be4854f214afb10e9
7
+ data.tar.gz: 97459b12480916ec0cbe24674e35e919bb6fb40f824fd0d648ca8c6081bacaed340658cd35b52b524b8f659c2b4d1d079498c57f662d184b991511d225d79e09
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  #hookly-rails
2
2
 
3
+ [![Circle CI](https://circleci.com/gh/bnorton/hookly-rails.svg?style=svg)](https://circleci.com/gh/bnorton/hookly-rails)
4
+ [![Gem Version](https://badge.fury.io/rb/hookly.svg)](http://badge.fury.io/rb/hookly)
5
+
3
6
  1. Ruby wrapper for the Hookly API
4
7
  2. hookly.js asset pipeline provider/wrapper
5
8
 
@@ -40,9 +43,9 @@ hookly.on('#updates', function(options) {
40
43
  });
41
44
  ```
42
45
 
43
- The push a new message the updates channel
46
+ Push a new message the updates channel
44
47
  ```ruby
45
- Hookly::Channel.new('#updates').push(model: 'Message', id: 5, text: 'Thanks for the info.')
48
+ Hookly::Message.create('#updates', model: 'Message', id: 5, text: 'Thanks for the info.')
46
49
  #=> #<Hookly::Message id: '44fjwq-djas' slug: '#updates', data: { model: 'Message', id: 5, text: 'Thanks for the info.' }>
47
50
  ```
48
51
 
@@ -60,7 +63,7 @@ hookly.on('#updates', function(options) {
60
63
  ```
61
64
 
62
65
  ```ruby
63
- Hookly::Channel.new('#updates', uid: '{{uid}}').push(model: 'Message', id: 6, text: 'Thanks for the PRIVATE info.')
66
+ Hookly::Message.create('#updates', '{{uid}}', id: 6, text: 'Thanks for the PRIVATE info.')
64
67
  #=> #<Hookly::Message id: '44fjwq-djas' slug: '#updates', uid: '{{uid}}' data: { model: 'Message', id: 6, text: 'Thanks for the PRIVATE info.' }>
65
68
  ```
66
69
 
data/circle.yml ADDED
@@ -0,0 +1,3 @@
1
+ machine:
2
+ ruby:
3
+ version: 2.2.2
@@ -1,7 +1,7 @@
1
1
  module Hookly
2
2
  MAJOR = 0
3
3
  MINOR = 9
4
- PATCH = 0
4
+ PATCH = 2
5
5
  PRE = nil
6
6
 
7
7
  VERSION = [MAJOR, MINOR, PATCH, PRE].map(&:freeze).compact.join('.').freeze
@@ -8,7 +8,7 @@ describe Hookly::Request do
8
8
  let(:run) { described_class.run(method, 'pathname', options, body) }
9
9
 
10
10
  let!(:request) { double(:request, :run => response) }
11
- let!(:response) { double(:response, :success? => true, :response_body => { response: 'body' }.to_json, :response_code => 900) }
11
+ let!(:response) { double(:response, :success? => true, :response_body => { code: 10, message: { response: 'body' } }.to_json, :response_code => 900) }
12
12
 
13
13
  before do
14
14
  allow(Typhoeus::Request).to receive(:new).and_return(request)
@@ -3,10 +3,149 @@
3
3
  * This library may be freely distributed under the MIT license.
4
4
  */
5
5
  (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.hookly = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
6
+ var hookly = {},
7
+ defaults,
8
+ channels,
9
+ connections,
10
+ clone = function(obj) {
11
+ return JSON.parse(JSON.stringify(obj));
12
+ };
13
+
14
+ hookly.reset = function() {
15
+ delete hookly.token;
16
+ delete hookly.uid;
17
+ delete hookly.adapter;
18
+
19
+ defaults = {};
20
+ channels = {};
21
+ connections = {};
22
+
23
+ return hookly;
24
+ };
25
+
26
+ hookly.start = function(token, uid, url) {
27
+ hookly.token = token;
28
+ hookly.uid = uid;
29
+ hookly.url = url || 'https://hookly.herokuapp.com';
30
+
31
+ defaults.token = token;
32
+ hookly.uid && (defaults.uid = uid);
33
+
34
+ hookly.adapter = new hookly.Adapter(hookly.url);
35
+ hookly.adapter.connect(defaults);
36
+ };
37
+
38
+ hookly.on = function(channel, callback) {
39
+ channels[channel] || (channels[channel] = []);
40
+ channels[channel].push(callback);
41
+
42
+ var opts = clone(defaults);
43
+ opts.slug = channel;
44
+
45
+ hookly.adapter.channel(opts);
46
+ };
47
+
48
+ hookly.notify = function(channel, uid, options) {
49
+ if(!options) {
50
+ options = uid;
51
+ uid = null;
52
+ }
53
+
54
+ var opts = clone(defaults);
55
+ opts.to = { slug: channel };
56
+ opts.body = options;
57
+
58
+ uid && (opts.to.uid = uid);
59
+
60
+ hookly.adapter.send(opts);
61
+ };
62
+
63
+ /*
64
+ * Adapter
65
+ * Connect to and translate data into the the communication layer.
66
+ */
67
+
68
+ hookly.Adapter = function(url) {
69
+ var that = {
70
+ url: url,
71
+ io: require('socket.io-client'),
72
+ initialized: false,
73
+ connected: false
74
+ }, sendQueue = [];
75
+
76
+ that.socket = that.io(that.url);
77
+
78
+ that.connect = function(options) {
79
+ if(that.initialized) {
80
+ console.warn('You only need to connect once');
81
+ return;
82
+ }
83
+
84
+ that.initialized = true;
85
+ that.options = options;
86
+
87
+ that.socket.on('connect', function() {
88
+ that.connected = true;
89
+ that.socket.emit('connections:create', JSON.stringify(that.options));
90
+
91
+ for(var key in connections) {
92
+ that.socket.emit('connections:update', JSON.stringify(connections[key]));
93
+ }
94
+
95
+ flushSendQueue();
96
+ });
97
+
98
+ that.socket.on('disconnect', function() {
99
+ that.connected = false;
100
+ });
101
+
102
+ that.socket.on('message', that.call);
103
+ };
104
+
105
+ that.channel = function(options) { var channel;
106
+ if(connections[(channel = options.slug)])
107
+ return;
108
+
109
+ connections[channel] = options;
110
+
111
+ that.socket.emit('connections:update', JSON.stringify(options));
112
+ };
113
+
114
+ that.call = function(data) {
115
+ data = JSON.parse(data);
116
+
117
+ var fns = channels[data.slug] || [];
118
+ for(var i=fns.length-1; i>=0; --i) {
119
+ fns[i].call(hookly , clone(data.body), { kind: data.kind });
120
+ }
121
+ };
122
+
123
+ that.send = function(options) {
124
+ sendQueue.push(options);
125
+
126
+ if(that.connected) {
127
+ flushSendQueue();
128
+ }
129
+ };
130
+
131
+ return that;
132
+
133
+ function flushSendQueue() {
134
+ for(var i=0; i<sendQueue.length; ++i) {
135
+ that.socket.emit('notes:create', JSON.stringify(sendQueue[i]));
136
+ }
137
+
138
+ sendQueue = [];
139
+ }
140
+ };
141
+
142
+ exports = module.exports = hookly.reset();
143
+
144
+ },{"socket.io-client":2}],2:[function(require,module,exports){
6
145
 
7
146
  module.exports = require('./lib/');
8
147
 
9
- },{"./lib/":2}],2:[function(require,module,exports){
148
+ },{"./lib/":3}],3:[function(require,module,exports){
10
149
 
11
150
  /**
12
151
  * Module dependencies.
@@ -95,7 +234,7 @@
95
234
  exports.Manager = require('./manager');
96
235
  exports.Socket = require('./socket');
97
236
 
98
- },{"./manager":3,"./socket":5,"./url":6,"debug":10,"socket.io-parser":46}],3:[function(require,module,exports){
237
+ },{"./manager":4,"./socket":6,"./url":7,"debug":11,"socket.io-parser":47}],4:[function(require,module,exports){
99
238
 
100
239
  /**
101
240
  * Module dependencies.
@@ -600,7 +739,7 @@
600
739
  this.emitAll('reconnect', attempt);
601
740
  };
602
741
 
603
- },{"./on":4,"./socket":5,"./url":6,"backo2":7,"component-bind":8,"component-emitter":9,"debug":10,"engine.io-client":11,"indexof":42,"object-component":43,"socket.io-parser":46}],4:[function(require,module,exports){
742
+ },{"./on":5,"./socket":6,"./url":7,"backo2":8,"component-bind":9,"component-emitter":10,"debug":11,"engine.io-client":12,"indexof":43,"object-component":44,"socket.io-parser":47}],5:[function(require,module,exports){
604
743
 
605
744
  /**
606
745
  * Module exports.
@@ -626,7 +765,7 @@
626
765
  };
627
766
  }
628
767
 
629
- },{}],5:[function(require,module,exports){
768
+ },{}],6:[function(require,module,exports){
630
769
 
631
770
  /**
632
771
  * Module dependencies.
@@ -1013,7 +1152,7 @@
1013
1152
  return this;
1014
1153
  };
1015
1154
 
1016
- },{"./on":4,"component-bind":8,"component-emitter":9,"debug":10,"has-binary":40,"socket.io-parser":46,"to-array":50}],6:[function(require,module,exports){
1155
+ },{"./on":5,"component-bind":9,"component-emitter":10,"debug":11,"has-binary":41,"socket.io-parser":47,"to-array":51}],7:[function(require,module,exports){
1017
1156
  (function (global){
1018
1157
 
1019
1158
  /**
@@ -1090,7 +1229,7 @@
1090
1229
  }
1091
1230
 
1092
1231
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
1093
- },{"debug":10,"parseuri":44}],7:[function(require,module,exports){
1232
+ },{"debug":11,"parseuri":45}],8:[function(require,module,exports){
1094
1233
 
1095
1234
  /**
1096
1235
  * Expose `Backoff`.
@@ -1177,7 +1316,7 @@
1177
1316
  };
1178
1317
 
1179
1318
 
1180
- },{}],8:[function(require,module,exports){
1319
+ },{}],9:[function(require,module,exports){
1181
1320
  /**
1182
1321
  * Slice reference.
1183
1322
  */
@@ -1202,7 +1341,7 @@
1202
1341
  }
1203
1342
  };
1204
1343
 
1205
- },{}],9:[function(require,module,exports){
1344
+ },{}],10:[function(require,module,exports){
1206
1345
 
1207
1346
  /**
1208
1347
  * Expose `Emitter`.
@@ -1368,7 +1507,7 @@
1368
1507
  return !! this.listeners(event).length;
1369
1508
  };
1370
1509
 
1371
- },{}],10:[function(require,module,exports){
1510
+ },{}],11:[function(require,module,exports){
1372
1511
 
1373
1512
  /**
1374
1513
  * Expose `debug()` as the module.
@@ -1507,11 +1646,11 @@
1507
1646
  if (window.localStorage) debug.enable(localStorage.debug);
1508
1647
  } catch(e){}
1509
1648
 
1510
- },{}],11:[function(require,module,exports){
1649
+ },{}],12:[function(require,module,exports){
1511
1650
 
1512
1651
  module.exports = require('./lib/');
1513
1652
 
1514
- },{"./lib/":12}],12:[function(require,module,exports){
1653
+ },{"./lib/":13}],13:[function(require,module,exports){
1515
1654
 
1516
1655
  module.exports = require('./socket');
1517
1656
 
@@ -1523,7 +1662,7 @@
1523
1662
  */
1524
1663
  module.exports.parser = require('engine.io-parser');
1525
1664
 
1526
- },{"./socket":13,"engine.io-parser":25}],13:[function(require,module,exports){
1665
+ },{"./socket":14,"engine.io-parser":26}],14:[function(require,module,exports){
1527
1666
  (function (global){
1528
1667
  /**
1529
1668
  * Module dependencies.
@@ -2232,7 +2371,7 @@
2232
2371
  };
2233
2372
 
2234
2373
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
2235
- },{"./transport":14,"./transports":15,"component-emitter":9,"debug":22,"engine.io-parser":25,"indexof":42,"parsejson":36,"parseqs":37,"parseuri":38}],14:[function(require,module,exports){
2374
+ },{"./transport":15,"./transports":16,"component-emitter":10,"debug":23,"engine.io-parser":26,"indexof":43,"parsejson":37,"parseqs":38,"parseuri":39}],15:[function(require,module,exports){
2236
2375
  /**
2237
2376
  * Module dependencies.
2238
2377
  */
@@ -2393,7 +2532,7 @@
2393
2532
  this.emit('close');
2394
2533
  };
2395
2534
 
2396
- },{"component-emitter":9,"engine.io-parser":25}],15:[function(require,module,exports){
2535
+ },{"component-emitter":10,"engine.io-parser":26}],16:[function(require,module,exports){
2397
2536
  (function (global){
2398
2537
  /**
2399
2538
  * Module dependencies
@@ -2450,7 +2589,7 @@
2450
2589
  }
2451
2590
 
2452
2591
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
2453
- },{"./polling-jsonp":16,"./polling-xhr":17,"./websocket":19,"xmlhttprequest":20}],16:[function(require,module,exports){
2592
+ },{"./polling-jsonp":17,"./polling-xhr":18,"./websocket":20,"xmlhttprequest":21}],17:[function(require,module,exports){
2454
2593
  (function (global){
2455
2594
 
2456
2595
  /**
@@ -2687,7 +2826,7 @@
2687
2826
  };
2688
2827
 
2689
2828
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
2690
- },{"./polling":18,"component-inherit":21}],17:[function(require,module,exports){
2829
+ },{"./polling":19,"component-inherit":22}],18:[function(require,module,exports){
2691
2830
  (function (global){
2692
2831
  /**
2693
2832
  * Module requirements.
@@ -3075,7 +3214,7 @@
3075
3214
  }
3076
3215
 
3077
3216
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
3078
- },{"./polling":18,"component-emitter":9,"component-inherit":21,"debug":22,"xmlhttprequest":20}],18:[function(require,module,exports){
3217
+ },{"./polling":19,"component-emitter":10,"component-inherit":22,"debug":23,"xmlhttprequest":21}],19:[function(require,module,exports){
3079
3218
  /**
3080
3219
  * Module dependencies.
3081
3220
  */
@@ -3322,7 +3461,7 @@
3322
3461
  return schema + '://' + this.hostname + port + this.path + query;
3323
3462
  };
3324
3463
 
3325
- },{"../transport":14,"component-inherit":21,"debug":22,"engine.io-parser":25,"parseqs":37,"xmlhttprequest":20}],19:[function(require,module,exports){
3464
+ },{"../transport":15,"component-inherit":22,"debug":23,"engine.io-parser":26,"parseqs":38,"xmlhttprequest":21}],20:[function(require,module,exports){
3326
3465
  /**
3327
3466
  * Module dependencies.
3328
3467
  */
@@ -3562,7 +3701,7 @@
3562
3701
  return !!WebSocket && !('__initialize' in WebSocket && this.name === WS.prototype.name);
3563
3702
  };
3564
3703
 
3565
- },{"../transport":14,"component-inherit":21,"debug":22,"engine.io-parser":25,"parseqs":37,"ws":39}],20:[function(require,module,exports){
3704
+ },{"../transport":15,"component-inherit":22,"debug":23,"engine.io-parser":26,"parseqs":38,"ws":40}],21:[function(require,module,exports){
3566
3705
  // browser shim for xmlhttprequest module
3567
3706
  var hasCORS = require('has-cors');
3568
3707
 
@@ -3600,7 +3739,7 @@
3600
3739
  }
3601
3740
  }
3602
3741
 
3603
- },{"has-cors":34}],21:[function(require,module,exports){
3742
+ },{"has-cors":35}],22:[function(require,module,exports){
3604
3743
 
3605
3744
  module.exports = function(a, b){
3606
3745
  var fn = function(){};
@@ -3608,7 +3747,7 @@
3608
3747
  a.prototype = new fn;
3609
3748
  a.prototype.constructor = a;
3610
3749
  };
3611
- },{}],22:[function(require,module,exports){
3750
+ },{}],23:[function(require,module,exports){
3612
3751
 
3613
3752
  /**
3614
3753
  * This is the web browser implementation of `debug()`.
@@ -3757,7 +3896,7 @@
3757
3896
 
3758
3897
  exports.enable(load());
3759
3898
 
3760
- },{"./debug":23}],23:[function(require,module,exports){
3899
+ },{"./debug":24}],24:[function(require,module,exports){
3761
3900
 
3762
3901
  /**
3763
3902
  * This is the common logic for both the Node.js and web browser
@@ -3956,7 +4095,7 @@
3956
4095
  return val;
3957
4096
  }
3958
4097
 
3959
- },{"ms":24}],24:[function(require,module,exports){
4098
+ },{"ms":25}],25:[function(require,module,exports){
3960
4099
  /**
3961
4100
  * Helpers.
3962
4101
  */
@@ -4069,7 +4208,7 @@
4069
4208
  return Math.ceil(ms / n) + ' ' + name + 's';
4070
4209
  }
4071
4210
 
4072
- },{}],25:[function(require,module,exports){
4211
+ },{}],26:[function(require,module,exports){
4073
4212
  (function (global){
4074
4213
  /**
4075
4214
  * Module dependencies.
@@ -4667,7 +4806,7 @@
4667
4806
  };
4668
4807
 
4669
4808
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
4670
- },{"./keys":26,"after":27,"arraybuffer.slice":28,"base64-arraybuffer":29,"blob":30,"has-binary":31,"utf8":33}],26:[function(require,module,exports){
4809
+ },{"./keys":27,"after":28,"arraybuffer.slice":29,"base64-arraybuffer":30,"blob":31,"has-binary":32,"utf8":34}],27:[function(require,module,exports){
4671
4810
 
4672
4811
  /**
4673
4812
  * Gets the keys for an object.
@@ -4688,7 +4827,7 @@
4688
4827
  return arr;
4689
4828
  };
4690
4829
 
4691
- },{}],27:[function(require,module,exports){
4830
+ },{}],28:[function(require,module,exports){
4692
4831
  module.exports = after
4693
4832
 
4694
4833
  function after(count, callback, err_cb) {
@@ -4718,7 +4857,7 @@
4718
4857
 
4719
4858
  function noop() {}
4720
4859
 
4721
- },{}],28:[function(require,module,exports){
4860
+ },{}],29:[function(require,module,exports){
4722
4861
  /**
4723
4862
  * An abstraction for slicing an arraybuffer even when
4724
4863
  * ArrayBuffer.prototype.slice is not supported
@@ -4749,7 +4888,7 @@
4749
4888
  return result.buffer;
4750
4889
  };
4751
4890
 
4752
- },{}],29:[function(require,module,exports){
4891
+ },{}],30:[function(require,module,exports){
4753
4892
  /*
4754
4893
  * base64-arraybuffer
4755
4894
  * https://github.com/niklasvh/base64-arraybuffer
@@ -4810,7 +4949,7 @@
4810
4949
  };
4811
4950
  })("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
4812
4951
 
4813
- },{}],30:[function(require,module,exports){
4952
+ },{}],31:[function(require,module,exports){
4814
4953
  (function (global){
4815
4954
  /**
4816
4955
  * Create a blob builder even when vendor prefixes exist
@@ -4863,7 +5002,7 @@
4863
5002
  })();
4864
5003
 
4865
5004
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
4866
- },{}],31:[function(require,module,exports){
5005
+ },{}],32:[function(require,module,exports){
4867
5006
  (function (global){
4868
5007
 
4869
5008
  /*
@@ -4925,12 +5064,12 @@
4925
5064
  }
4926
5065
 
4927
5066
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
4928
- },{"isarray":32}],32:[function(require,module,exports){
5067
+ },{"isarray":33}],33:[function(require,module,exports){
4929
5068
  module.exports = Array.isArray || function (arr) {
4930
5069
  return Object.prototype.toString.call(arr) == '[object Array]';
4931
5070
  };
4932
5071
 
4933
- },{}],33:[function(require,module,exports){
5072
+ },{}],34:[function(require,module,exports){
4934
5073
  (function (global){
4935
5074
  /*! http://mths.be/utf8js v2.0.0 by @mathias */
4936
5075
  ;(function(root) {
@@ -5173,7 +5312,7 @@
5173
5312
  }(this));
5174
5313
 
5175
5314
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
5176
- },{}],34:[function(require,module,exports){
5315
+ },{}],35:[function(require,module,exports){
5177
5316
 
5178
5317
  /**
5179
5318
  * Module dependencies.
@@ -5198,7 +5337,7 @@
5198
5337
  module.exports = false;
5199
5338
  }
5200
5339
 
5201
- },{"global":35}],35:[function(require,module,exports){
5340
+ },{"global":36}],36:[function(require,module,exports){
5202
5341
 
5203
5342
  /**
5204
5343
  * Returns `this`. Execute this without a "context" (i.e. without it being
@@ -5208,7 +5347,7 @@
5208
5347
 
5209
5348
  module.exports = (function () { return this; })();
5210
5349
 
5211
- },{}],36:[function(require,module,exports){
5350
+ },{}],37:[function(require,module,exports){
5212
5351
  (function (global){
5213
5352
  /**
5214
5353
  * JSON parse.
@@ -5243,7 +5382,7 @@
5243
5382
  }
5244
5383
  };
5245
5384
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
5246
- },{}],37:[function(require,module,exports){
5385
+ },{}],38:[function(require,module,exports){
5247
5386
  /**
5248
5387
  * Compiles a querystring
5249
5388
  * Returns string representation of the object
@@ -5282,7 +5421,7 @@
5282
5421
  return qry;
5283
5422
  };
5284
5423
 
5285
- },{}],38:[function(require,module,exports){
5424
+ },{}],39:[function(require,module,exports){
5286
5425
  /**
5287
5426
  * Parses an URI
5288
5427
  *
@@ -5323,7 +5462,7 @@
5323
5462
  return uri;
5324
5463
  };
5325
5464
 
5326
- },{}],39:[function(require,module,exports){
5465
+ },{}],40:[function(require,module,exports){
5327
5466
 
5328
5467
  /**
5329
5468
  * Module dependencies.
@@ -5368,7 +5507,7 @@
5368
5507
 
5369
5508
  if (WebSocket) ws.prototype = WebSocket.prototype;
5370
5509
 
5371
- },{}],40:[function(require,module,exports){
5510
+ },{}],41:[function(require,module,exports){
5372
5511
  (function (global){
5373
5512
 
5374
5513
  /*
@@ -5430,9 +5569,9 @@
5430
5569
  }
5431
5570
 
5432
5571
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
5433
- },{"isarray":41}],41:[function(require,module,exports){
5434
- arguments[4][32][0].apply(exports,arguments)
5435
- },{"dup":32}],42:[function(require,module,exports){
5572
+ },{"isarray":42}],42:[function(require,module,exports){
5573
+ arguments[4][33][0].apply(exports,arguments)
5574
+ },{"dup":33}],43:[function(require,module,exports){
5436
5575
 
5437
5576
  var indexOf = [].indexOf;
5438
5577
 
@@ -5443,7 +5582,7 @@
5443
5582
  }
5444
5583
  return -1;
5445
5584
  };
5446
- },{}],43:[function(require,module,exports){
5585
+ },{}],44:[function(require,module,exports){
5447
5586
 
5448
5587
  /**
5449
5588
  * HOP ref.
@@ -5528,7 +5667,7 @@
5528
5667
  exports.isEmpty = function(obj){
5529
5668
  return 0 == exports.length(obj);
5530
5669
  };
5531
- },{}],44:[function(require,module,exports){
5670
+ },{}],45:[function(require,module,exports){
5532
5671
  /**
5533
5672
  * Parses an URI
5534
5673
  *
@@ -5555,7 +5694,7 @@
5555
5694
  return uri;
5556
5695
  };
5557
5696
 
5558
- },{}],45:[function(require,module,exports){
5697
+ },{}],46:[function(require,module,exports){
5559
5698
  (function (global){
5560
5699
  /*global Blob,File*/
5561
5700
 
@@ -5700,7 +5839,7 @@
5700
5839
  };
5701
5840
 
5702
5841
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
5703
- },{"./is-buffer":47,"isarray":48}],46:[function(require,module,exports){
5842
+ },{"./is-buffer":48,"isarray":49}],47:[function(require,module,exports){
5704
5843
 
5705
5844
  /**
5706
5845
  * Module dependencies.
@@ -6102,7 +6241,7 @@
6102
6241
  };
6103
6242
  }
6104
6243
 
6105
- },{"./binary":45,"./is-buffer":47,"component-emitter":9,"debug":10,"isarray":48,"json3":49}],47:[function(require,module,exports){
6244
+ },{"./binary":46,"./is-buffer":48,"component-emitter":10,"debug":11,"isarray":49,"json3":50}],48:[function(require,module,exports){
6106
6245
  (function (global){
6107
6246
 
6108
6247
  module.exports = isBuf;
@@ -6119,9 +6258,9 @@
6119
6258
  }
6120
6259
 
6121
6260
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
6122
- },{}],48:[function(require,module,exports){
6123
- arguments[4][32][0].apply(exports,arguments)
6124
- },{"dup":32}],49:[function(require,module,exports){
6261
+ },{}],49:[function(require,module,exports){
6262
+ arguments[4][33][0].apply(exports,arguments)
6263
+ },{"dup":33}],50:[function(require,module,exports){
6125
6264
  /*! JSON v3.2.6 | http://bestiejs.github.io/json3 | Copyright 2012-2013, Kit Cambridge | http://kit.mit-license.org */
6126
6265
  ;(function (window) {
6127
6266
  // Convenience aliases.
@@ -6984,7 +7123,7 @@
6984
7123
  }
6985
7124
  }(this));
6986
7125
 
6987
- },{}],50:[function(require,module,exports){
7126
+ },{}],51:[function(require,module,exports){
6988
7127
  module.exports = toArray
6989
7128
 
6990
7129
  function toArray(list, index) {
@@ -6999,145 +7138,5 @@
6999
7138
  return array
7000
7139
  }
7001
7140
 
7002
- },{}],51:[function(require,module,exports){
7003
- var hookly = {},
7004
- defaults,
7005
- channels,
7006
- connections,
7007
- adapter,
7008
- clone = function(obj) {
7009
- return JSON.parse(JSON.stringify(obj));
7010
- };
7011
-
7012
- hookly.reset = function() {
7013
- delete hookly.token;
7014
- delete hookly.uid;
7015
-
7016
- defaults = {};
7017
- channels = {};
7018
- connections = {};
7019
- adapter = null;
7020
-
7021
- return hookly;
7022
- };
7023
-
7024
- hookly.start = function(token, uid, url) {
7025
- hookly.token = token;
7026
- hookly.uid = uid;
7027
- hookly.url = url || 'https://hookly.herokuapp.com';
7028
-
7029
- defaults.token = token;
7030
- hookly.uid && (defaults.uid = uid);
7031
-
7032
- adapter = new hookly.Adapter(hookly.url);
7033
- adapter.connect(defaults);
7034
- };
7035
-
7036
- hookly.on = function(channel, callback) {
7037
- channels[channel] || (channels[channel] = []);
7038
- channels[channel].push(callback);
7039
-
7040
- var opts = clone(defaults);
7041
- opts.slug = channel;
7042
-
7043
- adapter.channel(opts);
7044
- };
7045
-
7046
- hookly.notify = function(channel, uid, options) {
7047
- if(!options) {
7048
- options = uid;
7049
- uid = null;
7050
- }
7051
-
7052
- var opts = clone(defaults);
7053
- opts.to = { slug: channel };
7054
- opts.body = options;
7055
-
7056
- uid && (opts.to.uid = uid);
7057
-
7058
- adapter.send(opts);
7059
- };
7060
-
7061
- /*
7062
- * Adapter
7063
- * Connect to and translate data into the the communication layer.
7064
- */
7065
-
7066
- hookly.Adapter = function(url) {
7067
- var that = {
7068
- url: url,
7069
- io: require('socket.io-client'),
7070
- initialized: false,
7071
- connected: false
7072
- }, sendQueue = [];
7073
-
7074
- that.socket = that.io(that.url);
7075
-
7076
- that.connect = function(options) {
7077
- if(that.initialized) {
7078
- console.warn('You only need to connect once');
7079
- return;
7080
- }
7081
-
7082
- that.initialized = true;
7083
- that.options = options;
7084
-
7085
- that.socket.on('connect', function() {
7086
- that.connected = true;
7087
- that.socket.emit('connections:create', JSON.stringify(that.options));
7088
-
7089
- for(var key in connections) {
7090
- that.socket.emit('connections:update', JSON.stringify(connections[key]));
7091
- }
7092
-
7093
- flushSendQueue();
7094
- });
7095
-
7096
- that.socket.on('disconnect', function() {
7097
- that.connected = false;
7098
- });
7099
-
7100
- that.socket.on('message', that.call);
7101
- };
7102
-
7103
- that.channel = function(options) { var channel;
7104
- if(connections[(channel = options.slug)])
7105
- return;
7106
-
7107
- connections[channel] = options;
7108
-
7109
- that.socket.emit('connections:update', JSON.stringify(options));
7110
- };
7111
-
7112
- that.call = function(data) {
7113
- data = JSON.parse(data);
7114
-
7115
- var fns = channels[data.slug] || [];
7116
- for(var i=fns.length-1; i>=0; --i) {
7117
- fns[i].call(hookly , clone(data.body), { kind: data.kind });
7118
- }
7119
- };
7120
-
7121
- that.send = function(options) {
7122
- sendQueue.push(options);
7123
-
7124
- if(that.connected) {
7125
- flushSendQueue();
7126
- }
7127
- };
7128
-
7129
- return that;
7130
-
7131
- function flushSendQueue() {
7132
- for(var i=0; i<sendQueue.length; ++i) {
7133
- that.socket.emit('notes:create', JSON.stringify(sendQueue[i]));
7134
- }
7135
-
7136
- sendQueue = [];
7137
- }
7138
- };
7139
-
7140
- exports = module.exports = hookly.reset();
7141
-
7142
- },{"socket.io-client":1}]},{},[51])(51)
7141
+ },{}]},{},[1])(1)
7143
7142
  });
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hookly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Norton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-28 00:00:00.000000000 Z
11
+ date: 2015-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -64,6 +64,7 @@ files:
64
64
  - Gemfile
65
65
  - LICENSE.md
66
66
  - README.md
67
+ - circle.yml
67
68
  - hookly.gemspec
68
69
  - lib/error.rb
69
70
  - lib/errors/response_error.rb