mad_chatter 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +12 -0
  3. data/README.md +3 -5
  4. data/bin/mad_chatter +1 -1
  5. data/lib/mad_chatter.rb +22 -4
  6. data/lib/mad_chatter/config.rb +1 -6
  7. data/lib/mad_chatter/message.rb +5 -3
  8. data/lib/mad_chatter/message_listeners/channel_commands.rb +53 -0
  9. data/lib/mad_chatter/message_listeners/code.rb +0 -3
  10. data/lib/mad_chatter/message_listeners/markdown.rb +11 -5
  11. data/lib/mad_chatter/message_listeners/nick.rb +1 -1
  12. data/lib/mad_chatter/user.rb +1 -7
  13. data/lib/mad_chatter/version.rb +1 -1
  14. data/mad_chatter.gemspec +8 -7
  15. data/spec/mad_chatter_spec.rb +17 -0
  16. data/spec/message_listeners/{join_spec.rb → channel_commands_spec.rb} +17 -5
  17. data/spec/message_listeners/code_spec.rb +1 -1
  18. data/spec/message_listeners/markdown_spec.rb +12 -8
  19. data/spec/message_spec.rb +13 -3
  20. data/spec/spec_helper.rb +4 -7
  21. data/templates/web/css/mad_chatter.css +1 -1
  22. data/templates/web/index.html +35 -7
  23. data/templates/web/js/mad_chatter.js +33 -22
  24. data/templates/web/js/mad_chatter_config.js +1 -1
  25. metadata +28 -53
  26. data/Gemfile.lock +0 -53
  27. data/lib/mad_chatter/actions/base.rb +0 -26
  28. data/lib/mad_chatter/actions/dsl.rb +0 -38
  29. data/lib/mad_chatter/actions/join.rb +0 -23
  30. data/lib/mad_chatter/actions/rename.rb +0 -24
  31. data/lib/mad_chatter/connection.rb +0 -29
  32. data/lib/mad_chatter/markdown_renderer.rb +0 -16
  33. data/lib/mad_chatter/message_listeners/join.rb +0 -30
  34. data/lib/mad_chatter/servers/juggernaut.rb +0 -9
  35. data/lib/mad_chatter/servers/websocket_rack.rb +0 -9
  36. data/lib/mad_chatter/users.rb +0 -40
  37. data/spec/actions_spec.rb +0 -7
  38. data/spec/server_spec.rb +0 -43
  39. data/spec/users_spec.rb +0 -23
  40. data/templates/web/css/styles.css +0 -166
data/spec/message_spec.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'spec_helper' # see http://stackoverflow.com/q/5061179/314318
1
+ require 'spec_helper'
2
2
 
3
3
  describe MadChatter::Message do
4
4
 
@@ -16,8 +16,18 @@ describe MadChatter::Message do
16
16
 
17
17
  it 'should encode into JSON correctly' do
18
18
  message = MadChatter::Message.new('type', 'message', 'token', 'channel')
19
- message.to_json.should ==
20
- '{"type":"type","text":"message","html":"message","username":null,"channel":"channel","growl":"message"}'
19
+ message.timestamp = 1234567890
20
+ message.to_json.should == '
21
+ {
22
+ "type":"type",
23
+ "text":"message",
24
+ "html":"message",
25
+ "username":null,
26
+ "channel":"channel",
27
+ "growl":"message",
28
+ "time":1234567890
29
+ }
30
+ '.gsub(/\s+/, '') # remove the white space
21
31
  end
22
32
 
23
33
  context '#username' do
data/spec/spec_helper.rb CHANGED
@@ -1,14 +1,11 @@
1
- require 'simplecov'
2
- SimpleCov.start
1
+ unless ENV['CI']
2
+ require 'simplecov'
3
+ SimpleCov.start
4
+ end
3
5
 
4
6
  require 'mad_chatter'
5
7
  require 'rspec/mocks'
6
8
 
7
- # See http://rubydoc.info/gems/rspec-mocks/frames for more details on
8
- # the API.
9
- ## Don't like RSpec mocks? See: https://www.relishapp.com/rspec/rspec-core/docs/mock-framework-integration/mock-with-rspec
10
9
  RSpec.configure do |config|
11
10
  config.mock_framework = :rspec
12
11
  end
