pubnub 4.2.4 → 4.4.0

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 (296) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -0
  3. data/.pubnub.yml +160 -118
  4. data/.travis.yml +9 -20
  5. data/CHANGELOG.md +29 -5
  6. data/Gemfile.lock +62 -68
  7. data/README.md +1 -1
  8. data/VERSION +1 -1
  9. data/fixtures/vcr_cassettes/examples/grant/1913.yml +1 -1
  10. data/fixtures/vcr_cassettes/examples/grant/1944.yml +8 -9
  11. data/fixtures/vcr_cassettes/examples/grant/1945.yml +359 -9
  12. data/fixtures/vcr_cassettes/examples/history/100.yml +46 -0
  13. data/fixtures/vcr_cassettes/examples/history/include_meta__encrypted.yml +46 -0
  14. data/fixtures/vcr_cassettes/examples/history/include_token__encrypted.yml +45 -0
  15. data/fixtures/vcr_cassettes/examples/history/no_includes__encrypted.yml +45 -0
  16. data/fixtures/vcr_cassettes/examples/subscribe/0.yml +2 -2
  17. data/fixtures/vcr_cassettes/examples/subscribe/1.yml +2 -2
  18. data/fixtures/vcr_cassettes/examples/subscribe/10.yml +2 -2
  19. data/fixtures/vcr_cassettes/examples/subscribe/100.yml +2 -2
  20. data/fixtures/vcr_cassettes/examples/subscribe/101.yml +2 -2
  21. data/fixtures/vcr_cassettes/examples/subscribe/102.yml +2 -2
  22. data/fixtures/vcr_cassettes/examples/subscribe/103.yml +2 -2
  23. data/fixtures/vcr_cassettes/examples/subscribe/104.yml +2 -2
  24. data/fixtures/vcr_cassettes/examples/subscribe/105.yml +2 -2
  25. data/fixtures/vcr_cassettes/examples/subscribe/106.yml +2 -2
  26. data/fixtures/vcr_cassettes/examples/subscribe/107.yml +2 -2
  27. data/fixtures/vcr_cassettes/examples/subscribe/11.yml +2 -2
  28. data/fixtures/vcr_cassettes/examples/subscribe/12.yml +2 -2
  29. data/fixtures/vcr_cassettes/examples/subscribe/13.yml +2 -2
  30. data/fixtures/vcr_cassettes/examples/subscribe/14.yml +2 -2
  31. data/fixtures/vcr_cassettes/examples/subscribe/15.yml +2 -2
  32. data/fixtures/vcr_cassettes/examples/subscribe/16.yml +2 -2
  33. data/fixtures/vcr_cassettes/examples/subscribe/17.yml +2 -2
  34. data/fixtures/vcr_cassettes/examples/subscribe/18.yml +2 -2
  35. data/fixtures/vcr_cassettes/examples/subscribe/180.yml +2 -2
  36. data/fixtures/vcr_cassettes/examples/subscribe/181.yml +2 -2
  37. data/fixtures/vcr_cassettes/examples/subscribe/182.yml +2 -2
  38. data/fixtures/vcr_cassettes/examples/subscribe/183.yml +2 -2
  39. data/fixtures/vcr_cassettes/examples/subscribe/184.yml +2 -2
  40. data/fixtures/vcr_cassettes/examples/subscribe/185.yml +2 -2
  41. data/fixtures/vcr_cassettes/examples/subscribe/186.yml +2 -2
  42. data/fixtures/vcr_cassettes/examples/subscribe/187.yml +2 -2
  43. data/fixtures/vcr_cassettes/examples/subscribe/188.yml +2 -2
  44. data/fixtures/vcr_cassettes/examples/subscribe/189.yml +2 -2
  45. data/fixtures/vcr_cassettes/examples/subscribe/19.yml +2 -2
  46. data/fixtures/vcr_cassettes/examples/subscribe/190.yml +2 -2
  47. data/fixtures/vcr_cassettes/examples/subscribe/191.yml +2 -2
  48. data/fixtures/vcr_cassettes/examples/subscribe/192.yml +2 -2
  49. data/fixtures/vcr_cassettes/examples/subscribe/193.yml +2 -2
  50. data/fixtures/vcr_cassettes/examples/subscribe/194.yml +2 -2
  51. data/fixtures/vcr_cassettes/examples/subscribe/195.yml +2 -2
  52. data/fixtures/vcr_cassettes/examples/subscribe/196.yml +2 -2
  53. data/fixtures/vcr_cassettes/examples/subscribe/197.yml +2 -2
  54. data/fixtures/vcr_cassettes/examples/subscribe/2.yml +2 -2
  55. data/fixtures/vcr_cassettes/examples/subscribe/20.yml +2 -2
  56. data/fixtures/vcr_cassettes/examples/subscribe/21.yml +2 -2
  57. data/fixtures/vcr_cassettes/examples/subscribe/22.yml +2 -2
  58. data/fixtures/vcr_cassettes/examples/subscribe/23.yml +2 -2
  59. data/fixtures/vcr_cassettes/examples/subscribe/24.yml +2 -2
  60. data/fixtures/vcr_cassettes/examples/subscribe/25.yml +2 -2
  61. data/fixtures/vcr_cassettes/examples/subscribe/26.yml +2 -2
  62. data/fixtures/vcr_cassettes/examples/subscribe/27.yml +2 -2
  63. data/fixtures/vcr_cassettes/examples/subscribe/270.yml +2 -2
  64. data/fixtures/vcr_cassettes/examples/subscribe/271.yml +2 -2
  65. data/fixtures/vcr_cassettes/examples/subscribe/272.yml +2 -2
  66. data/fixtures/vcr_cassettes/examples/subscribe/273.yml +2 -2
  67. data/fixtures/vcr_cassettes/examples/subscribe/274.yml +2 -2
  68. data/fixtures/vcr_cassettes/examples/subscribe/275.yml +2 -2
  69. data/fixtures/vcr_cassettes/examples/subscribe/276.yml +2 -2
  70. data/fixtures/vcr_cassettes/examples/subscribe/277.yml +2 -2
  71. data/fixtures/vcr_cassettes/examples/subscribe/278.yml +2 -2
  72. data/fixtures/vcr_cassettes/examples/subscribe/279.yml +2 -2
  73. data/fixtures/vcr_cassettes/examples/subscribe/28.yml +2 -2
  74. data/fixtures/vcr_cassettes/examples/subscribe/280.yml +2 -2
  75. data/fixtures/vcr_cassettes/examples/subscribe/281.yml +2 -2
  76. data/fixtures/vcr_cassettes/examples/subscribe/282.yml +2 -2
  77. data/fixtures/vcr_cassettes/examples/subscribe/283.yml +2 -2
  78. data/fixtures/vcr_cassettes/examples/subscribe/284.yml +2 -2
  79. data/fixtures/vcr_cassettes/examples/subscribe/285.yml +2 -2
  80. data/fixtures/vcr_cassettes/examples/subscribe/286.yml +2 -2
  81. data/fixtures/vcr_cassettes/examples/subscribe/287.yml +2 -2
  82. data/fixtures/vcr_cassettes/examples/subscribe/29.yml +2 -2
  83. data/fixtures/vcr_cassettes/examples/subscribe/3.yml +2 -2
  84. data/fixtures/vcr_cassettes/examples/subscribe/30.yml +2 -2
  85. data/fixtures/vcr_cassettes/examples/subscribe/31.yml +2 -2
  86. data/fixtures/vcr_cassettes/examples/subscribe/32.yml +2 -2
  87. data/fixtures/vcr_cassettes/examples/subscribe/33.yml +2 -2
  88. data/fixtures/vcr_cassettes/examples/subscribe/34.yml +2 -2
  89. data/fixtures/vcr_cassettes/examples/subscribe/35.yml +2 -2
  90. data/fixtures/vcr_cassettes/examples/subscribe/36.yml +2 -2
  91. data/fixtures/vcr_cassettes/examples/subscribe/360.yml +2 -2
  92. data/fixtures/vcr_cassettes/examples/subscribe/361.yml +2 -2
  93. data/fixtures/vcr_cassettes/examples/subscribe/362.yml +2 -2
  94. data/fixtures/vcr_cassettes/examples/subscribe/363.yml +2 -2
  95. data/fixtures/vcr_cassettes/examples/subscribe/364.yml +2 -2
  96. data/fixtures/vcr_cassettes/examples/subscribe/365.yml +2 -2
  97. data/fixtures/vcr_cassettes/examples/subscribe/366.yml +2 -2
  98. data/fixtures/vcr_cassettes/examples/subscribe/367.yml +2 -2
  99. data/fixtures/vcr_cassettes/examples/subscribe/368.yml +2 -2
  100. data/fixtures/vcr_cassettes/examples/subscribe/369.yml +2 -2
  101. data/fixtures/vcr_cassettes/examples/subscribe/37.yml +2 -2
  102. data/fixtures/vcr_cassettes/examples/subscribe/370.yml +2 -2
  103. data/fixtures/vcr_cassettes/examples/subscribe/371.yml +2 -2
  104. data/fixtures/vcr_cassettes/examples/subscribe/372.yml +2 -2
  105. data/fixtures/vcr_cassettes/examples/subscribe/373.yml +2 -2
  106. data/fixtures/vcr_cassettes/examples/subscribe/374.yml +2 -2
  107. data/fixtures/vcr_cassettes/examples/subscribe/375.yml +2 -2
  108. data/fixtures/vcr_cassettes/examples/subscribe/376.yml +2 -2
  109. data/fixtures/vcr_cassettes/examples/subscribe/377.yml +2 -2
  110. data/fixtures/vcr_cassettes/examples/subscribe/38.yml +2 -2
  111. data/fixtures/vcr_cassettes/examples/subscribe/39.yml +2 -2
  112. data/fixtures/vcr_cassettes/examples/subscribe/4.yml +2 -2
  113. data/fixtures/vcr_cassettes/examples/subscribe/40.yml +2 -2
  114. data/fixtures/vcr_cassettes/examples/subscribe/41.yml +2 -2
  115. data/fixtures/vcr_cassettes/examples/subscribe/42.yml +2 -2
  116. data/fixtures/vcr_cassettes/examples/subscribe/43.yml +2 -2
  117. data/fixtures/vcr_cassettes/examples/subscribe/44.yml +2 -2
  118. data/fixtures/vcr_cassettes/examples/subscribe/45.yml +2 -2
  119. data/fixtures/vcr_cassettes/examples/subscribe/46.yml +2 -2
  120. data/fixtures/vcr_cassettes/examples/subscribe/47.yml +2 -2
  121. data/fixtures/vcr_cassettes/examples/subscribe/48.yml +2 -2
  122. data/fixtures/vcr_cassettes/examples/subscribe/49.yml +2 -2
  123. data/fixtures/vcr_cassettes/examples/subscribe/5.yml +2 -2
  124. data/fixtures/vcr_cassettes/examples/subscribe/50.yml +2 -2
  125. data/fixtures/vcr_cassettes/examples/subscribe/51.yml +2 -2
  126. data/fixtures/vcr_cassettes/examples/subscribe/52.yml +2 -2
  127. data/fixtures/vcr_cassettes/examples/subscribe/53.yml +2 -2
  128. data/fixtures/vcr_cassettes/examples/subscribe/54.yml +2 -2
  129. data/fixtures/vcr_cassettes/examples/subscribe/55.yml +2 -2
  130. data/fixtures/vcr_cassettes/examples/subscribe/56.yml +2 -2
  131. data/fixtures/vcr_cassettes/examples/subscribe/57.yml +2 -2
  132. data/fixtures/vcr_cassettes/examples/subscribe/58.yml +2 -2
  133. data/fixtures/vcr_cassettes/examples/subscribe/59.yml +2 -2
  134. data/fixtures/vcr_cassettes/examples/subscribe/6.yml +2 -2
  135. data/fixtures/vcr_cassettes/examples/subscribe/60.yml +2 -2
  136. data/fixtures/vcr_cassettes/examples/subscribe/61.yml +2 -2
  137. data/fixtures/vcr_cassettes/examples/subscribe/62.yml +2 -2
  138. data/fixtures/vcr_cassettes/examples/subscribe/63.yml +2 -2
  139. data/fixtures/vcr_cassettes/examples/subscribe/64.yml +2 -2
  140. data/fixtures/vcr_cassettes/examples/subscribe/65.yml +2 -2
  141. data/fixtures/vcr_cassettes/examples/subscribe/66.yml +2 -2
  142. data/fixtures/vcr_cassettes/examples/subscribe/67.yml +2 -2
  143. data/fixtures/vcr_cassettes/examples/subscribe/68.yml +2 -2
  144. data/fixtures/vcr_cassettes/examples/subscribe/69.yml +2 -2
  145. data/fixtures/vcr_cassettes/examples/subscribe/7.yml +2 -2
  146. data/fixtures/vcr_cassettes/examples/subscribe/70.yml +2 -2
  147. data/fixtures/vcr_cassettes/examples/subscribe/71.yml +2 -2
  148. data/fixtures/vcr_cassettes/examples/subscribe/72.yml +2 -2
  149. data/fixtures/vcr_cassettes/examples/subscribe/73.yml +2 -2
  150. data/fixtures/vcr_cassettes/examples/subscribe/74.yml +2 -2
  151. data/fixtures/vcr_cassettes/examples/subscribe/75.yml +2 -2
  152. data/fixtures/vcr_cassettes/examples/subscribe/76.yml +2 -2
  153. data/fixtures/vcr_cassettes/examples/subscribe/77.yml +2 -2
  154. data/fixtures/vcr_cassettes/examples/subscribe/78.yml +2 -2
  155. data/fixtures/vcr_cassettes/examples/subscribe/79.yml +2 -2
  156. data/fixtures/vcr_cassettes/examples/subscribe/8.yml +2 -2
  157. data/fixtures/vcr_cassettes/examples/subscribe/80.yml +2 -2
  158. data/fixtures/vcr_cassettes/examples/subscribe/81.yml +2 -2
  159. data/fixtures/vcr_cassettes/examples/subscribe/82.yml +2 -2
  160. data/fixtures/vcr_cassettes/examples/subscribe/83.yml +2 -2
  161. data/fixtures/vcr_cassettes/examples/subscribe/84.yml +2 -2
  162. data/fixtures/vcr_cassettes/examples/subscribe/85.yml +2 -2
  163. data/fixtures/vcr_cassettes/examples/subscribe/86.yml +2 -2
  164. data/fixtures/vcr_cassettes/examples/subscribe/87.yml +2 -2
  165. data/fixtures/vcr_cassettes/examples/subscribe/88.yml +2 -2
  166. data/fixtures/vcr_cassettes/examples/subscribe/89.yml +2 -2
  167. data/fixtures/vcr_cassettes/examples/subscribe/9.yml +2 -2
  168. data/fixtures/vcr_cassettes/examples/subscribe/90.yml +2 -2
  169. data/fixtures/vcr_cassettes/examples/subscribe/91.yml +2 -2
  170. data/fixtures/vcr_cassettes/examples/subscribe/92.yml +2 -2
  171. data/fixtures/vcr_cassettes/examples/subscribe/93.yml +2 -2
  172. data/fixtures/vcr_cassettes/examples/subscribe/94.yml +2 -2
  173. data/fixtures/vcr_cassettes/examples/subscribe/95.yml +2 -2
  174. data/fixtures/vcr_cassettes/examples/subscribe/96.yml +2 -2
  175. data/fixtures/vcr_cassettes/examples/subscribe/97.yml +2 -2
  176. data/fixtures/vcr_cassettes/examples/subscribe/98.yml +2 -2
  177. data/fixtures/vcr_cassettes/examples/subscribe/99.yml +2 -2
  178. data/fixtures/vcr_cassettes/lib/events/get_all_channels_metadata.yml +39 -0
  179. data/fixtures/vcr_cassettes/lib/events/get_all_uuid_metadata.yml +76 -0
  180. data/fixtures/vcr_cassettes/lib/events/{get_space_memberships.yml → get_channel_members.yml} +5 -6
  181. data/fixtures/vcr_cassettes/lib/events/get_channel_metadata.yml +37 -0
  182. data/fixtures/vcr_cassettes/lib/events/{get_members.yml → get_memberships.yml} +10 -11
  183. data/fixtures/vcr_cassettes/lib/events/get_uuid_metadata.yml +76 -0
  184. data/fixtures/vcr_cassettes/lib/events/grant-error.yml +2 -2
  185. data/fixtures/vcr_cassettes/lib/events/grant.yml +10 -11
  186. data/fixtures/vcr_cassettes/lib/events/remove_channel_members.yml +78 -0
  187. data/fixtures/vcr_cassettes/lib/events/{delete_space.yml → remove_channel_metadata.yml} +5 -6
  188. data/fixtures/vcr_cassettes/lib/events/{manage_memberships_remove.yml → remove_memberships.yml} +8 -9
  189. data/fixtures/vcr_cassettes/lib/events/remove_uuid_metadata.yml +76 -0
  190. data/fixtures/vcr_cassettes/lib/events/set_channel_members.yml +39 -0
  191. data/fixtures/vcr_cassettes/lib/events/set_channel_metadata.yml +39 -0
  192. data/fixtures/vcr_cassettes/lib/events/{manage_members_add.yml → set_memberships.yml} +8 -9
  193. data/fixtures/vcr_cassettes/lib/events/set_uuid_metadata.yml +78 -0
  194. data/fixtures/vcr_cassettes/lib/events/{subscribe-space-delete-async.yml → subscribe-channel-metadata-remove-sync.yml} +12 -14
  195. data/fixtures/vcr_cassettes/lib/events/subscribe-channel-metadata-set-async.yml +75 -0
  196. data/fixtures/vcr_cassettes/lib/events/{subscribe-member-remove-async.yml → subscribe-member-remove-sync.yml} +12 -14
  197. data/fixtures/vcr_cassettes/lib/events/subscribe-member-set-async.yml +75 -0
  198. data/fixtures/vcr_cassettes/lib/events/subscribe-membership-remove-async.yml +12 -14
  199. data/fixtures/vcr_cassettes/lib/events/{subscribe-user-update-async.yml → subscribe-membership-set-async.yml} +12 -14
  200. data/fixtures/vcr_cassettes/lib/events/{subscribe-user-delete-async.yml → subscribe-uuid-metadata-remove-sync.yml} +12 -14
  201. data/fixtures/vcr_cassettes/lib/events/subscribe-uuid-metadata-set-async.yml +75 -0
  202. data/fixtures/vcr_cassettes/lib/events/subscribe-with-presence.yml +2 -2
  203. data/lib/pubnub/client.rb +14 -14
  204. data/lib/pubnub/client/events.rb +4 -2
  205. data/lib/pubnub/client/paged_history.rb +1 -1
  206. data/lib/pubnub/constants.rb +19 -18
  207. data/lib/pubnub/event.rb +30 -16
  208. data/lib/pubnub/event/formatter.rb +4 -0
  209. data/lib/pubnub/event/signature.rb +22 -7
  210. data/lib/pubnub/events/get_all_channels_metadata.rb +92 -0
  211. data/lib/pubnub/events/get_all_uuid_metadata.rb +92 -0
  212. data/lib/pubnub/events/get_channel_members.rb +100 -0
  213. data/lib/pubnub/events/{get_user.rb → get_channel_metadata.rb} +22 -15
  214. data/lib/pubnub/events/get_memberships.rb +100 -0
  215. data/lib/pubnub/events/{get_space.rb → get_uuid_metadata.rb} +22 -15
  216. data/lib/pubnub/events/grant.rb +10 -1
  217. data/lib/pubnub/events/history.rb +17 -2
  218. data/lib/pubnub/events/remove_channel_members.rb +117 -0
  219. data/lib/pubnub/events/{delete_space.rb → remove_channel_metadata.rb} +12 -12
  220. data/lib/pubnub/events/remove_memberships.rb +117 -0
  221. data/lib/pubnub/events/{delete_user.rb → remove_uuid_metadata.rb} +12 -12
  222. data/lib/pubnub/events/set_channel_members.rb +120 -0
  223. data/lib/pubnub/events/{create_space.rb → set_channel_metadata.rb} +26 -16
  224. data/lib/pubnub/events/set_memberships.rb +120 -0
  225. data/lib/pubnub/events/{update_space.rb → set_uuid_metadata.rb} +27 -18
  226. data/lib/pubnub/formatter.rb +3 -3
  227. data/lib/pubnub/pam.rb +2 -11
  228. data/lib/pubnub/subscribe_callback.rb +1 -3
  229. data/lib/pubnub/subscribe_event/formatter.rb +26 -17
  230. data/lib/pubnub/subscriber.rb +5 -6
  231. data/lib/pubnub/validators/get_all_channels_metadata.rb +29 -0
  232. data/lib/pubnub/validators/get_all_uuid_metadata.rb +29 -0
  233. data/lib/pubnub/validators/get_channel_members.rb +39 -0
  234. data/lib/pubnub/validators/get_channel_metadata.rb +39 -0
  235. data/lib/pubnub/validators/get_memberships.rb +39 -0
  236. data/lib/pubnub/validators/get_uuid_metadata.rb +39 -0
  237. data/lib/pubnub/validators/grant.rb +37 -2
  238. data/lib/pubnub/validators/remove_channel_members.rb +52 -0
  239. data/lib/pubnub/validators/remove_channel_metadata.rb +39 -0
  240. data/lib/pubnub/validators/remove_memberships.rb +52 -0
  241. data/lib/pubnub/validators/remove_uuid_metadata.rb +39 -0
  242. data/lib/pubnub/validators/set_channel_members.rb +78 -0
  243. data/lib/pubnub/validators/set_channel_metadata.rb +62 -0
  244. data/lib/pubnub/validators/set_memberships.rb +78 -0
  245. data/lib/pubnub/validators/set_uuid_metadata.rb +62 -0
  246. data/lib/pubnub/version.rb +1 -1
  247. data/pubnub.gemspec +1 -1
  248. data/spec/examples/grant_examples_spec.rb +36 -0
  249. data/spec/examples/history_examples_spec.rb +85 -0
  250. data/spec/lib/event/formatter_spec.rb +22 -0
  251. data/spec/lib/events/channel_metadata_spec.rb +58 -0
  252. data/spec/lib/events/grant_spec.rb +3 -2
  253. data/spec/lib/events/membership_spec.rb +25 -22
  254. data/spec/lib/events/subscribe_spec.rb +58 -45
  255. data/spec/lib/events/uuid_metadata_spec.rb +56 -0
  256. data/spec/lib/subscribe_event/formatter_spec.rb +22 -0
  257. data/spec/spec_helper.rb +1 -1
  258. metadata +79 -72
  259. data/fixtures/vcr_cassettes/lib/events/create_space.yml +0 -40
  260. data/fixtures/vcr_cassettes/lib/events/create_user.yml +0 -40
  261. data/fixtures/vcr_cassettes/lib/events/delete_user.yml +0 -38
  262. data/fixtures/vcr_cassettes/lib/events/get_space.yml +0 -38
  263. data/fixtures/vcr_cassettes/lib/events/get_spaces.yml +0 -40
  264. data/fixtures/vcr_cassettes/lib/events/get_user.yml +0 -38
  265. data/fixtures/vcr_cassettes/lib/events/get_users.yml +0 -40
  266. data/fixtures/vcr_cassettes/lib/events/manage_members_remove.yml +0 -83
  267. data/fixtures/vcr_cassettes/lib/events/manage_memberships_add.yml +0 -40
  268. data/fixtures/vcr_cassettes/lib/events/subscribe-member-add-async.yml +0 -77
  269. data/fixtures/vcr_cassettes/lib/events/subscribe-membership-add-async.yml +0 -77
  270. data/fixtures/vcr_cassettes/lib/events/subscribe-space-update-async.yml +0 -77
  271. data/fixtures/vcr_cassettes/lib/events/update_space.yml +0 -40
  272. data/fixtures/vcr_cassettes/lib/events/update_user.yml +0 -40
  273. data/lib/pubnub/events/create_user.rb +0 -84
  274. data/lib/pubnub/events/get_members.rb +0 -93
  275. data/lib/pubnub/events/get_space_memberships.rb +0 -93
  276. data/lib/pubnub/events/get_spaces.rb +0 -90
  277. data/lib/pubnub/events/get_users.rb +0 -90
  278. data/lib/pubnub/events/manage_members.rb +0 -105
  279. data/lib/pubnub/events/manage_memberships.rb +0 -105
  280. data/lib/pubnub/events/update_user.rb +0 -86
  281. data/lib/pubnub/validators/create_space.rb +0 -44
  282. data/lib/pubnub/validators/create_user.rb +0 -44
  283. data/lib/pubnub/validators/delete_space.rb +0 -32
  284. data/lib/pubnub/validators/delete_user.rb +0 -32
  285. data/lib/pubnub/validators/get_members.rb +0 -32
  286. data/lib/pubnub/validators/get_space.rb +0 -32
  287. data/lib/pubnub/validators/get_space_memberships.rb +0 -32
  288. data/lib/pubnub/validators/get_spaces.rb +0 -16
  289. data/lib/pubnub/validators/get_user.rb +0 -32
  290. data/lib/pubnub/validators/get_users.rb +0 -16
  291. data/lib/pubnub/validators/manage_members.rb +0 -45
  292. data/lib/pubnub/validators/manage_memberships.rb +0 -45
  293. data/lib/pubnub/validators/update_space.rb +0 -45
  294. data/lib/pubnub/validators/update_user.rb +0 -45
  295. data/spec/lib/events/space_spec.rb +0 -75
  296. data/spec/lib/events/user_spec.rb +0 -75
