mad_chatter 0.2.7 → 0.2.8

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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mad_chatter (0.2.6)
4
+ mad_chatter (0.2.7)
5
5
  daemons (= 1.1.4)
6
6
  em-websocket
7
7
  eventmachine
@@ -23,6 +23,7 @@ GEM
23
23
  guard-rspec (0.5.10)
24
24
  guard (>= 0.8.4)
25
25
  multi_json (1.0.4)
26
+ rb-fsevent (0.4.3.1)
26
27
  redcarpet (2.0.1)
27
28
  rspec (2.7.0)
28
29
  rspec-core (~> 2.7.0)
@@ -32,6 +33,7 @@ GEM
32
33
  rspec-expectations (2.7.0)
33
34
  diff-lcs (~> 1.1.2)
34
35
  rspec-mocks (2.7.0)
36
+ ruby-growl (3.0)
35
37
  shoulda (2.11.3)
36
38
  simplecov (0.5.4)
37
39
  multi_json (~> 1.0.3)
@@ -46,6 +48,8 @@ DEPENDENCIES
46
48
  guard
47
49
  guard-rspec
48
50
  mad_chatter!
51
+ rb-fsevent
49
52
  rspec
53
+ ruby-growl
50
54
  shoulda
51
55
  simplecov
@@ -0,0 +1,19 @@
1
+ module MadChatter
2
+ class MessageHistory
3
+
4
+ def self.add(message)
5
+ @stack ||= []
6
+ @stack << message
7
+ @stack = @stack.pop(10) if @stack.length > 10
8
+ end
9
+
10
+ def self.all
11
+ @stack ||= []
12
+ end
13
+
14
+ def self.clear
15
+ @stack = []
16
+ end
17
+
18
+ end
19
+ end
@@ -33,6 +33,9 @@ module MadChatter
33
33
  token = generate_token
34
34
  send_message.call(MadChatter::Message.new('token', token).to_json)
35
35
  @subscribers[subscriber_id] = token
36
+ MadChatter::MessageHistory.all.each do |json|
37
+ send_message.call(json)
38
+ end
36
39
  subscriber_id
37
40
  end
38
41
 
@@ -72,6 +75,7 @@ module MadChatter
72
75
 
73
76
  def self.send_json(json)
74
77
  MadChatter::Server.main_channel.push(json)
78
+ MadChatter::MessageHistory.add(json)
75
79
  end
76
80
 
77
81
  end
@@ -1,5 +1,5 @@
1
1
  module MadChatter
2
2
 
3
- VERSION = '0.2.7'
3
+ VERSION = '0.2.8'
4
4
 
5
5
  end
data/lib/mad_chatter.rb CHANGED
@@ -15,6 +15,7 @@ module MadChatter
15
15
 
16
16
  require 'mad_chatter/config'
17
17
  require 'mad_chatter/message'
18
+ require 'mad_chatter/message_history'
18
19
  require 'mad_chatter/server'
19
20
  require 'mad_chatter/users'
20
21
  require 'mad_chatter/version'
data/mad_chatter.gemspec CHANGED
@@ -25,8 +25,10 @@ Gem::Specification.new do |s|
25
25
  s.add_runtime_dependency "daemons", "1.1.4"
26
26
 
27
27
  s.add_development_dependency "rspec"
28
- s.add_development_dependency "shoulda"
28
+ s.add_development_dependency "shoulda" # do we need this?
29
+ s.add_development_dependency 'simplecov'
29
30
  s.add_development_dependency 'guard'
30
31
  s.add_development_dependency 'guard-rspec'
31
- s.add_development_dependency 'simplecov'
32
+ s.add_development_dependency 'rb-fsevent'
33
+ s.add_development_dependency 'ruby-growl'
32
34
  end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe MadChatter::MessageHistory do
