callpixelsjs-rails 0.0.1 → 0.0.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.
@@ -0,0 +1,137 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>JSDoc: Source: campaign.js</title>
6
+
7
+ <script src="scripts/prettify/prettify.js"> </script>
8
+ <script src="scripts/prettify/lang-css.js"> </script>
9
+ <!--[if lt IE 9]>
10
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
11
+ <![endif]-->
12
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
13
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
14
+ </head>
15
+
16
+ <body>
17
+
18
+ <div id="main">
19
+
20
+ <h1 class="page-title">Source: campaign.js</h1>
21
+
22
+
23
+
24
+
25
+
26
+ <section>
27
+ <article>
28
+ <pre class="prettyprint source linenums"><code>(function () {
29
+ // Dependencies
30
+ var RequestNumber = Callpixels.Base.RequestNumber;
31
+ /**
32
+ * @constructor
33
+ * @memberOf Callpixels
34
+ * @param {Object} options
35
+ * @param {String} options.campaign_key - Campaign key
36
+ * @example
37
+ * var campaign = new Callpixels.Campaign({ campaign_key: '67d9fb1917ae8f4eaff36831b41788c3' });
38
+ */
39
+ var Campaign = function (options) {
40
+
41
+ function initialize(data) {
42
+ // initialize data store
43
+ self.store(data);
44
+ }
45
+
46
+ var self = this;
47
+ self.type = 'campaigns';
48
+ self.primary_key('campaign_key');
49
+ self.numbers = [];
50
+
51
+ /**
52
+ * Fetch a campaign number.
53
+ * @memberOf Callpixels.Campaign
54
+ * @function request_number
55
+ * @instance
56
+ * @param {Object} tags - A collection of tags as key-value pairs. The number returned will match these tags.
57
+ * @param {getNumberCallback} callback - Callback fired after the request completes.
58
+ * @example
59
+ * campaign.request_number({calling_about: 'support'}, function (number) {
60
+ * alert(number.get('number'))
61
+ * });
62
+ */
63
+ self.request_number = function (tags, callback) {
64
+ // assign the tags (this is important since it runs it through set_number_matching_tags)
65
+ self.set('number_matching_tags', tags);
66
+ // request the number
67
+ new RequestNumber(self.get('campaign_key', 'number_matching_tags')).perform(function (data) {
68
+ // initialize number
69
+ var number = new Callpixels.Number(data.number);
70
+ // call callback
71
+ callback.apply(self, [number]);
72
+ });
73
+ };
74
+ /**
75
+ * Callpixels.Campaign#request_number callback fired after the request completes.
76
+ * @callback getNumberCallback
77
+ * @param {Callpixels.Number} - The number that was returned
78
+ */
79
+
80
+ self.numbers = function () {
81
+ var output = [];
82
+ if (typeof(Callpixels.Base.Data._store) !== 'undefined') {
83
+ // get numbers
84
+ var numbers = Callpixels.Base.Data._store['numbers'];
85
+ // present?
86
+ if (typeof(numbers) !== 'undefined') {
87
+ // collect numbers matching this campaign
88
+ for (var primary_key in numbers) {
89
+ var number = numbers[primary_key];
90
+ if (self.get('campaign_key') == number.campaign_key) {
91
+ output.push(new Callpixels.Number(number));
92
+ }
93
+ }
94
+ }
95
+ }
96
+ return output;
97
+ };
98
+
99
+ self.set_number_matching_tags = function (tags) {
100
+ if (typeof(tags) === 'string') {
101
+ tags = Callpixels.Number.extract_tags_from_string(tags);
102
+ }
103
+ if (tags &amp;&amp; (typeof tags === "object") &amp;&amp; !(tags instanceof Array)) {
104
+ return tags
105
+ }
106
+ else {
107
+ throw "ArgumentError: Expected number_matching_tags to be an object. eg: {tag: 'value'}";
108
+ }
109
+ };
110
+
111
+ initialize(options);
112
+ };
113
+ Campaign.prototype = new Callpixels.Base.Model();
114
+ Callpixels.Campaign = Campaign;
115
+ })();</code></pre>
116
+ </article>
117
+ </section>
118
+
119
+
120
+
121
+
122
+ </div>
123
+
124
+ <nav>
125
+ <h2><a href="index.html">Index</a></h2><h3>Classes</h3><ul><li><a href="Callpixels.Campaign.html">Campaign</a></li><li><a href="Callpixels.Number.html">Number</a></li></ul><h3><a href="global.html">Global</a></h3>
126
+ </nav>
127
+
128
+ <br clear="both">
129
+
130
+ <footer>
131
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.0-alpha9</a> on Wed Aug 13 2014 14:51:39 GMT-0400 (EDT)
132
+ </footer>
133
+
134
+ <script> prettyPrint(); </script>
135
+ <script src="scripts/linenumber.js"> </script>
136
+ </body>
137
+ </html>
@@ -0,0 +1,236 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>JSDoc: Global</title>
6
+
7
+ <script src="scripts/prettify/prettify.js"> </script>
8
+ <script src="scripts/prettify/lang-css.js"> </script>
9
+ <!--[if lt IE 9]>
10
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
11
+ <![endif]-->
12
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
13
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
14
+ </head>
15
+
16
+ <body>
17
+
18
+ <div id="main">
19
+
20
+ <h1 class="page-title">Global</h1>
21
+
22
+
23
+
24
+
25
+
26
+ <section>
27
+
28
+ <header>
29
+ <h2>
30
+
31
+ </h2>
32
+
33
+ </header>
34
+
35
+ <article>
36
+ <div class="container-overview">
37
+
38
+
39
+
40
+
41
+
42
+
43
+ <dl class="details">
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+ </dl>
70
+
71
+
72
+
73
+
74
+ </div>
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+ <h3 class="subsection-title">Type Definitions</h3>
94
+
95
+ <dl>
96
+
97
+ <dt>
98
+ <h4 class="name" id="getNumberCallback"><span class="type-signature"></span>getNumberCallback<span class="signature">()</span><span class="type-signature"></span></h4>
99
+
100
+
101
+ </dt>
102
+ <dd>
103
+
104
+
105
+ <div class="description">
106
+ Callpixels.Campaign#request_number callback fired after the request completes.
107
+ </div>
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+ <h5>Parameters:</h5>
116
+
117
+
118
+ <table class="params">
119
+ <thead>
120
+ <tr>
121
+
122
+
123
+ <th>Type</th>
124
+
125
+
126
+
127
+
128
+
129
+ <th class="last">Description</th>
130
+ </tr>
131
+ </thead>
132
+
133
+ <tbody>
134
+
135
+
136
+ <tr>
137
+
138
+
139
+ <td class="type">
140
+
141
+
142
+ <span class="param-type"><a href="Callpixels.Number.html">Callpixels.Number</a></span>
143
+
144
+
145
+
146
+ </td>
147
+
148
+
149
+
150
+
151
+
152
+ <td class="description last">The number that was returned</td>
153
+ </tr>
154
+
155
+
156
+ </tbody>
157
+ </table>
158
+
159
+
160
+
161
+ <dl class="details">
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+ <dt class="tag-source">Source:</dt>
182
+ <dd class="tag-source"><ul class="dummy"><li>
183
+ <a href="campaign.js.html">campaign.js</a>, <a href="campaign.js.html#line47">line 47</a>
184
+ </li></ul></dd>
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+ </dl>
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+ </dd>
209
+
210
+ </dl>
211
+
212
+
213
+
214
+ </article>
215
+
216
+ </section>
217
+
218
+
219
+
220
+
221
+ </div>
222
+
223
+ <nav>
224
+ <h2><a href="index.html">Index</a></h2><h3>Classes</h3><ul><li><a href="Callpixels.Campaign.html">Campaign</a></li><li><a href="Callpixels.Number.html">Number</a></li></ul><h3><a href="global.html">Global</a></h3>
225
+ </nav>
226
+
227
+ <br clear="both">
228
+
229
+ <footer>
230
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.0-alpha9</a> on Wed Aug 13 2014 14:51:39 GMT-0400 (EDT)
231
+ </footer>
232
+
233
+ <script> prettyPrint(); </script>
234
+ <script src="scripts/linenumber.js"> </script>
235
+ </body>
236
+ </html>
@@ -0,0 +1,63 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>JSDoc: Index</title>
6
+
7
+ <script src="scripts/prettify/prettify.js"> </script>
8
+ <script src="scripts/prettify/lang-css.js"> </script>
9
+ <!--[if lt IE 9]>
10
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
11
+ <![endif]-->
12
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
13
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
14
+ </head>
15
+
16
+ <body>
17
+
18
+ <div id="main">
19
+
20
+ <h1 class="page-title">Index</h1>
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+ <h3> </h3>
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+ </div>
49
+
50
+ <nav>
51
+ <h2><a href="index.html">Index</a></h2><h3>Classes</h3><ul><li><a href="Callpixels.Campaign.html">Campaign</a></li><li><a href="Callpixels.Number.html">Number</a></li></ul><h3><a href="global.html">Global</a></h3>
52
+ </nav>
53
+
54
+ <br clear="both">
55
+
56
+ <footer>
57
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.0-alpha9</a> on Wed Aug 13 2014 14:51:39 GMT-0400 (EDT)
58
+ </footer>
59
+
60
+ <script> prettyPrint(); </script>
61
+ <script src="scripts/linenumber.js"> </script>
62
+ </body>
63
+ </html>
@@ -0,0 +1,250 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>JSDoc: Source: number.js</title>
6
+
7
+ <script src="scripts/prettify/prettify.js"> </script>
8
+ <script src="scripts/prettify/lang-css.js"> </script>
9
+ <!--[if lt IE 9]>
10
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
11
+ <![endif]-->
12
+ <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
13
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
14
+ </head>
15
+
16
+ <body>
17
+
18
+ <div id="main">
19
+
20
+ <h1 class="page-title">Source: number.js</h1>
21
+
22
+
23
+
24
+
25
+
26
+ <section>
27
+ <article>
28
+ <pre class="prettyprint source linenums"><code>(function () {
29
+ // Dependencies
30
+ var Base = Callpixels.Base;
31
+ /**
32
+ * @constructor
33
+ * @memberOf Callpixels
34
+ * @param {Object} attributes - Attributes
35
+ * @property {Object} attributes
36
+ * @property {Number} attributes.id - The CallPixels internal number ID.
37
+ * @property {String} attributes.formatted_number - Nationally formatted phone number.
38
+ * @property {String} attributes.number - E.164 formatted phone number.
39
+ * @property {String} attributes.plain_number - The unformatted phone number digits.
40
+ * @property {Boolean} attributes.target_open - Whether there is an open, available target.
41
+ */
42
+ Callpixels.Number = function (options) {
43
+
44
+ var self = this;
45
+ self.type = 'numbers';
46
+
47
+ function initialize(data) {
48
+ self.store(data);
49
+ self.set('is_active', 'true');
50
+ }
51
+
52
+ /**
53
+ * Add tags to a number.
54
+ * @memberOf Callpixels.Number
55
+ * @function add_tags
56
+ * @instance
57
+ * @param {Object} tags - A collection of tags {key: 'value', tag2: 'value2'}
58
+ * @param {Function} callback - Callback that will be fired after request.
59
+ * @throws Will throw an error if attempting to modify tags on a number that doesn't belong to a number pool
60
+ * with per-visitor numbers enabled.
61
+ */
62
+ self.add_tags = function (tags, callback) {
63
+ ensure_is_per_visitor();
64
+ self.post_data('numbers/tag', tags_payload(tags), callback);
65
+ };
66
+
67
+ /**
68
+ * Remove tags from a number.
69
+ * @memberOf Callpixels.Number
70
+ * @function remove_tags
71
+ * @instance
72
+ * @param {Object} tags - A collection of tags {key: 'value', tag2: 'value2'}
73
+ * @param {Function} callback - Callback that will be fired after request.
74
+ * @throws Will throw an error if attempting to modify tags on a number that doesn't belong to a number pool
75
+ * with per-visitor numbers enabled.
76
+ */
77
+ self.remove_tags = function (tags, callback) {
78
+ ensure_is_per_visitor();
79
+ self.post_data('numbers/untag', tags_payload(tags), callback);
80
+ };
81
+
82
+ /**
83
+ * Removes all tags with given keys from a number.
84
+ * @memberOf Callpixels.Number
85
+ * @function remove_tags_by_keys
86
+ * @instance
87
+ * @param {Array} keys - An array of keys to remove. eg: ['key1', 'key2']
88
+ * @param {Function} callback - Callback that will be fired after request.
89
+ * @throws Will throw an error if attempting to modify tags on a number that doesn't belong to a number pool
90
+ * with per-visitor numbers enabled.
91
+ */
92
+ self.remove_tags_by_keys = function (keys, callback) {
93
+ ensure_is_per_visitor();
94
+ if (typeof(keys) === 'string') keys = keys.split(',');
95
+ var payload = {
96
+ tag_keys: keys,
97
+ ids: [ get('id') ],
98
+ campaign_key: get('campaign_key')
99
+ };
100
+ self.post_data('numbers/untag/keys', payload, callback);
101
+ };
102
+
103
+ /**
104
+ * Clear all tags from a number.
105
+ * @memberOf Callpixels.Number
106
+ * @function clear_tags
107
+ * @instance
108
+ * @param {Function} callback - Callback that will be fired after request.
109
+ * @throws Will throw an error if attempting to modify tags on a number that doesn't belong to a number pool
110
+ * with per-visitor numbers enabled.
111
+ */
112
+ self.clear_tags = function (callback) {
113
+ ensure_is_per_visitor();
114
+ var payload = {
115
+ ids: [ get('id') ],
116
+ campaign_key: get('campaign_key'),
117
+ all: 'true'
118
+ };
119
+ self.post_data('numbers/untag', payload, callback);
120
+ };
121
+
122
+ /**
123
+ * Release number back to pool.
124
+ * @memberOf Callpixels.Number
125
+ * @function release
126
+ * @instance
127
+ */
128
+ self.release = function () {
129
+ self.set('is_active', 'false');
130
+ };
131
+
132
+ /**
133
+ * Start a call immediately by having a campaign target dial the visitor.
134
+ * @memberOf Callpixels.Number
135
+ * @function initiate_call
136
+ * @instance
137
+ * @param {String} dial - The number to call.
138
+ * @param {Object} payload - A collection of tags as key-value pairs and optional secure override properties.
139
+ * @param {string} [payload.target_map] - A string mapping a placeholder number to a phone number.
140
+ * @param {string} [payload.target_map_cs] - A SHA1 checksum of the target_map concatenated with your CallPixels API
141
+ * key.
142
+ * @param {number} [payload.timer_offset] - Number of seconds to offset the "connect" duration timers by.
143
+ * @param {string} [payload.timer_offset_cs] - An SHA1 checksum of the timer_offset concatenated with your
144
+ * CallPixels API key.
145
+ * @param {(string|number)} [payload.*] - Key value pairs treated as tags.
146
+ * @param {Function} callback - Callback that will be fired after request.
147
+ * @example
148
+ * number.initiate_call('4166686980', {company_name: 'CallPixels'}, function (call) {
149
+ * alert('Call started with UUID ' + call.uuid)
150
+ * });
151
+ */
152
+ self.initiate_call = function (dial, payload, callback) {
153
+ if (typeof(payload) === 'undefined') payload = {};
154
+ // assign dial to payload
155
+ payload.dial = dial;
156
+ // merge payload into payload
157
+ payload = Base.merge(self.get('id', 'campaign_key'), payload);
158
+ // post the payload
159
+ self.post_data('numbers/initiate_call', payload, callback);
160
+ };
161
+
162
+ function tags_payload(tags) {
163
+ if (typeof(tags) === 'string') tags = Callpixels.Number.extract_tags_from_string(tags);
164
+ return {
165
+ tag_values: tags,
166
+ ids: [ get('id') ],
167
+ campaign_key: get('campaign_key')
168
+ };
169
+ }
170
+
171
+ function get(key) {
172
+ return self.get(key);
173
+ }
174
+
175
+ function ensure_is_per_visitor() {
176
+ if (self.get('is_per_visitor') === false) {
177
+ throw "Error: Tried to add tags to non per-visitor number.";
178
+ }
179
+ }
180
+
181
+ initialize(options);
182
+ };
183
+
184
+ Callpixels.Number.extract_tags_from_string = function (tags) {
185
+ var output = {};
186
+ var tags = tags.split(",");
187
+ for (var i = 0; i &lt; tags.length; i++) {
188
+ var tag = tags[i].split(":");
189
+ output[tag[0]] = tag[1]
190
+ }
191
+ return output;
192
+ };
193
+
194
+ Callpixels.Number.prototype = new Callpixels.Base.Model();
195
+
196
+ function ping_active_numbers(callback) {
197
+ if (typeof(Callpixels.Base.Data._store) !== 'undefined') {
198
+ // get numbers
199
+ var numbers = Callpixels.Base.Data._store['numbers'];
200
+ // for each number
201
+ if (typeof(numbers) !== 'undefined') {
202
+ // group number_ids by campaign_key
203
+ var grouped = {};
204
+ for (var primary_key in numbers) {
205
+ var number = numbers[primary_key];
206
+ if (number.is_active === 'true') {
207
+ if (typeof(grouped[number.campaign_key]) === 'undefined') grouped[number.campaign_key] = [];
208
+ grouped[number.campaign_key].push(number.id);
209
+ }
210
+ }
211
+ // ping each group of number_ids
212
+ for (var campaign_key in grouped) {
213
+ var payload = {
214
+ campaign_key: campaign_key,
215
+ ids: grouped[campaign_key]
216
+ };
217
+ Callpixels.Base.Request.connection().postJSON('/api/v1/numbers/ping', payload, [Callpixels.Base.Model.update, callback], this);
218
+ }
219
+ }
220
+ }
221
+ // call recursively
222
+ setTimeout(ping_active_numbers, 15000);
223
+ }
224
+
225
+ // always ping active numbers
226
+ ping_active_numbers();
227
+
228
+ })();</code></pre>
229
+ </article>
230
+ </section>
231
+
232
+
233
+
234
+
235
+ </div>
236
+
237
+ <nav>
238
+ <h2><a href="index.html">Index</a></h2><h3>Classes</h3><ul><li><a href="Callpixels.Campaign.html">Campaign</a></li><li><a href="Callpixels.Number.html">Number</a></li></ul><h3><a href="global.html">Global</a></h3>
239
+ </nav>
240
+
241
+ <br clear="both">
242
+
243
+ <footer>
244
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.0-alpha9</a> on Wed Aug 13 2014 14:51:39 GMT-0400 (EDT)
245
+ </footer>
246
+
247
+ <script> prettyPrint(); </script>
248
+ <script src="scripts/linenumber.js"> </script>
249
+ </body>
250
+ </html>