pubnub 3.3.0.7 → 3.4

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

Potentially problematic release.


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

Files changed (134) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.yardoc/checksums +13 -0
  4. data/.yardoc/object_types +0 -0
  5. data/.yardoc/objects/root.dat +0 -0
  6. data/.yardoc/proxy_types +0 -0
  7. data/LICENSE +27 -0
  8. data/README.md +259 -0
  9. data/Rakefile +7 -0
  10. data/VERSION +1 -0
  11. data/examples/demo_console.rb +198 -0
  12. data/examples/error_server.rb +28 -0
  13. data/examples/pubnub_livestream/.gitignore +16 -0
  14. data/examples/pubnub_livestream/Gemfile +51 -0
  15. data/examples/pubnub_livestream/Gemfile.lock +191 -0
  16. data/examples/pubnub_livestream/README.rdoc +28 -0
  17. data/examples/pubnub_livestream/Rakefile +6 -0
  18. data/examples/pubnub_livestream/app/assets/images/.keep +0 -0
  19. data/examples/pubnub_livestream/app/assets/javascripts/application.js +16 -0
  20. data/examples/pubnub_livestream/app/assets/javascripts/streamer.js.coffee +42 -0
  21. data/examples/pubnub_livestream/app/assets/stylesheets/application.css.sass +22 -0
  22. data/examples/pubnub_livestream/app/assets/stylesheets/streamer.css.scss +3 -0
  23. data/examples/pubnub_livestream/app/controllers/application_controller.rb +5 -0
  24. data/examples/pubnub_livestream/app/controllers/concerns/.keep +0 -0
  25. data/examples/pubnub_livestream/app/controllers/streamer_controller.rb +38 -0
  26. data/examples/pubnub_livestream/app/helpers/application_helper.rb +2 -0
  27. data/examples/pubnub_livestream/app/helpers/streamer_helper.rb +2 -0
  28. data/examples/pubnub_livestream/app/mailers/.keep +0 -0
  29. data/examples/pubnub_livestream/app/models/.keep +0 -0
  30. data/examples/pubnub_livestream/app/models/concerns/.keep +0 -0
  31. data/examples/pubnub_livestream/app/models/message.rb +11 -0
  32. data/examples/pubnub_livestream/app/views/layouts/application.html.erb +14 -0
  33. data/examples/pubnub_livestream/app/views/streamer/index.haml +22 -0
  34. data/examples/pubnub_livestream/bin/bundle +3 -0
  35. data/examples/pubnub_livestream/bin/rails +4 -0
  36. data/examples/pubnub_livestream/bin/rake +4 -0
  37. data/examples/pubnub_livestream/config.ru +4 -0
  38. data/examples/pubnub_livestream/config/application.rb +23 -0
  39. data/examples/pubnub_livestream/config/boot.rb +4 -0
  40. data/examples/pubnub_livestream/config/database.yml +25 -0
  41. data/examples/pubnub_livestream/config/environment.rb +5 -0
  42. data/examples/pubnub_livestream/config/environments/development.rb +29 -0
  43. data/examples/pubnub_livestream/config/environments/production.rb +80 -0
  44. data/examples/pubnub_livestream/config/environments/test.rb +36 -0
  45. data/examples/pubnub_livestream/config/initializers/backtrace_silencers.rb +7 -0
  46. data/examples/pubnub_livestream/config/initializers/filter_parameter_logging.rb +4 -0
  47. data/examples/pubnub_livestream/config/initializers/inflections.rb +16 -0
  48. data/examples/pubnub_livestream/config/initializers/mime_types.rb +5 -0
  49. data/examples/pubnub_livestream/config/initializers/pubnub.rb +12 -0
  50. data/examples/pubnub_livestream/config/initializers/secret_token.rb +12 -0
  51. data/examples/pubnub_livestream/config/initializers/session_store.rb +3 -0
  52. data/examples/pubnub_livestream/config/initializers/wrap_parameters.rb +14 -0
  53. data/examples/pubnub_livestream/config/locales/en.yml +23 -0
  54. data/examples/pubnub_livestream/config/routes.rb +62 -0
  55. data/examples/pubnub_livestream/db/migrate/20130826110322_create_messages.rb +11 -0
  56. data/examples/pubnub_livestream/db/schema.rb +24 -0
  57. data/examples/pubnub_livestream/db/seeds.rb +7 -0
  58. data/examples/pubnub_livestream/lib/assets/.keep +0 -0
  59. data/examples/pubnub_livestream/lib/tasks/.keep +0 -0
  60. data/examples/pubnub_livestream/log/.keep +0 -0
  61. data/examples/pubnub_livestream/public/404.html +58 -0
  62. data/examples/pubnub_livestream/public/422.html +58 -0
  63. data/examples/pubnub_livestream/public/500.html +57 -0
  64. data/examples/pubnub_livestream/public/assets/application-22a604196dfb65fd0d602eb1eb65f9b7.js +4 -0
  65. data/examples/pubnub_livestream/public/assets/application-22a604196dfb65fd0d602eb1eb65f9b7.js.gz +0 -0
  66. data/examples/pubnub_livestream/public/assets/application-3fac0c014bbdf9ee7b3986ff615d5da0.css +5019 -0
  67. data/examples/pubnub_livestream/public/assets/application-3fac0c014bbdf9ee7b3986ff615d5da0.css.gz +0 -0
  68. data/examples/pubnub_livestream/public/assets/application-f06834e402639ad43230e3859b9bdd78.css +1 -0
  69. data/examples/pubnub_livestream/public/assets/application-f06834e402639ad43230e3859b9bdd78.css.gz +0 -0
  70. data/examples/pubnub_livestream/public/assets/application-f91b87f490140d86003c46b4d06b6c70.js +10682 -0
  71. data/examples/pubnub_livestream/public/assets/application-f91b87f490140d86003c46b4d06b6c70.js.gz +0 -0
  72. data/examples/pubnub_livestream/public/assets/manifest-c129e1f5ec52d8b661ebfa902554a2e2.json +1 -0
  73. data/examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-0bc0341283e3bb8ec518375794cc7c28.eot +0 -0
  74. data/examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-24dfb40c91db789b8b8faba6886ac1ef.svg +228 -0
  75. data/examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-4b2130768da98222338d1519f9179528.ttf +0 -0
  76. data/examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-7a07f26f72466361ac9671de2d33fd1c.woff +0 -0
  77. data/examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-9f75212cf9fca594cee7e0e3587db9d1.svg +228 -0
  78. data/examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-ab2f6984951c07fd89e6afdefabd93c7.eot +0 -0
  79. data/examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-c21928f7d46b397b0af6b9ee4a7bd0dd.ttf +0 -0
  80. data/examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-fa1d7f79d80d03f8a598822bd9df79bf.woff +0 -0
  81. data/examples/pubnub_livestream/public/favicon.ico +0 -0
  82. data/examples/pubnub_livestream/public/robots.txt +5 -0
  83. data/examples/pubnub_livestream/test/controllers/.keep +0 -0
  84. data/examples/pubnub_livestream/test/controllers/streamer_controller_test.rb +7 -0
  85. data/examples/pubnub_livestream/test/fixtures/.keep +0 -0
  86. data/examples/pubnub_livestream/test/fixtures/messages.yml +9 -0
  87. data/examples/pubnub_livestream/test/helpers/.keep +0 -0
  88. data/examples/pubnub_livestream/test/helpers/streamer_helper_test.rb +4 -0
  89. data/examples/pubnub_livestream/test/integration/.keep +0 -0
  90. data/examples/pubnub_livestream/test/mailers/.keep +0 -0
  91. data/examples/pubnub_livestream/test/models/.keep +0 -0
  92. data/examples/pubnub_livestream/test/models/message_test.rb +7 -0
  93. data/examples/pubnub_livestream/test/test_helper.rb +15 -0
  94. data/examples/pubnub_livestream/vendor/assets/javascripts/.keep +0 -0
  95. data/examples/pubnub_livestream/vendor/assets/stylesheets/.keep +0 -0
  96. data/examples/serial_publish.rb +46 -0
  97. data/examples/sinatra/.sass-cache/65d837cc121fc62381bb76d93e5bd081356aa3f9/application.sassc +0 -0
  98. data/examples/sinatra/.sass-cache/d1525a8542f6e7fb2ecd3275251283768779b344/main.rbc +0 -0
  99. data/examples/sinatra/.sass-cache/d35765d68c1df11fa3368aa802b3d38109cba214/application.sassc +0 -0
  100. data/examples/sinatra/main.rb +54 -0
  101. data/examples/sinatra/public/bootstrap-responsive.min.css +9 -0
  102. data/examples/sinatra/public/bootstrap.css +5909 -0
  103. data/examples/sinatra/public/bootstrap.min.css +845 -0
  104. data/examples/sinatra/public/jquery-1.10.2.min.js +5 -0
  105. data/examples/sinatra/views/application.sass +6 -0
  106. data/examples/sinatra/views/index.slim +16 -0
  107. data/examples/sinatra/views/layout.slim +12 -0
  108. data/examples/sinatra/views/streamer.coffee +41 -0
  109. data/examples/sub_and_unsub_1.rb +56 -0
  110. data/examples/translator.rb +129 -0
  111. data/lib/pubnub.rb +31 -375
  112. data/lib/pubnub/client.rb +527 -0
  113. data/lib/pubnub/configuration.rb +25 -0
  114. data/lib/pubnub/crypto.rb +53 -0
  115. data/lib/pubnub/error.rb +23 -0
  116. data/lib/pubnub/request.rb +288 -0
  117. data/lib/pubnub/response.rb +126 -0
  118. data/lib/pubnub/subscription.rb +24 -0
  119. data/lib/tasks/examples.rake +39 -0
  120. data/lib/version.rb +1 -0
  121. data/pubnub.gemspec +26 -0
  122. data/spec/lib/client_spec.rb +346 -0
  123. data/spec/lib/crypto_spec.rb +89 -0
  124. data/spec/lib/history_integration_spec.rb +0 -0
  125. data/spec/lib/presence_integration_spec.rb +16 -0
  126. data/spec/lib/publish_integration_spec.rb +994 -0
  127. data/spec/lib/pubnub_spec.rb +12 -0
  128. data/spec/lib/request_spec.rb +151 -0
  129. data/spec/lib/subscribe_integration_spec.rb +944 -0
  130. data/spec/lib/time_integration_spec.rb +0 -0
  131. data/spec/spec_helper.rb +15 -0
  132. metadata +158 -45
  133. data/lib/pubnub_crypto.rb +0 -53
  134. data/lib/pubnub_request.rb +0 -310
