pubnub 3.4.1 → 3.5.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of pubnub might be problematic. Click here for more details.

Files changed (467) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG +5 -3
  4. data/README.md +267 -41
  5. data/VERSION +1 -1
  6. data/examples/demo_console.rb +191 -32
  7. data/examples/demo_console.rb~ +307 -0
  8. data/examples/pubnub_livestream/Gemfile +1 -1
  9. data/examples/pubnub_livestream/Gemfile.lock +43 -74
  10. data/examples/serial_publish.rb +2 -6
  11. data/fixtures/vcr_cassettes/audit-nonssl-block-invalid-200-async.yml +44 -0
  12. data/fixtures/vcr_cassettes/audit-nonssl-block-invalid-200-sync.yml +44 -0
  13. data/fixtures/vcr_cassettes/audit-nonssl-block-invalid-non-200-async.yml +44 -0
  14. data/fixtures/vcr_cassettes/audit-nonssl-block-invalid-non-200-sync.yml +44 -0
  15. data/fixtures/vcr_cassettes/audit-nonssl-block-valid-200-async.yml +45 -0
  16. data/fixtures/vcr_cassettes/audit-nonssl-block-valid-200-sync.yml +45 -0
  17. data/fixtures/vcr_cassettes/audit-nonssl-block-valid-non-200-async.yml +45 -0
  18. data/fixtures/vcr_cassettes/audit-nonssl-block-valid-non-200-sync.yml +45 -0
  19. data/fixtures/vcr_cassettes/audit-nonssl-parameter-invalid-200-async.yml +44 -0
  20. data/fixtures/vcr_cassettes/audit-nonssl-parameter-invalid-200-sync.yml +44 -0
  21. data/fixtures/vcr_cassettes/audit-nonssl-parameter-invalid-non-200-async.yml +44 -0
  22. data/fixtures/vcr_cassettes/audit-nonssl-parameter-invalid-non-200-sync.yml +44 -0
  23. data/fixtures/vcr_cassettes/audit-nonssl-parameter-valid-200-async.yml +45 -0
  24. data/fixtures/vcr_cassettes/audit-nonssl-parameter-valid-200-sync.yml +45 -0
  25. data/fixtures/vcr_cassettes/audit-nonssl-parameter-valid-non-200-async.yml +45 -0
  26. data/fixtures/vcr_cassettes/audit-nonssl-parameter-valid-non-200-sync.yml +45 -0
  27. data/fixtures/vcr_cassettes/audit-ssl-block-invalid-200-async.yml +44 -0
  28. data/fixtures/vcr_cassettes/audit-ssl-block-invalid-200-sync.yml +44 -0
  29. data/fixtures/vcr_cassettes/audit-ssl-block-invalid-non-200-async.yml +44 -0
  30. data/fixtures/vcr_cassettes/audit-ssl-block-invalid-non-200-sync.yml +44 -0
  31. data/fixtures/vcr_cassettes/audit-ssl-block-valid-200-async.yml +45 -0
  32. data/fixtures/vcr_cassettes/audit-ssl-block-valid-200-sync.yml +45 -0
  33. data/fixtures/vcr_cassettes/audit-ssl-block-valid-non-200-async.yml +45 -0
  34. data/fixtures/vcr_cassettes/audit-ssl-block-valid-non-200-sync.yml +45 -0
  35. data/fixtures/vcr_cassettes/audit-ssl-parameter-invalid-200-async.yml +44 -0
  36. data/fixtures/vcr_cassettes/audit-ssl-parameter-invalid-200-sync.yml +44 -0
  37. data/fixtures/vcr_cassettes/audit-ssl-parameter-invalid-non-200-async.yml +44 -0
  38. data/fixtures/vcr_cassettes/audit-ssl-parameter-invalid-non-200-sync.yml +44 -0
  39. data/fixtures/vcr_cassettes/audit-ssl-parameter-valid-200-async.yml +45 -0
  40. data/fixtures/vcr_cassettes/audit-ssl-parameter-valid-200-sync.yml +45 -0
  41. data/fixtures/vcr_cassettes/audit-ssl-parameter-valid-non-200-async.yml +45 -0
  42. data/fixtures/vcr_cassettes/audit-ssl-parameter-valid-non-200-sync.yml +45 -0
  43. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-many-channels-array.yml +89 -0
  44. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-many-channels-hash.yml +89 -0
  45. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-many-channels-integer.yml +89 -0
  46. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-many-channels-mix.yml +89 -0
  47. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-many-channels-multi-mix.yml +89 -0
  48. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-many-channels-string.yml +89 -0
  49. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-one-channel-array.yml +89 -0
  50. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-one-channel-hash.yml +89 -0
  51. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-one-channel-integer.yml +89 -0
  52. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-one-channel-mix.yml +89 -0
  53. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-one-channel-string.yml +89 -0
  54. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-many-channels-array.yml +89 -0
  55. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-many-channels-hash.yml +89 -0
  56. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-many-channels-integer.yml +89 -0
  57. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-many-channels-mix.yml +89 -0
  58. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-many-channels-multi-mix.yml +89 -0
  59. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-many-channels-string.yml +89 -0
  60. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-one-channel-array.yml +89 -0
  61. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-one-channel-hash.yml +89 -0
  62. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-one-channel-integer.yml +89 -0
  63. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-one-channel-mix.yml +89 -0
  64. data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-one-channel-string.yml +89 -0
  65. data/fixtures/vcr_cassettes/grant-nonssl-block-invalid-200-async.yml +44 -0
  66. data/fixtures/vcr_cassettes/grant-nonssl-block-invalid-200-sync.yml +44 -0
  67. data/fixtures/vcr_cassettes/grant-nonssl-block-invalid-non-200-async.yml +44 -0
  68. data/fixtures/vcr_cassettes/grant-nonssl-block-invalid-non-200-sync.yml +44 -0
  69. data/fixtures/vcr_cassettes/grant-nonssl-block-valid-200-async.yml +45 -0
  70. data/fixtures/vcr_cassettes/grant-nonssl-block-valid-200-sync.yml +45 -0
  71. data/fixtures/vcr_cassettes/grant-nonssl-block-valid-non-200-async.yml +45 -0
  72. data/fixtures/vcr_cassettes/grant-nonssl-block-valid-non-200-sync.yml +45 -0
  73. data/fixtures/vcr_cassettes/grant-nonssl-parameter-invalid-200-async.yml +44 -0
  74. data/fixtures/vcr_cassettes/grant-nonssl-parameter-invalid-200-sync.yml +44 -0
  75. data/fixtures/vcr_cassettes/grant-nonssl-parameter-invalid-non-200-async.yml +44 -0
  76. data/fixtures/vcr_cassettes/grant-nonssl-parameter-invalid-non-200-sync.yml +44 -0
  77. data/fixtures/vcr_cassettes/grant-nonssl-parameter-valid-200-async.yml +45 -0
  78. data/fixtures/vcr_cassettes/grant-nonssl-parameter-valid-200-sync.yml +45 -0
  79. data/fixtures/vcr_cassettes/grant-nonssl-parameter-valid-non-200-async.yml +45 -0
  80. data/fixtures/vcr_cassettes/grant-nonssl-parameter-valid-non-200-sync.yml +45 -0
  81. data/fixtures/vcr_cassettes/grant-ssl-block-invalid-200-async.yml +44 -0
  82. data/fixtures/vcr_cassettes/grant-ssl-block-invalid-200-sync.yml +44 -0
  83. data/fixtures/vcr_cassettes/grant-ssl-block-invalid-non-200-async.yml +44 -0
  84. data/fixtures/vcr_cassettes/grant-ssl-block-invalid-non-200-sync.yml +44 -0
  85. data/fixtures/vcr_cassettes/grant-ssl-block-valid-200-async.yml +45 -0
  86. data/fixtures/vcr_cassettes/grant-ssl-block-valid-200-sync.yml +45 -0
  87. data/fixtures/vcr_cassettes/grant-ssl-block-valid-non-200-async.yml +45 -0
  88. data/fixtures/vcr_cassettes/grant-ssl-block-valid-non-200-sync.yml +45 -0
  89. data/fixtures/vcr_cassettes/grant-ssl-parameter-invalid-200-async.yml +44 -0
  90. data/fixtures/vcr_cassettes/grant-ssl-parameter-invalid-200-sync.yml +44 -0
  91. data/fixtures/vcr_cassettes/grant-ssl-parameter-invalid-non-200-async.yml +44 -0
  92. data/fixtures/vcr_cassettes/grant-ssl-parameter-invalid-non-200-sync.yml +44 -0
  93. data/fixtures/vcr_cassettes/grant-ssl-parameter-valid-200-async.yml +45 -0
  94. data/fixtures/vcr_cassettes/grant-ssl-parameter-valid-200-sync.yml +45 -0
  95. data/fixtures/vcr_cassettes/grant-ssl-parameter-valid-non-200-async.yml +45 -0
  96. data/fixtures/vcr_cassettes/grant-ssl-parameter-valid-non-200-sync.yml +45 -0
  97. data/fixtures/vcr_cassettes/here_now-nonssl-block-invalid-200-async.yml +48 -0
  98. data/fixtures/vcr_cassettes/here_now-nonssl-block-invalid-200-sync.yml +48 -0
  99. data/fixtures/vcr_cassettes/here_now-nonssl-block-invalid-non-200-async.yml +48 -0
  100. data/fixtures/vcr_cassettes/here_now-nonssl-block-invalid-non-200-sync.yml +48 -0
  101. data/fixtures/vcr_cassettes/here_now-nonssl-block-valid-200-async.yml +48 -0
  102. data/fixtures/vcr_cassettes/here_now-nonssl-block-valid-200-sync.yml +48 -0
  103. data/fixtures/vcr_cassettes/here_now-nonssl-block-valid-non-200-async.yml +48 -0
  104. data/fixtures/vcr_cassettes/here_now-nonssl-block-valid-non-200-sync.yml +48 -0
  105. data/fixtures/vcr_cassettes/here_now-nonssl-parameter-invalid-200-async.yml +48 -0
  106. data/fixtures/vcr_cassettes/here_now-nonssl-parameter-invalid-200-sync.yml +48 -0
  107. data/fixtures/vcr_cassettes/here_now-nonssl-parameter-invalid-non-200-async.yml +48 -0
  108. data/fixtures/vcr_cassettes/here_now-nonssl-parameter-invalid-non-200-sync.yml +48 -0
  109. data/fixtures/vcr_cassettes/here_now-nonssl-parameter-valid-200-async.yml +48 -0
  110. data/fixtures/vcr_cassettes/here_now-nonssl-parameter-valid-200-sync.yml +48 -0
  111. data/fixtures/vcr_cassettes/here_now-nonssl-parameter-valid-non-200-async.yml +48 -0
  112. data/fixtures/vcr_cassettes/here_now-nonssl-parameter-valid-non-200-sync.yml +48 -0
  113. data/fixtures/vcr_cassettes/here_now-ssl-block-invalid-200-async.yml +48 -0
  114. data/fixtures/vcr_cassettes/here_now-ssl-block-invalid-200-sync.yml +48 -0
  115. data/fixtures/vcr_cassettes/here_now-ssl-block-invalid-non-200-async.yml +48 -0
  116. data/fixtures/vcr_cassettes/here_now-ssl-block-invalid-non-200-sync.yml +48 -0
  117. data/fixtures/vcr_cassettes/here_now-ssl-block-valid-200-async.yml +48 -0
  118. data/fixtures/vcr_cassettes/here_now-ssl-block-valid-200-sync.yml +48 -0
  119. data/fixtures/vcr_cassettes/here_now-ssl-block-valid-non-200-async.yml +48 -0
  120. data/fixtures/vcr_cassettes/here_now-ssl-block-valid-non-200-sync.yml +48 -0
  121. data/fixtures/vcr_cassettes/here_now-ssl-parameter-invalid-200-async.yml +48 -0
  122. data/fixtures/vcr_cassettes/here_now-ssl-parameter-invalid-200-sync.yml +48 -0
  123. data/fixtures/vcr_cassettes/here_now-ssl-parameter-invalid-non-200-async.yml +48 -0
  124. data/fixtures/vcr_cassettes/here_now-ssl-parameter-invalid-non-200-sync.yml +48 -0
  125. data/fixtures/vcr_cassettes/here_now-ssl-parameter-valid-200-async.yml +48 -0
  126. data/fixtures/vcr_cassettes/here_now-ssl-parameter-valid-200-sync.yml +48 -0
  127. data/fixtures/vcr_cassettes/here_now-ssl-parameter-valid-non-200-async.yml +48 -0
  128. data/fixtures/vcr_cassettes/here_now-ssl-parameter-valid-non-200-sync.yml +48 -0
  129. data/fixtures/vcr_cassettes/history-nonssl-block-invalid-200-async.yml +48 -0
  130. data/fixtures/vcr_cassettes/history-nonssl-block-invalid-200-sync.yml +48 -0
  131. data/fixtures/vcr_cassettes/history-nonssl-block-invalid-non-200-async.yml +48 -0
  132. data/fixtures/vcr_cassettes/history-nonssl-block-invalid-non-200-sync.yml +48 -0
  133. data/fixtures/vcr_cassettes/history-nonssl-block-valid-200-async.yml +48 -0
  134. data/fixtures/vcr_cassettes/history-nonssl-block-valid-200-sync.yml +48 -0
  135. data/fixtures/vcr_cassettes/history-nonssl-block-valid-non-200-async.yml +48 -0
  136. data/fixtures/vcr_cassettes/history-nonssl-block-valid-non-200-sync.yml +48 -0
  137. data/fixtures/vcr_cassettes/history-nonssl-parameter-invalid-200-async.yml +48 -0
  138. data/fixtures/vcr_cassettes/history-nonssl-parameter-invalid-200-sync.yml +48 -0
  139. data/fixtures/vcr_cassettes/history-nonssl-parameter-invalid-non-200-async.yml +48 -0
  140. data/fixtures/vcr_cassettes/history-nonssl-parameter-invalid-non-200-sync.yml +48 -0
  141. data/fixtures/vcr_cassettes/history-nonssl-parameter-valid-200-async.yml +48 -0
  142. data/fixtures/vcr_cassettes/history-nonssl-parameter-valid-200-sync.yml +48 -0
  143. data/fixtures/vcr_cassettes/history-nonssl-parameter-valid-non-200-async.yml +48 -0
  144. data/fixtures/vcr_cassettes/history-nonssl-parameter-valid-non-200-sync.yml +48 -0
  145. data/fixtures/vcr_cassettes/history-ssl-block-invalid-200-async.yml +48 -0
  146. data/fixtures/vcr_cassettes/history-ssl-block-invalid-200-sync.yml +48 -0
  147. data/fixtures/vcr_cassettes/history-ssl-block-invalid-non-200-async.yml +48 -0
  148. data/fixtures/vcr_cassettes/history-ssl-block-invalid-non-200-sync.yml +48 -0
  149. data/fixtures/vcr_cassettes/history-ssl-block-valid-200-async.yml +48 -0
  150. data/fixtures/vcr_cassettes/history-ssl-block-valid-200-sync.yml +48 -0
  151. data/fixtures/vcr_cassettes/history-ssl-block-valid-non-200-async.yml +48 -0
  152. data/fixtures/vcr_cassettes/history-ssl-block-valid-non-200-sync.yml +48 -0
  153. data/fixtures/vcr_cassettes/history-ssl-parameter-invalid-200-async.yml +48 -0
  154. data/fixtures/vcr_cassettes/history-ssl-parameter-invalid-200-sync.yml +48 -0
  155. data/fixtures/vcr_cassettes/history-ssl-parameter-invalid-non-200-async.yml +48 -0
  156. data/fixtures/vcr_cassettes/history-ssl-parameter-invalid-non-200-sync.yml +48 -0
  157. data/fixtures/vcr_cassettes/history-ssl-parameter-valid-200-async.yml +48 -0
  158. data/fixtures/vcr_cassettes/history-ssl-parameter-valid-200-sync.yml +48 -0
  159. data/fixtures/vcr_cassettes/history-ssl-parameter-valid-non-200-async.yml +48 -0
  160. data/fixtures/vcr_cassettes/history-ssl-parameter-valid-non-200-sync.yml +48 -0
  161. data/fixtures/vcr_cassettes/leave-nonssl-block-invalid-200-async.yml +48 -0
  162. data/fixtures/vcr_cassettes/leave-nonssl-block-invalid-200-sync.yml +48 -0
  163. data/fixtures/vcr_cassettes/leave-nonssl-block-invalid-non-200-async.yml +48 -0
  164. data/fixtures/vcr_cassettes/leave-nonssl-block-invalid-non-200-sync.yml +48 -0
  165. data/fixtures/vcr_cassettes/leave-nonssl-block-valid-200-async.yml +48 -0
  166. data/fixtures/vcr_cassettes/leave-nonssl-block-valid-200-sync.yml +48 -0
  167. data/fixtures/vcr_cassettes/leave-nonssl-block-valid-non-200-async.yml +48 -0
  168. data/fixtures/vcr_cassettes/leave-nonssl-block-valid-non-200-sync.yml +48 -0
  169. data/fixtures/vcr_cassettes/leave-nonssl-parameter-invalid-200-async.yml +48 -0
  170. data/fixtures/vcr_cassettes/leave-nonssl-parameter-invalid-200-sync.yml +48 -0
  171. data/fixtures/vcr_cassettes/leave-nonssl-parameter-invalid-non-200-async.yml +48 -0
  172. data/fixtures/vcr_cassettes/leave-nonssl-parameter-invalid-non-200-sync.yml +48 -0
  173. data/fixtures/vcr_cassettes/leave-nonssl-parameter-valid-200-async.yml +48 -0
  174. data/fixtures/vcr_cassettes/leave-nonssl-parameter-valid-200-sync.yml +48 -0
  175. data/fixtures/vcr_cassettes/leave-nonssl-parameter-valid-non-200-async.yml +48 -0
  176. data/fixtures/vcr_cassettes/leave-nonssl-parameter-valid-non-200-sync.yml +48 -0
  177. data/fixtures/vcr_cassettes/leave-ssl-block-invalid-200-async.yml +48 -0
  178. data/fixtures/vcr_cassettes/leave-ssl-block-invalid-200-sync.yml +48 -0
  179. data/fixtures/vcr_cassettes/leave-ssl-block-invalid-non-200-async.yml +48 -0
  180. data/fixtures/vcr_cassettes/leave-ssl-block-invalid-non-200-sync.yml +48 -0
  181. data/fixtures/vcr_cassettes/leave-ssl-block-valid-200-async.yml +48 -0
  182. data/fixtures/vcr_cassettes/leave-ssl-block-valid-200-sync.yml +48 -0
  183. data/fixtures/vcr_cassettes/leave-ssl-block-valid-non-200-async.yml +48 -0
  184. data/fixtures/vcr_cassettes/leave-ssl-block-valid-non-200-sync.yml +48 -0
  185. data/fixtures/vcr_cassettes/leave-ssl-parameter-invalid-200-async.yml +48 -0
  186. data/fixtures/vcr_cassettes/leave-ssl-parameter-invalid-200-sync.yml +48 -0
  187. data/fixtures/vcr_cassettes/leave-ssl-parameter-invalid-non-200-async.yml +48 -0
  188. data/fixtures/vcr_cassettes/leave-ssl-parameter-invalid-non-200-sync.yml +48 -0
  189. data/fixtures/vcr_cassettes/leave-ssl-parameter-valid-200-async.yml +48 -0
  190. data/fixtures/vcr_cassettes/leave-ssl-parameter-valid-200-sync.yml +48 -0
  191. data/fixtures/vcr_cassettes/leave-ssl-parameter-valid-non-200-async.yml +48 -0
  192. data/fixtures/vcr_cassettes/leave-ssl-parameter-valid-non-200-sync.yml +48 -0
  193. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-array-of-hashes.yml +42 -0
  194. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-200-invalid.yml +42 -0
  195. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-200-valid.yml +42 -0
  196. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-auth_key-200-invalid.yml +42 -0
  197. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-auth_key-200-valid.yml +42 -0
  198. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-auth_key-non200-invalid.yml +42 -0
  199. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-auth_key-non200-valid.yml +42 -0
  200. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-non200-invalid.yml +42 -0
  201. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-non200-valid.yml +42 -0
  202. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-200-invalid.yml +42 -0
  203. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-200-valid.yml +42 -0
  204. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-auth_key-200-invalid.yml +42 -0
  205. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-auth_key-200-valid.yml +42 -0
  206. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-auth_key-non200-invalid.yml +42 -0
  207. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-auth_key-non200-valid.yml +42 -0
  208. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-non200-invalid.yml +42 -0
  209. data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-non200-valid.yml +42 -0
  210. data/fixtures/vcr_cassettes/new_ones/publish/publish-http-200-invalid.yml +42 -0
  211. data/fixtures/vcr_cassettes/new_ones/publish/publish-http-200-valid.yml +42 -0
  212. data/fixtures/vcr_cassettes/new_ones/publish/publish-http-auth_key-200-invalid.yml +42 -0
  213. data/fixtures/vcr_cassettes/new_ones/publish/publish-http-auth_key-200-valid.yml +42 -0
  214. data/fixtures/vcr_cassettes/new_ones/publish/publish-http-auth_key-non200-invalid.yml +42 -0
  215. data/fixtures/vcr_cassettes/new_ones/publish/publish-http-auth_key-non200-valid.yml +42 -0
  216. data/fixtures/vcr_cassettes/new_ones/publish/publish-http-non200-invalid.yml +42 -0
  217. data/fixtures/vcr_cassettes/new_ones/publish/publish-http-non200-valid.yml +42 -0
  218. data/fixtures/vcr_cassettes/new_ones/publish/publish-https-200-invalid.yml +42 -0
  219. data/fixtures/vcr_cassettes/new_ones/publish/publish-https-200-valid.yml +42 -0
  220. data/fixtures/vcr_cassettes/new_ones/publish/publish-https-auth_key-200-invalid.yml +42 -0
  221. data/fixtures/vcr_cassettes/new_ones/publish/publish-https-auth_key-200-valid.yml +42 -0
  222. data/fixtures/vcr_cassettes/new_ones/publish/publish-https-auth_key-non200-invalid.yml +42 -0
  223. data/fixtures/vcr_cassettes/new_ones/publish/publish-https-auth_key-non200-valid.yml +42 -0
  224. data/fixtures/vcr_cassettes/new_ones/publish/publish-https-non200-invalid.yml +42 -0
  225. data/fixtures/vcr_cassettes/new_ones/publish/publish-https-non200-valid.yml +42 -0
  226. data/fixtures/vcr_cassettes/new_ones/publish/publish-plain-array-of-hashes.yml +42 -0
  227. data/fixtures/vcr_cassettes/pam1.yml +35 -0
  228. data/fixtures/vcr_cassettes/pam10.yml +35 -0
  229. data/fixtures/vcr_cassettes/pam11.yml +35 -0
  230. data/fixtures/vcr_cassettes/pam12.yml +35 -0
  231. data/fixtures/vcr_cassettes/pam13.yml +35 -0
  232. data/fixtures/vcr_cassettes/pam14.yml +35 -0
  233. data/fixtures/vcr_cassettes/pam15.yml +35 -0
  234. data/fixtures/vcr_cassettes/pam17.yml +35 -0
  235. data/fixtures/vcr_cassettes/pam2.yml +35 -0
  236. data/fixtures/vcr_cassettes/pam20.yml +35 -0
  237. data/fixtures/vcr_cassettes/pam21.yml +35 -0
  238. data/fixtures/vcr_cassettes/pam22.yml +97 -0
  239. data/fixtures/vcr_cassettes/pam4.yml +35 -0
  240. data/fixtures/vcr_cassettes/pam5.yml +66 -0
  241. data/fixtures/vcr_cassettes/pam6.yml +96 -0
  242. data/fixtures/vcr_cassettes/presence-nonssl-block-invalid-200-async.yml +85 -0
  243. data/fixtures/vcr_cassettes/presence-nonssl-block-invalid-200-sync.yml +85 -0
  244. data/fixtures/vcr_cassettes/presence-nonssl-block-invalid-non-200-async.yml +85 -0
  245. data/fixtures/vcr_cassettes/presence-nonssl-block-invalid-non-200-sync.yml +85 -0
  246. data/fixtures/vcr_cassettes/presence-nonssl-block-valid-200-async.yml +87 -0
  247. data/fixtures/vcr_cassettes/presence-nonssl-block-valid-200-sync.yml +87 -0
  248. data/fixtures/vcr_cassettes/presence-nonssl-block-valid-non-200-async.yml +87 -0
  249. data/fixtures/vcr_cassettes/presence-nonssl-block-valid-non-200-sync.yml +87 -0
  250. data/fixtures/vcr_cassettes/presence-nonssl-parameter-invalid-200-async.yml +85 -0
  251. data/fixtures/vcr_cassettes/presence-nonssl-parameter-invalid-200-sync.yml +85 -0
  252. data/fixtures/vcr_cassettes/presence-nonssl-parameter-invalid-non-200-async.yml +85 -0
  253. data/fixtures/vcr_cassettes/presence-nonssl-parameter-invalid-non-200-sync.yml +85 -0
  254. data/fixtures/vcr_cassettes/presence-nonssl-parameter-valid-200-async.yml +87 -0
  255. data/fixtures/vcr_cassettes/presence-nonssl-parameter-valid-200-sync.yml +87 -0
  256. data/fixtures/vcr_cassettes/presence-nonssl-parameter-valid-non-200-async.yml +87 -0
  257. data/fixtures/vcr_cassettes/presence-nonssl-parameter-valid-non-200-sync.yml +87 -0
  258. data/fixtures/vcr_cassettes/presence-ssl-block-invalid-200-async.yml +85 -0
  259. data/fixtures/vcr_cassettes/presence-ssl-block-invalid-200-sync.yml +85 -0
  260. data/fixtures/vcr_cassettes/presence-ssl-block-invalid-non-200-async.yml +85 -0
  261. data/fixtures/vcr_cassettes/presence-ssl-block-invalid-non-200-sync.yml +85 -0
  262. data/fixtures/vcr_cassettes/presence-ssl-block-valid-200-async.yml +87 -0
  263. data/fixtures/vcr_cassettes/presence-ssl-block-valid-200-sync-new.yml +81 -0
  264. data/fixtures/vcr_cassettes/presence-ssl-block-valid-200-sync.yml +85 -0
  265. data/fixtures/vcr_cassettes/presence-ssl-block-valid-non-200-async.yml +87 -0
  266. data/fixtures/vcr_cassettes/presence-ssl-block-valid-non-200-sync.yml +87 -0
  267. data/fixtures/vcr_cassettes/presence-ssl-parameter-invalid-200-async.yml +85 -0
  268. data/fixtures/vcr_cassettes/presence-ssl-parameter-invalid-200-sync.yml +85 -0
  269. data/fixtures/vcr_cassettes/presence-ssl-parameter-invalid-non-200-async.yml +85 -0
  270. data/fixtures/vcr_cassettes/presence-ssl-parameter-invalid-non-200-sync.yml +85 -0
  271. data/fixtures/vcr_cassettes/presence-ssl-parameter-valid-200-async.yml +87 -0
  272. data/fixtures/vcr_cassettes/presence-ssl-parameter-valid-200-sync.yml +87 -0
  273. data/fixtures/vcr_cassettes/presence-ssl-parameter-valid-non-200-async.yml +87 -0
  274. data/fixtures/vcr_cassettes/presence-ssl-parameter-valid-non-200-sync.yml +87 -0
  275. data/fixtures/vcr_cassettes/publish-nonssl-block-invalid-200-async.yml +44 -0
  276. data/fixtures/vcr_cassettes/publish-nonssl-block-invalid-200-sync.yml +44 -0
  277. data/fixtures/vcr_cassettes/publish-nonssl-block-invalid-non-200-async.yml +44 -0
  278. data/fixtures/vcr_cassettes/publish-nonssl-block-invalid-non-200-sync.yml +44 -0
  279. data/fixtures/vcr_cassettes/publish-nonssl-block-valid-200-async.yml +44 -0
  280. data/fixtures/vcr_cassettes/publish-nonssl-block-valid-200-sync.yml +44 -0
  281. data/fixtures/vcr_cassettes/publish-nonssl-block-valid-non-200-async.yml +44 -0
  282. data/fixtures/vcr_cassettes/publish-nonssl-block-valid-non-200-sync.yml +44 -0
  283. data/fixtures/vcr_cassettes/publish-nonssl-parameter-invalid-200-async.yml +44 -0
  284. data/fixtures/vcr_cassettes/publish-nonssl-parameter-invalid-200-sync.yml +44 -0
  285. data/fixtures/vcr_cassettes/publish-nonssl-parameter-invalid-non-200-async.yml +44 -0
  286. data/fixtures/vcr_cassettes/publish-nonssl-parameter-invalid-non-200-sync.yml +44 -0
  287. data/fixtures/vcr_cassettes/publish-nonssl-parameter-valid-200-async.yml +44 -0
  288. data/fixtures/vcr_cassettes/publish-nonssl-parameter-valid-200-sync.yml +44 -0
  289. data/fixtures/vcr_cassettes/publish-nonssl-parameter-valid-non-200-async.yml +44 -0
  290. data/fixtures/vcr_cassettes/publish-nonssl-parameter-valid-non-200-sync.yml +44 -0
  291. data/fixtures/vcr_cassettes/publish-ssl-block-invalid-200-async.yml +44 -0
  292. data/fixtures/vcr_cassettes/publish-ssl-block-invalid-200-sync.yml +44 -0
  293. data/fixtures/vcr_cassettes/publish-ssl-block-invalid-non-200-async.yml +44 -0
  294. data/fixtures/vcr_cassettes/publish-ssl-block-invalid-non-200-sync.yml +44 -0
  295. data/fixtures/vcr_cassettes/publish-ssl-block-valid-200-async.yml +44 -0
  296. data/fixtures/vcr_cassettes/publish-ssl-block-valid-200-sync.yml +44 -0
  297. data/fixtures/vcr_cassettes/publish-ssl-block-valid-non-200-async.yml +44 -0
  298. data/fixtures/vcr_cassettes/publish-ssl-block-valid-non-200-sync.yml +44 -0
  299. data/fixtures/vcr_cassettes/publish-ssl-parameter-invalid-200-async.yml +44 -0
  300. data/fixtures/vcr_cassettes/publish-ssl-parameter-invalid-200-sync.yml +44 -0
  301. data/fixtures/vcr_cassettes/publish-ssl-parameter-invalid-non-200-async.yml +44 -0
  302. data/fixtures/vcr_cassettes/publish-ssl-parameter-invalid-non-200-sync.yml +44 -0
  303. data/fixtures/vcr_cassettes/publish-ssl-parameter-valid-200-async.yml +44 -0
  304. data/fixtures/vcr_cassettes/publish-ssl-parameter-valid-200-sync.yml +44 -0
  305. data/fixtures/vcr_cassettes/publish-ssl-parameter-valid-non-200-async.yml +44 -0
  306. data/fixtures/vcr_cassettes/publish-ssl-parameter-valid-non-200-sync.yml +44 -0
  307. data/fixtures/vcr_cassettes/revoke-nonssl-block-invalid-200-async.yml +44 -0
  308. data/fixtures/vcr_cassettes/revoke-nonssl-block-invalid-200-sync.yml +44 -0
  309. data/fixtures/vcr_cassettes/revoke-nonssl-block-invalid-non-200-async.yml +44 -0
  310. data/fixtures/vcr_cassettes/revoke-nonssl-block-invalid-non-200-sync.yml +44 -0
  311. data/fixtures/vcr_cassettes/revoke-nonssl-block-valid-200-async.yml +45 -0
  312. data/fixtures/vcr_cassettes/revoke-nonssl-block-valid-200-sync.yml +45 -0
  313. data/fixtures/vcr_cassettes/revoke-nonssl-block-valid-non-200-async.yml +45 -0
  314. data/fixtures/vcr_cassettes/revoke-nonssl-block-valid-non-200-sync.yml +45 -0
  315. data/fixtures/vcr_cassettes/revoke-nonssl-parameter-invalid-200-async.yml +44 -0
  316. data/fixtures/vcr_cassettes/revoke-nonssl-parameter-invalid-200-sync.yml +44 -0
  317. data/fixtures/vcr_cassettes/revoke-nonssl-parameter-invalid-non-200-async.yml +44 -0
  318. data/fixtures/vcr_cassettes/revoke-nonssl-parameter-invalid-non-200-sync.yml +44 -0
  319. data/fixtures/vcr_cassettes/revoke-nonssl-parameter-valid-200-async.yml +45 -0
  320. data/fixtures/vcr_cassettes/revoke-nonssl-parameter-valid-200-sync.yml +45 -0
  321. data/fixtures/vcr_cassettes/revoke-nonssl-parameter-valid-non-200-async.yml +45 -0
  322. data/fixtures/vcr_cassettes/revoke-nonssl-parameter-valid-non-200-sync.yml +45 -0
  323. data/fixtures/vcr_cassettes/revoke-ssl-block-invalid-200-async.yml +44 -0
  324. data/fixtures/vcr_cassettes/revoke-ssl-block-invalid-200-sync.yml +44 -0
  325. data/fixtures/vcr_cassettes/revoke-ssl-block-invalid-non-200-async.yml +44 -0
  326. data/fixtures/vcr_cassettes/revoke-ssl-block-invalid-non-200-sync.yml +44 -0
  327. data/fixtures/vcr_cassettes/revoke-ssl-block-valid-200-async.yml +45 -0
  328. data/fixtures/vcr_cassettes/revoke-ssl-block-valid-200-sync.yml +45 -0
  329. data/fixtures/vcr_cassettes/revoke-ssl-block-valid-non-200-async.yml +45 -0
  330. data/fixtures/vcr_cassettes/revoke-ssl-block-valid-non-200-sync.yml +45 -0
  331. data/fixtures/vcr_cassettes/revoke-ssl-parameter-invalid-200-async.yml +44 -0
  332. data/fixtures/vcr_cassettes/revoke-ssl-parameter-invalid-200-sync.yml +44 -0
  333. data/fixtures/vcr_cassettes/revoke-ssl-parameter-invalid-non-200-async.yml +44 -0
  334. data/fixtures/vcr_cassettes/revoke-ssl-parameter-invalid-non-200-sync.yml +44 -0
  335. data/fixtures/vcr_cassettes/revoke-ssl-parameter-valid-200-async.yml +45 -0
  336. data/fixtures/vcr_cassettes/revoke-ssl-parameter-valid-200-sync.yml +45 -0
  337. data/fixtures/vcr_cassettes/revoke-ssl-parameter-valid-non-200-async.yml +45 -0
  338. data/fixtures/vcr_cassettes/revoke-ssl-parameter-valid-non-200-sync.yml +45 -0
  339. data/fixtures/vcr_cassettes/single-event-invalid-json.yml +208 -0
  340. data/fixtures/vcr_cassettes/single-event-non200.yml +44 -0
  341. data/fixtures/vcr_cassettes/subscribe-nonssl-block-invalid-200-async.yml +85 -0
  342. data/fixtures/vcr_cassettes/subscribe-nonssl-block-invalid-200-sync.yml +85 -0
  343. data/fixtures/vcr_cassettes/subscribe-nonssl-block-invalid-non-200-async.yml +85 -0
  344. data/fixtures/vcr_cassettes/subscribe-nonssl-block-invalid-non-200-sync.yml +85 -0
  345. data/fixtures/vcr_cassettes/subscribe-nonssl-block-valid-200-async.yml +85 -0
  346. data/fixtures/vcr_cassettes/subscribe-nonssl-block-valid-200-sync.yml +85 -0
  347. data/fixtures/vcr_cassettes/subscribe-nonssl-block-valid-non-200-async.yml +85 -0
  348. data/fixtures/vcr_cassettes/subscribe-nonssl-block-valid-non-200-sync.yml +85 -0
  349. data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-invalid-200-async.yml +85 -0
  350. data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-invalid-200-sync.yml +85 -0
  351. data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-invalid-non-200-async.yml +85 -0
  352. data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-invalid-non-200-sync.yml +85 -0
  353. data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-valid-200-async.yml +85 -0
  354. data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-valid-200-sync.yml +85 -0
  355. data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-valid-non-200-async.yml +85 -0
  356. data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-valid-non-200-sync.yml +85 -0
  357. data/fixtures/vcr_cassettes/subscribe-ssl-block-invalid-200-async.yml +85 -0
  358. data/fixtures/vcr_cassettes/subscribe-ssl-block-invalid-200-sync.yml +85 -0
  359. data/fixtures/vcr_cassettes/subscribe-ssl-block-invalid-non-200-async.yml +85 -0
  360. data/fixtures/vcr_cassettes/subscribe-ssl-block-invalid-non-200-sync.yml +85 -0
  361. data/fixtures/vcr_cassettes/subscribe-ssl-block-valid-200-async.yml +85 -0
  362. data/fixtures/vcr_cassettes/subscribe-ssl-block-valid-200-sync.yml +85 -0
  363. data/fixtures/vcr_cassettes/subscribe-ssl-block-valid-non-200-async.yml +85 -0
  364. data/fixtures/vcr_cassettes/subscribe-ssl-block-valid-non-200-sync.yml +85 -0
  365. data/fixtures/vcr_cassettes/subscribe-ssl-parameter-invalid-200-async.yml +85 -0
  366. data/fixtures/vcr_cassettes/subscribe-ssl-parameter-invalid-200-sync.yml +85 -0
  367. data/fixtures/vcr_cassettes/subscribe-ssl-parameter-invalid-non-200-async.yml +85 -0
  368. data/fixtures/vcr_cassettes/subscribe-ssl-parameter-invalid-non-200-sync.yml +85 -0
  369. data/fixtures/vcr_cassettes/subscribe-ssl-parameter-valid-200-async.yml +85 -0
  370. data/fixtures/vcr_cassettes/subscribe-ssl-parameter-valid-200-sync.yml +85 -0
  371. data/fixtures/vcr_cassettes/subscribe-ssl-parameter-valid-non-200-async.yml +85 -0
  372. data/fixtures/vcr_cassettes/subscribe-ssl-parameter-valid-non-200-sync.yml +85 -0
  373. data/fixtures/vcr_cassettes/subscription-event-invalid-json.yml +454 -0
  374. data/fixtures/vcr_cassettes/subscription-event-non200.yml +208 -0
  375. data/fixtures/vcr_cassettes/time-nonssl-block-invalid-200-async.yml +44 -0
  376. data/fixtures/vcr_cassettes/time-nonssl-block-invalid-200-sync.yml +44 -0
  377. data/fixtures/vcr_cassettes/time-nonssl-block-invalid-non-200-async.yml +44 -0
  378. data/fixtures/vcr_cassettes/time-nonssl-block-invalid-non-200-sync.yml +44 -0
  379. data/fixtures/vcr_cassettes/time-nonssl-block-valid-200-async.yml +44 -0
  380. data/fixtures/vcr_cassettes/time-nonssl-block-valid-200-sync.yml +44 -0
  381. data/fixtures/vcr_cassettes/time-nonssl-block-valid-non-200-async.yml +44 -0
  382. data/fixtures/vcr_cassettes/time-nonssl-block-valid-non-200-sync.yml +44 -0
  383. data/fixtures/vcr_cassettes/time-nonssl-parameter-invalid-200-async.yml +44 -0
  384. data/fixtures/vcr_cassettes/time-nonssl-parameter-invalid-200-sync.yml +44 -0
  385. data/fixtures/vcr_cassettes/time-nonssl-parameter-invalid-non-200-async.yml +44 -0
  386. data/fixtures/vcr_cassettes/time-nonssl-parameter-invalid-non-200-sync.yml +44 -0
  387. data/fixtures/vcr_cassettes/time-nonssl-parameter-valid-200-async.yml +44 -0
  388. data/fixtures/vcr_cassettes/time-nonssl-parameter-valid-200-sync.yml +44 -0
  389. data/fixtures/vcr_cassettes/time-nonssl-parameter-valid-non-200-async.yml +44 -0
  390. data/fixtures/vcr_cassettes/time-nonssl-parameter-valid-non-200-sync.yml +44 -0
  391. data/fixtures/vcr_cassettes/time-ssl-block-invalid-200-async.yml +44 -0
  392. data/fixtures/vcr_cassettes/time-ssl-block-invalid-200-sync.yml +44 -0
  393. data/fixtures/vcr_cassettes/time-ssl-block-invalid-non-200-async.yml +44 -0
  394. data/fixtures/vcr_cassettes/time-ssl-block-invalid-non-200-sync.yml +44 -0
  395. data/fixtures/vcr_cassettes/time-ssl-block-valid-200-async.yml +44 -0
  396. data/fixtures/vcr_cassettes/time-ssl-block-valid-200-sync.yml +44 -0
  397. data/fixtures/vcr_cassettes/time-ssl-block-valid-non-200-async.yml +44 -0
  398. data/fixtures/vcr_cassettes/time-ssl-block-valid-non-200-sync.yml +44 -0
  399. data/fixtures/vcr_cassettes/time-ssl-parameter-invalid-200-async.yml +44 -0
  400. data/fixtures/vcr_cassettes/time-ssl-parameter-invalid-200-sync.yml +44 -0
  401. data/fixtures/vcr_cassettes/time-ssl-parameter-invalid-non-200-async.yml +44 -0
  402. data/fixtures/vcr_cassettes/time-ssl-parameter-invalid-non-200-sync.yml +44 -0
  403. data/fixtures/vcr_cassettes/time-ssl-parameter-valid-200-async.yml +44 -0
  404. data/fixtures/vcr_cassettes/time-ssl-parameter-valid-200-sync.yml +44 -0
  405. data/fixtures/vcr_cassettes/time-ssl-parameter-valid-non-200-async.yml +44 -0
  406. data/fixtures/vcr_cassettes/time-ssl-parameter-valid-non-200-sync.yml +44 -0
  407. data/lib/pubnub.rb +7 -15
  408. data/lib/pubnub/client.rb +189 -468
  409. data/lib/pubnub/configuration.rb +27 -20
  410. data/lib/pubnub/crypto.rb +11 -4
  411. data/lib/pubnub/envelope.rb +45 -0
  412. data/lib/pubnub/event.rb +470 -0
  413. data/lib/pubnub/events/audit.rb +38 -0
  414. data/lib/pubnub/events/grant.rb +59 -0
  415. data/lib/pubnub/events/here_now.rb +55 -0
  416. data/lib/pubnub/events/history.rb +110 -0
  417. data/lib/pubnub/events/leave.rb +73 -0
  418. data/lib/pubnub/events/presence.rb +35 -0
  419. data/lib/pubnub/events/publish.rb +71 -0
  420. data/lib/pubnub/events/revoke.rb +56 -0
  421. data/lib/pubnub/events/subscribe.rb +34 -0
  422. data/lib/pubnub/events/time.rb +52 -0
  423. data/lib/pubnub/exceptions.rb +50 -0
  424. data/lib/pubnub/formatter.rb +45 -0
  425. data/lib/pubnub/pam.rb +59 -0
  426. data/lib/pubnub/parser.rb +21 -0
  427. data/lib/pubnub/validator.rb +29 -0
  428. data/lib/version.rb +3 -0
  429. data/pubnub.gemspec +3 -5
  430. data/spec/lib/client_spec.rb +27 -325
  431. data/spec/lib/encoder_spec.rb +51 -0
  432. data/spec/lib/formatting_envelope_spec.rb +304 -0
  433. data/spec/lib/integration/audit_spec.rb +544 -0
  434. data/spec/lib/integration/grant_spec.rb +544 -0
  435. data/spec/lib/integration/here_now_spec.rb +543 -0
  436. data/spec/lib/integration/history_spec.rb +541 -0
  437. data/spec/lib/integration/leave_spec.rb +540 -0
  438. data/spec/lib/integration/presence_spec.rb +557 -0
  439. data/spec/lib/integration/publish_spec.rb +541 -0
  440. data/spec/lib/integration/revoke_spec.rb +544 -0
  441. data/spec/lib/integration/subscribe_spec.rb +564 -0
  442. data/spec/lib/integration/time_spec.rb +541 -0
  443. data/spec/lib/new_integration/publish_spec.rb +1867 -0
  444. data/spec/lib/retry_logic_spec.rb +53 -0
  445. data/spec/spec_helper.rb +28 -2
  446. data/spec/tools/pam-test-generator.rb +367 -0
  447. data/spec/tools/test-generator.rb +310 -0
  448. metadata +434 -50
  449. data/.yardoc/checksums +0 -13
  450. data/.yardoc/object_types +0 -0
  451. data/.yardoc/objects/root.dat +0 -0
  452. data/.yardoc/proxy_types +0 -0
  453. data/lib/pubnub/error.rb +0 -23
  454. data/lib/pubnub/request.rb +0 -288
  455. data/lib/pubnub/response.rb +0 -126
  456. data/lib/pubnub/subscription.rb +0 -24
  457. data/lib/pubnub/version.rb +0 -3
  458. data/lib/tasks/examples.rake +0 -39
  459. data/spec/lib/crypto_spec.rb +0 -89
  460. data/spec/lib/history_integration_spec.rb +0 -0
  461. data/spec/lib/presence_integration_spec.rb +0 -16
  462. data/spec/lib/publish_integration_spec.rb +0 -994
  463. data/spec/lib/pubnub_spec.rb +0 -12
  464. data/spec/lib/request_spec.rb +0 -151
  465. data/spec/lib/subscribe_integration_spec.rb +0 -944
  466. data/spec/lib/subscribe_timeout_spec.rb +0 -65
  467. data/spec/lib/time_integration_spec.rb +0 -0
