jpush_api_ruby_client 0.0.1

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.
Files changed (60) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +45 -0
  6. data/Rakefile +1 -0
  7. data/doc/Gemfile.html +105 -0
  8. data/doc/JPushApiRubyClient/Client.html +774 -0
  9. data/doc/JPushApiRubyClient/MsgType.html +159 -0
  10. data/doc/JPushApiRubyClient/PlatformType.html +164 -0
  11. data/doc/JPushApiRubyClient/ReceiverType.html +169 -0
  12. data/doc/JPushApiRubyClient.html +166 -0
  13. data/doc/LICENSE_txt.html +121 -0
  14. data/doc/Rakefile.html +101 -0
  15. data/doc/created.rid +15 -0
  16. data/doc/doc/created_rid.html +99 -0
  17. data/doc/images/add.png +0 -0
  18. data/doc/images/arrow_up.png +0 -0
  19. data/doc/images/brick.png +0 -0
  20. data/doc/images/brick_link.png +0 -0
  21. data/doc/images/bug.png +0 -0
  22. data/doc/images/bullet_black.png +0 -0
  23. data/doc/images/bullet_toggle_minus.png +0 -0
  24. data/doc/images/bullet_toggle_plus.png +0 -0
  25. data/doc/images/date.png +0 -0
  26. data/doc/images/delete.png +0 -0
  27. data/doc/images/find.png +0 -0
  28. data/doc/images/loadingAnimation.gif +0 -0
  29. data/doc/images/macFFBgHack.png +0 -0
  30. data/doc/images/package.png +0 -0
  31. data/doc/images/page_green.png +0 -0
  32. data/doc/images/page_white_text.png +0 -0
  33. data/doc/images/page_white_width.png +0 -0
  34. data/doc/images/plugin.png +0 -0
  35. data/doc/images/ruby.png +0 -0
  36. data/doc/images/tag_blue.png +0 -0
  37. data/doc/images/tag_green.png +0 -0
  38. data/doc/images/transparent.png +0 -0
  39. data/doc/images/wrench.png +0 -0
  40. data/doc/images/wrench_orange.png +0 -0
  41. data/doc/images/zoom.png +0 -0
  42. data/doc/index.html +96 -0
  43. data/doc/jpush_api_ruby_client_gemspec.html +126 -0
  44. data/doc/js/darkfish.js +155 -0
  45. data/doc/js/jquery.js +18 -0
  46. data/doc/js/navigation.js +142 -0
  47. data/doc/js/search.js +94 -0
  48. data/doc/js/search_index.js +1 -0
  49. data/doc/js/searcher.js +228 -0
  50. data/doc/rdoc.css +595 -0
  51. data/doc/table_of_contents.html +99 -0
  52. data/example/client_example.rb +66 -0
  53. data/jpush_api_ruby_client.gemspec +25 -0
  54. data/lib/jpush_api_ruby_client/client.rb +233 -0
  55. data/lib/jpush_api_ruby_client/msg_type.rb +12 -0
  56. data/lib/jpush_api_ruby_client/platform_type.rb +14 -0
  57. data/lib/jpush_api_ruby_client/receiver_type.rb +16 -0
  58. data/lib/jpush_api_ruby_client/version.rb +3 -0
  59. data/lib/jpush_api_ruby_client.rb +8 -0
  60. metadata +158 -0