File without changes
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ require 'pubnub'
3
+ require 'pry'
4
+ require 'rr'
5
+ require 'stringio'
6
+ require 'webmock/rspec'
7
+
8
+ WebMock.disable_net_connect!
9
+
10
+ $log = Logger.new('pubnub.log', 0, 100 * 1024 * 1024)
11
+
12
+ RSpec.configure do |config|
13
+ config.color_enabled = true
14
+ config.tty = true
15
+ end
metadata CHANGED
@@ -1,110 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pubnub
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0.7
5
- prerelease:
4
+ version: '3.4'
6
5
  platform: ruby
7
6
  authors:
8
7
  - PubNub
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-14 00:00:00.000000000 Z
11
+ date: 2013-10-19 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: activesupport
14
+ name: eventmachine
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
- name: eventmachine
28
+ name: httparty
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
- name: em-http-request
42
+ name: persistent_httparty
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
- name: uuid
56
+ name: em-http-request
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ~>
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
- version: 2.3.5
61
+ version: '0'
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ~>
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
- version: 2.3.5
68
+ version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
- name: yajl-ruby
70
+ name: uuid
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - ~>
84
74
  - !ruby/object:Gem::Version
85
- version: '0'
75
+ version: 2.3.5
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - ~>
92
81
  - !ruby/object:Gem::Version