4
+
5
+ before(:each) do
6
+ MadChatter::MessageHistory.clear
7
+ end
8
+
9
+ it 'should only keep 10 recent messages' do
10
+ 15.times do
11
+ MadChatter::MessageHistory.add MadChatter::Message.new('message', 'Here is a dummy chat message')
12
+ end
13
+ MadChatter::MessageHistory.all.length.should == 10
14
+ end
15
+
16
+ it 'should allow you to clear the history' do
17
+ MadChatter::MessageHistory.add MadChatter::Message.new('message', 'Here is a dummy chat message')
18
+ MadChatter::MessageHistory.all.length.should == 1
19
+ MadChatter::MessageHistory.clear
20
+ MadChatter::MessageHistory.all.length.should == 0
21
+ end
22
+
23
+ context '#all' do
24
+ it 'should still return an empty array if there is message chat history' do
25
+ history = MadChatter::MessageHistory.all
26
+ history.should == []
27
+ end
28
+ end
29
+
30
+ end
@@ -2,22 +2,23 @@
2
2
  <html>
3
3
  <head>
4
4
  <title>Mad Chatter</title>
5
- <link rel="stylesheet" href="styles.css">
6
5
  <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js'></script>
7
6
  <script src='http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js'></script>
8
- <script src='mad_chatter.js'></script>
9
- <script src='mad_chatter_actions.js'></script>
10
7
 
11
- <!-- markItUp! -->
8
+ <!-- markdown editor -->
12
9
  <script type="text/javascript" src="markitup/jquery.markitup.js"></script>
13
- <script type="text/javascript" src="markitup/sets/markdown/set.js"></script>
14
10
  <link rel="stylesheet" type="text/css" href="markitup/skins/mad_chatter/style.css" />
15
11
  <link rel="stylesheet" type="text/css" href="markitup/sets/markdown/style.css" />
16
12
 
13
+ <!-- Mad Chatter -->
14
+ <script src='mad_chatter.js'></script>
15
+ <script src='mad_chatter_actions.js'></script>
16
+ <script src='mad_chatter_config.js'></script>
17
+ <link rel="stylesheet" href="styles.css">
18
+
17
19
  <script>
18
20
  $(document).ready(function(){
19
- MadChatter.init('ws://localhost:8100');
20
- $('#keyboard textarea').markItUp(mySettings);
21
+ MadChatter.init(mad_chatter_config);
21
22
  });
22
23
  </script>
23
24
  </head>
@@ -8,7 +8,7 @@ var MadChatter = {
8
8
  MadChatter.init_websocket(ws_host);
9
9
  $('#chatroom').hide();
10
10
  MadChatter.wait_for_join();
11
- MadChatter.wait_for_chat_submit();
11
+ MadChatter.add_markdown_editor();
12
12
  },
13
13
 
14
14
  init_websocket: function(ws_host){
@@ -36,14 +36,23 @@ var MadChatter = {
36
36
  });
37
37
  },
38
38
 