@@ -0,0 +1 @@
1
+ var search_data = {"index":{"searchIndex":["jpushapirubyclient","client","msgtype","platformtype","receivertype","enable_ssl()","generate_send_no()","new()","send_message_with_alias()","send_message_with_appkey()","send_message_with_imei()","send_message_with_tag()","send_notification_with_alias()","send_notification_with_appkey()","send_notification_with_imei()","send_notification_with_tag()","gemfile","license","rakefile","created.rid","jpush_api_ruby_client.gemspec"],"longSearchIndex":["jpushapirubyclient","jpushapirubyclient::client","jpushapirubyclient::msgtype","jpushapirubyclient::platformtype","jpushapirubyclient::receivertype","jpushapirubyclient::client#enable_ssl()","jpushapirubyclient::client#generate_send_no()","jpushapirubyclient::client::new()","jpushapirubyclient::client#send_message_with_alias()","jpushapirubyclient::client#send_message_with_appkey()","jpushapirubyclient::client#send_message_with_imei()","jpushapirubyclient::client#send_message_with_tag()","jpushapirubyclient::client#send_notification_with_alias()","jpushapirubyclient::client#send_notification_with_appkey()","jpushapirubyclient::client#send_notification_with_imei()","jpushapirubyclient::client#send_notification_with_tag()","","","","",""],"info":[["JPushApiRubyClient","","JPushApiRubyClient.html","",""],["JPushApiRubyClient::Client","","JPushApiRubyClient/Client.html","",""],["JPushApiRubyClient::MsgType","","JPushApiRubyClient/MsgType.html","","<p>消息类型\n\n"],["JPushApiRubyClient::PlatformType","","JPushApiRubyClient/PlatformType.html","","<p>平台标识\n\n"],["JPushApiRubyClient::ReceiverType","","JPushApiRubyClient/ReceiverType.html","","<p>消息接收类型\n\n"],["enable_ssl","JPushApiRubyClient::Client","JPushApiRubyClient/Client.html#method-i-enable_ssl","(https = false)","<p>是否启用https ssl连接,缺省false\n<p>@param [Object] true or false\n\n"],["generate_send_no","JPushApiRubyClient::Client","JPushApiRubyClient/Client.html#method-i-generate_send_no","()","<p>当前时间戳生成send_no\n<p>@return [Integer]\n\n"],["new","JPushApiRubyClient::Client","JPushApiRubyClient/Client.html#method-c-new","(app_key, master_secret, opts ={}, &block)","<p>@param [String] app_key\n<p>@param [String] master_secret\n<p>@param [Hash] opts opts可选参数可包含time_to_live、platform …\n"],["send_message_with_alias","JPushApiRubyClient::Client","JPushApiRubyClient/Client.html#method-i-send_message_with_alias","(send_no, alias_, msg_title, msg_content, opts = {})","<p>发送带别名推送的自定义消息\n<p>@param [Integer] send_no\n<p>@param [String] alias_\n"],["send_message_with_appkey","JPushApiRubyClient::Client","JPushApiRubyClient/Client.html#method-i-send_message_with_appkey","(send_no, msg_title, msg_content, opts = {})","<p>发送使用 appkey 推送的自定义消息\n<p>@param [Integer] send_no\n<p>@param [String] msg_title\n"],["send_message_with_imei","JPushApiRubyClient::Client","JPushApiRubyClient/Client.html#method-i-send_message_with_imei","(send_no, imei, msg_title, msg_content, opts = {})","<p>发送带 imei 推送的自定义消息\n<p>@param [Integer] send_no\n<p>@param [String] imei\n"],["send_message_with_tag","JPushApiRubyClient::Client","JPushApiRubyClient/Client.html#method-i-send_message_with_tag","(send_no, tag, msg_title, msg_content, opts = {})","<p>发送标签带推送的自定义消息\n<p>@param [Integer] send_no\n<p>@param [String] tag\n"],["send_notification_with_alias","JPushApiRubyClient::Client","JPushApiRubyClient/Client.html#method-i-send_notification_with_alias","(send_no, alias_, msg_title, msg_content, opts = {})","<p>发送带别名推送的通知\n<p>@param [Integer] send_no\n<p>@param [String] alias_\n"],["send_notification_with_appkey","JPushApiRubyClient::Client","JPushApiRubyClient/Client.html#method-i-send_notification_with_appkey","(send_no, msg_title, msg_content, opts = {})","<p>发送使用 appkey 推送的通知\n<p>@param [Integer] send_no\n<p>@param [String] msg_title\n"],["send_notification_with_imei","JPushApiRubyClient::Client","JPushApiRubyClient/Client.html#method-i-send_notification_with_imei","(send_no, imei, msg_title, msg_content, opts = {})","<p>发送带IMEI号推送的通知\n<p>@param [Integer] send_no\n<p>@param [String] imei\n"],["send_notification_with_tag","JPushApiRubyClient::Client","JPushApiRubyClient/Client.html#method-i-send_notification_with_tag","(send_no, tag, msg_title, msg_content, opts = {})","<p>发送带标签推送的通知\n<p>@param [Integer] send_no\n<p>@param [String] tag\n"],["Gemfile","","Gemfile.html","","<p>source &#39;rubygems.org&#39;\n<p># Specify your gem&#39;s dependencies in jpush_api_ruby_client.gemspec\ngemspec …\n"],["LICENSE","","LICENSE_txt.html","","<p>Copyright © 2013 ouyangxian\n<p>MIT License\n<p>Permission is hereby granted, free of charge, to any person obtaining …\n"],["Rakefile","","Rakefile.html","","<p>require “bundler/gem_tasks”\n"],["created.rid","","doc/created_rid.html","",""],["jpush_api_ruby_client.gemspec","","jpush_api_ruby_client_gemspec.html","","<p>lib = File.expand_path(“../lib”, __FILE__) $LOAD_PATH.unshift(lib) unless\n$LOAD_PATH.include?(lib) …\n"]]}}
@@ -0,0 +1,228 @@
1
+ Searcher = function(data) {
2
+ this.data = data;
3
+ this.handlers = [];
4
+ }
5
+
6
+ Searcher.prototype = new function() {
7
+ // search is performed in chunks of 1000 for non-blocking user input
8
+ var CHUNK_SIZE = 1000;
9
+ // do not try to find more than 100 results
10
+ var MAX_RESULTS = 100;
11
+ var huid = 1;
12
+ var suid = 1;
13
+ var runs = 0;
14
+
15
+ this.find = function(query) {
16
+ var queries = splitQuery(query);
17
+ var regexps = buildRegexps(queries);
18
+ var highlighters = buildHilighters(queries);
19
+ var state = { from: 0, pass: 0, limit: MAX_RESULTS, n: suid++};
20
+ var _this = this;
21
+
22
+ this.currentSuid = state.n;
23
+
24
+ if (!query) return;
25
+
26
+ var run = function() {
27
+ // stop current search thread if new search started
28
+ if (state.n != _this.currentSuid) return;
29
+
30
+ var results =
31
+ performSearch(_this.data, regexps, queries, highlighters, state);
32
+ var hasMore = (state.limit > 0 && state.pass < 4);
33
+
34
+ triggerResults.call(_this, results, !hasMore);
35
+ if (hasMore) {
36
+ setTimeout(run, 2);
37
+ }
38
+ runs++;
39
+ };
40
+ runs = 0;
41
+
42
+ // start search thread
43
+ run();
44
+ }
45
+
46
+ /* ----- Events ------ */
47
+ this.ready = function(fn) {
48
+ fn.huid = huid;
49
+ this.handlers.push(fn);
50
+ }
51
+
52
+ /* ----- Utilities ------ */
53
+ function splitQuery(query) {
54
+ return jQuery.grep(query.split(/(\s+|::?|\(\)?)/), function(string) {
55
+ return string.match(/\S/)
56
+ });
57
+ }
58
+
59
+ function buildRegexps(queries) {
60
+ return jQuery.map(queries, function(query) {
61
+ return new RegExp(query.replace(/(.)/g, '([$1])([^$1]*?)'), 'i')
62
+ });
63
+ }
64
+
65
+ function buildHilighters(queries) {
66
+ return jQuery.map(queries, function(query) {
67
+ return jQuery.map(query.split(''), function(l, i) {
68
+ return '\u0001$' + (i*2+1) + '\u0002$' + (i*2+2);
69
+ }).join('');
70
+ });
71
+ }
72
+
73
+ // function longMatchRegexp(index, longIndex, regexps) {
74
+ // for (var i = regexps.length - 1; i >= 0; i--){
75
+ // if (!index.match(regexps[i]) && !longIndex.match(regexps[i])) return false;
76
+ // };
77
+ // return true;
78
+ // }
79
+
80
+
81
+ /* ----- Mathchers ------ */
82
+
83
+ /*
84
+ * This record matches if the index starts with queries[0] and the record
85
+ * matches all of the regexps
86
+ */
87
+ function matchPassBeginning(index, longIndex, queries, regexps) {
88
+ if (index.indexOf(queries[0]) != 0) return false;
89
+ for (var i=1, l = regexps.length; i < l; i++) {
90
+ if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
91
+ return false;
92
+ };
93
+ return true;
94
+ }
95
+
96
+ /*
97
+ * This record matches if the longIndex starts with queries[0] and the
98
+ * longIndex matches all of the regexps
99
+ */
100
+ function matchPassLongIndex(index, longIndex, queries, regexps) {
101
+ if (longIndex.indexOf(queries[0]) != 0) return false;
102
+ for (var i=1, l = regexps.length; i < l; i++) {
103
+ if (!longIndex.match(regexps[i]))
104
+ return false;
105
+ };
106
+ return true;
107
+ }
108
+
109
+ /*
110
+ * This record matches if the index contains queries[0] and the record
111
+ * matches all of the regexps
112
+ */
113
+ function matchPassContains(index, longIndex, queries, regexps) {
114
+ if (index.indexOf(queries[0]) == -1) return false;
115
+ for (var i=1, l = regexps.length; i < l; i++) {
116
+ if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
117
+ return false;
118
+ };
119
+ return true;
120
+ }
121
+
122
+ /*
123
+ * This record matches if regexps[0] matches the index and the record
124
+ * matches all of the regexps
125
+ */
126
+ function matchPassRegexp(index, longIndex, queries, regexps) {
127
+ if (!index.match(regexps[0])) return false;
128
+ for (var i=1, l = regexps.length; i < l; i++) {
129
+ if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
130
+ return false;
131
+ };
132
+ return true;
133
+ }
134
+
135
+
136
+ /* ----- Highlighters ------ */
137
+ function highlightRegexp(info, queries, regexps, highlighters) {
138
+ var result = createResult(info);
139
+ for (var i=0, l = regexps.length; i < l; i++) {
140
+ result.title = result.title.replace(regexps[i], highlighters[i]);
141
+ result.namespace = result.namespace.replace(regexps[i], highlighters[i]);
142
+ };
143
+ return result;
144
+ }
145
+
146
+ function hltSubstring(string, pos, length) {
147
+ return string.substring(0, pos) + '\u0001' + string.substring(pos, pos + length) + '\u0002' + string.substring(pos + length);
148
+ }
149
+
150
+ function highlightQuery(info, queries, regexps, highlighters) {
151
+ var result = createResult(info);
152
+ var pos = 0;
153
+ var lcTitle = result.title.toLowerCase();
154
+
155
+ pos = lcTitle.indexOf(queries[0]);
156
+ if (pos != -1) {
157
+ result.title = hltSubstring(result.title, pos, queries[0].length);
158
+ }
159
+
160
+ result.namespace = result.namespace.replace(regexps[0], highlighters[0]);
161
+ for (var i=1, l = regexps.length; i < l; i++) {
162
+ result.title = result.title.replace(regexps[i], highlighters[i]);
163
+ result.namespace = result.namespace.replace(regexps[i], highlighters[i]);
164
+ };
165
+ return result;
166
+ }
167
+
168
+ function createResult(info) {
169
+ var result = {};
170
+ result.title = info[0];
171
+ result.namespace = info[1];
172
+ result.path = info[2];
173
+ result.params = info[3];
174
+ result.snippet = info[4];
175
+ return result;
176
+ }
177
+
178
+ /* ----- Searching ------ */
179
+ function performSearch(data, regexps, queries, highlighters, state) {
180
+ var searchIndex = data.searchIndex;
181
+ var longSearchIndex = data.longSearchIndex;
182
+ var info = data.info;
183
+ var result = [];
184
+ var i = state.from;
185
+ var l = searchIndex.length;
186
+ var togo = CHUNK_SIZE;
187
+ var matchFunc, hltFunc;
188
+
189
+ while (state.pass < 4 && state.limit > 0 && togo > 0) {
190
+ if (state.pass == 0) {
191
+ matchFunc = matchPassBeginning;
192
+ hltFunc = highlightQuery;
193
+ } else if (state.pass == 1) {
194
+ matchFunc = matchPassLongIndex;
195
+ hltFunc = highlightQuery;
196
+ } else if (state.pass == 2) {
197
+ matchFunc = matchPassContains;
198
+ hltFunc = highlightQuery;
199
+ } else if (state.pass == 3) {
200
+ matchFunc = matchPassRegexp;
201
+ hltFunc = highlightRegexp;
202
+ }
203
+
204
+ for (; togo > 0 && i < l && state.limit > 0; i++, togo--) {
205
+ if (info[i].n == state.n) continue;
206
+ if (matchFunc(searchIndex[i], longSearchIndex[i], queries, regexps)) {
207
+ info[i].n = state.n;
208
+ result.push(hltFunc(info[i], queries, regexps, highlighters));
209
+ state.limit--;
210
+ }
211
+ };
212
+ if (searchIndex.length <= i) {
213
+ state.pass++;
214
+ i = state.from = 0;
215
+ } else {
216
+ state.from = i;
217
+ }
218
+ }
219
+ return result;
220
+ }
221
+
222
+ function triggerResults(results, isLast) {
223
+ jQuery.each(this.handlers, function(i, fn) {
224
+ fn.call(this, results, isLast)
225
+ })
226
+ }
227
+ }
228
+