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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG +5 -3
- data/README.md +267 -41
- data/VERSION +1 -1
- data/examples/demo_console.rb +191 -32
- data/examples/demo_console.rb~ +307 -0
- data/examples/pubnub_livestream/Gemfile +1 -1
- data/examples/pubnub_livestream/Gemfile.lock +43 -74
- data/examples/serial_publish.rb +2 -6
- data/fixtures/vcr_cassettes/audit-nonssl-block-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/audit-nonssl-block-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/audit-nonssl-block-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/audit-nonssl-block-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/audit-nonssl-block-valid-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/audit-nonssl-block-valid-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/audit-nonssl-block-valid-non-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/audit-nonssl-block-valid-non-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/audit-nonssl-parameter-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/audit-nonssl-parameter-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/audit-nonssl-parameter-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/audit-nonssl-parameter-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/audit-nonssl-parameter-valid-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/audit-nonssl-parameter-valid-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/audit-nonssl-parameter-valid-non-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/audit-nonssl-parameter-valid-non-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/audit-ssl-block-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/audit-ssl-block-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/audit-ssl-block-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/audit-ssl-block-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/audit-ssl-block-valid-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/audit-ssl-block-valid-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/audit-ssl-block-valid-non-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/audit-ssl-block-valid-non-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/audit-ssl-parameter-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/audit-ssl-parameter-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/audit-ssl-parameter-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/audit-ssl-parameter-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/audit-ssl-parameter-valid-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/audit-ssl-parameter-valid-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/audit-ssl-parameter-valid-non-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/audit-ssl-parameter-valid-non-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-many-channels-array.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-many-channels-hash.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-many-channels-integer.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-many-channels-mix.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-many-channels-multi-mix.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-many-channels-string.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-one-channel-array.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-one-channel-hash.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-one-channel-integer.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-one-channel-mix.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-cipherkey-one-channel-string.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-many-channels-array.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-many-channels-hash.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-many-channels-integer.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-many-channels-mix.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-many-channels-multi-mix.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-many-channels-string.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-one-channel-array.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-one-channel-hash.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-one-channel-integer.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-one-channel-mix.yml +89 -0
- data/fixtures/vcr_cassettes/formatting-envelope-subscribe-without-cipherkey-one-channel-string.yml +89 -0
- data/fixtures/vcr_cassettes/grant-nonssl-block-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/grant-nonssl-block-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/grant-nonssl-block-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/grant-nonssl-block-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/grant-nonssl-block-valid-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/grant-nonssl-block-valid-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/grant-nonssl-block-valid-non-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/grant-nonssl-block-valid-non-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/grant-nonssl-parameter-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/grant-nonssl-parameter-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/grant-nonssl-parameter-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/grant-nonssl-parameter-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/grant-nonssl-parameter-valid-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/grant-nonssl-parameter-valid-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/grant-nonssl-parameter-valid-non-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/grant-nonssl-parameter-valid-non-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/grant-ssl-block-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/grant-ssl-block-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/grant-ssl-block-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/grant-ssl-block-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/grant-ssl-block-valid-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/grant-ssl-block-valid-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/grant-ssl-block-valid-non-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/grant-ssl-block-valid-non-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/grant-ssl-parameter-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/grant-ssl-parameter-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/grant-ssl-parameter-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/grant-ssl-parameter-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/grant-ssl-parameter-valid-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/grant-ssl-parameter-valid-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/grant-ssl-parameter-valid-non-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/grant-ssl-parameter-valid-non-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-block-invalid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-block-invalid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-block-invalid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-block-invalid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-block-valid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-block-valid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-block-valid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-block-valid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-parameter-invalid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-parameter-invalid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-parameter-invalid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-parameter-invalid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-parameter-valid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-parameter-valid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-parameter-valid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-nonssl-parameter-valid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-block-invalid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-block-invalid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-block-invalid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-block-invalid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-block-valid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-block-valid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-block-valid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-block-valid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-parameter-invalid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-parameter-invalid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-parameter-invalid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-parameter-invalid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-parameter-valid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-parameter-valid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-parameter-valid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/here_now-ssl-parameter-valid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-block-invalid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-block-invalid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-block-invalid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-block-invalid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-block-valid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-block-valid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-block-valid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-block-valid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-parameter-invalid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-parameter-invalid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-parameter-invalid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-parameter-invalid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-parameter-valid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-parameter-valid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-parameter-valid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-nonssl-parameter-valid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-block-invalid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-block-invalid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-block-invalid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-block-invalid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-block-valid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-block-valid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-block-valid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-block-valid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-parameter-invalid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-parameter-invalid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-parameter-invalid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-parameter-invalid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-parameter-valid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-parameter-valid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-parameter-valid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/history-ssl-parameter-valid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-block-invalid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-block-invalid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-block-invalid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-block-invalid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-block-valid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-block-valid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-block-valid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-block-valid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-parameter-invalid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-parameter-invalid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-parameter-invalid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-parameter-invalid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-parameter-valid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-parameter-valid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-parameter-valid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-nonssl-parameter-valid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-block-invalid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-block-invalid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-block-invalid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-block-invalid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-block-valid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-block-valid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-block-valid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-block-valid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-parameter-invalid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-parameter-invalid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-parameter-invalid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-parameter-invalid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-parameter-valid-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-parameter-valid-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-parameter-valid-non-200-async.yml +48 -0
- data/fixtures/vcr_cassettes/leave-ssl-parameter-valid-non-200-sync.yml +48 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-array-of-hashes.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-auth_key-200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-auth_key-200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-auth_key-non200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-auth_key-non200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-non200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-http-non200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-auth_key-200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-auth_key-200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-auth_key-non200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-auth_key-non200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-non200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-encrypted-https-non200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-http-200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-http-200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-http-auth_key-200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-http-auth_key-200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-http-auth_key-non200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-http-auth_key-non200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-http-non200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-http-non200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-https-200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-https-200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-https-auth_key-200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-https-auth_key-200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-https-auth_key-non200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-https-auth_key-non200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-https-non200-invalid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-https-non200-valid.yml +42 -0
- data/fixtures/vcr_cassettes/new_ones/publish/publish-plain-array-of-hashes.yml +42 -0
- data/fixtures/vcr_cassettes/pam1.yml +35 -0
- data/fixtures/vcr_cassettes/pam10.yml +35 -0
- data/fixtures/vcr_cassettes/pam11.yml +35 -0
- data/fixtures/vcr_cassettes/pam12.yml +35 -0
- data/fixtures/vcr_cassettes/pam13.yml +35 -0
- data/fixtures/vcr_cassettes/pam14.yml +35 -0
- data/fixtures/vcr_cassettes/pam15.yml +35 -0
- data/fixtures/vcr_cassettes/pam17.yml +35 -0
- data/fixtures/vcr_cassettes/pam2.yml +35 -0
- data/fixtures/vcr_cassettes/pam20.yml +35 -0
- data/fixtures/vcr_cassettes/pam21.yml +35 -0
- data/fixtures/vcr_cassettes/pam22.yml +97 -0
- data/fixtures/vcr_cassettes/pam4.yml +35 -0
- data/fixtures/vcr_cassettes/pam5.yml +66 -0
- data/fixtures/vcr_cassettes/pam6.yml +96 -0
- data/fixtures/vcr_cassettes/presence-nonssl-block-invalid-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/presence-nonssl-block-invalid-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/presence-nonssl-block-invalid-non-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/presence-nonssl-block-invalid-non-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/presence-nonssl-block-valid-200-async.yml +87 -0
- data/fixtures/vcr_cassettes/presence-nonssl-block-valid-200-sync.yml +87 -0
- data/fixtures/vcr_cassettes/presence-nonssl-block-valid-non-200-async.yml +87 -0
- data/fixtures/vcr_cassettes/presence-nonssl-block-valid-non-200-sync.yml +87 -0
- data/fixtures/vcr_cassettes/presence-nonssl-parameter-invalid-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/presence-nonssl-parameter-invalid-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/presence-nonssl-parameter-invalid-non-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/presence-nonssl-parameter-invalid-non-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/presence-nonssl-parameter-valid-200-async.yml +87 -0
- data/fixtures/vcr_cassettes/presence-nonssl-parameter-valid-200-sync.yml +87 -0
- data/fixtures/vcr_cassettes/presence-nonssl-parameter-valid-non-200-async.yml +87 -0
- data/fixtures/vcr_cassettes/presence-nonssl-parameter-valid-non-200-sync.yml +87 -0
- data/fixtures/vcr_cassettes/presence-ssl-block-invalid-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/presence-ssl-block-invalid-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/presence-ssl-block-invalid-non-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/presence-ssl-block-invalid-non-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/presence-ssl-block-valid-200-async.yml +87 -0
- data/fixtures/vcr_cassettes/presence-ssl-block-valid-200-sync-new.yml +81 -0
- data/fixtures/vcr_cassettes/presence-ssl-block-valid-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/presence-ssl-block-valid-non-200-async.yml +87 -0
- data/fixtures/vcr_cassettes/presence-ssl-block-valid-non-200-sync.yml +87 -0
- data/fixtures/vcr_cassettes/presence-ssl-parameter-invalid-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/presence-ssl-parameter-invalid-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/presence-ssl-parameter-invalid-non-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/presence-ssl-parameter-invalid-non-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/presence-ssl-parameter-valid-200-async.yml +87 -0
- data/fixtures/vcr_cassettes/presence-ssl-parameter-valid-200-sync.yml +87 -0
- data/fixtures/vcr_cassettes/presence-ssl-parameter-valid-non-200-async.yml +87 -0
- data/fixtures/vcr_cassettes/presence-ssl-parameter-valid-non-200-sync.yml +87 -0
- data/fixtures/vcr_cassettes/publish-nonssl-block-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-block-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-block-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-block-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-block-valid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-block-valid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-block-valid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-block-valid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-parameter-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-parameter-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-parameter-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-parameter-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-parameter-valid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-parameter-valid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-parameter-valid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-nonssl-parameter-valid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-block-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-block-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-block-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-block-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-block-valid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-block-valid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-block-valid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-block-valid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-parameter-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-parameter-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-parameter-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-parameter-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-parameter-valid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-parameter-valid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-parameter-valid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/publish-ssl-parameter-valid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-block-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-block-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-block-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-block-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-block-valid-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-block-valid-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-block-valid-non-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-block-valid-non-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-parameter-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-parameter-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-parameter-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-parameter-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-parameter-valid-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-parameter-valid-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-parameter-valid-non-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-nonssl-parameter-valid-non-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-ssl-block-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-ssl-block-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-ssl-block-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-ssl-block-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-ssl-block-valid-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-ssl-block-valid-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-ssl-block-valid-non-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-ssl-block-valid-non-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-ssl-parameter-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-ssl-parameter-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-ssl-parameter-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-ssl-parameter-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/revoke-ssl-parameter-valid-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-ssl-parameter-valid-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-ssl-parameter-valid-non-200-async.yml +45 -0
- data/fixtures/vcr_cassettes/revoke-ssl-parameter-valid-non-200-sync.yml +45 -0
- data/fixtures/vcr_cassettes/single-event-invalid-json.yml +208 -0
- data/fixtures/vcr_cassettes/single-event-non200.yml +44 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-block-invalid-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-block-invalid-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-block-invalid-non-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-block-invalid-non-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-block-valid-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-block-valid-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-block-valid-non-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-block-valid-non-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-invalid-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-invalid-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-invalid-non-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-invalid-non-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-valid-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-valid-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-valid-non-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-nonssl-parameter-valid-non-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-block-invalid-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-block-invalid-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-block-invalid-non-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-block-invalid-non-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-block-valid-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-block-valid-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-block-valid-non-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-block-valid-non-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-parameter-invalid-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-parameter-invalid-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-parameter-invalid-non-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-parameter-invalid-non-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-parameter-valid-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-parameter-valid-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-parameter-valid-non-200-async.yml +85 -0
- data/fixtures/vcr_cassettes/subscribe-ssl-parameter-valid-non-200-sync.yml +85 -0
- data/fixtures/vcr_cassettes/subscription-event-invalid-json.yml +454 -0
- data/fixtures/vcr_cassettes/subscription-event-non200.yml +208 -0
- data/fixtures/vcr_cassettes/time-nonssl-block-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-block-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-block-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-block-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-block-valid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-block-valid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-block-valid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-block-valid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-parameter-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-parameter-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-parameter-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-parameter-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-parameter-valid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-parameter-valid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-parameter-valid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-nonssl-parameter-valid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-block-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-block-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-block-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-block-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-block-valid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-block-valid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-block-valid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-block-valid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-parameter-invalid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-parameter-invalid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-parameter-invalid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-parameter-invalid-non-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-parameter-valid-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-parameter-valid-200-sync.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-parameter-valid-non-200-async.yml +44 -0
- data/fixtures/vcr_cassettes/time-ssl-parameter-valid-non-200-sync.yml +44 -0
- data/lib/pubnub.rb +7 -15
- data/lib/pubnub/client.rb +189 -468
- data/lib/pubnub/configuration.rb +27 -20
- data/lib/pubnub/crypto.rb +11 -4
- data/lib/pubnub/envelope.rb +45 -0
- data/lib/pubnub/event.rb +470 -0
- data/lib/pubnub/events/audit.rb +38 -0
- data/lib/pubnub/events/grant.rb +59 -0
- data/lib/pubnub/events/here_now.rb +55 -0
- data/lib/pubnub/events/history.rb +110 -0
- data/lib/pubnub/events/leave.rb +73 -0
- data/lib/pubnub/events/presence.rb +35 -0
- data/lib/pubnub/events/publish.rb +71 -0
- data/lib/pubnub/events/revoke.rb +56 -0
- data/lib/pubnub/events/subscribe.rb +34 -0
- data/lib/pubnub/events/time.rb +52 -0
- data/lib/pubnub/exceptions.rb +50 -0
- data/lib/pubnub/formatter.rb +45 -0
- data/lib/pubnub/pam.rb +59 -0
- data/lib/pubnub/parser.rb +21 -0
- data/lib/pubnub/validator.rb +29 -0
- data/lib/version.rb +3 -0
- data/pubnub.gemspec +3 -5
- data/spec/lib/client_spec.rb +27 -325
- data/spec/lib/encoder_spec.rb +51 -0
- data/spec/lib/formatting_envelope_spec.rb +304 -0
- data/spec/lib/integration/audit_spec.rb +544 -0
- data/spec/lib/integration/grant_spec.rb +544 -0
- data/spec/lib/integration/here_now_spec.rb +543 -0
- data/spec/lib/integration/history_spec.rb +541 -0
- data/spec/lib/integration/leave_spec.rb +540 -0
- data/spec/lib/integration/presence_spec.rb +557 -0
- data/spec/lib/integration/publish_spec.rb +541 -0
- data/spec/lib/integration/revoke_spec.rb +544 -0
- data/spec/lib/integration/subscribe_spec.rb +564 -0
- data/spec/lib/integration/time_spec.rb +541 -0
- data/spec/lib/new_integration/publish_spec.rb +1867 -0
- data/spec/lib/retry_logic_spec.rb +53 -0
- data/spec/spec_helper.rb +28 -2
- data/spec/tools/pam-test-generator.rb +367 -0
- data/spec/tools/test-generator.rb +310 -0
- metadata +434 -50
- data/.yardoc/checksums +0 -13
- data/.yardoc/object_types +0 -0
- data/.yardoc/objects/root.dat +0 -0
- data/.yardoc/proxy_types +0 -0
- data/lib/pubnub/error.rb +0 -23
- data/lib/pubnub/request.rb +0 -288
- data/lib/pubnub/response.rb +0 -126
- data/lib/pubnub/subscription.rb +0 -24
- data/lib/pubnub/version.rb +0 -3
- data/lib/tasks/examples.rake +0 -39
- data/spec/lib/crypto_spec.rb +0 -89
- data/spec/lib/history_integration_spec.rb +0 -0
- data/spec/lib/presence_integration_spec.rb +0 -16
- data/spec/lib/publish_integration_spec.rb +0 -994
- data/spec/lib/pubnub_spec.rb +0 -12
- data/spec/lib/request_spec.rb +0 -151
- data/spec/lib/subscribe_integration_spec.rb +0 -944
- data/spec/lib/subscribe_timeout_spec.rb +0 -65
- 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
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.
|
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 = '
|
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 '
|
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
|
data/spec/lib/client_spec.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
75
|
-
|
76
|
-
|
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
|
-
|
190
|
-
|
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
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
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
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
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
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
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
|