13
-
14
-
@@ -31,7 +31,7 @@ body {
31
31
  .messages time {
32
32
  color: #999;
33
33
  display: block;
34
- text-align: right;
34
+ float: right;
35
35
  }
36
36
  .channel .sidebar-nav {
37
37
  position: fixed;
@@ -10,7 +10,10 @@
10
10
  <!--[if lt IE 9]>
11
11
  <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
12
12
  <![endif]-->
13
-
13
+ <script src="js/swfobject.js"></script>
14
+ <script src="js/web_socket.js"></script>
15
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
16
+
14
17
  <!-- Le styles -->
15
18
  <link href="css/bootstrap.css" rel="stylesheet">
16
19
  <link href="css/mad_chatter.css" rel="stylesheet">
@@ -23,6 +26,11 @@
23
26
  </head>
24
27
 
25
28
  <body>
29
+
30
+ <div id="upgrade_flash" class="container-fluid" style="display:none">
31
+ <h1>Mad Chatter</h1>
32
+ <p>Looks like you need to <a href="http://get.adobe.com/flashplayer" class="btn btn-primary">upgrade your flash player</a></p>
33
+ </div>
26
34
 
27
35
  <div id="login_screen" class="container-fluid">
28
36
  <div class="hero-unit">
@@ -48,11 +56,12 @@
48
56
  </div>
49
57
 
50
58
  <div data-channel="lobby" class="channel container-fluid" style="display:none">
59
+ <a data-toggle="modal" href="#create_channel" class="btn btn-large" style="float:right">Create a Room</a>
51
60
  <h2>Rooms</h2>
52
61
  <ul id="channels"></ul>
53
62
  <p class="create_room" style="display:none">
54
63
  It doesn't look like there are any rooms here.
55
- Why don't you create one? <button class="btn btn-large">Create a Room</button>
64
+ Why don't you create one?
56
65
  </p>
57
66
  </div>
58
67
 
@@ -145,6 +154,25 @@
145
154
  </div>
146
155
  </div>
147
156
 
157
+ <div id="create_channel" class="modal fade hide">
158
+ <div class="modal-header">
159
+ <a class="close" data-dismiss="modal">×</a>
160
+ <h3>Create New Room</h3>
161
+ </div>
162
+ <div class="modal-body form-horizontal">
163
+ <div class="control-group">
164
+ <label class="control-label" for="name">Room Name</label>
165
+ <div class="controls">
166
+ <input type="text" class="input-xlarge" name="name">
167
+ </div>
168
+ </div>
169
+ </div>
170
+ <div class="modal-footer">
171
+ <a href="#" class="btn btn-primary">Create</a>
172
+ <a href="#" class="btn" data-dismiss="modal">Cancel</a>
173
+ </div>
174
+ </div>
175
+
148
176
  </div>
149
177
 
150
178
  <div id="disconnected" class="modal fade hide">
@@ -164,19 +192,19 @@
164
192
  <!-- Le javascript
165
193
  ================================================== -->
166
194
  <!-- Placed at the end of the document so the pages load faster -->
167
- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
168
195
  <script src="js/bootstrap.min.js"></script>
169
- <script src="js/swfobject.js"></script>
170
- <script src="js/web_socket.js"></script>
171
196
 
172
197
  <!-- Mad Chatter -->
173
198
  <script src='js/mad_chatter.js'></script>
174
199
  <script src='js/mad_chatter_actions.js'></script>
175
200
  <script src='js/mad_chatter_config.js'></script>
176
201
  <script>
177
- $(document).ready(function(){
202
+ if (!window.WebSocket && swfobject.getFlashPlayerVersion().major < 10) {
203
+ $('#login_screen').hide();
204
+ $('#upgrade_flash').show();
205
+ } else {
178
206
  MadChatter.init(mad_chatter_config);
179
- });
207
+ }
180
208
  </script>
181
209
  </body>
182
210
  </html>
@@ -8,7 +8,6 @@ var MadChatter = {
8
8
 
9
9
  init_websocket: function(ws_host){
10
10
  if (typeof WebSocket === 'undefined') {
11
- alert("Your browser does not support websockets.")
12
11
  return false;
13
12
  }
14
13
  var ws = new WebSocket(ws_host);
@@ -80,7 +79,7 @@ var MadChatter = {
80
79
  delay: { show: 0, hide: 1000 }
81
80
  });
82
81
 
83
- $('.join_channel').on('click', function(e){
82
+ $('#channels, #channel_tabs').on('click', '.join_channel', function(e){
84
83
  e.preventDefault();
85
84
  var channel_id = $(this).attr('data-channel'),
86
85
  channel_name = $(this).text();
@@ -110,6 +109,17 @@ var MadChatter = {
110
109
  $input.val('');
111
110
  }
112
111
  });
112
+
113
+ $('#create_channel .btn-primary').on('click', function(e){
114
+ e.preventDefault();
115
+ var $input = $(this).closest('.modal').find('input');
116
+ var channel_name = $.trim($input.val());
117
+ if (channel_name.length > 0) {
118
+ MadChatter.send_message('/channel create ' + channel_name);
119
+ $('#create_channel').modal('hide');
120
+ $input.val('');
121
+ }
122
+ });
113
123
  },
114
124
 
115
125
  set_username: function(username){
@@ -157,6 +167,7 @@ var MadChatter = {
157
167
  $('#users-nav').show();
158
168
  }
159
169
  $channel.show();
170
+ MadChatter.scroll_to_bottom_of_chat(channel_id);
160
171
  },
161
172
 
162
173
  add_channel_actions: function($channel){
@@ -189,7 +200,7 @@ var MadChatter = {
189
200
 
190
201
  send_message: function(message, channel){
191
202
  if (message == '/clear') {
192
- MadChatter.clear_messages();
203
+ MadChatter.clear_messages(channel);
193
204
  } else {
194
205
  var json = {
195
206
  token: MadChatter.token,
@@ -205,7 +216,6 @@ var MadChatter = {
205
216
  },
206
217
 
207
218
  message_received: function(data){
208
- data.type, data.channel, data.username, data.text, data.html, data.growl
209
219
  if (data.type == 'error') {
210
220
  console.log('Client error: ' + data.text)
211
221
  return;
@@ -223,18 +233,18 @@ var MadChatter = {
223
233
  return;
224
234
  }
225
235
  if (data.type == 'status') {
226
- MadChatter.display_status(data.channel, data.text);
236
+ MadChatter.display_status(data.channel, data.text, data.time);
227
237
  }
228
238
  if (data.type == 'action') {
229
239
  MadChatter.exec_action(data.channel, data.json);
230
240
  }
231
241
  if (data.type == 'message') {
232
- MadChatter.display_message(data.channel, data.username, data.html);
242
+ MadChatter.display_message(data.channel, data.username, data.html, data.time);
233
243
  if (typeof(MadChatterGrowl) != 'undefined') {
234
244
  MadChatterGrowl.send_(data.username, data.growl);
235
245
  }
236
246
  }
237
- MadChatter.scroll_to_bottom_of_chat();
247
+ MadChatter.scroll_to_bottom_of_chat(data.channel);
238
248
  },
239
249
 
240
250
  update_channels_list: function(channels){
@@ -254,32 +264,33 @@ var MadChatter = {
254
264
  },
255
265
 
256
266
  exec_action: function(channel, action){
257
- window[action.function].apply(window, action.args);
267
+ // this isnt working in IE 8...why?
268
+ // window[action.function].apply(window, action.args);
258
269
  },
259
270
 
260
- display_status: function(channel, message){
261
- MadChatter.display_time(channel);
262
- var $html = $('<p class="status">' + message + '</p>');
263
- $('.channel[data-channel="' + channel + '"] .messages').append($html);
271
+ display_status: function(channel, message, timestamp){
272
+ var html = '<p class="status">' + MadChatter.get_time_html(timestamp) + message + '</p>';
273
+ $('.channel[data-channel="' + channel + '"] .messages').append(html);
264
274
  },
265
275
 
266
- display_message: function(channel, username, message){
267
- MadChatter.display_time(channel);
268
- var $html = $('<p class="message"><span class="username">' + username + ':</span> ' + message + '</p>');
269
- $('.channel[data-channel="' + channel + '"] .messages').append($html);
276
+ display_message: function(channel, username, message, timestamp){
277
+ var html = '<p class="message">' + MadChatter.get_time_html(timestamp) + '<span class="username">' + username + ':</span> ' + message + '</p>';
278
+ $('.channel[data-channel="' + channel + '"] .messages').append(html);
270
279
  },
271
280
 
272
- display_time: function(channel){
273
- var last_message_time = MadChatter.last_message_time,
274
- current_time = MadChatter.get_current_time();
281
+ get_time_html: function(timestamp){
282
+ var html = '';
283
+ var last_message_time = MadChatter.last_message_time;
284
+ var current_time = MadChatter.get_time_string(timestamp);
275
285
  if (last_message_time != current_time) {
276
286
  MadChatter.last_message_time = current_time;
277
- $('.channel[data-channel="' + channel + '"] .messages').append('<time>' + current_time + '</time>');
287
+ html = '<time>' + current_time + '</time>';
278
288
  }
289
+ return html;
279
290
  },
280
291
 
281
- get_current_time: function(){
282
- var time = new Date();
292
+ get_time_string: function(timestamp){
293
+ var time = new Date(timestamp*1000); //timestamp must me in milliseconds
283
294
  var hours = time.getHours();
284
295
  var minutes = time.getMinutes();
285
296
  var ampm = 'am';
@@ -1,3 +1,3 @@
1
1
  var mad_chatter_config = 'ws://' + location.hostname + ':8100';
2
2
 
3
- WEB_SOCKET_SWF_LOCATION = 'swf/WebSocketMain.swf';
3
+ WEB_SOCKET_SWF_LOCATION = 'swf/WebSocketMain.swf';
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mad_chatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-09 00:00:00.000000000Z
12
+ date: 2012-02-17 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &2160787340 !ruby/object:Gem::Requirement
16
+ requirement: &2165016220 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2160787340
24
+ version_requirements: *2165016220
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: eventmachine
27
- requirement: &2160786780 !ruby/object:Gem::Requirement
27
+ requirement: &2165009100 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2160786780
35
+ version_requirements: *2165009100
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: em-websocket
38
- requirement: &2160786300 !ruby/object:Gem::Requirement
38
+ requirement: &2165008680 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2160786300
46
+ version_requirements: *2165008680
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: daemons
49
- requirement: &2160785680 !ruby/object:Gem::Requirement
49
+ requirement: &2165008180 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - =
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.1.4
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2160785680
57
+ version_requirements: *2165008180
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &2160785220 !ruby/object:Gem::Requirement
60
+ requirement: &2165007700 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,21 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2160785220
69
- - !ruby/object:Gem::Dependency
70
- name: shoulda
71
- requirement: &2160784660 !ruby/object:Gem::Requirement
72
- none: false
73
- requirements:
74
- - - ! '>='
75
- - !ruby/object:Gem::Version
76
- version: '0'
77
- type: :development
78
- prerelease: false
79
- version_requirements: *2160784660
68
+ version_requirements: *2165007700
80
69
  - !ruby/object:Gem::Dependency
81
70
  name: simplecov
82
- requirement: &2160784140 !ruby/object:Gem::Requirement
71
+ requirement: &2165007160 !ruby/object:Gem::Requirement
83
72
  none: false
84
73
  requirements:
85
74
  - - ! '>='
@@ -87,10 +76,10 @@ dependencies:
87
76
  version: '0'
88
77
  type: :development
89
78
  prerelease: false
90
- version_requirements: *2160784140
79
+ version_requirements: *2165007160
91
80
  - !ruby/object:Gem::Dependency
92
81
  name: guard
93
- requirement: &2160783620 !ruby/object:Gem::Requirement
82
+ requirement: &2165006660 !ruby/object:Gem::Requirement
94
83
  none: false
95
84
  requirements:
96
85
  - - ! '>='
@@ -98,10 +87,10 @@ dependencies:
98
87
  version: '0'
99
88
  type: :development
100
89
  prerelease: false
101
- version_requirements: *2160783620
90
+ version_requirements: *2165006660
102
91
  - !ruby/object:Gem::Dependency
103
92
  name: guard-rspec
104
- requirement: &2160783100 !ruby/object:Gem::Requirement
93
+ requirement: &2165006100 !ruby/object:Gem::Requirement
105
94
  none: false
106
95
  requirements:
107
96
  - - ! '>='
@@ -109,10 +98,10 @@ dependencies:
109
98
  version: '0'
110
99
  type: :development
111
100
  prerelease: false
112
- version_requirements: *2160783100
101
+ version_requirements: *2165006100
113
102
  - !ruby/object:Gem::Dependency
114
103
  name: rb-fsevent
115
- requirement: &2160782680 !ruby/object:Gem::Requirement
104
+ requirement: &2165005240 !ruby/object:Gem::Requirement
116
105
  none: false
117
106
  requirements:
118
107
  - - ! '>='
@@ -120,10 +109,10 @@ dependencies:
120
109
  version: '0'
121
110
  type: :development
122
111
  prerelease: false
123
- version_requirements: *2160782680
112
+ version_requirements: *2165005240
124
113
  - !ruby/object:Gem::Dependency
125
114
  name: ruby-growl
126
- requirement: &2160782200 !ruby/object:Gem::Requirement
115
+ requirement: &2165004800 !ruby/object:Gem::Requirement
127
116
  none: false
128
117
  requirements:
129
118
  - - ! '>='
@@ -131,7 +120,7 @@ dependencies:
131
120
  version: '0'
132
121
  type: :development
133
122
  prerelease: false
134
- version_requirements: *2160782200
123
+ version_requirements: *2165004800
135
124
  description: Mad Chatter is a fun, easy to customize chat server, utilizing HTML 5
136
125
  Web Sockets
137
126
  email:
@@ -143,9 +132,9 @@ extra_rdoc_files: []
143
132
  files:
144
133
  - .gitignore
145
134
  - .rvmrc
135
+ - .travis.yml
146
136
  - CHANGELOG.txt
147
137
  - Gemfile
148
- - Gemfile.lock
149
138
  - Guardfile
150
139
  - LICENSE.txt
151
140
  - README.md
@@ -153,43 +142,32 @@ files:
153
142
  - bin/mad_chatter
154
143
  - lib/mad_chatter.rb
155
144
  - lib/mad_chatter/actions.rb
156
- - lib/mad_chatter/actions/base.rb
157
- - lib/mad_chatter/actions/dsl.rb
158
- - lib/mad_chatter/actions/join.rb
159
- - lib/mad_chatter/actions/rename.rb
160
145
  - lib/mad_chatter/channel.rb
161
146
  - lib/mad_chatter/config.rb
162
- - lib/mad_chatter/connection.rb
163
147
  - lib/mad_chatter/daemon.rb
164
148
  - lib/mad_chatter/extensions.rb
165
- - lib/mad_chatter/markdown_renderer.rb
166
149
  - lib/mad_chatter/message.rb
167
150
  - lib/mad_chatter/message_history.rb
168
151
  - lib/mad_chatter/message_listener.rb
152
+ - lib/mad_chatter/message_listeners/channel_commands.rb
169
153
  - lib/mad_chatter/message_listeners/code.rb
170
154
  - lib/mad_chatter/message_listeners/image.rb
171
- - lib/mad_chatter/message_listeners/join.rb
172
155
  - lib/mad_chatter/message_listeners/markdown.rb
173
156
  - lib/mad_chatter/message_listeners/nick.rb
174
157
  - lib/mad_chatter/server.rb
175
158
  - lib/mad_chatter/servers/em_websocket.rb
176
- - lib/mad_chatter/servers/juggernaut.rb
177
- - lib/mad_chatter/servers/websocket_rack.rb
178
159
  - lib/mad_chatter/user.rb
179
- - lib/mad_chatter/users.rb
180
160
  - lib/mad_chatter/version.rb
181
161
  - lib/mad_chatter/web_server.rb
182
162
  - mad_chatter.gemspec
183
163
  - screenshot.png
184
- - spec/actions_spec.rb
164
+ - spec/mad_chatter_spec.rb
185
165
  - spec/message_history_spec.rb
166
+ - spec/message_listeners/channel_commands_spec.rb
186
167
  - spec/message_listeners/code_spec.rb
187
- - spec/message_listeners/join_spec.rb
188
168
  - spec/message_listeners/markdown_spec.rb
189
169
  - spec/message_spec.rb
190
- - spec/server_spec.rb
191
170
  - spec/spec_helper.rb
192
- - spec/users_spec.rb
193
171
  - templates/config.yml
194
172
  - templates/extensions.rb
195
173
  - templates/extensions/example.rb
@@ -198,7 +176,6 @@ files:
198
176
  - templates/web/css/bootstrap.min.responsive.css
199
177
  - templates/web/css/bootstrap.responsive.css
200
178
  - templates/web/css/mad_chatter.css
201
- - templates/web/css/styles.css
202
179
  - templates/web/img/glyphicons-halflings-white.png
203
180
  - templates/web/img/glyphicons-halflings.png
204
181
  - templates/web/index.html
@@ -236,12 +213,10 @@ specification_version: 3
236
213
  summary: Mad Chatter is a fun, easy to customize chat server, utilizing HTML 5 Web
237
214
  Sockets
238
215
  test_files:
239
- - spec/actions_spec.rb
216
+ - spec/mad_chatter_spec.rb
240
217
  - spec/message_history_spec.rb
218
+ - spec/message_listeners/channel_commands_spec.rb
241
219
  - spec/message_listeners/code_spec.rb
242
- - spec/message_listeners/join_spec.rb
243
220
  - spec/message_listeners/markdown_spec.rb
244
221
  - spec/message_spec.rb
245
- - spec/server_spec.rb
246
222
  - spec/spec_helper.rb
247
- - spec/users_spec.rb