h2g_ajaxchat 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/h2g_ajaxchat.rb +217 -137
- metadata +23 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f85b352a4b0b8983a25914a435145f0721e000e16b40c7bdfc815f8160ac8e81
|
4
|
+
data.tar.gz: 43e914e361c7c26c8ab9c9ecbed796c98adc8dffb9d835ede597afb9a0eaf2fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90224175128a2631c1b7f37c159e6afb1302258ecc79842b6601ec3f2e5b4a41f903023b4709474f4cf43b65e75c67f4ad846e6fdd7fc0e7da61e2cadb73f12d
|
7
|
+
data.tar.gz: 07af2f963551f55c683797c3ba59eefde49a3220ce28c9690a44b475e29242e6f32bca392fae02a3b113044f98b0892cb8ed02d678eb3070b0372fb42f6f5778
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/h2g_ajaxchat.rb
CHANGED
@@ -5,6 +5,20 @@
|
|
5
5
|
# description: This gem makes it easier to build an AJAX chat project.
|
6
6
|
# Designed for Rack-rscript.
|
7
7
|
|
8
|
+
require 'simple-config'
|
9
|
+
|
10
|
+
# This file includes the following classes
|
11
|
+
#
|
12
|
+
# * DummyRequest (used for testing)
|
13
|
+
# * ChatCore
|
14
|
+
# * DummyRws (used for testing)
|
15
|
+
# * WebPage
|
16
|
+
# * Index < WebPage
|
17
|
+
# * Login < WebPage
|
18
|
+
# * Logout < WebPage
|
19
|
+
# * LogoutPost < WebPage
|
20
|
+
# * AjaxChat
|
21
|
+
|
8
22
|
|
9
23
|
class DummyRequest
|
10
24
|
|
@@ -60,7 +74,6 @@ class ChatCore
|
|
60
74
|
else
|
61
75
|
|
62
76
|
return '' unless newmsg
|
63
|
-
puts '_messages: ' + @messages.inspect
|
64
77
|
@messages.length - 1
|
65
78
|
end
|
66
79
|
|
@@ -123,9 +136,11 @@ class DummyRws
|
|
123
136
|
end
|
124
137
|
|
125
138
|
class WebPage
|
139
|
+
|
140
|
+
attr_accessor :css, :html, :js, :s
|
126
141
|
|
127
|
-
def initialize(h={})
|
128
|
-
@h = h
|
142
|
+
def initialize(name, h={} )
|
143
|
+
@h, @name = h, name
|
129
144
|
end
|
130
145
|
|
131
146
|
def to_css()
|
@@ -138,7 +153,7 @@ class WebPage
|
|
138
153
|
end
|
139
154
|
|
140
155
|
def to_s()
|
141
|
-
html_template()
|
156
|
+
@s = html_template()
|
142
157
|
end
|
143
158
|
|
144
159
|
protected
|
@@ -166,142 +181,24 @@ end
|
|
166
181
|
|
167
182
|
|
168
183
|
|
169
|
-
class AjaxChat
|
170
|
-
|
171
|
-
attr_reader :rws
|
172
|
-
|
173
|
-
def initialize(chatobj, rws=DummyRws.new(self), debug: false)
|
174
|
-
@chat, @rws, @debug = chatobj, rws, debug
|
175
|
-
end
|
176
|
-
|
177
|
-
def chatter(newmsg=nil)
|
178
|
-
|
179
|
-
id, users = @rws.req.session[:session_id].to_s, @chat.users
|
180
|
-
|
181
|
-
@chat.chatter(@rws.req, newmsg) do |t, uid, username, msg|
|
182
|
-
|
183
|
-
s2 = if id == uid then
|
184
|
-
"you: %s" % msg
|
185
|
-
else
|
186
|
-
"%s: %s" % [users[uid], msg]
|
187
|
-
end
|
188
|
-
|
189
|
-
"<p><span id='time'>%s</span> %s</p>" % [t.strftime("%H:%M:%S"), s2]
|
190
|
-
|
191
|
-
end
|
192
|
-
|
193
|
-
|
194
|
-
end
|
195
|
-
|
196
|
-
def login()
|
197
|
-
|
198
|
-
wp = WebPage.new
|
199
|
-
|
200
|
-
def wp.to_html()
|
201
|
-
'
|
202
|
-
<div id="loginform">
|
203
|
-
<form action="login" method="post">
|
204
|
-
<p>Please enter your name to continue:</p>
|
205
|
-
<label for="name">Name:</label>
|
206
|
-
<input type="text" name="name" id="name" autofocus="true"/>
|
207
|
-
<input type="submit" name="enter" id="enter" value="Enter" />
|
208
|
-
</form>
|
209
|
-
</div>
|
210
|
-
'
|
211
|
-
|
212
|
-
end
|
213
|
-
|
214
|
-
def wp.to_s()
|
215
|
-
to_html()
|
216
|
-
end
|
217
|
-
|
218
|
-
return wp
|
219
|
-
|
220
|
-
end
|
221
|
-
|
222
|
-
def login_post(username)
|
223
|
-
|
224
|
-
@chat.login @rws.req, username
|
225
|
-
@rws.redirect 'index'
|
226
|
-
|
227
|
-
end
|
228
|
-
|
229
|
-
def logout()
|
230
|
-
|
231
|
-
wp = WebPage.new
|
232
|
-
|
233
|
-
def wp.to_html()
|
234
|
-
'
|
235
|
-
<div id="logoutform">
|
236
|
-
<form action="logout" method="post">
|
237
|
-
<p>Are you sure you want to logout?</p>
|
238
|
-
<input type="submit" name="enter" id="enter" value="Yes" />
|
239
|
-
</form>
|
240
|
-
<a href="index">no, return to the chat page</a>
|
241
|
-
</div>
|
242
|
-
'
|
243
|
-
|
244
|
-
end
|
245
|
-
|
246
|
-
def wp.to_s()
|
247
|
-
to_html()
|
248
|
-
end
|
249
|
-
|
250
|
-
return wp
|
251
184
|
|
252
|
-
|
185
|
+
class Index < WebPage
|
253
186
|
|
254
|
-
def
|
255
|
-
|
256
|
-
@chat.logout @rws.req
|
257
|
-
|
258
|
-
wp = WebPage.new
|
259
|
-
|
260
|
-
def wp.to_s()
|
261
|
-
'You have successfully logged out'
|
262
|
-
end
|
263
|
-
|
264
|
-
return wp
|
265
|
-
|
266
|
-
end
|
267
|
-
|
268
|
-
def index()
|
269
|
-
|
270
|
-
@rws.req.session[:username] ? view_index() : login()
|
271
|
-
|
187
|
+
def initialize(h)
|
188
|
+
@name, @h = :index, h
|
272
189
|
end
|
273
190
|
|
274
|
-
def
|
275
|
-
|
276
|
-
end
|
277
|
-
|
278
|
-
def req(obj)
|
279
|
-
@rws.req = obj
|
280
|
-
self
|
281
|
-
end
|
282
|
-
|
283
|
-
def users()
|
284
|
-
@chat.users
|
285
|
-
end
|
286
|
-
|
287
|
-
private
|
288
|
-
|
289
|
-
def view_index()
|
290
|
-
|
291
|
-
h = {username: @rws.req.session[:username]}
|
292
|
-
|
293
|
-
wp = WebPage.new h
|
294
|
-
|
295
|
-
def wp.to_css()
|
296
|
-
'
|
191
|
+
def to_css()
|
192
|
+
@css ||= '
|
297
193
|
body {font-family: Arial;}
|
298
194
|
#chatbox {overflow: scroll; height: 40%}
|
299
195
|
div p span {colour: #dde}
|
300
196
|
'
|
301
|
-
|
197
|
+
end
|
302
198
|
|
303
|
-
|
304
|
-
|
199
|
+
def to_html()
|
200
|
+
|
201
|
+
@html ||= <<EOF
|
305
202
|
<body onload="refresh()">
|
306
203
|
<div id="wrapper">
|
307
204
|
<div id="menu">
|
@@ -313,12 +210,13 @@ div p span {colour: #dde}
|
|
313
210
|
<input name="usermsg" type="text" id="usermsg" size="33" onkeyup='ajaxCall1(event.keyCode, this)' autofocus='true'/>
|
314
211
|
|
315
212
|
</div>
|
316
|
-
|
317
213
|
EOF
|
318
|
-
end
|
319
214
|
|
320
|
-
|
321
|
-
|
215
|
+
end
|
216
|
+
|
217
|
+
def to_js()
|
218
|
+
|
219
|
+
@js ||= <<EOF
|
322
220
|
|
323
221
|
function updateScroll(){
|
324
222
|
var element = document.getElementById("chatbox");
|
@@ -365,12 +263,194 @@ function ajaxCall2() {
|
|
365
263
|
|
366
264
|
EOF
|
367
265
|
|
266
|
+
end
|
267
|
+
|
268
|
+
end
|
368
269
|
|
369
|
-
|
270
|
+
class Login < WebPage
|
271
|
+
|
272
|
+
def initialize(h)
|
273
|
+
@name = :login
|
274
|
+
end
|
370
275
|
|
371
|
-
|
276
|
+
def to_html()
|
372
277
|
|
278
|
+
@html ||= '
|
279
|
+
<div id="loginform">
|
280
|
+
<form action="login" method="post">
|
281
|
+
<p>Please enter your name to continue:</p>
|
282
|
+
<label for="name">Name:</label>
|
283
|
+
<input type="text" name="name" id="name" autofocus="true"/>
|
284
|
+
<input type="submit" name="enter" id="enter" value="Enter" />
|
285
|
+
</form>
|
286
|
+
</div>
|
287
|
+
'
|
288
|
+
|
289
|
+
end
|
290
|
+
|
291
|
+
end
|
292
|
+
|
293
|
+
class Logout < WebPage
|
294
|
+
|
295
|
+
def initialize(h)
|
296
|
+
@name = :logout
|
373
297
|
end
|
374
298
|
|
299
|
+
def to_html()
|
300
|
+
|
301
|
+
@html ||= '
|
302
|
+
<div id="logoutform">
|
303
|
+
<form action="logout" method="post">
|
304
|
+
<p>Are you sure you want to logout?</p>
|
305
|
+
<input type="submit" name="enter" id="enter" value="Yes" />
|
306
|
+
</form>
|
307
|
+
<a href="index">no, return to the chat page</a>
|
308
|
+
</div>
|
309
|
+
'
|
310
|
+
|
311
|
+
end
|
312
|
+
|
375
313
|
end
|
376
314
|
|
315
|
+
class LogoutPost < WebPage
|
316
|
+
|
317
|
+
def initialize(h)
|
318
|
+
@name = :logout_post
|
319
|
+
end
|
320
|
+
|
321
|
+
def to_s()
|
322
|
+
|
323
|
+
@s ||= 'You have successfully logged out'
|
324
|
+
|
325
|
+
end
|
326
|
+
|
327
|
+
end
|
328
|
+
|
329
|
+
|
330
|
+
class AjaxChat
|
331
|
+
|
332
|
+
attr_reader :rws
|
333
|
+
|
334
|
+
def initialize(chatobj, rws=DummyRws.new(self), config: nil, debug: false)
|
335
|
+
|
336
|
+
@chat, @rws, @debug = chatobj, rws, debug
|
337
|
+
|
338
|
+
plugins = if config then
|
339
|
+
|
340
|
+
SimpleConfig.new(config).to_h.map do |name, settings|
|
341
|
+
|
342
|
+
settings = {} if settings.is_a? String
|
343
|
+
|
344
|
+
pluginklass_name = 'AjaxChatPlugin' + name.to_s
|
345
|
+
|
346
|
+
Kernel.const_get(pluginklass_name).new(settings)
|
347
|
+
|
348
|
+
end
|
349
|
+
|
350
|
+
else
|
351
|
+
|
352
|
+
[]
|
353
|
+
|
354
|
+
end
|
355
|
+
|
356
|
+
@h = {}
|
357
|
+
|
358
|
+
@index, @login, @logout, @logout_post = \
|
359
|
+
[Index, Login, Logout, LogoutPost].map do |klass|
|
360
|
+
|
361
|
+
obj = klass.new @h
|
362
|
+
|
363
|
+
plugins.each {|plugin| plugin.apply obj }
|
364
|
+
|
365
|
+
obj
|
366
|
+
|
367
|
+
end
|
368
|
+
|
369
|
+
end
|
370
|
+
|
371
|
+
def chatter(newmsg=nil)
|
372
|
+
|
373
|
+
id, users = @rws.req.session[:session_id].to_s, @chat.users
|
374
|
+
|
375
|
+
@chat.chatter(@rws.req, newmsg) do |t, uid, username, msg|
|
376
|
+
|
377
|
+
s2 = if id == uid then
|
378
|
+
"you: %s" % msg
|
379
|
+
else
|
380
|
+
"%s: %s" % [users[uid], msg]
|
381
|
+
end
|
382
|
+
|
383
|
+
"<p><span id='time'>%s</span> %s</p>" % [t.strftime("%H:%M:%S"), s2]
|
384
|
+
|
385
|
+
end
|
386
|
+
|
387
|
+
end
|
388
|
+
|
389
|
+
def login()
|
390
|
+
|
391
|
+
view @login
|
392
|
+
|
393
|
+
end
|
394
|
+
|
395
|
+
def login_post(username)
|
396
|
+
|
397
|
+
@chat.login @rws.req, username
|
398
|
+
@rws.redirect 'index'
|
399
|
+
|
400
|
+
end
|
401
|
+
|
402
|
+
def logout()
|
403
|
+
|
404
|
+
view @logout
|
405
|
+
|
406
|
+
end
|
407
|
+
|
408
|
+
def logout_post()
|
409
|
+
|
410
|
+
@chat.logout @rws.req
|
411
|
+
view @logout_post
|
412
|
+
|
413
|
+
end
|
414
|
+
|
415
|
+
def index()
|
416
|
+
|
417
|
+
if @rws.req.session[:username] then
|
418
|
+
|
419
|
+
@h[:username] = @rws.req.session[:username]
|
420
|
+
view @index
|
421
|
+
|
422
|
+
else
|
423
|
+
|
424
|
+
@rws.redirect 'login'
|
425
|
+
|
426
|
+
end
|
427
|
+
|
428
|
+
end
|
429
|
+
|
430
|
+
def messages()
|
431
|
+
@chat.messages
|
432
|
+
end
|
433
|
+
|
434
|
+
def req(obj)
|
435
|
+
|
436
|
+
@rws.req = obj
|
437
|
+
self
|
438
|
+
|
439
|
+
end
|
440
|
+
|
441
|
+
def users()
|
442
|
+
@chat.users
|
443
|
+
end
|
444
|
+
|
445
|
+
private
|
446
|
+
|
447
|
+
def view(obj)
|
448
|
+
|
449
|
+
if obj.to_s.length > 0 then
|
450
|
+
obj.to_s
|
451
|
+
else
|
452
|
+
obj
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
456
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: h2g_ajaxchat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,8 +35,28 @@ cert_chain:
|
|
35
35
|
PrknRa5wCOkWn6MNeaZ10MuRCv0E4IRGb8q/2WczGDXI3lmwDWOzPzia3/A32vdt
|
36
36
|
hlwWFeE0gWND9J9tivS5qxBI
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2020-07-
|
39
|
-
dependencies:
|
38
|
+
date: 2020-07-05 00:00:00.000000000 Z
|
39
|
+
dependencies:
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: simple-config
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0.6'
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 0.6.4
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0.6'
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 0.6.4
|
40
60
|
description:
|
41
61
|
email: james@jamesrobertson.eu
|
42
62
|
executables: []
|
metadata.gz.sig
CHANGED
Binary file
|