93
- version: '0'
82
+ version: 2.3.5
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: json
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - '>='
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - '>='
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  description: Ruby anywhere in the world in 250ms with PubNub!
@@ -113,32 +100,158 @@ executables: []
113
100
  extensions: []
114
101
  extra_rdoc_files: []
115
102
  files:
103
+ - .gitignore
104
+ - .yardoc/checksums
105
+ - .yardoc/object_types
106
+ - .yardoc/objects/root.dat
107
+ - .yardoc/proxy_types
108
+ - LICENSE
109
+ - README.md
110
+ - Rakefile
111
+ - VERSION
112
+ - examples/demo_console.rb
113
+ - examples/error_server.rb
114
+ - examples/pubnub_livestream/.gitignore
115
+ - examples/pubnub_livestream/Gemfile
116
+ - examples/pubnub_livestream/Gemfile.lock
117
+ - examples/pubnub_livestream/README.rdoc
118
+ - examples/pubnub_livestream/Rakefile
119
+ - examples/pubnub_livestream/app/assets/images/.keep
120
+ - examples/pubnub_livestream/app/assets/javascripts/application.js
121
+ - examples/pubnub_livestream/app/assets/javascripts/streamer.js.coffee
122
+ - examples/pubnub_livestream/app/assets/stylesheets/application.css.sass
123
+ - examples/pubnub_livestream/app/assets/stylesheets/streamer.css.scss
124
+ - examples/pubnub_livestream/app/controllers/application_controller.rb
125
+ - examples/pubnub_livestream/app/controllers/concerns/.keep
126
+ - examples/pubnub_livestream/app/controllers/streamer_controller.rb
127
+ - examples/pubnub_livestream/app/helpers/application_helper.rb
128
+ - examples/pubnub_livestream/app/helpers/streamer_helper.rb
129
+ - examples/pubnub_livestream/app/mailers/.keep
130
+ - examples/pubnub_livestream/app/models/.keep
131
+ - examples/pubnub_livestream/app/models/concerns/.keep
132
+ - examples/pubnub_livestream/app/models/message.rb
133
+ - examples/pubnub_livestream/app/views/layouts/application.html.erb
134
+ - examples/pubnub_livestream/app/views/streamer/index.haml
135
+ - examples/pubnub_livestream/bin/bundle
136
+ - examples/pubnub_livestream/bin/rails
137
+ - examples/pubnub_livestream/bin/rake
138
+ - examples/pubnub_livestream/config.ru
139
+ - examples/pubnub_livestream/config/application.rb
140
+ - examples/pubnub_livestream/config/boot.rb
141
+ - examples/pubnub_livestream/config/database.yml
142
+ - examples/pubnub_livestream/config/environment.rb
143
+ - examples/pubnub_livestream/config/environments/development.rb
144
+ - examples/pubnub_livestream/config/environments/production.rb
145
+ - examples/pubnub_livestream/config/environments/test.rb
146
+ - examples/pubnub_livestream/config/initializers/backtrace_silencers.rb
147
+ - examples/pubnub_livestream/config/initializers/filter_parameter_logging.rb
148
+ - examples/pubnub_livestream/config/initializers/inflections.rb
149
+ - examples/pubnub_livestream/config/initializers/mime_types.rb
150
+ - examples/pubnub_livestream/config/initializers/pubnub.rb
151
+ - examples/pubnub_livestream/config/initializers/secret_token.rb
152
+ - examples/pubnub_livestream/config/initializers/session_store.rb
153
+ - examples/pubnub_livestream/config/initializers/wrap_parameters.rb
154
+ - examples/pubnub_livestream/config/locales/en.yml
155
+ - examples/pubnub_livestream/config/routes.rb
156
+ - examples/pubnub_livestream/db/migrate/20130826110322_create_messages.rb
157
+ - examples/pubnub_livestream/db/schema.rb
158
+ - examples/pubnub_livestream/db/seeds.rb
159
+ - examples/pubnub_livestream/lib/assets/.keep
160
+ - examples/pubnub_livestream/lib/tasks/.keep
161
+ - examples/pubnub_livestream/log/.keep
162
+ - examples/pubnub_livestream/public/404.html
163
+ - examples/pubnub_livestream/public/422.html
164
+ - examples/pubnub_livestream/public/500.html
165
+ - examples/pubnub_livestream/public/assets/application-22a604196dfb65fd0d602eb1eb65f9b7.js
166
+ - examples/pubnub_livestream/public/assets/application-22a604196dfb65fd0d602eb1eb65f9b7.js.gz
167
+ - examples/pubnub_livestream/public/assets/application-3fac0c014bbdf9ee7b3986ff615d5da0.css
168
+ - examples/pubnub_livestream/public/assets/application-3fac0c014bbdf9ee7b3986ff615d5da0.css.gz
169
+ - examples/pubnub_livestream/public/assets/application-f06834e402639ad43230e3859b9bdd78.css
170
+ - examples/pubnub_livestream/public/assets/application-f06834e402639ad43230e3859b9bdd78.css.gz
171
+ - examples/pubnub_livestream/public/assets/application-f91b87f490140d86003c46b4d06b6c70.js
172
+ - examples/pubnub_livestream/public/assets/application-f91b87f490140d86003c46b4d06b6c70.js.gz
173
+ - examples/pubnub_livestream/public/assets/manifest-c129e1f5ec52d8b661ebfa902554a2e2.json
174
+ - examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-0bc0341283e3bb8ec518375794cc7c28.eot
175
+ - examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-24dfb40c91db789b8b8faba6886ac1ef.svg
176
+ - examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-4b2130768da98222338d1519f9179528.ttf
177
+ - examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-7a07f26f72466361ac9671de2d33fd1c.woff
178
+ - examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-9f75212cf9fca594cee7e0e3587db9d1.svg
179
+ - examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-ab2f6984951c07fd89e6afdefabd93c7.eot
180
+ - examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-c21928f7d46b397b0af6b9ee4a7bd0dd.ttf
181
+ - examples/pubnub_livestream/public/assets/twitter/glyphicons-halflings-regular-fa1d7f79d80d03f8a598822bd9df79bf.woff
182
+ - examples/pubnub_livestream/public/favicon.ico
183
+ - examples/pubnub_livestream/public/robots.txt
184
+ - examples/pubnub_livestream/test/controllers/.keep
185
+ - examples/pubnub_livestream/test/controllers/streamer_controller_test.rb
186
+ - examples/pubnub_livestream/test/fixtures/.keep
187
+ - examples/pubnub_livestream/test/fixtures/messages.yml
188
+ - examples/pubnub_livestream/test/helpers/.keep
189
+ - examples/pubnub_livestream/test/helpers/streamer_helper_test.rb
190
+ - examples/pubnub_livestream/test/integration/.keep
191
+ - examples/pubnub_livestream/test/mailers/.keep
192
+ - examples/pubnub_livestream/test/models/.keep
193
+ - examples/pubnub_livestream/test/models/message_test.rb
194
+ - examples/pubnub_livestream/test/test_helper.rb
195
+ - examples/pubnub_livestream/vendor/assets/javascripts/.keep
196
+ - examples/pubnub_livestream/vendor/assets/stylesheets/.keep
197
+ - examples/serial_publish.rb
198
+ - examples/sinatra/.sass-cache/65d837cc121fc62381bb76d93e5bd081356aa3f9/application.sassc
199
+ - examples/sinatra/.sass-cache/d1525a8542f6e7fb2ecd3275251283768779b344/main.rbc
200
+ - examples/sinatra/.sass-cache/d35765d68c1df11fa3368aa802b3d38109cba214/application.sassc
201
+ - examples/sinatra/main.rb
202
+ - examples/sinatra/public/bootstrap-responsive.min.css
203
+ - examples/sinatra/public/bootstrap.css
204
+ - examples/sinatra/public/bootstrap.min.css
205
+ - examples/sinatra/public/jquery-1.10.2.min.js
206
+ - examples/sinatra/views/application.sass
207
+ - examples/sinatra/views/index.slim
208
+ - examples/sinatra/views/layout.slim
209
+ - examples/sinatra/views/streamer.coffee
210
+ - examples/sub_and_unsub_1.rb
211
+ - examples/translator.rb
116
212
  - lib/pubnub.rb
