mad_chatter 0.3.1 → 0.3.2

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.
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