39
- wait_for_chat_submit: function(){
40
- var keyboard = $("#keyboard textarea");
41
- keyboard.keyup(function (event) {
42
- if (event.keyCode == 13) { // The enter key.
43
- MadChatter.send_message(keyboard.val());
44
- keyboard.val('');
45
- }
46
- });
39
+ add_markdown_editor: function(){
40
+ var config = {
41
+ previewParserPath: '',
42
+ onEnter: {keepDefault:false, afterInsert: MadChatter.submit_chat },
43
+ onShiftEnter: {keepDefault:false, openWith:'\n\n'},
44
+ markupSet: [
45
+ {name:'Bold', key:'B', openWith:'**', closeWith:'**'},
46
+ {name:'Italic', key:'I', openWith:'_', closeWith:'_'},
47
+ {separator:'---------------' },
48
+ {name:'Picture', key:'P', replaceWith:'![[![Alternative text]!]]([![Url:!:http://]!])'},
49
+ {name:'Link', key:'L', openWith:'[', closeWith:']([![Url:!:http://]!])', placeHolder:'Your text to link here...' },
50
+ {separator:'---------------'},
51
+ {name:'Quotes', openWith:'> '},
52
+ {name:'Code Block / Code', openWith:'(!(\t|!|`)!)', closeWith:'(!(`)!)'}
53
+ ]
54
+ };
55
+ $('#keyboard textarea').markItUp(config);
47
56
  },
48
57
 
49
58
  join_chat: function(){
@@ -57,6 +66,14 @@ var MadChatter = {
57
66
  $('#chatroom').show();
58
67
  },
59
68
 
69
+ submit_chat: function(){
70
+ var keyboard = $("#keyboard textarea"), message = keyboard.val();
71
+ if ($.trim(message) != '') {
72
+ MadChatter.send_message(message);
73
+ keyboard.val('');
74
+ }
75
+ },
76
+
60
77
  message_received: function(type, username, message){
61
78
  if (type == 'error') {
62
79
  console.log('Client error: ' + message)
@@ -101,7 +118,7 @@ var MadChatter = {
101
118
  },
102
119
 
103
120
  display_message: function(username, message){
104
- $("#messages").append("<p class='message'><span class='username'>" + username + ":</span> " + message + "<time>" + MadChatter.get_current_time() + "</time></p>");
121
+ $("#messages").append("<p class='message'><time>" + MadChatter.get_current_time() + "</time><span class='username'>" + username + ":</span> " + message + "</p>");
105
122
  },
106
123
 
107
124
  scroll_to_bottom_of_chat: function(){
@@ -0,0 +1 @@
1
+ var mad_chatter_config = 'ws://localhost:8100';
@@ -1,58 +1,3 @@
1
- /* -------------------------------------------------------------------
2
- // markItUp!
3
- // By Jay Salvat - http://markitup.jaysalvat.com/
4
- // ------------------------------------------------------------------*/
5
- /*.markItUp .markItUpButton1 a {
6
- background-image:url(images/h1.png);
7
- }
8
- .markItUp .markItUpButton2 a {
9
- background-image:url(images/h2.png);
10
- }
11
- .markItUp .markItUpButton3 a {
12
- background-image:url(images/h3.png);
13
- }
14
- .markItUp .markItUpButton4 a {
15
- background-image:url(images/h4.png);
16
- }
17
- .markItUp .markItUpButton5 a {
18
- background-image:url(images/h5.png);
19
- }
20
- .markItUp .markItUpButton6 a {
21
- background-image:url(images/h6.png);
22
- }
23
-
24
- .markItUp .markItUpButton7 a {
25
- background-image:url(images/bold.png);
26
- }
27
- .markItUp .markItUpButton8 a {
28
- background-image:url(images/italic.png);
29
- }
30
-
31
- .markItUp .markItUpButton9 a {
32
- background-image:url(images/list-bullet.png);
33
- }
34
- .markItUp .markItUpButton10 a {
35
- background-image:url(images/list-numeric.png);
36
- }
37
-
38
- .markItUp .markItUpButton11 a {
39
- background-image:url(images/picture.png);
40
- }
41
- .markItUp .markItUpButton12 a {
42
- background-image:url(images/link.png);
43
- }
44
-
45
- .markItUp .markItUpButton13 a {
46
- background-image:url(images/quotes.png);
47
- }
48
- .markItUp .markItUpButton14 a {
49
- background-image:url(images/code.png);
50
- }
51
-
52
- .markItUp .preview a {
53
- background-image:url(images/preview.png);
54
- }*/
55
-
56
1
  .markItUp .markItUpButton1 a { background-image:url(images/bold.png); }
57
2
  .markItUp .markItUpButton2 a { background-image:url(images/italic.png); }
58
3
  .markItUp .markItUpButton3 a { background-image:url(images/picture.png); }
@@ -48,9 +48,8 @@ table {
48
48
  border-spacing: 0;
49
49
  }
50
50
 
51
- /*
52
- * Mad Chatter Styles
53
- */
51
+
52
+ /***************** Mad Chatter Styles *****************/
54
53
 
55
54
  #login_screen header {
56
55
  padding: 150px 0 20px;
@@ -131,7 +130,6 @@ table {
131
130
  bottom: 0;
132
131
  left: 220px;
133
132
  width: 100%;
134
- /* height:50px;*/
135
133
  background-color: #eee;
136
134
  padding: 0 10px;
137
135
  }
@@ -155,10 +153,8 @@ table {
155
153
  overflow:auto;
156
154
  }
157
155
 
158
- /* Message Markdown Styles */
159
- .message pre, .message code {
156
+ pre, code {
160
157
  font: 12px 'Bitstream Vera Sans Mono','Courier',monospace;
161
- padding: 0!important;
162
- background-color: #EEE!important;
163
- border: 1px solid #DDD;
158
+ padding: 2px !important;
159
+ background-color: #EEE !important;
164
160
  }
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.2.7
4
+ version: 0.2.8
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-01-05 00:00:00.000000000 Z
12
+ date: 2012-01-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &2156378440 !ruby/object:Gem::Requirement
16
+ requirement: &2168902960 !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: *2156378440
24
+ version_requirements: *2168902960
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: eventmachine
27
- requirement: &2156395540 !ruby/object:Gem::Requirement
27
+ requirement: &2168902340 !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: *2156395540
35
+ version_requirements: *2168902340
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: em-websocket
38
- requirement: &2156391200 !ruby/object:Gem::Requirement
38
+ requirement: &2168901700 !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: *2156391200
46
+ version_requirements: *2168901700
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: redcarpet
49
- requirement: &2156389920 !ruby/object:Gem::Requirement
49
+ requirement: &2168901060 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2156389920
57
+ version_requirements: *2168901060
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: daemons
60
- requirement: &2156399600 !ruby/object:Gem::Requirement
60
+ requirement: &2168900260 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - =
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.1.4
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *2156399600
68
+ version_requirements: *2168900260
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &2156422500 !ruby/object:Gem::Requirement
71
+ requirement: &2168899840 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2156422500
79
+ version_requirements: *2168899840
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: shoulda
82
- requirement: &2156417980 !ruby/object:Gem::Requirement
82
+ requirement: &2168899380 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,21 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *2156417980
90
+ version_requirements: *2168899380
91
+ - !ruby/object:Gem::Dependency
92
+ name: simplecov
93
+ requirement: &2168898960 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *2168898960
91
102
  - !ruby/object:Gem::Dependency
92
103
  name: guard
93
- requirement: &2156460260 !ruby/object:Gem::Requirement
104
+ requirement: &2168898540 !ruby/object:Gem::Requirement
94
105
  none: false
95
106
  requirements:
96
107
  - - ! '>='
@@ -98,10 +109,10 @@ dependencies:
98
109
  version: '0'
99
110
  type: :development
100
111
  prerelease: false
101
- version_requirements: *2156460260
112
+ version_requirements: *2168898540
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: guard-rspec
104
- requirement: &2156459480 !ruby/object:Gem::Requirement
115
+ requirement: &2168898100 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ! '>='
@@ -109,10 +120,21 @@ dependencies:
109
120
  version: '0'
110
121
  type: :development
111
122
  prerelease: false
112
- version_requirements: *2156459480
123
+ version_requirements: *2168898100
113
124
  - !ruby/object:Gem::Dependency
114
- name: simplecov
115
- requirement: &2156458560 !ruby/object:Gem::Requirement
125
+ name: rb-fsevent
126
+ requirement: &2168897680 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: *2168897680
135
+ - !ruby/object:Gem::Dependency
136
+ name: ruby-growl
137
+ requirement: &2168897260 !ruby/object:Gem::Requirement
116
138
  none: false
117
139
  requirements:
118
140
  - - ! '>='
@@ -120,7 +142,7 @@ dependencies:
120
142
  version: '0'
121
143
  type: :development
122
144
  prerelease: false
123
- version_requirements: *2156458560
145
+ version_requirements: *2168897260
124
146
  description: Mad Chatter is a fun, easy to customize chat server, utilizing HTML 5
125
147
  Web Sockets
126
148
  email:
@@ -148,6 +170,7 @@ files:
148
170
  - lib/mad_chatter/config.rb
149
171
  - lib/mad_chatter/daemon.rb
150
172
  - lib/mad_chatter/message.rb
173
+ - lib/mad_chatter/message_history.rb
151
174
  - lib/mad_chatter/server.rb
152
175
  - lib/mad_chatter/servers/em_websocket.rb
153
176
  - lib/mad_chatter/servers/juggernaut.rb
@@ -156,6 +179,7 @@ files:
156
179
  - lib/mad_chatter/version.rb
157
180
  - lib/mad_chatter/web_server.rb
158
181
  - mad_chatter.gemspec
182
+ - spec/message_history_spec.rb
159
183
  - spec/message_spec.rb
160
184
  - spec/spec_helper.rb
161
185
  - templates/config.yml
@@ -164,6 +188,7 @@ files:
164
188
  - templates/web/index.html
165
189
  - templates/web/mad_chatter.js
166
190
  - templates/web/mad_chatter_actions.js
191
+ - templates/web/mad_chatter_config.js
167
192
  - templates/web/markitup/jquery.markitup.js
168
193
  - templates/web/markitup/sets/markdown/images/bold.png
169
194
  - templates/web/markitup/sets/markdown/images/code.png
@@ -181,7 +206,6 @@ files:
181
206
  - templates/web/markitup/sets/markdown/images/preview.png
182
207
  - templates/web/markitup/sets/markdown/images/quotes.png
183
208
  - templates/web/markitup/sets/markdown/readme.txt
184
- - templates/web/markitup/sets/markdown/set.js
185
209
  - templates/web/markitup/sets/markdown/style.css
186
210
  - templates/web/markitup/skins/mad_chatter/images/handle.png
187
211
  - templates/web/markitup/skins/mad_chatter/images/menu.png
@@ -214,5 +238,6 @@ specification_version: 3
214
238
  summary: Mad Chatter is a fun, easy to customize chat server, utilizing HTML 5 Web
215
239
  Sockets
216
240
  test_files:
241
+ - spec/message_history_spec.rb
217
242
  - spec/message_spec.rb
218
243
  - spec/spec_helper.rb
@@ -1,52 +0,0 @@
1
- // -------------------------------------------------------------------
2
- // markItUp!
3
- // -------------------------------------------------------------------
4
- // Copyright (C) 2008 Jay Salvat
5
- // http://markitup.jaysalvat.com/
6
- // -------------------------------------------------------------------
7
- // MarkDown tags example
8
- // http://en.wikipedia.org/wiki/Markdown
9
- // http://daringfireball.net/projects/markdown/
10
- // -------------------------------------------------------------------
11
- // Feel free to add more tags
12
- // -------------------------------------------------------------------
13
- mySettings = {
14
- previewParserPath: '',
15
- onShiftEnter: {keepDefault:false, openWith:'\n\n'},
16
- markupSet: [
17
- // {name:'First Level Heading', key:'1', placeHolder:'Your title here...', closeWith:function(markItUp) { return miu.markdownTitle(markItUp, '=') } },
18
- // {name:'Second Level Heading', key:'2', placeHolder:'Your title here...', closeWith:function(markItUp) { return miu.markdownTitle(markItUp, '-') } },
19
- // {name:'Heading 3', key:'3', openWith:'### ', placeHolder:'Your title here...' },
20
- // {name:'Heading 4', key:'4', openWith:'#### ', placeHolder:'Your title here...' },
21
- // {name:'Heading 5', key:'5', openWith:'##### ', placeHolder:'Your title here...' },
22
- // {name:'Heading 6', key:'6', openWith:'###### ', placeHolder:'Your title here...' },
23
- // {separator:'---------------' },
24
- {name:'Bold', key:'B', openWith:'**', closeWith:'**'},
25
- {name:'Italic', key:'I', openWith:'_', closeWith:'_'},
26
- {separator:'---------------' },
27
- // {name:'Bulleted List', openWith:'- ' },
28
- // {name:'Numeric List', openWith:function(markItUp) {
29
- // return markItUp.line+'. ';
30
- // }},
31
- // {separator:'---------------' },
32
- {name:'Picture', key:'P', replaceWith:'![[![Alternative text]!]]([![Url:!:http://]!] "[![Title]!]")'},
33
- {name:'Link', key:'L', openWith:'[', closeWith:']([![Url:!:http://]!] "[![Title]!]")', placeHolder:'Your text to link here...' },
34
- {separator:'---------------'},
35
- {name:'Quotes', openWith:'> '},
36
- {name:'Code Block / Code', openWith:'(!(\t|!|`)!)', closeWith:'(!(`)!)'}
37
- // {separator:'---------------'},
38
- // {name:'Preview', call:'preview', className:"preview"}
39
- ]
40
- }
41
-
42
- // mIu nameSpace to avoid conflict.
43
- miu = {
44
- markdownTitle: function(markItUp, char) {
45
- heading = '';
46
- n = $.trim(markItUp.selection||markItUp.placeHolder).length;
47
- for(i = 0; i < n; i++) {
48
- heading += char;
49
- }
50
- return '\n'+heading;
51
- }
52
- }