117
- - lib/pubnub_crypto.rb
118
- - lib/pubnub_request.rb
119
- homepage: http://github.com/pubnub/pubnub-api
213
+ - lib/pubnub/client.rb
214
+ - lib/pubnub/configuration.rb
215
+ - lib/pubnub/crypto.rb
216
+ - lib/pubnub/error.rb
217
+ - lib/pubnub/request.rb
218
+ - lib/pubnub/response.rb
219
+ - lib/pubnub/subscription.rb
220
+ - lib/tasks/examples.rake
221
+ - lib/version.rb
222
+ - pubnub.gemspec
223
+ - spec/lib/client_spec.rb
224
+ - spec/lib/crypto_spec.rb
225
+ - spec/lib/history_integration_spec.rb
226
+ - spec/lib/presence_integration_spec.rb
227
+ - spec/lib/publish_integration_spec.rb
228
+ - spec/lib/pubnub_spec.rb
229
+ - spec/lib/request_spec.rb
230
+ - spec/lib/subscribe_integration_spec.rb
231
+ - spec/lib/time_integration_spec.rb
232
+ - spec/spec_helper.rb
233
+ homepage: http://github.com/pubnub/ruby
120
234
  licenses:
121
235
  - MIT
236
+ metadata: {}
122
237
  post_install_message:
123
238
  rdoc_options: []
124
239
  require_paths:
125
240
  - lib
126
241
  required_ruby_version: !ruby/object:Gem::Requirement
127
- none: false
128
242
  requirements:
129
- - - ! '>='
243
+ - - '>='
130
244
  - !ruby/object:Gem::Version
131
245
  version: '0'
132
246
  required_rubygems_version: !ruby/object:Gem::Requirement
133
- none: false
134
247
  requirements:
135
- - - ! '>='
248
+ - - '>='
136
249
  - !ruby/object:Gem::Version
137
250
  version: '0'
138
251
  requirements: []
139
252
  rubyforge_project:
140
- rubygems_version: 1.8.23
253
+ rubygems_version: 2.0.3
141
254
  signing_key:
142
- specification_version: 3
255
+ specification_version: 4
143
256
  summary: PubNub Official Ruby gem
144
257
  test_files: []
@@ -1,53 +0,0 @@
1
- class PubnubCrypto
2
- require 'yajl'
3
-
4
- def initialize(cipher_key)
5
- @alg = "AES-256-CBC"
6
- sha256_key = Digest::SHA256.hexdigest(cipher_key)
7
- @key = sha256_key.slice(0,32)
8
-
9
- #puts("\nraw sha cipher_key is: #{cipher_key}")
10
- #puts("raw sha cipher_key is: #{sha256_key}")
11
- #puts("padded cipher_key is: #{@key}\n")
12
-
13
- @iv = '0123456789012345'
14
- end
15
-
16
-
17
- def encrypt(message)
18
-
19
- aes = OpenSSL::Cipher::Cipher.new(@alg)
20
- aes.encrypt
21
- aes.key = @key
22
- aes.iv = @iv
23
-
24
- json_message = Yajl.dump(message)
25
- cipher = aes.update(json_message)
26
- cipher << aes.final
27
-
28
- Base64.strict_encode64(cipher)
29
-
30
- end
31
-
32
-
33
- def decrypt(cipher_text)
34
- decode_cipher = OpenSSL::Cipher::Cipher.new(@alg)
35
- decode_cipher.decrypt
36
- decode_cipher.key = @key
37
- decode_cipher.iv = @iv
38
-
39
- plain_text = ""
40
-
41
- begin
42
- undecoded_text = Base64.decode64(cipher_text)
43
- plain_text = decode_cipher.update(undecoded_text)
44
- plain_text << decode_cipher.final
45
- rescue => e
46
-
47
- return "DECRYPTION_ERROR"
48
-
49
- end
50
-
51
- return Yajl.load(plain_text)
52
- end
53
- end
@@ -1,310 +0,0 @@
1
- class PubnubRequest
2
- attr_accessor :cipher_key, :host, :query, :response, :timetoken, :url, :operation, :callback, :publish_key, :subscribe_key, :secret_key, :channel, :jsonp, :message, :ssl, :port
3
- attr_accessor :history_limit, :history_count, :history_start, :history_end, :history_reverse, :session_uuid, :last_timetoken, :origin, :error
4
-
5
- class RequestError < RuntimeError;
6
- end
7
-
8
- def initialize(args = {})
9
- args = HashWithIndifferentAccess.new(args)
10
-
11
- @operation = args[:operation].to_s
12
- @callback = args[:callback]
13
- @cipher_key = args[:cipher_key]
14
- @session_uuid = args[:session_uuid]
15
- @publish_key = args[:publish_key]
16
- @subscribe_key = args[:subscribe_key]
17
- @channel = args[:channel]
18
- @jsonp = args[:jsonp].present? ? "1" : "0"
19
- @message = args[:message]
20
- @secret_key = args[:secret_key] || "0"
21
- @timetoken = args[:timetoken] || "0"
22
- @ssl = args[:ssl]
23
-
24
- @port = args[:port]
25
- @url = args[:url]
26
- @host = args[:host]
27
- @query = args[:query]
28
- end
29
-
30
- def op_exception
31
- if @operation.present?
32
- ("Pubnub::" + @operation.to_s.capitalize + "Error").constantize
33
- else
34
- PubnubRequest::RequestError
35
- end
36
- end
37
-
38
- def ==(another)
39
- self.operation == another.operation && self.callback == another.callback &&
40
- self.channel == another.channel && self.message == another.message
41
- end
42
-
43
- def set_error(options)
44
- options = HashWithIndifferentAccess.new(options)
45
-
46
- if options[:error].present?
47
- self.error = true
48
- end
49
- self
50
- end
51
-
52
- def set_origin(options)
53
- options = HashWithIndifferentAccess.new(options)
54
-
55
- if options[:origin].present?
56
- self.origin = options[:origin].to_s
57
- self
58
- end
59
- end
60
-
61
- def set_channel(options)
62
- options = HashWithIndifferentAccess.new(options)
63
-
64
- if options[:channel].blank?
65
- raise(op_exception, "channel is a required parameter.")
66
- else
67
- self.channel = options[:channel].to_s
68
- self
69
- end
70
- end
71
-
72
- def set_callback(options)
73
- options = HashWithIndifferentAccess.new(options)
74
-
75
- if options[:callback].blank?
76
- raise(op_exception, "callback is a required parameter.")
77
- elsif !options[:callback].try(:respond_to?, "call")
78
- raise(op_exception, "callback is invalid.")
79
- else
80
- self.callback = options[:callback]
81
- self
82
- end
83
- end
84
-
85
-
86
- def set_cipher_key(options, self_cipher_key)
87
- options = HashWithIndifferentAccess.new(options)
88
-
89
- if self_cipher_key.present? && options['cipher_key'].present?
90
- raise(op_exception, "existing cipher_key #{self_cipher_key} cannot be overridden at publish-time.")
91
-
92
- elsif (self_cipher_key.present? && options[:cipher_key].blank?) || (self_cipher_key.blank? && options[:cipher_key].present?)
93
-
94
- this_cipher_key = self_cipher_key || options[:cipher_key]
95
- raise(Pubnub::PublishError, "secret key must be a string.") if this_cipher_key.class != String
96
- self.cipher_key = this_cipher_key
97
- end
98
- end
99
-
100
- def set_secret_key(options, self_secret_key)
101
- options = HashWithIndifferentAccess.new(options)
102
-
103
- if self_secret_key.present? && options['secret_key'].present?
104
- raise(Pubnub::PublishError, "existing secret_key #{self_secret_key} cannot be overridden at publish-time.")
105
-
106
- elsif (self_secret_key.present? && options[:secret_key].blank?) || (self_secret_key.blank? && options[:secret_key].present?)
107
-
108
- my_secret_key = self_secret_key || options[:secret_key]
109
- raise(Pubnub::PublishError, "secret key must be a string.") if my_secret_key.class != String
110
-
111
- signature = "{ @publish_key, @subscribe_key, @secret_key, channel, message}"
112
- digest = OpenSSL::Digest.new("sha256")
113
- key = [my_secret_key]
114
- hmac = OpenSSL::HMAC.hexdigest(digest, key.pack("H*"), signature)
115
- self.secret_key = hmac
116
- else
117
- self.secret_key = "0"
118
- end
119
- end
120
-
121
- def set_message(options, self_cipher_key)
122
- options = HashWithIndifferentAccess.new(options)
123
-
124
- if options[:message].blank? && options[:message] != ""
125
- raise(op_exception, "message is a required parameter.")
126
- else
127
- my_cipher_key = options[:cipher_key] || self_cipher_key
128
-
129
- if my_cipher_key.present?
130
- self.message = Yajl.dump(aes_encrypt(my_cipher_key, options, self))
131
- else
132
- self.message = Yajl.dump(options[:message])
133
- end
134
- end
135
- end
136
-
137
- def set_publish_key(options, self_publish_key)
138
- options = HashWithIndifferentAccess.new(options)
139
-
140
- if options[:publish_key].blank? && self_publish_key.blank?
141
- raise(Pubnub::PublishError, "publish_key is a required parameter.")
142
- elsif self_publish_key.present? && options['publish_key'].present?
143
- raise(Pubnub::PublishError, "existing publish_key #{self_publish_key} cannot be overridden at publish-time.")
144
- else
145
- self.publish_key = (self_publish_key || options[:publish_key]).to_s
146
- end
147
- end
148
-
149
- def set_subscribe_key(options, self_subscribe_key)
150
- options = HashWithIndifferentAccess.new(options)
151
-
152
- if options[:subscribe_key].blank? && self_subscribe_key.blank?
153
- raise(op_exception, "subscribe_key is a required parameter.")
154
- elsif self_subscribe_key.present? && options['subscribe_key'].present?
155
- raise(op_exception, "existing subscribe_key #{self_subscribe_key} cannot be overridden at subscribe-time.")
156
- else
157
- self.subscribe_key = (self_subscribe_key || options[:subscribe_key]).to_s
158
- end
159
- end
160
-
161
- def package_response!(response_data)
162
- self.response = response_data.respond_to?(:content) ? Yajl.load(response_data.content) : Yajl.load(response_data)
163
- self.last_timetoken = self.timetoken
164
- self.timetoken = self.response[1] unless self.operation == "time"
165
-
166
- if self.cipher_key.present? && %w(subscribe history detailed_history).include?(self.operation)
167
-
168
- myarr = Array.new
169
- pc = PubnubCrypto.new(@cipher_key)
170
-
171
- case @operation
172
- when "publish"
173
- iterate = self.response.first
174
- when "subscribe"
175
- iterate = self.response.first
176
- when "history"
177
- iterate = self.response
178
- when "detailed_history"
179
- iterate = self.response.first
180
-
181
- else
182
- raise(RequestError, "Don't know how to iterate on this operation.")
183
- end
184
-
185
- iterate.each do |message|
186
- message = pc.decrypt(message)
187
- myarr.push(message)
188
- end
189
-
190
- if %w(publish subscribe).include?(@operation)
191
- self.response[0] = myarr
192
- elsif @operation == "detailed_history"
193
- json_response_data = Yajl.load(response_data)
194
- self.response = [myarr, json_response_data[1], json_response_data[2]]
195
- else
196
- self.response = myarr
197
- end
198
-
199
- end
200
- end
201
-
202
- def format_url!(override_timetoken = nil)
203
-
204
- raise(Pubnub::PublishError, "Missing .operation in PubnubRequest object") if self.operation.blank?
205
-
206
- if @ssl.present?
207
- origin = 'https://' + (self.origin.present? ? self.origin : Pubnub::ORIGIN_HOST)
208
- @port = 443
209
- else
210
- origin = 'http://' + (self.origin.present? ? self.origin : Pubnub::ORIGIN_HOST)
211
- @port = 80
212
- end
213
-
214
- if override_timetoken.present?
215
- self.timetoken = override_timetoken.to_s
216
- end
217
-
218
- case self.operation.to_s
219
- when "publish"
220
- url_array = [self.operation.to_s, self.publish_key.to_s, self.subscribe_key.to_s,
221
- self.secret_key.to_s, self.channel.to_s, "0", self.message]
222
-
223
- when "subscribe"
224
- url_array = [self.operation.to_s, self.subscribe_key.to_s, self.channel.to_s, "0", @timetoken]
225
-
226
- when "presence"
227
- url_array = ["subscribe", self.subscribe_key.to_s, ((self.channel.to_s) + "-pnpres"), "0", @timetoken]
228
-
229
- when "time"
230
- url_array = [self.operation.to_s, "0"]
231
-
232
- when "history"
233
- url_array = [self.operation.to_s, self.subscribe_key.to_s, self.channel.to_s, "0", self.history_limit.to_s]
234
-
235
- when "detailed_history"
236
- url_array = ["v2", "history", "sub-key", self.subscribe_key.to_s, "channel", self.channel.to_s]
237
-
238
- when "here_now"
239
- url_array = ["v2", "presence", "sub-key", self.subscribe_key.to_s, "channel", self.channel.to_s]
240
-
241
- else
242
-
243
- raise(PubnubRequest::RequestError, "I can't create that URL for you due to unknown operation type.")
244
- end
245
-
246
- self.url = origin + encode_URL(url_array)
247
-
248
- uri = URI.parse(self.url)
249
-
250
- self.host = uri.host
251
- url_params = ""
252
-
253
- if %w(subscribe presence).include?(@operation)
254
- uri.query = uri.query.blank? ? "uuid=#{@session_uuid}" : (uri.query + "uuid=#{@session_uuid}")
255
-
256
- elsif @operation == "detailed_history"
257
- url_sep = "?"
258
-
259
- if @history_count || @history_start || @history_end || @history_reverse
260
-
261
- if @history_count
262
- url_params += url_sep + "count=" + @history_count.to_s
263
- url_sep = "&"
264
- end
265
-
266
- if @history_start
267
- url_params += url_sep + "start=" + @history_start.to_s
268
- url_sep = "&"
269
- end
270
-
271
- if @history_end
272
- url_params += url_sep + "end=" + @history_end.to_s
273
- url_sep = "&"
274
- end
275
-
276
- if @history_reverse
277
- url_params += url_sep + "reverse=true"
278
- url_sep = "&"
279
- end
280
- end
281
- end
282
-
283
- self.query = uri.path + (uri.query.present? ? ("?" + uri.query) : "") + url_params
284
- self.url += url_params
285
- self
286
-
287
- end
288
-
289
- def aes_encrypt(cipher_key, options, publish_request)
290
- options = HashWithIndifferentAccess.new(options)
291
-
292
- pc = PubnubCrypto.new(cipher_key)
293
- publish_request.message = pc.encrypt(options[:message])
294
-
295
- end
296
-
297
- def encode_URL(request)
298
- ## Construct Request URL
299
- url = '/' + request.map { |bit| bit.split('').map { |ch|
300
- ' ~`!@#$%^&*()+=[]\\{}|;\':",./<>?'.index(ch) ?
301
- '%' + ch.unpack('H2')[0].to_s.upcase : URI.encode(ch)
302
- }.join('') }.join('/')
303
- return url
304
- end
305
-
306
- def first_request?
307
- @last_timetoken == "0"
308
- end
309
-
310
- end