@@ -0,0 +1,56 @@
1
+ module Pubnub
2
+ class Revoke
3
+ include Pubnub::Event
4
+ include Pubnub::SingleEvent
5
+ include Pubnub::Formatter
6
+ include Pubnub::Validator
7
+ include Pubnub::PAM
8
+
9
+ def initialize(options, app)
10
+ super
11
+ @event = 'grant'
12
+ @allow_multiple_channels = false
13
+
14
+ @timestamp = current_time
15
+
16
+ @write = options[:write]
17
+ @read = options[:read]
18
+ @ttl = options[:ttl] || Pubnub::Configuration::DEFAULT_TTL
19
+ end
20
+
21
+ def validate!
22
+ super
23
+
24
+ raise ArgumentError.new(:object => self, :message => 'publish_key is required by Revoke') unless @publish_key
25
+ raise ArgumentError.new(:object => self, :message => 'Parameter secret_key is required by Revoke') if !@secret_key || @secret_key == 0
26
+
27
+ raise ArgumentError.new(:object => self, :message => 'ttl parameter is too big, max value is: 525600') unless @ttl.to_i <= 525600 || @ttl.nil?
28
+ raise ArgumentError.new(:object => self, :message => 'ttl parameter is too small, min value is: 1') unless @ttl.to_i >= 1 || @ttl.nil?
29
+ end
30
+
31
+ private
32
+
33
+ def parameters(app, signature = false)
34
+ write = 0
35
+ read = 0
36
+
37
+ {
38
+ :timestamp => @timestamp,
39
+ :w => write,
40
+ :r => read,
41
+ :ttl => @ttl
42
+ }.merge(super(app, signature))
43
+ end
44
+
45
+ def path(app)
46
+ '/' + [
47
+ 'v1',
48
+ 'auth',
49
+ 'grant',
50
+ 'sub-key',
51
+ @subscribe_key
52
+ ].join('/')
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,34 @@
1
+ module Pubnub
2
+ class Subscribe
3
+ include Pubnub::Event
4
+ include Pubnub::SubscribeEvent
5
+ include Pubnub::Formatter
6
+ include Pubnub::Validator
7
+
8
+
9
+ def initialize(options, app)
10
+ super
11
+ @event = 'subscribe'
12
+ @allow_multiple_channels = true
13
+
14
+ end
15
+
16
+ def fire(app)
17
+ app.update_timetoken(0)
18
+ super
19
+ end
20
+
21
+ def validate!
22
+ super
23
+ # Check channels
24
+ raise ArgumentError.new(:object => self, :message => 'Subscribe requires :channel or :channels argument') unless @channel
25
+
26
+ # check callback
27
+ raise ArgumentError.new(:object => self, :message => 'Callback parameter is required while using async subscribe') if !@http_sync && @callback.blank?
28
+
29
+ end
30
+
31
+ private
32
+
33
+ end
34
+ end
@@ -0,0 +1,52 @@
1
+ module Pubnub
2
+ class Time
3
+ include Pubnub::Event
4
+ include Pubnub::SingleEvent
5
+ include Pubnub::Formatter
6
+ include Pubnub::Validator
7
+
8
+ def initialize(options, app)
9
+ super
10
+ @channel = @channel.first
11
+ @event = 'time'
12
+ @doesnt_require_callback = true
13
+ end
14
+
15
+ def validate!
16
+ super
17
+ # check callback
18
+ raise ArgumentError.new(:object => self, :message => 'Callback parameter is required while using async time') if !@http_sync && @callback.blank?
19
+ end
20
+
21
+ private
22
+
23
+ def path(app)
24
+ '/time/0'
25
+ end
26
+
27
+ def timetoken(parsed_response)
28
+ parsed_response.first if parsed_response.is_a? Array
29
+ end
30
+
31
+ def format_envelopes(response, app, error)
32
+
33
+ parsed_response = Parser.parse_json(response.body) if Parser.valid_json?(response.body)
34
+
35
+ envelopes = Array.new
36
+ envelopes << Envelope.new(
37
+ {
38
+ :message => timetoken(parsed_response),
39
+ :response_message => timetoken(parsed_response),
40
+ :timetoken => timetoken(parsed_response)
41
+ },
42
+ app
43
+ )
44
+
45
+ envelopes = add_common_data_to_envelopes(envelopes, response, app, error)
46
+
47
+ envelopes
48
+
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,50 @@
1
+ module Pubnub
2
+ class Error < StandardError
3
+ attr_reader :operation, :request, :response, :env, :error, :message, :app, :event
4
+
5
+ def initialize(options = {})
6
+ if options.is_a? Hash
7
+ @event = options[:event]
8
+ @operation = @event
9
+ @request = options[:request]
10
+ @env = options[:env]
11
+ @response = options[:response]
12
+ @error = options[:error]
13
+ @message = options[:message] unless options[:message].nil?
14
+ @app = options[:app]
15
+ end
16
+
17
+ @error = self unless @error
18
+
19
+ log_error
20
+ end
21
+
22
+ private
23
+
24
+ def log_error
25
+ error_message = String.new
26
+ error_message << "OPERATION: #{@operation}\n" if @operation
27
+ error_message << "REQUEST: #{@request}\n" if @request
28
+ error_message << "ENV: #{@env}\n" if @env
29
+ error_message << "APP: #{@app}\n" if @app
30
+ error_message << "RESPONSE: #{@response}\n" if @response
31
+ error_message << "ERROR TYPE: #{@error.class.to_s}\n"
32
+ error_message << "ERROR MESSAGE: #{@message}\n"
33
+ error_message << "ERROR BACKTRACE: #{self.backtrace}"
34
+
35
+ if $logger.blank?
36
+ puts error_message
37
+ else
38
+ $logger.error(error_message)
39
+ end
40
+ end
41
+
42
+ end
43
+
44
+ class JSONParseError < Error; end
45
+ class InitializationError < Error; end
46
+ class ArgumentError < Error; end
47
+ class RequestError < Error; end
48
+ class ResponseError < Error; end
49
+
50
+ end
@@ -0,0 +1,45 @@
1
+ module Pubnub
2
+ module Formatter
3
+ # Formats channels as array of channels as strings
4
+ def format_channels(channels, should_encode = true)
5
+ channel_array = case channels.class.to_s
6
+ when 'String'
7
+ channels.split(',')
8
+ when 'Array'
9
+ channels.map { |channel| channel.to_s }
10
+ else
11
+ [channels.to_s]
12
+ end
13
+
14
+ channel_array = channel_array.map { |channel| encode_channel(channel) } if should_encode
15
+ channel_array
16
+ end
17
+
18
+ def encode_channel(channel)
19
+ URI.encode_www_form_component(channel).gsub('+', '%20')
20
+ end
21
+
22
+ def format_message(message)
23
+ if @cipher_key
24
+ pc = Pubnub::Crypto.new(@cipher_key)
25
+ begin
26
+ message = pc.encrypt(message)
27
+ URI.escape(message.to_json)
28
+ rescue => error
29
+ @error_callback.call 'bug'
30
+ end
31
+ else
32
+ URI.encode_www_form_component(message.to_json).gsub('+', '%20')
33
+ end
34
+ end
35
+
36
+ def params_hash_to_url_params(hash)
37
+ params = String.new
38
+ hash.each do |key, value|
39
+ params << "#{key}=#{value}&"
40
+ end
41
+ params
42
+ end
43
+
44
+ end
45
+ end
data/lib/pubnub/pam.rb ADDED
@@ -0,0 +1,59 @@
1
+ module Pubnub
2
+ module PAM
3
+ def signature(app)
4
+ channel = @original_channel.first
5
+ message = "#{@subscribe_key}\n#{@publish_key}\n#{@event}\n#{variables_for_signature(app)}"
6
+ Base64.urlsafe_encode64(OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha256'), @secret_key.to_s, message)).strip
7
+ end
8
+
9
+ def payload(parsed_response)
10
+ parsed_response['payload'] if parsed_response
11
+ end
12
+
13
+ def message(parsed_response)
14
+ parsed_response['message'] if parsed_response
15
+ end
16
+
17
+ def channel(parsed_response)
18
+ @channel.first
19
+ end
20
+
21
+ def parameters(app, signature = false)
22
+ params = super(app)
23
+ params.merge!({ :timestamp => @timestamp })
24
+ params.merge!({ :channel => @channel.first })
25
+ params.merge!({ :signature => signature(app) }) unless signature
26
+ params
27
+ end
28
+
29
+ def variables_for_signature(app)
30
+ parameters(app, true).map{|k,v|
31
+ "#{k.to_s}=#{CGI.escape(v.to_s).gsub('+','%20')}"
32
+ }.sort.join('&')
33
+ end
34
+
35
+ def current_time
36
+ ::Time.now.to_i
37
+ end
38
+
39
+ def format_envelopes(response, app, error)
40
+
41
+ parsed_response = Parser.parse_json(response.body) if Parser.valid_json?(response.body)
42
+
43
+ envelopes = Array.new
44
+ envelopes << Envelope.new(
45
+ {
46
+ :payload => payload(parsed_response),
47
+ :message => message(parsed_response),
48
+ :channel => channel(parsed_response)
49
+ },
50
+ app
51
+ )
52
+
53
+ envelopes = add_common_data_to_envelopes(envelopes, response, app, error)
54
+
55
+ envelopes
56
+
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,21 @@
1
+ module Pubnub
2
+ class Parser
3
+ # Parses string to JSON
4
+ def self.parse_json(string)
5
+ begin
6
+ return JSON.parse(string)
7
+ rescue JSON::ParserError => e
8
+ return Pubnub::Envelope.format_after_json_error(string, e)
9
+ end
10
+ end
11
+
12
+ def self.valid_json?(string)
13
+ begin
14
+ JSON.parse(string)
15
+ true
16
+ rescue JSON::ParserError
17
+ false
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,29 @@
1
+ module Pubnub
2
+ module Validator
3
+
4
+ def valid_channel?(allow_array = true)
5
+ valid = true
6
+ if @channel.is_a? Array
7
+ if allow_array
8
+ @channel.each do |channel|
9
+ unless channel.is_a?(String) || channel.is_a?(Symbol)
10
+ valid = false
11
+ break
12
+ end
13
+ end
14
+ else
15
+ valid = false
16
+ end
17
+ else
18
+ if !@channel.is_a?(String) && !@channel.is_a?(Symbol)
19
+ valid = false
20
+ elsif @channel.to_s.index(',') && !allow_array
21
+ valid = false
22
+ end
23
+ end
24
+
25
+ valid
26
+
27
+ end
28
+ end
29
+ end
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module Pubnub
2
+ VERSION = '3.5.1'
3
+ end
data/pubnub.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'pubnub'
5
- s.version = '3.4.1'
5
+ s.version = '3.5.1'
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ['PubNub']
9
- s.date = '2013-10-19'
9
+ s.date = '2014-01-15'
10
10
  s.description = 'Ruby anywhere in the world in 250ms with PubNub!'
11
11
  s.email = 'support@pubnub.com'
12
12
  s.files = `git ls-files`.split("\n")
@@ -17,9 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.summary = 'PubNub Official Ruby gem'
18
18
 
19
19
  s.add_dependency 'eventmachine'
20
- s.add_dependency 'httparty'
21
- s.add_dependency 'persistent_httparty'
22
- s.add_dependency 'em-http-request'
20
+ s.add_dependency 'net-http-persistent'
23
21
  s.add_dependency 'json'
24
22
 
25
23
  end
@@ -1,346 +1,48 @@
1
1
  require 'spec_helper'
2
- require 'rr'
3
- require 'vcr'
4
2
 
5
3
  describe Pubnub::Client do
6
-
7
- describe '#uuid' do
8
- it 'should return a UUID' do
9
- end
10
- end
11
-
12
- describe '.initialize' do
13
-
14
- before do
15
- @publish_key = 'demo_pub_key'
16
- @subscribe_key = 'demo_sub_key'
17
- @secret_key = 'demo_md5_key'
18
- @cipher_key = 'demo_cipher_key'
19
- @ssl = false
20
- @channel = 'pn_test'
21
- end
22
-
23
- shared_examples_for 'successful initialization' do
24
-
25
- it 'should initialize' do
26
- @pn.publish_key.should == @publish_key
27
- @pn.subscribe_key.should == @subscribe_key
28
- @pn.secret_key.should == @secret_key
29
- @pn.cipher_key.should == @cipher_key
30
- @pn.ssl.should == @ssl_enabled
31
- end
32
- end
33
-
34
- context 'when initialized' do
35
- it 'should set a sessionUUID' do
36
- Pubnub.new(:subscribe_key => :demo).session_uuid.should_not == nil
37
- end
38
- end
39
-
40
- context 'when named' do
41
- context 'and there are more than one arguments' do
42
- it 'should throw an error' do
43
- lambda { Pubnub::Client.new('arg1', 'arg2', 'arg3') }.should raise_error
44
- end
45
- end
46
- end
47
-
48
- context 'when passed with optional parameters in a hash' do
49
- context 'when the hash key is a symbol' do
50
- before do
51
- @pn = Pubnub::Client.new(:publish_key => @publish_key,
52
- :subscribe_key => @subscribe_key,
53
- :secret_key => @secret_key,
54
- :cipher_key => @cipher_key,
55
- :ssl => @ssl_enabled)
56
- end
57
- it_behaves_like 'successful initialization'
58
- end
59
- end
60
-
61
- describe '.verify_config' do
62
- context 'subscribe_key' do
63
- it 'should not throw an exception if present' do
64
- lambda { pn = Pubnub::Client.new(:subscribe_key => 'demo') }.should_not raise_error
65
- end
66
-
67
- it 'should not throw an exception if present' do
68
- lambda { pn = Pubnub::Client.new(:subscribe_key => :bar) }.should_not raise_error
69
- end
70
- end
71
- end
4
+ it 'has valid version constant' do
5
+ expect(Pubnub::Client::VERSION).to match(/\d+\.\d+\..+/)
72
6
  end
73
7
 
74
- describe 'public methods' do
75
- describe '.time' do
76
- before do
77
-
78
- @my_callback = lambda { |message| Rails.logger.debug(message) }
79
- @my_pub_key = 'demo'
80
- @my_sub_key = 'demo'
81
- @my_message = 'hello_world!'
82
- @my_channel = 'hello_world'
83
-
84
- @my_cipher_key = 'my_cipher_key'
85
- @my_sec_key = 'my_sec_key'
86
- @alt_sec_key = 'alt_sec_key'
87
- end
88
-
89
- context 'required parameters' do
90
-
91
- before do
92
- @pn = Pubnub.new(:subscribe_key => @my_sub_key)
93
- end
94
-
95
- it 'should raise when callback or block is missing' do
96
- lambda { @pn.time }.
97
- should raise_error(ArgumentError, 'time() require, if async, callback parameter or block given.')
98
- end
99
-
100
- it 'should raise when callback is invalid' do
101
- lambda { @pn.time(:callback => :blah) }.
102
- should raise_error('callback is invalid.')
103
- end
104
-
105
- end
106
- end
107
-
108
- describe '.publish' do
109
- before do
110
-
111
- @my_callback = lambda { |message| Rails.logger.debug(message) }
112
- @my_pub_key = 'demo'
113
- @my_sub_key = 'demo'
114
- @my_message = 'hello_world!'
115
- @my_channel = 'hello_world'
116
-
117
- @my_cipher_key = 'my_cipher_key'
118
- @my_sec_key = 'my_sec_key'
119
- @alt_sec_key = 'alt_sec_key'
120
- end
121
-
122
- context 'required parameters' do
123
-
124
- before do
125
- @pn = Pubnub.new(:subscribe_key => @my_sub_key)
126
- end
127
-
128
- it 'should raise when channel is missing' do
129
- lambda { @pn.publish(:callback => @my_callback, :message => @my_message) }.
130
- should raise_error(ArgumentError, 'publish() requires :channel, :message parameters and, if async, callback parameter or block given.')
131
- end
132
-
133
- it 'should raise when callback is missing' do
134
- lambda { @pn.publish(:message => @my_message, :channel => @my_channel) }.
135
- should raise_error(ArgumentError, 'publish() requires :channel, :message parameters and, if async, callback parameter or block given.')
136
- end
137
-
138
- it 'should raise when message is missing' do
139
- lambda { @pn.publish(:channel => @my_channel, :callback => @my_callback) }.
140
- should raise_error(ArgumentError, 'publish() requires :channel, :message parameters and, if async, callback parameter or block given.')
141
- end
142
-
143
- it 'should raise when callback is invalid' do
144
- lambda { @pn.presence(:channel => @my_channel, :callback => :blah) }.
145
- should raise_error('callback is invalid.')
146
- end
147
-
148
- end
149
- end
150
-
151
- describe '.subscribe' do
152
- before do
153
-
154
- @my_callback = lambda { |message| Rails.logger.debug(message) }
155
- @my_pub_key = 'demo'
156
- @my_sub_key = 'demo'
157
- @my_message = 'hello_world!'
158
- @my_channel = 'hello_world'
159
-
160
- @my_cipher_key = 'my_cipher_key'
161
- @my_sec_key = 'my_sec_key'
162
- @alt_sec_key = 'alt_sec_key'
163
- end
164
-
165
- context 'required parameters' do
166
-
167
- before do
168
- @pn = Pubnub.new(:subscribe_key => @my_sub_key)
169
- end
170
-
171
- it 'should raise when channel is missing' do
172
- lambda { @pn.subscribe(:foo => :bar, :callback => @my_callback) }.
173
- should raise_error(ArgumentError, 'subscribe() requires :channel parameters and, if async, callback parameter or block given.')
174
- end
175
-
176
- it 'should raise when callback is missing' do
177
- lambda { @pn.subscribe(:channel => @my_channel) }.
178
- should raise_error(ArgumentError, 'subscribe() requires :channel parameters and, if async, callback parameter or block given.')
179
- end
180
-
181
- it 'should raise when callback is invalid' do
182
- lambda { @pn.subscribe(:channel => @my_channel, :callback => :blah) }.
183
- should raise_error('callback is invalid.')
184
- end
185
-
186
- end
8
+ context '#inititalize' do
9
+ it 'requires arguments' do
10
+ expect{ Pubnub.new() }.to raise_error
187
11
  end
188
12
 
189
- describe '.here_now' do
190
- before do
191
-
192
- @my_callback = lambda { |message| Rails.logger.debug(message) }
193
- @my_pub_key = 'demo'
194
- @my_sub_key = 'demo'
195
- @my_message = 'hello_world!'
196
- @my_channel = 'hello_world'
197
-
198
- @my_cipher_key = 'my_cipher_key'
199
- @my_sec_key = 'my_sec_key'
200
- @alt_sec_key = 'alt_sec_key'
13
+ context 'parameter :subscribe_key' do
14
+ it 'is required' do
15
+ expect{ Pubnub.new(:http_sync => true) }.to raise_error(Pubnub::InitializationError)
201
16
  end
202
17
 
203
- context 'required parameters' do
204
-
205
- before do
206
- @pn = Pubnub.new(:subscribe_key => @my_sub_key)
207
- end
208
-
209
- it 'should raise when channel is missing' do
210
- lambda { @pn.here_now(:foo => :bar) }.
211
- should raise_error(ArgumentError, 'here_now() requires :channel parameters and, if async, callback parameter or block given.')
212
- end
213
-
214
- it 'should raise when callback is missing' do
215
- lambda { @pn.here_now(:channel => @my_channel) }.
216
- should raise_error(ArgumentError, 'here_now() requires :channel parameters and, if async, callback parameter or block given.')
217
- end
218
-
219
- it 'should raise when callback is invalid' do
220
- lambda { @pn.here_now(:channel => @my_channel, :callback => :blah) }.
221
- should raise_error('callback is invalid.')
222
- end
18
+ it 'must be valid' do
19
+ expect{ Pubnub.new(:subscribe_key => 123) }.to raise_error(Pubnub::InitializationError)
20
+ expect{ Pubnub.new(:subscribe_key => [] ) }.to raise_error(Pubnub::InitializationError)
21
+ expect{ Pubnub.new(:subscribe_key => {} ) }.to raise_error(Pubnub::InitializationError)
223
22
 
23
+ expect{ Pubnub.new(:subscribe_key => 'key') }.not_to raise_error
24
+ expect{ Pubnub.new(:subscribe_key => :key ) }.not_to raise_error
224
25
  end
225
26
  end
226
27
 
227
- describe '.presence' do
228
- before do
229
-
230
- @my_callback = lambda { |message| Rails.logger.debug(message) }
231
- @my_pub_key = 'demo'
232
- @my_sub_key = 'demo'
233
- @my_message = 'hello_world!'
234
- @my_channel = 'hello_world'
235
-
236
- @my_cipher_key = 'my_cipher_key'
237
- @my_sec_key = 'my_sec_key'
238
- @alt_sec_key = 'alt_sec_key'
239
- end
240
-
241
- context 'required parameters' do
242
-
243
- before do
244
- @pn = Pubnub.new(:subscribe_key => @my_sub_key)
245
- end
246
-
247
- it 'should raise when channel is missing' do
248
- lambda { @pn.presence(:foo => :bar) }.
249
- should raise_error(ArgumentError, 'presence() requires :channel parameters and, if async, callback parameter or block given.')
250
- end
251
-
252
- it 'should raise when callback is missing' do
253
- lambda { @pn.presence(:channel => @my_channel) }.
254
- should raise_error(ArgumentError, 'presence() requires :channel parameters and, if async, callback parameter or block given.')
255
- end
256
-
257
- it 'should raise when callback is invalid' do
258
- lambda { @pn.presence(:channel => @my_channel, :callback => :blah) }.
259
- should raise_error('callback is invalid.')
260
- end
28
+ context 'parameter :publish_key' do
29
+ it 'must be valid' do
30
+ expect{ Pubnub.new(:subscribe_key => 'valid', :publish_key => ['invalid']) }.to raise_error(Pubnub::InitializationError)
31
+ expect{ Pubnub.new(:subscribe_key => 'valid', :publish_key => {'invalid' => 'yeah'}) }.to raise_error(Pubnub::InitializationError)
32
+ expect{ Pubnub.new(:subscribe_key => 'valid', :publish_key => ['invalid']) }.to raise_error(Pubnub::InitializationError)
261
33
 
34
+ expect{ Pubnub.new(:subscribe_key => 'valid', :publish_key => 'key') }.not_to raise_error
35
+ expect{ Pubnub.new(:subscribe_key => 'valid', :publish_key => :key ) }.not_to raise_error
262
36
  end
263
37
  end
264
38
 
265
- describe '.hisotry' do
266
- before do
267
-
268
- @my_callback = lambda { |message| Rails.logger.debug(message) }
269
- @my_pub_key = 'demo'
270
- @my_sub_key = 'demo'
271
- @my_message = 'hello_world!'
272
- @my_channel = 'hello_world'
273
-
274
- @my_cipher_key = 'my_cipher_key'
275
- @my_sec_key = 'my_sec_key'
276
- @alt_sec_key = 'alt_sec_key'
277
- end
278
-
279
- context 'required parameters' do
280
-
281
- before do
282
- @pn = Pubnub.new(:subscribe_key => @my_sub_key)
283
- end
284
-
285
- it 'should raise when channel is missing' do
286
- lambda { @pn.history(:count => 10, :callback => @my_callback) }.
287
- should raise_error(ArgumentError, 'history() requires :channel, :count parameters and, if async, callback parameter or block given.')
288
- end
289
-
290
- it 'should raise when callback is missing' do
291
- lambda { @pn.history(:channel => @my_channel, :count => 10) }.
292
- should raise_error(ArgumentError, 'history() requires :channel, :count parameters and, if async, callback parameter or block given.')
293
- end
294
-
295
- it 'should raise when count is missing' do
296
- lambda { @pn.history(:channel => @my_channel, :callback => @my_callback) }.
297
- should raise_error(ArgumentError, 'history() requires :channel, :count parameters and, if async, callback parameter or block given.')
298
- end
299
-
300
- it 'should raise when callback is invalid' do
301
- lambda { @pn.history(:channel => @my_channel, :count => 10, :callback => :blah) }.
302
- should raise_error('callback is invalid.')
303
- end
304
-
305
- end
39
+ it 'starts EventMachine reactor in a separate thread' do
40
+ pubnub = Pubnub.new(:subscribe_key => 'key')
41
+ sleep(0.1)
42
+ expect(EM.reactor_running?).to be true
43
+ expect(EM.reactor_thread).not_to be eq Thread.current
306
44
  end
307
45
 
308
- describe '.leave' do
309
- before do
310
-
311
- @my_callback = lambda { |message| Rails.logger.debug(message) }
312
- @my_pub_key = 'demo'
313
- @my_sub_key = 'demo'
314
- @my_message = 'hello_world!'
315
- @my_channel = 'hello_world'
316
-
317
- @my_cipher_key = 'my_cipher_key'
318
- @my_sec_key = 'my_sec_key'
319
- @alt_sec_key = 'alt_sec_key'
320
- end
321
-
322
- context 'required parameters' do
323
-
324
- before do
325
- @pn = Pubnub.new(:subscribe_key => @my_sub_key)
326
- end
327
-
328
- it 'should raise when channel is missing' do
329
- lambda { @pn.leave(:callback => @my_callback) }.
330
- should raise_error(ArgumentError, 'leave() requires :channel parameters and, if async, callback parameter or block given.')
331
- end
332
-
333
- it 'should raise when callback is missing' do
334
- lambda { @pn.leave(:channel => @my_channel) }.
335
- should raise_error(ArgumentError, 'leave() requires :channel parameters and, if async, callback parameter or block given.')
336
- end
337
-
338
- it 'should raise when callback is invalid' do
339
- lambda { @pn.leave(:channel => @my_channel, :callback => :blah) }.
340
- should raise_error('callback is invalid.')
341
- end
342
-
343
- end
344
- end
345
46
  end
47
+
346
48
  end