@@ -10,7 +10,11 @@ module Pubnub
10
10
  response,
11
11
  request: request,
12
12
  response: response)
13
+ elsif response.is_a?(StandardError)
14
+ # unexpected error response
15
+ raise response
13
16
  end
17
+
14
18
  parsed_response, error = Formatter.parse_json(response.body)
15
19
 
16
20
  error = response if parsed_response && response.code.to_i != 200
@@ -6,20 +6,35 @@ module Pubnub
6
6
  module Signature
7
7
  private
8
8
 
9
- def super_admin_signature
9
+ def super_admin_signature(http_method, body)
10
10
  return unless @app.env[:secret_key]
11
11
 
12
+ # Handle special case with publish operation signing when message sent as POST body.
13
+ http_method = if http_method.upcase == "POST" && current_operation == Pubnub::Constants::OPERATION_PUBLISH
14
+ "GET"
15
+ else
16
+ http_method.upcase
17
+ end
18
+
12
19
  message = [
13
- @app.env[:subscribe_key],
20
+ http_method.upcase,
14
21
  @app.env[:publish_key],
15
22
  path,
16
23
  variables_for_signature.gsub(/[!~'()*]/) { |char| '%' + char.ord.to_s(16).upcase }, # Replace ! ~ * ' ( )
17
- ].join("\n")
24
+ ]
25
+
26
+ if %w[POST PATCH].include?(http_method)
27
+ message.push(body)
28
+ else
29
+ message.push('')
30
+ end
18
31
 
19
- URI.encode_www_form_component(Base64.encode64(
32
+ signature = URI.encode_www_form_component(Base64.encode64(
20
33
  OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'),
21
- @app.env[:secret_key].to_s, message)
22
- ).strip).gsub('+', '%20')
34
+ @app.env[:secret_key].to_s, message.join("\n"))
35
+ ).strip.gsub(/\+/, '-').gsub(/\//, '_').gsub(/=+$/, ''))
36
+
37
+ "v2.#{signature}"
23
38
  end
24
39
 
25
40
  def variables_for_signature
@@ -29,7 +44,7 @@ module Pubnub
29
44
  if %w[meta ortt].include?(k.to_s)
30
45
  encoded_value = URI.encode_www_form_component(v.to_json).gsub('+', '%20')
31
46
  "#{k}=#{encoded_value}"
32
- elsif %w[t state filter-expr].include?(k.to_s)
47
+ elsif %w[t state filter-expr sort filter].include?(k.to_s)
33
48
  "#{k}=#{v}"
34
49
  else
35
50
  "#{k}=#{URI.encode_www_form_component(v.to_s).gsub('+', '%20')}"
@@ -0,0 +1,92 @@
1
+ # Toplevel Pubnub module.
2
+ # frozen_string_literal: true
3
+
4
+ module Pubnub
5
+ # Holds GetAllChannelsMetadata functionality
6
+ class GetAllChannelsMetadata < SingleEvent
7
+ include Concurrent::Async
8
+ include Pubnub::Validator::GetAllChannelsMetadata
9
+
10
+ def initialize(options, app)
11
+ @event = current_operation
12
+ @telemetry_name = :l_obj
13
+ @limit = [options[:limit], 100].min unless options[:limit].nil?
14
+ @sort = options[:sort].join(",") if options[:sort] && !options[:sort].empty?
15
+ @filter = options[:filter] if options[:filter] && !options[:filter].empty?
16
+ @start = options[:start] if options[:start] && !options[:start].empty?
17
+ @end = options[:end] if options[:start] && !options[:end].empty?
18
+
19
+ if options[:include]
20
+ @include_count = [0, '0', false].include?(options[:include][:count]) ? "0" : "1" unless options[:include][:count].nil?
21
+ @include = "custom" unless [0, '0', false].include?(options[:include][:custom])
22
+ end
23
+
24
+ # Collections by default return number of available entries.
25
+ @include_count = "1" if @include_count.nil?
26
+
27
+ super
28
+ end
29
+
30
+ private
31
+
32
+ def current_operation
33
+ Pubnub::Constants::OPERATION_GET_ALL_CHANNELS_METADATA
34
+ end
35
+
36
+ def parameters(signature = false)
37
+ parameters = super(signature)
38
+ parameters[:limit] = @limit unless @limit.nil?
39
+ parameters[:sort] = @sort unless @sort.nil?
40
+ parameters[:filter] = @filter unless @filter.nil?
41
+ parameters[:start] = @start unless @start.nil?
42
+ parameters[:end] = @end if @end && !@start
43
+ parameters[:count] = @include_count unless @include_count.nil?
44
+ parameters[:include] = @include unless @include.to_s.empty?
45
+
46
+ parameters
47
+ end
48
+
49
+ def path
50
+ '/' + [
51
+ 'v2',
52
+ 'objects',
53
+ @subscribe_key,
54
+ 'channels'
55
+ ].join('/')
56
+ end
57
+
58
+ def valid_envelope(parsed_response, req_res_objects)
59
+ Pubnub::Envelope.new(
60
+ event: @event,
61
+ event_options: @given_options,
62
+ timetoken: nil,
63
+
64
+ result: {
65
+ code: req_res_objects[:response].code,
66
+ operation: current_operation,
67
+ client_request: req_res_objects[:request],
68
+ server_response: req_res_objects[:response],
69
+ data: parsed_response
70
+ },
71
+
72
+ status: {
73
+ code: req_res_objects[:response].code,
74
+ operation: current_operation,
75
+ client_request: req_res_objects[:request],
76
+ server_response: req_res_objects[:response],
77
+ data: nil,
78
+ category: Pubnub::Constants::STATUS_ACK,
79
+ error: false,
80
+ auto_retried: false,
81
+
82
+ current_timetoken: nil,
83
+ last_timetoken: nil,
84
+ subscribed_channels: nil,
85
+ subscribed_channel_groups: nil,
86
+
87
+ config: get_config
88
+ }
89
+ )
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,92 @@
1
+ # Toplevel Pubnub module.
2
+ # frozen_string_literal: true
3
+
4
+ module Pubnub
5
+ # Holds GetAllUuidMetadata functionality
6
+ class GetAllUuidMetadata < SingleEvent
7
+ include Concurrent::Async
8
+ include Pubnub::Validator::GetAllUuidMetadata
9
+
10
+ def initialize(options, app)
11
+ @event = current_operation
12
+ @telemetry_name = :l_obj
13
+ @limit = [options[:limit], 100].min unless options[:limit].nil?
14
+ @sort = options[:sort].join(",") if options[:sort] && !options[:sort].empty?
15
+ @filter = options[:filter] if options[:filter] && !options[:filter].empty?
16
+ @start = options[:start] if options[:start] && !options[:start].empty?
17
+ @end = options[:end] if options[:start] && !options[:end].empty?
18
+
19
+ if options[:include]
20
+ @include_count = [0, '0', false].include?(options[:include][:count]) ? "0" : "1" unless options[:include][:count].nil?
21
+ @include = "custom" unless [0, '0', false].include?(options[:include][:custom])
22
+ end
23
+
24
+ # Collections by default return number of available entries.
25
+ @include_count = "1" if @include_count.nil?
26
+
27
+ super
28
+ end
29
+
30
+ private
31
+
32
+ def current_operation
33
+ Pubnub::Constants::OPERATION_GET_ALL_UUID_METADATA
34
+ end
35
+
36
+ def parameters(signature = false)
37
+ parameters = super(signature)
38
+ parameters[:limit] = @limit unless @limit.nil?
39
+ parameters[:sort] = @sort unless @sort.nil?
40
+ parameters[:filter] = @filter unless @filter.nil?
41
+ parameters[:start] = @start unless @start.nil?
42
+ parameters[:end] = @end if @end && !@start
43
+ parameters[:count] = @include_count unless @include_count.nil?
44
+ parameters[:include] = @include unless @include.to_s.empty?
45
+
46
+ parameters
47
+ end
48
+
49
+ def path
50
+ '/' + [
51
+ 'v2',
52
+ 'objects',
53
+ @subscribe_key,
54
+ 'uuids'
55
+ ].join('/')
56
+ end
57
+
58
+ def valid_envelope(parsed_response, req_res_objects)
59
+ Pubnub::Envelope.new(
60
+ event: @event,
61
+ event_options: @given_options,
62
+ timetoken: nil,
63
+
64
+ result: {
65
+ code: req_res_objects[:response].code,
66
+ operation: current_operation,
67
+ client_request: req_res_objects[:request],
68
+ server_response: req_res_objects[:response],
69
+ data: parsed_response
70
+ },
71
+
72
+ status: {
73
+ code: req_res_objects[:response].code,
74
+ operation: current_operation,
75
+ client_request: req_res_objects[:request],
76
+ server_response: req_res_objects[:response],
77
+ data: nil,
78
+ category: Pubnub::Constants::STATUS_ACK,
79
+ error: false,
80
+ auto_retried: false,
81
+
82
+ current_timetoken: nil,
83
+ last_timetoken: nil,
84
+ subscribed_channels: nil,
85
+ subscribed_channel_groups: nil,
86
+
87
+ config: get_config
88
+ }
89
+ )
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,100 @@
1
+ # Toplevel Pubnub module.
2
+ # frozen_string_literal: true
3
+
4
+ module Pubnub
5
+ # Holds GetChannelMembers functionality
6
+ class GetChannelMembers < SingleEvent
7
+ include Concurrent::Async
8
+ include Pubnub::Validator::GetChannelMembers
9
+
10
+ def initialize(options, app)
11
+ @event = current_operation
12
+ @telemetry_name = :l_obj
13
+ @channel = options[:channel]
14
+ @limit = [options[:limit], 100].min unless options[:limit].nil?
15
+ @sort = options[:sort].join(",") if options[:sort] && !options[:sort].empty?
16
+ @filter = options[:filter] if options[:filter] && !options[:filter].empty?
17
+ @start = options[:start] if options[:start] && !options[:start].empty?
18
+ @end = options[:end] if options[:start] && !options[:end].empty?
19
+
20
+ if options[:include]
21
+ include = options[:include]
22
+ @include_count = [0, '0', false].include?(include[:count]) ? "0" : "1" unless include[:count].nil?
23
+ @include_custom = "custom" if !include[:custom].nil? && ![0, '0', false].include?(include[:custom])
24
+ @include_uuid_metadata = "uuid" if !include[:uuid_metadata].nil? && ![0, '0', false].include?(include[:uuid_metadata])
25
+ @include_uuid_custom = "uuid.custom" if !include[:uuid_custom].nil? && ![0, '0', false].include?(include[:uuid_custom])
26
+
27
+ @include = [@include_custom, @include_uuid_metadata, @include_uuid_custom].reject { |flag| flag.to_s.empty? }
28
+ end
29
+
30
+ # Collections by default return number of available entries.
31
+ @include_count = "1" if @include_count.nil?
32
+
33
+ super
34
+ end
35
+
36
+ private
37
+
38
+ def current_operation
39
+ Pubnub::Constants::OPERATION_GET_CHANNEL_MEMBERS
40
+ end
41
+
42
+ def parameters(signature = false)
43
+ parameters = super(signature)
44
+ parameters[:limit] = @limit unless @limit.nil?
45
+ parameters[:sort] = @sort unless @sort.nil?
46
+ parameters[:filter] = @filter unless @filter.nil?
47
+ parameters[:start] = @start unless @start.nil?
48
+ parameters[:end] = @end if @end && !@start
49
+ parameters[:count] = @include_count unless @include_count.nil?
50
+ parameters[:include] = @include.sort.join(",") if @include && !@include.empty?
51
+
52
+ parameters
53
+ end
54
+
55
+ def path
56
+ '/' + [
57
+ 'v2',
58
+ 'objects',
59
+ @subscribe_key,
60
+ 'channels',
61
+ Formatter.channels_for_url(@channel),
62
+ 'uuids'
63
+ ].join('/')
64
+ end
65
+
66
+ def valid_envelope(parsed_response, req_res_objects)
67
+ Pubnub::Envelope.new(
68
+ event: @event,
69
+ event_options: @given_options,
70
+ timetoken: nil,
71
+
72
+ result: {
73
+ code: req_res_objects[:response].code,
74
+ operation: current_operation,
75
+ client_request: req_res_objects[:request],
76
+ server_response: req_res_objects[:response],
77
+ data: parsed_response
78
+ },
79
+
80
+ status: {
81
+ code: req_res_objects[:response].code,
82
+ operation: current_operation,
83
+ client_request: req_res_objects[:request],
84
+ server_response: req_res_objects[:response],
85
+ data: nil,
86
+ category: Pubnub::Constants::STATUS_ACK,
87
+ error: false,
88
+ auto_retried: false,
89
+
90
+ current_timetoken: nil,
91
+ last_timetoken: nil,
92
+ subscribed_channels: nil,
93
+ subscribed_channel_groups: nil,
94
+
95
+ config: get_config
96
+ }
97
+ )
98
+ end
99
+ end
100
+ end
@@ -2,38 +2,45 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Pubnub
5
- # Holds GetUser functionality
6
- class GetUser < SingleEvent
5
+ # Holds GetChannelMetadata functionality
6
+ class GetChannelMetadata < SingleEvent
7
7
  include Concurrent::Async
8
- include Pubnub::Validator::GetUser
8
+ include Pubnub::Validator::GetChannelMetadata
9
9
 
10
10
  def initialize(options, app)
11
- @event = :get_user
11
+ @event = current_operation
12
12
  @telemetry_name = :l_obj
13
- @user_id = options[:user_id]
14
- @include = options[:include]
13
+ @channel = options[:channel]
14
+
15
+ if options[:include]
16
+ @include = "custom" unless [0, '0', false].include?(options[:include][:custom])
17
+ end
18
+
19
+ # Single entity creation should return it's 'custom' field by default.
20
+ @include = "custom" if @include.nil?
15
21
  super
16
22
  end
17
23
 
18
24
  private
19
25
 
20
26
  def current_operation
21
- Pubnub::Constants::OPERATION_GET_USER
27
+ Pubnub::Constants::OPERATION_GET_CHANNEL_METADATA
22
28
  end
23
29
 
24
- def parameters(*_args)
25
- parameters = super
26
- parameters[:include] = @include if @include
30
+ def parameters(signature = false)
31
+ parameters = super(signature)
32
+ parameters[:include] = @include
33
+
27
34
  parameters
28
35
  end
29
36
 
30
37
  def path
31
38
  '/' + [
32
- 'v1',
39
+ 'v2',
33
40
  'objects',
34
41
  @subscribe_key,
35
- 'users',
36
- @user_id
42
+ 'channels',
43
+ Formatter.channels_for_url(@channel)
37
44
  ].join('/')
38
45
  end
39
46
 
@@ -45,7 +52,7 @@ module Pubnub
45
52
 
46
53
  result: {
47
54
  code: req_res_objects[:response].code,
48
- operation: Pubnub::Constants::OPERATION_GET_USER,
55
+ operation: current_operation,
49
56
  client_request: req_res_objects[:request],
50
57
  server_response: req_res_objects[:response],
51
58
  data: parsed_response
@@ -53,7 +60,7 @@ module Pubnub
53
60
 
54
61
  status: {
55
62
  code: req_res_objects[:response].code,
56
- operation: Pubnub::Constants::OPERATION_GET_USER,
63
+ operation: current_operation,
57
64
  client_request: req_res_objects[:request],
58
65
  server_response: req_res_objects[:response],
59
66
  data: nil,
@@ -0,0 +1,100 @@
1
+ # Toplevel Pubnub module.
2
+ # frozen_string_literal: true
3
+
4
+ module Pubnub
5
+ # Holds GetMemberships functionality
6
+ class GetMemberships < SingleEvent
7
+ include Concurrent::Async
8
+ include Pubnub::Validator::GetMemberships
9
+
10
+ def initialize(options, app)
11
+ @event = current_operation
12
+ @telemetry_name = :l_obj
13
+ @uuid = options[:uuid]
14
+ @limit = [options[:limit], 100].min unless options[:limit].nil?
15
+ @sort = options[:sort].join(",") if options[:sort] && !options[:sort].empty?
16
+ @filter = options[:filter] if options[:filter] && !options[:filter].empty?
17
+ @start = options[:start] if options[:start] && !options[:start].empty?
18
+ @end = options[:end] if options[:start] && !options[:end].empty?
19
+
20
+ if options[:include]
21
+ include = options[:include]
22
+ @include_count = [0, '0', false].include?(include[:count]) ? "0" : "1" unless include[:count].nil?
23
+ @include_custom = "custom" if !include[:custom].nil? && ![0, '0', false].include?(include[:custom])
24
+ @include_channel_metadata = "channel" if !include[:channel_metadata].nil? && ![0, '0', false].include?(include[:channel_metadata])
25
+ @include_channel_custom = "channel.custom" if !include[:channel_custom].nil? && ![0, '0', false].include?(include[:channel_custom])
26
+
27
+ @include = [@include_custom, @include_channel_metadata, @include_channel_custom].reject { |flag| flag.to_s.empty? }
28
+ end
29
+
30
+ # Collections by default return number of available entries.
31
+ @include_count = "1" if @include_count.nil?
32
+
33
+ super
34
+ end
35
+
36
+ private
37
+
38
+ def current_operation
39
+ Pubnub::Constants::OPERATION_GET_MEMBERSHIPS
40
+ end
41
+
42
+ def parameters(signature = false)
43
+ parameters = super(signature)
44
+ parameters[:limit] = @limit unless @limit.nil?
45
+ parameters[:sort] = @sort unless @sort.nil?
46
+ parameters[:filter] = @filter unless @filter.nil?
47
+ parameters[:start] = @start unless @start.nil?
48
+ parameters[:end] = @end if @end && !@start
49
+ parameters[:count] = @include_count unless @include_count.nil?
50
+ parameters[:include] = @include.sort.join(",") if @include && !@include.empty?
51
+
52
+ parameters
53
+ end
54
+
55
+ def path
56
+ '/' + [
57
+ 'v2',
58
+ 'objects',
59
+ @subscribe_key,
60
+ 'uuids',
61
+ Formatter.encode(@uuid),
62
+ 'channels'
63
+ ].join('/')
64
+ end
65
+
66
+ def valid_envelope(parsed_response, req_res_objects)
67
+ Pubnub::Envelope.new(
68
+ event: @event,
69
+ event_options: @given_options,
70
+ timetoken: nil,
71
+
72
+ result: {
73
+ code: req_res_objects[:response].code,
74
+ operation: current_operation,
75
+ client_request: req_res_objects[:request],
76
+ server_response: req_res_objects[:response],
77
+ data: parsed_response
78
+ },
79
+
80
+ status: {
81
+ code: req_res_objects[:response].code,
82
+ operation: current_operation,
83
+ client_request: req_res_objects[:request],
84
+ server_response: req_res_objects[:response],
85
+ data: nil,
86
+ category: Pubnub::Constants::STATUS_ACK,
87
+ error: false,
88
+ auto_retried: false,
89
+
90
+ current_timetoken: nil,
91
+ last_timetoken: nil,
92
+ subscribed_channels: nil,
93
+ subscribed_channel_groups: nil,
94
+
95
+ config: get_config
96
+ }
97
+ )
98
+ end
99
+ end
100
+ end