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,44 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://pubsub.pubnub.com/time/0?auth=demoish_authkey&uuid=rubytests
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- '*/*'
|
16
|
+
Connection:
|
17
|
+
- keep-alive
|
18
|
+
Keep-Alive:
|
19
|
+
- 30
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 500 # INTERNAL SERVER ERROR
|
23
|
+
message: OK
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Wed, 22 Jan 2014 22:36:28 GMT
|
27
|
+
Content-Type:
|
28
|
+
- text/javascript; charset="UTF-8"
|
29
|
+
Content-Length:
|
30
|
+
- '19'
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Cache-Control:
|
34
|
+
- no-cache
|
35
|
+
Access-Control-Allow-Origin:
|
36
|
+
- '*'
|
37
|
+
Access-Control-Allow-Methods:
|
38
|
+
- GET
|
39
|
+
body:
|
40
|
+
encoding: UTF-8
|
41
|
+
string: '[13904301869920523'
|
42
|
+
http_version:
|
43
|
+
recorded_at: Wed, 22 Jan 2014 22:36:28 GMT
|
44
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,44 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://pubsub.pubnub.com/time/0?auth=demoish_authkey&uuid=rubytests
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- '*/*'
|
16
|
+
Connection:
|
17
|
+
- keep-alive
|
18
|
+
Keep-Alive:
|
19
|
+
- 30
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 500 # INTERNAL SERVER ERROR
|
23
|
+
message: OK
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Wed, 22 Jan 2014 22:36:26 GMT
|
27
|
+
Content-Type:
|
28
|
+
- text/javascript; charset="UTF-8"
|
29
|
+
Content-Length:
|
30
|
+
- '19'
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Cache-Control:
|
34
|
+
- no-cache
|
35
|
+
Access-Control-Allow-Origin:
|
36
|
+
- '*'
|
37
|
+
Access-Control-Allow-Methods:
|
38
|
+
- GET
|
39
|
+
body:
|
40
|
+
encoding: UTF-8
|
41
|
+
string: '[13904301869920523'
|
42
|
+
http_version:
|
43
|
+
recorded_at: Wed, 22 Jan 2014 22:36:26 GMT
|
44
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,44 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://pubsub.pubnub.com/time/0?auth=demoish_authkey&uuid=rubytests
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- '*/*'
|
16
|
+
Connection:
|
17
|
+
- keep-alive
|
18
|
+
Keep-Alive:
|
19
|
+
- 30
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 200
|
23
|
+
message: OK
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Wed, 22 Jan 2014 22:36:22 GMT
|
27
|
+
Content-Type:
|
28
|
+
- text/javascript; charset="UTF-8"
|
29
|
+
Content-Length:
|
30
|
+
- '19'
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Cache-Control:
|
34
|
+
- no-cache
|
35
|
+
Access-Control-Allow-Origin:
|
36
|
+
- '*'
|
37
|
+
Access-Control-Allow-Methods:
|
38
|
+
- GET
|
39
|
+
body:
|
40
|
+
encoding: UTF-8
|
41
|
+
string: '[13904301930718907]'
|
42
|
+
http_version:
|
43
|
+
recorded_at: Wed, 22 Jan 2014 22:36:22 GMT
|
44
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,44 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://pubsub.pubnub.com/time/0?auth=demoish_authkey&uuid=rubytests
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- '*/*'
|
16
|
+
Connection:
|
17
|
+
- keep-alive
|
18
|
+
Keep-Alive:
|
19
|
+
- 30
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 200
|
23
|
+
message: OK
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Wed, 22 Jan 2014 22:36:21 GMT
|
27
|
+
Content-Type:
|
28
|
+
- text/javascript; charset="UTF-8"
|
29
|
+
Content-Length:
|
30
|
+
- '19'
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Cache-Control:
|
34
|
+
- no-cache
|
35
|
+
Access-Control-Allow-Origin:
|
36
|
+
- '*'
|
37
|
+
Access-Control-Allow-Methods:
|
38
|
+
- GET
|
39
|
+
body:
|
40
|
+
encoding: UTF-8
|
41
|
+
string: '[13904301930718907]'
|
42
|
+
http_version:
|
43
|
+
recorded_at: Wed, 22 Jan 2014 22:36:21 GMT
|
44
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,44 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://pubsub.pubnub.com/time/0?auth=demoish_authkey&uuid=rubytests
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- '*/*'
|
16
|
+
Connection:
|
17
|
+
- keep-alive
|
18
|
+
Keep-Alive:
|
19
|
+
- 30
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 500 # INTERNAL SERVER ERROR
|
23
|
+
message: OK
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Wed, 22 Jan 2014 22:36:24 GMT
|
27
|
+
Content-Type:
|
28
|
+
- text/javascript; charset="UTF-8"
|
29
|
+
Content-Length:
|
30
|
+
- '19'
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Cache-Control:
|
34
|
+
- no-cache
|
35
|
+
Access-Control-Allow-Origin:
|
36
|
+
- '*'
|
37
|
+
Access-Control-Allow-Methods:
|
38
|
+
- GET
|
39
|
+
body:
|
40
|
+
encoding: UTF-8
|
41
|
+
string: '[13904301930718907]'
|
42
|
+
http_version:
|
43
|
+
recorded_at: Wed, 22 Jan 2014 22:36:24 GMT
|
44
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,44 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://pubsub.pubnub.com/time/0?auth=demoish_authkey&uuid=rubytests
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.9.0
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- '*/*'
|
16
|
+
Connection:
|
17
|
+
- keep-alive
|
18
|
+
Keep-Alive:
|
19
|
+
- 30
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 500 # INTERNAL SERVER ERROR
|
23
|
+
message: OK
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Wed, 22 Jan 2014 22:36:22 GMT
|
27
|
+
Content-Type:
|
28
|
+
- text/javascript; charset="UTF-8"
|
29
|
+
Content-Length:
|
30
|
+
- '19'
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Cache-Control:
|
34
|
+
- no-cache
|
35
|
+
Access-Control-Allow-Origin:
|
36
|
+
- '*'
|
37
|
+
Access-Control-Allow-Methods:
|
38
|
+
- GET
|
39
|
+
body:
|
40
|
+
encoding: UTF-8
|
41
|
+
string: '[13904301930718907]'
|
42
|
+
http_version:
|
43
|
+
recorded_at: Wed, 22 Jan 2014 22:36:22 GMT
|
44
|
+
recorded_with: VCR 2.8.0
|
data/lib/pubnub.rb
CHANGED
@@ -2,28 +2,25 @@
|
|
2
2
|
## http://www.pubnub.com/blog/ruby-push-api - Ruby Push API Blog
|
3
3
|
|
4
4
|
## PubNub Real Time Push APIs and Notifications Framework
|
5
|
-
## Copyright (c)
|
5
|
+
## Copyright (c) 2014 PubNub
|
6
6
|
## http://www.pubnub.com/
|
7
7
|
|
8
8
|
## -----------------------------------
|
9
|
-
## PubNub 3.
|
9
|
+
## PubNub 3.5.1 Real-time Push Cloud API
|
10
10
|
## -----------------------------------
|
11
11
|
|
12
12
|
require 'json'
|
13
13
|
require 'base64'
|
14
14
|
require 'open-uri'
|
15
|
-
require 'uri'
|
16
15
|
require 'openssl'
|
17
16
|
require 'eventmachine'
|
18
|
-
require '
|
17
|
+
require 'net/http/persistent'
|
18
|
+
require 'logger'
|
19
19
|
|
20
|
-
require '
|
20
|
+
require 'version'
|
21
|
+
|
22
|
+
require 'pubnub/client'
|
21
23
|
|
22
|
-
require 'pubnub/client.rb'
|
23
|
-
require 'pubnub/request.rb'
|
24
|
-
require 'pubnub/configuration.rb'
|
25
|
-
require 'pubnub/error.rb'
|
26
|
-
require 'pubnub/crypto.rb'
|
27
24
|
|
28
25
|
class Object
|
29
26
|
def blank?
|
@@ -46,13 +43,8 @@ class Proc
|
|
46
43
|
end
|
47
44
|
|
48
45
|
module Pubnub
|
49
|
-
extend Configuration
|
50
|
-
include Error
|
51
|
-
|
52
46
|
class << self
|
53
47
|
def new(options = {})
|
54
|
-
#raise(Pubnub::Error::InitError, 'Initialize with either a hash of options, or exactly 5 named parameters.') unless args.size == 5 or (args.size == 1 and args[0].class == Hash)
|
55
|
-
|
56
48
|
Pubnub::Client.new(options)
|
57
49
|
end
|
58
50
|
end
|
data/lib/pubnub/client.rb
CHANGED
@@ -1,535 +1,256 @@
|
|
1
|
-
require 'pubnub/configuration
|
2
|
-
require 'pubnub/
|
3
|
-
require '
|
4
|
-
require '
|
5
|
-
require 'persistent_httparty'
|
6
|
-
require 'timeout'
|
1
|
+
require 'pubnub/configuration'
|
2
|
+
require 'pubnub/parser'
|
3
|
+
require 'pubnub/envelope'
|
4
|
+
require 'pubnub/crypto'
|
7
5
|
require 'pubnub/uuid'
|
6
|
+
require 'pubnub/exceptions'
|
7
|
+
require 'pubnub/event'
|
8
|
+
require 'pubnub/formatter'
|
9
|
+
require 'pubnub/validator'
|
10
|
+
require 'pubnub/pam'
|
8
11
|
|
9
12
|
module Pubnub
|
10
|
-
class PubNubHTTParty
|
11
|
-
include HTTParty
|
12
|
-
default_timeout 310
|
13
|
-
|
14
|
-
def first_run?
|
15
|
-
@first_run ? true : false
|
16
|
-
end
|
17
|
-
|
18
|
-
def send_request(path, options={}, &block)
|
19
|
-
if @first_run.nil?
|
20
|
-
@first_run = true
|
21
|
-
else
|
22
|
-
@first_run = false
|
23
|
-
end
|
24
|
-
self.class.get path, options
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
13
|
class Client
|
30
14
|
include Configuration
|
31
15
|
|
32
|
-
|
33
|
-
attr_accessor :
|
34
|
-
|
35
|
-
|
36
|
-
DEFAULT_CONNECT_CALLBACK = lambda { |msg| $log.info "CONNECTED: #{msg}" }
|
37
|
-
DEFAULT_ERROR_CALLBACK = lambda { |msg| $log.error "AN ERROR OCCURRED: #{msg}" }
|
38
|
-
|
39
|
-
def initialize(options = {})
|
40
|
-
$log = options[:logger]
|
41
|
-
$log = Logger.new('pubnub.log', 0, 100 * 1024 * 1024) unless $log
|
42
|
-
|
43
|
-
@subscriptions = Array.new
|
16
|
+
attr_reader :env
|
17
|
+
attr_accessor :single_event_connections_pool, :subscribe_event_connections_pool, :uuid, :async_events
|
44
18
|
|
45
|
-
|
46
|
-
|
47
|
-
@retry_count = 0
|
48
|
-
@callback = options[:callback]
|
49
|
-
@error_callback = options[:error_callback]
|
50
|
-
@error_callback = DEFAULT_ERROR_CALLBACK unless @error_callback
|
51
|
-
@connect_callback = options[:connect_callback]
|
52
|
-
@connect_callback = DEFAULT_CONNECT_CALLBACK unless @connect_callback
|
53
|
-
@cipher_key = options[:cipher_key]
|
54
|
-
@publish_key = options[:publish_key] || DEFAULT_PUBLISH_KEY
|
55
|
-
@subscribe_key = options[:subscribe_key] || DEFAULT_SUBSCRIBE_KEY
|
56
|
-
@channel = options[:channel] || DEFAULT_CHANNEL
|
57
|
-
@message = options[:message]
|
58
|
-
@ssl = options[:ssl]
|
59
|
-
@secret_key = options[:secret_key]
|
60
|
-
@timetoken = options[:timetoken]
|
61
|
-
@session_uuid = options[:uuid] || options[:session_uuid] || UUID.new.generate
|
19
|
+
EVENTS = %w(publish subscribe presence leave history here_now audit grant revoke time)
|
20
|
+
VERSION = Pubnub::VERSION
|
62
21
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
@history_reverse = options[:reverse]
|
67
|
-
|
68
|
-
@port = options[:port]
|
69
|
-
@url = options[:url]
|
70
|
-
@origin = options[:origin]
|
71
|
-
@origin = DEFAULT_ORIGIN unless @origin
|
72
|
-
@query = options[:query]
|
73
|
-
|
74
|
-
@http_sync = options[:http_sync]
|
75
|
-
|
76
|
-
@max_retries = options[:max_retries]
|
77
|
-
@max_retries = MAX_RETRIES unless @max_retries
|
78
|
-
|
79
|
-
@non_subscribe_timeout = options[:non_subscribe_timeout]
|
80
|
-
@non_subscribe_timeout = 5 unless @non_subscribe_timeout
|
81
|
-
|
82
|
-
@reconnect_max_attempts = options[:reconnect_max_attempts]
|
83
|
-
@reconnect_max_attempts = 60 unless @reconnect_max_attempts
|
22
|
+
EVENTS.each do |event_name|
|
23
|
+
require File.join('pubnub', 'events', event_name)
|
24
|
+
end
|
84
25
|
|
85
|
-
|
86
|
-
|
26
|
+
EVENTS.each do |event_name|
|
27
|
+
define_method event_name do |params, &block|
|
28
|
+
params[:callback] = block if params[:callback].nil?
|
29
|
+
event = Pubnub.const_get(classify_method(event_name)).new(params, self)
|
30
|
+
$logger.debug('Created event ' + event.class.to_s)
|
31
|
+
#if params[:http_sync]
|
32
|
+
event.fire(self)
|
33
|
+
#else
|
34
|
+
# EM.defer {
|
35
|
+
# begin
|
36
|
+
# event.fire(self)
|
37
|
+
# rescue => e
|
38
|
+
# puts e
|
39
|
+
# end
|
40
|
+
# }
|
41
|
+
#end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
alias_method :unsubscribe, :leave
|
87
45
|
|
88
|
-
|
89
|
-
|
46
|
+
def initialize(options)
|
47
|
+
validate!(options)
|
48
|
+
setup_app(options)
|
49
|
+
# From this moment we have to use @env in that method instead of options
|
50
|
+
create_connections_pools(@env)
|
51
|
+
create_subscriptions_pools(@env)
|
52
|
+
start_event_machine(@env)
|
53
|
+
end
|
90
54
|
|
91
|
-
|
92
|
-
@
|
55
|
+
def shutdown(stop_em = false)
|
56
|
+
@single_event_connections_pool.each do |origin, conn|
|
57
|
+
conn.shutdown_in_all_threads
|
58
|
+
conn = nil
|
59
|
+
end
|
60
|
+
@single_event_connections_pool = Hash.new
|
93
61
|
|
94
|
-
@
|
95
|
-
|
62
|
+
@subscribe_event_connections_pool.each do |origin, conn|
|
63
|
+
conn.shutdown_in_all_threads
|
64
|
+
conn = nil
|
65
|
+
end
|
66
|
+
@subscribe_event_connections_pool = Hash.new
|
96
67
|
|
97
|
-
|
98
|
-
|
99
|
-
options = merge_options(options, 'publish')
|
100
|
-
verify_operation('publish', options)
|
101
|
-
start_request options
|
68
|
+
@env[:callback_pool] = Hash.new
|
69
|
+
@env[:subscriptions] = Hash.new
|
102
70
|
|
103
|
-
|
71
|
+
EM.stop if stop_em
|
104
72
|
|
105
|
-
|
106
|
-
options[:callback] = block if block_given?
|
107
|
-
options = merge_options(options, 'subscribe')
|
108
|
-
verify_operation('subscribe', options)
|
109
|
-
@error_callback.call 'YOU ARE ALREADY SUBSCRIBED TO THAT CHANNEL' if get_channels_for_subscription.include? options[:channel]
|
110
|
-
$log.error 'YOU ARE ALREADY SUBSCRIBED TO THAT CHANNEL' if get_channels_for_subscription.include? options[:channel]
|
111
|
-
start_request options
|
73
|
+
$logger.info('Bye!')
|
112
74
|
end
|
113
75
|
|
114
|
-
def
|
115
|
-
options[:callback] = block if block_given?
|
116
|
-
options = merge_options(options, 'presence')
|
117
|
-
verify_operation('presence', options)
|
118
|
-
start_request options
|
119
|
-
end
|
76
|
+
def start_subscribe(override = false)
|
120
77
|
|
121
|
-
|
122
|
-
options[:callback] = block if block_given?
|
123
|
-
options = merge_options(options, 'history')
|
124
|
-
verify_operation('history', options)
|
125
|
-
options[:params].merge!({:count => options[:count]})
|
126
|
-
options[:params].merge!({:start => options[:start]}) unless options[:start].nil?
|
127
|
-
options[:params].merge!({:end => options[:end]}) unless options[:end].nil?
|
128
|
-
options[:params].merge!({:reverse => 'true'}) if options[:reverse]
|
129
|
-
start_request options
|
130
|
-
end
|
78
|
+
start_event_machine
|
131
79
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
@timetoken = 0
|
140
|
-
@subscription_request.timetoken = 0
|
141
|
-
@subscribe_connection.close
|
142
|
-
@wait_for_response = false
|
80
|
+
if override
|
81
|
+
$logger.debug('Pubnub::Client#start_subscribe | Override')
|
82
|
+
@env[:subscribe_railgun].cancel
|
83
|
+
@env[:subscribe_railgun] = nil
|
84
|
+
@env[:wait_for_response].each do |k,v|
|
85
|
+
@env[:wait_for_response][k] = false
|
86
|
+
end
|
143
87
|
end
|
144
|
-
start_request options
|
145
88
|
|
146
|
-
|
89
|
+
@env[:wait_for_response] = Hash.new unless @wait_for_response
|
90
|
+
@env[:subscribe_railgun] = EM.add_periodic_timer(PERIODIC_TIMER_INTERVAL) do
|
91
|
+
begin
|
92
|
+
@env[:subscriptions].each do |origin, subscribe|
|
93
|
+
unless @env[:wait_for_response][origin]
|
94
|
+
@env[:wait_for_response][origin] = true
|
147
95
|
|
148
|
-
|
96
|
+
$logger.debug('Async subscription running')
|
97
|
+
$logger.debug("origin: #{origin}")
|
98
|
+
$logger.debug("timetoken: #{@env[:timetoken]}")
|
149
99
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
start_request options
|
155
|
-
end
|
100
|
+
EM.defer do
|
101
|
+
subscribe.start_event(self) if subscribe
|
102
|
+
# @env[:wait_for_response][origin] = false # moved to Event
|
103
|
+
end
|
156
104
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
105
|
+
end
|
106
|
+
end
|
107
|
+
rescue => e
|
108
|
+
$logger.error(e)
|
109
|
+
$logger.error(e.backtrace)
|
110
|
+
end
|
111
|
+
end unless @env[:subscribe_railgun]
|
162
112
|
end
|
163
113
|
|
164
114
|
def subscription_running?
|
165
|
-
@
|
115
|
+
@env[:subscribe_railgun] && !@env[:subscriptions].empty? ? true : false
|
166
116
|
end
|
167
117
|
|
168
|
-
def
|
169
|
-
@
|
118
|
+
def create_subscriptions_pools(env)
|
119
|
+
@env[:subscriptions] = Hash.new
|
120
|
+
@env[:callbacks_pool] = Hash.new
|
121
|
+
@env[:error_callbacks_pool] = Hash.new
|
170
122
|
end
|
171
123
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
@subscriptions.delete_if { |s| s.channel.to_s == channel.to_s }
|
176
|
-
end
|
177
|
-
|
178
|
-
def merge_options(options = {}, operation = '')
|
179
|
-
options[:channel] = compile_channel_parameter(options[:channel],options[:channels]) if options[:channel] || options[:channels]
|
180
|
-
return {
|
181
|
-
:ssl => @ssl,
|
182
|
-
:cipher_key => @cipher_key,
|
183
|
-
:publish_key => @publish_key,
|
184
|
-
:subscribe_key => @subscribe_key,
|
185
|
-
:secret_key => @secret_key,
|
186
|
-
:origin => @origin,
|
187
|
-
:operation => operation,
|
188
|
-
:params => { :uuid => @session_uuid },
|
189
|
-
:timetoken => @timetoken,
|
190
|
-
:error_callback=> @error_callback
|
191
|
-
}.merge(options)
|
124
|
+
def update_timetoken(timetoken)
|
125
|
+
@env[:timetoken] = timetoken.to_i
|
126
|
+
$logger.debug("Pubnub::Client#update_timetoken | Current timetoken is eq #{@env[:timetoken]}")
|
192
127
|
end
|
193
128
|
|
194
|
-
def
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
until EM.reactor_running? do end
|
129
|
+
def set_uuid(uuid)
|
130
|
+
leave_all unless @env[:subscriptions].empty?
|
131
|
+
@env[:uuid] = uuid
|
132
|
+
start_subscribe(true) unless @env[:subscriptions].empty?
|
200
133
|
end
|
134
|
+
alias_method :session_uuid=, :set_uuid
|
135
|
+
alias_method :uuid=, :set_uuid
|
201
136
|
|
202
|
-
def
|
203
|
-
@subscriptions.
|
204
|
-
|
205
|
-
|
137
|
+
def set_auth_key(auth_key)
|
138
|
+
leave_all unless @env[:subscriptions].empty?
|
139
|
+
@env[:auth_key] = auth_key
|
140
|
+
start_subscribe(true) unless @env[:subscriptions].empty?
|
206
141
|
end
|
142
|
+
alias_method :auth_key=, :set_auth_key
|
207
143
|
|
208
|
-
def
|
209
|
-
@
|
210
|
-
subscription.fire_callback_for envelope
|
211
|
-
end
|
144
|
+
def set_cipher_key(cipher_key)
|
145
|
+
@env[:cipher_key] = cipher_key
|
212
146
|
end
|
147
|
+
alias_method :cipher_key=, :set_cipher_key
|
213
148
|
|
214
|
-
def
|
215
|
-
|
216
|
-
|
217
|
-
start_em_if_not_running
|
218
|
-
|
219
|
-
if %w(subscribe presence).include? request.operation
|
220
|
-
options[:channel].split(',').each do |channel|
|
221
|
-
@subscriptions << Subscription.new(:channel => channel, :callback => options[:callback], :error_callback => options[:error_callback]) unless get_channels_for_subscription.include? channel
|
222
|
-
end
|
223
|
-
|
224
|
-
@subscription_request = request unless @subscription_request
|
225
|
-
|
226
|
-
if @subscription_request.channel != get_channels_for_subscription.join(',') && @subscription_running
|
227
|
-
@subscribe_connection.close
|
228
|
-
@timetoken = 0
|
229
|
-
@subscription_request.timetoken = 0
|
230
|
-
@wait_for_response = false
|
231
|
-
end
|
232
|
-
|
233
|
-
@subscription_request.channel = get_channels_for_subscription.join(',')
|
234
|
-
|
235
|
-
@subscription_running = EM.add_periodic_timer(PERIODIC_TIMER) do
|
236
|
-
unless @wait_for_response || get_channels_for_subscription.empty?
|
237
|
-
@wait_for_response = true
|
238
|
-
$log.debug 'SETTING CHANNELS'
|
239
|
-
@subscription_request.channel = get_channels_for_subscription.join(',')
|
240
|
-
$log.debug 'SENDING SUBSCRIBE REQUEST'
|
241
|
-
http = send_request(@subscription_request)
|
242
|
-
|
243
|
-
http.callback do
|
244
|
-
$log.debug 'GOT SUBSCRIBE RESPONSE'
|
245
|
-
if http.response_header.status.to_i == 200
|
246
|
-
$log.debug 'STATUS 200'
|
247
|
-
if is_valid_json?(http.response)
|
248
|
-
$log.debug 'GOT VALID JSON'
|
249
|
-
@subscription_request.handle_response(http)
|
250
|
-
$log.debug 'HANDLED RESPONSE'
|
251
|
-
if is_update?(@subscription_request.timetoken)
|
252
|
-
$log.debug 'TIMETOKEN UPDATED'
|
253
|
-
@subscription_request.envelopes.each do |envelope|
|
254
|
-
fire_subscriptions_callback_for envelope
|
255
|
-
end
|
256
|
-
else
|
257
|
-
$log.debug 'TIMETOKEN NOT UPDATED'
|
258
|
-
end
|
259
|
-
end
|
260
|
-
else
|
261
|
-
if request.error_callback
|
262
|
-
request.error_callback.call Pubnub::Response.new(
|
263
|
-
:error_init => true,
|
264
|
-
:message => [0, "Bad server response: #{http.response_header.status.to_i}"].to_json,
|
265
|
-
:response => [0, "Bad server response: #{http.response_header.status.to_i}"].to_json
|
266
|
-
)
|
267
|
-
else
|
268
|
-
fire_subscriptions_callback_for Pubnub::Response.new(
|
269
|
-
:error_init => true,
|
270
|
-
:message => [0, "Bad server response: #{http.response_header.status.to_i}"].to_json,
|
271
|
-
:response => [0, "Bad server response: #{http.response_header.status.to_i}"].to_json
|
272
|
-
)
|
273
|
-
end
|
274
|
-
|
275
|
-
end
|
276
|
-
|
277
|
-
@wait_for_response = false
|
278
|
-
end
|
279
|
-
|
280
|
-
http.errback do
|
281
|
-
$log.error 'GOT SUBSCRIBE ERROR'
|
282
|
-
@error_callback.call Pubnub::Response.new(
|
283
|
-
:error_init => true,
|
284
|
-
:message => [0, http.error].to_json,
|
285
|
-
:response => [0, http.error].to_json
|
286
|
-
)
|
287
|
-
$log.error 'CALLED ERROR CALLBACK'
|
288
|
-
|
289
|
-
@wait_for_response = false
|
290
|
-
end
|
291
|
-
end
|
292
|
-
end unless @subscription_running
|
293
|
-
else
|
294
|
-
EM.next_tick do
|
295
|
-
$log.debug 'SENDING OTHER REQUEST'
|
296
|
-
|
297
|
-
http = send_request(request)
|
298
|
-
|
299
|
-
http.errback do
|
300
|
-
@error_callback.call [0, http.error]
|
301
|
-
end
|
302
|
-
|
303
|
-
http.callback do
|
304
|
-
$log.debug 'GOT OTHER RESPONSE'
|
305
|
-
#byebug
|
306
|
-
if http.response_header.status.to_i == 200
|
307
|
-
if is_valid_json?(http.response)
|
308
|
-
request.handle_response(http)
|
309
|
-
request.envelopes.each do |envelope|
|
310
|
-
$log.debug 'CALLING PARAMETER CALLBACK'
|
311
|
-
request.callback.call envelope
|
312
|
-
end
|
313
|
-
end
|
314
|
-
else
|
315
|
-
begin
|
316
|
-
request.handle_response(http)
|
317
|
-
request.envelopes.each do |envelope|
|
318
|
-
if request.error_callback
|
319
|
-
request.error_callback.call envelope
|
320
|
-
else
|
321
|
-
@error_callback.call envelope
|
322
|
-
end
|
323
|
-
end
|
324
|
-
|
325
|
-
rescue
|
326
|
-
if request.error_callback
|
327
|
-
request.error_callback.call Pubnub::Response.new(
|
328
|
-
:error_init => true,
|
329
|
-
:message => [0, "Bad server response: #{http.response_header.status.to_i}"].to_json,
|
330
|
-
:response => [0, "Bad server response: #{http.response_header.status.to_i}"].to_json
|
331
|
-
)
|
332
|
-
else
|
333
|
-
@error_callback.call Pubnub::Response.new(
|
334
|
-
:error_init => true,
|
335
|
-
:message => [0, "Bad server response: #{http.response_header.status.to_i}"].to_json,
|
336
|
-
:response => [0, "Bad server response: #{http.response_header.status.to_i}"].to_json
|
337
|
-
)
|
338
|
-
end
|
339
|
-
end
|
340
|
-
end
|
341
|
-
end
|
342
|
-
end
|
343
|
-
end
|
149
|
+
def start_railgun
|
150
|
+
if @env[:railgun]
|
151
|
+
$logger.debug('Pubnub::Client#start_railgun | Railgun already initialized')
|
344
152
|
else
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
if request.query.to_s.empty?
|
351
|
-
if %w(subscribe presence).include? request.operation
|
352
|
-
response = @sync_connection_sub.send_request(request.origin + request.path, :timeout => 370)
|
353
|
-
else
|
354
|
-
response = @sync_connection.send_request(request.origin + request.path, :timeout => @non_subscribe_timeout)
|
355
|
-
end
|
356
|
-
else
|
357
|
-
if %w(subscribe presence).include? request.operation
|
358
|
-
response = @sync_connection_sub.send_request(request.origin + request.path, :query => request.query, :timeout => 370)
|
359
|
-
else
|
360
|
-
response = @sync_connection.send_request(request.origin + request.path, :query => request.query, :timeout => @non_subscribe_timeout)
|
361
|
-
end
|
362
|
-
end
|
363
|
-
rescue
|
364
|
-
msg = 'ERROR SENDING REQUEST'
|
365
|
-
@error_callback.call Pubnub::Response.new(
|
366
|
-
:error_init => true,
|
367
|
-
:message => [0, msg].to_s,
|
368
|
-
:response => [0, msg].to_s
|
369
|
-
)
|
370
|
-
@retries = 0 unless @retries
|
371
|
-
@retries += 1
|
372
|
-
if @retries <= @max_retries
|
373
|
-
return start_request options
|
374
|
-
else
|
375
|
-
msg = "ERROR SENDING REQUEST AFTER #{@retries} RETRIES"
|
376
|
-
@retries = 0
|
377
|
-
return Pubnub::Response.new(
|
378
|
-
:error_init => true,
|
379
|
-
:message => [0, msg].to_s,
|
380
|
-
:response => [0, msg].to_s
|
381
|
-
)
|
382
|
-
end
|
383
|
-
end
|
384
|
-
|
385
|
-
if @sync_connection_sub.first_run?
|
386
|
-
@connect_callback.call 'SYNC CONNECTION ESTABLISHED'
|
387
|
-
end
|
388
|
-
if response.response.code.to_i == 200
|
389
|
-
if is_valid_json?(response.body)
|
390
|
-
request.handle_response(response)
|
391
|
-
@timetoken = request.timetoken
|
392
|
-
|
393
|
-
if request.operation == 'leave'
|
394
|
-
Subscription.remove_from_subscription request.channel
|
395
|
-
end
|
396
|
-
|
397
|
-
if !request.callback.nil?
|
398
|
-
request.envelopes.each do |envelope|
|
399
|
-
request.callback.call envelope
|
400
|
-
end
|
401
|
-
else
|
402
|
-
if %w(publish leave here_now time).include? request.operation
|
403
|
-
return request.envelopes[0]
|
404
|
-
else
|
405
|
-
return request.envelopes
|
406
|
-
end
|
407
|
-
end
|
408
|
-
end
|
409
|
-
else
|
410
|
-
begin
|
411
|
-
request.handle_response(response)
|
412
|
-
if !request.callback.nil?
|
413
|
-
request.envelopes.each do |envelope|
|
414
|
-
request.callback.call envelope
|
415
|
-
end
|
416
|
-
else
|
417
|
-
if %w(publish leave here_now time).include? request.operation
|
418
|
-
return request.envelopes[0]
|
419
|
-
else
|
420
|
-
return request.envelopes
|
421
|
-
end
|
422
|
-
end
|
423
|
-
rescue
|
424
|
-
if request.error_callback
|
425
|
-
request.error_callback.call Pubnub::Response.new(
|
426
|
-
:error_init => true,
|
427
|
-
:message => [0, "Bad server response: #{response.response.code.to_i}"].to_json,
|
428
|
-
:response => [0, "Bad server response: #{response.response.code.to_i}"].to_json
|
429
|
-
)
|
430
|
-
else
|
431
|
-
@error_callback.call Pubnub::Response.new(
|
432
|
-
:error_init => true,
|
433
|
-
:message => [0, "Bad server response: #{response.response.code.to_i}"].to_json,
|
434
|
-
:response => [0, "Bad server response: #{response.response.code.to_i}"].to_json
|
435
|
-
)
|
436
|
-
end
|
437
|
-
end
|
438
|
-
|
439
|
-
if @sync_retries
|
440
|
-
@sync_retries += 1
|
441
|
-
else
|
442
|
-
@sync_retries = 1
|
153
|
+
$logger.debug('Pubnub::Client#start_railgun | Initializing railgun')
|
154
|
+
@env[:railgun] = EM.add_periodic_timer(0.01) do
|
155
|
+
@async_events.each do |event|
|
156
|
+
EM.defer do
|
157
|
+
event.fire(self) unless event.fired
|
443
158
|
end
|
444
|
-
|
445
|
-
if @sync_retries < @max_retries
|
446
|
-
start_request options
|
447
|
-
end
|
448
|
-
end
|
449
|
-
rescue Timeout::Error
|
450
|
-
if request.error_callback
|
451
|
-
request.error_callback.call [0, 'TIMEOUT']
|
452
|
-
else
|
453
|
-
@error_callback.call [0, 'TIMEOUT']
|
454
159
|
end
|
160
|
+
@async_events.delete_if {|event| event.finished }
|
455
161
|
end
|
456
162
|
end
|
457
163
|
end
|
458
164
|
|
459
|
-
|
460
|
-
if %w(subscribe presence).include? request.operation
|
461
|
-
unless @subscribe_connection
|
462
|
-
@subscribe_connection = EM::HttpRequest.new(request.origin, :connect_timeout => 370, :inactivity_timeout => 370)
|
463
|
-
connection = @subscribe_connection.get :path => '/time/0', :keepalive => true, :query => request.query
|
464
|
-
connection.callback do
|
465
|
-
@connect_callback.call 'ASYNC SUBSCRIBE CONNECTION'
|
466
|
-
end
|
467
|
-
end
|
165
|
+
private
|
468
166
|
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
167
|
+
def leave_all
|
168
|
+
@env[:subscriptions].each do |origin, subscribe|
|
169
|
+
leave(
|
170
|
+
:origin => origin,
|
171
|
+
:channel => subscribe.get_channels.map{|c| c.to_s}.join(','),
|
172
|
+
:http_sync => true,
|
173
|
+
:skip_remove => true
|
174
|
+
)
|
175
|
+
|
176
|
+
subscribe.set_timetoken(0)
|
475
177
|
end
|
476
178
|
end
|
477
179
|
|
478
|
-
def
|
479
|
-
|
480
|
-
|
180
|
+
def start_event_machine(options = nil)
|
181
|
+
$logger.debug 'Pubnub::Client#start_event_machine | starting EM in new thread'
|
182
|
+
if defined?(Thin)
|
183
|
+
$logger.debug('Pubnub::Client#start_event_machine | We\'re running on thin')
|
481
184
|
else
|
482
|
-
|
185
|
+
$logger.debug('Pubnub::Client#start_event_machine | We aren\'t running on thin')
|
483
186
|
end
|
187
|
+
if EM.reactor_running?
|
188
|
+
$logger.debug 'Pubnub::Client#start_event_machine | EM already running'
|
189
|
+
else
|
190
|
+
Thread.new { EM.run {} }
|
191
|
+
$logger.debug 'Pubnub::Client#start_event_machine | EM started in new thread'
|
192
|
+
end
|
193
|
+
end
|
484
194
|
|
195
|
+
def setup_app(options)
|
196
|
+
$logger = options[:logger] || Logger.new('pubnub.log')
|
197
|
+
@env = symbolize_options_keys(options)
|
198
|
+
@env = set_default_values(@env)
|
199
|
+
@async_events = Array.new
|
200
|
+
$logger.debug("\n\nCreated new Pubnub::Client instance")
|
485
201
|
end
|
486
202
|
|
487
|
-
def
|
488
|
-
|
489
|
-
|
490
|
-
valid = true
|
491
|
-
rescue
|
492
|
-
valid = false
|
493
|
-
end
|
494
|
-
valid
|
203
|
+
def create_connections_pools(options)
|
204
|
+
@subscribe_event_connections_pool = Hash.new
|
205
|
+
@single_event_connections_pool = Hash.new
|
495
206
|
end
|
496
207
|
|
497
|
-
def
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
208
|
+
def set_default_values(env)
|
209
|
+
defaults = {
|
210
|
+
:error_callback => DEFAULT_ERROR_CALLBACK,
|
211
|
+
:connect_callback => DEFAULT_CONNECT_CALLBACK,
|
212
|
+
:ssl => DEFAULT_SSL,
|
213
|
+
:timetoken => DEFAULT_TIMETOKEN,
|
214
|
+
:uuid => UUID.new.generate,
|
215
|
+
:port => DEFAULT_CONNECTION_PORT,
|
216
|
+
:origin => DEFAULT_ORIGIN,
|
217
|
+
:subscribe_timeout => DEFAULT_SUBSCRIBE_TIMEOUT,
|
218
|
+
:timeout => DEFAULT_NON_SUBSCRIBE_TIMEOUT,
|
219
|
+
:max_retries => MAX_RETRIES,
|
220
|
+
:non_subscribe_timeout => DEFAULT_NON_SUBSCRIBE_TIMEOUT,
|
221
|
+
:reconnect_max_attempts => DEFAULT_RECONNECT_ATTEMPTS,
|
222
|
+
:reconnect_retry_interval => DEFAULT_RECONNECT_INTERVAL,
|
223
|
+
:reconnect_response_timeout => DEFAULT_RECONNECT_RESPONSE_TIMEOUT,
|
224
|
+
:ttl => DEFAULT_TTL,
|
225
|
+
:secret_key => 0
|
226
|
+
}
|
227
|
+
|
228
|
+
# Let's fill missing keys with default values
|
229
|
+
$logger.debug('Setting default values')
|
230
|
+
defaults.each do |key,default_value|
|
231
|
+
env[key] = default_value if @env[key].nil?
|
513
232
|
end
|
514
233
|
|
515
|
-
|
516
|
-
|
517
|
-
end
|
234
|
+
env
|
235
|
+
end
|
518
236
|
|
519
|
-
|
520
|
-
|
521
|
-
|
237
|
+
def symbolize_options_keys(options)
|
238
|
+
$logger.debug('Symbolizing options keys')
|
239
|
+
symbolized_options = {}
|
240
|
+
options.each_key { |k| symbolized_options.merge!({ k.to_sym => options[k] }) }
|
241
|
+
symbolized_options
|
242
|
+
end
|
522
243
|
|
244
|
+
def classify_method(method)
|
245
|
+
method.split('_').map{ |w| w.capitalize }.join
|
523
246
|
end
|
524
247
|
|
525
|
-
def
|
526
|
-
raise(
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
return channel
|
248
|
+
def validate!(parameters)
|
249
|
+
raise InitializationError.new(:object => self, :message => 'Origin parameter is not valid. Should be type of String') unless parameters[:origin].is_a?(String) || parameters[:origin].blank?
|
250
|
+
raise InitializationError.new(:object => self, :message => 'Missing required :subscribe_key parameter') unless parameters[:subscribe_key]
|
251
|
+
raise InitializationError.new(:object => self, :message => 'Subscribe key parameter is not valid. Should be type of String or Symbol') unless [String, Symbol].include?(parameters[:subscribe_key].class)
|
252
|
+
raise InitializationError.new(:object => self, :message => 'Publish key parameter is not valid. Should be type of String or Symbol') unless [String, Symbol].include?(parameters[:publish_key].class) || parameters[:publish_key].blank?
|
531
253
|
end
|
532
254
|
|
533
255
|
end
|
534
256
|
end
|
535
|
-
|