mad_chatter 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ *.gem
2
+ .bundle
3
+ pkg/*
data/CHANGELOG.txt CHANGED
@@ -1,9 +1,14 @@
1
1
  Mad Chatter
2
2
 
3
+ Version 0.1.1
4
+ - Added a 'preview' command to CLI to run both a web server and web socket server
5
+ - Fixed bug where user leaving chatroom didn't notify other users
6
+
3
7
  Version 0.1.0
4
8
  - Refactored extension architecture. Much nicer syntax now.
5
9
  - Moved some of the main configuration to a config.yml file (which is generated when you use the 'new' command)
6
10
  - Created skeleton classes for alternative web socket server implementations and moved the default implementation into its own class
11
+ - Switched to using Bundler (instead of Jeweler) for gem deployments, thanks to this article: http://mlomnicki.com/ruby/rubygems/2011/01/22/jeweler-vs-bundler.html
7
12
 
8
13
  Versions < 0.1.0
9
14
  - Some of the features were implemented, but there were many holes that needed to be filled
data/Gemfile CHANGED
@@ -1,14 +1,3 @@
1
1
  source :rubygems
2
2
 
3
- # Gem dependencies
4
- gem 'thor'
5
- gem 'eventmachine', '0.12.10'
6
- gem 'em-websocket'
7
-
8
- # Development dependencies
9
- group :development do
10
- gem "shoulda", ">= 0"
11
- gem "bundler", "~> 1.0.0"
12
- gem "jeweler", "~> 1.6.4"
13
- gem "rcov", ">= 0"
14
- end
3
+ gemspec
data/Gemfile.lock CHANGED
@@ -1,18 +1,28 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ mad_chatter (0.1.1)
5
+ em-websocket
6
+ eventmachine
7
+ thor
8
+
1
9
  GEM
2
10
  remote: http://rubygems.org/
3
11
  specs:
4
12
  addressable (2.2.6)
13
+ diff-lcs (1.1.3)
5
14
  em-websocket (0.3.5)
6
15
  addressable (>= 2.1.1)
7
16
  eventmachine (>= 0.12.9)
8
17
  eventmachine (0.12.10)
9
- git (1.2.5)
10
- jeweler (1.6.4)
11
- bundler (~> 1.0)
12
- git (>= 1.2.5)
13
- rake
14
- rake (0.9.2.2)
15
- rcov (0.9.11)
18
+ rspec (2.7.0)
19
+ rspec-core (~> 2.7.0)
20
+ rspec-expectations (~> 2.7.0)
21
+ rspec-mocks (~> 2.7.0)
22
+ rspec-core (2.7.1)
23
+ rspec-expectations (2.7.0)
24
+ diff-lcs (~> 1.1.2)
25
+ rspec-mocks (2.7.0)
16
26
  shoulda (2.11.3)
17
27
  thor (0.14.6)
18
28
 
@@ -20,10 +30,6 @@ PLATFORMS
20
30
  ruby
21
31
 
22
32
  DEPENDENCIES
23
- bundler (~> 1.0.0)
24
- em-websocket
25
- eventmachine (= 0.12.10)
26
- jeweler (~> 1.6.4)
27
- rcov
33
+ mad_chatter!
34
+ rspec
28
35
  shoulda
29
- thor
data/Rakefile CHANGED
@@ -1,55 +1 @@
1
- # encoding: utf-8
2
-
3
- require 'rubygems'
4
- require 'bundler'
5
- begin
6
- Bundler.setup(:default, :development)
7
- rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
10
- exit e.status_code
11
- end
12
- require 'rake'
13
-
14
- require 'jeweler'
15
- require './lib/mad_chatter/version.rb'
16
- Jeweler::Tasks.new do |gem|
17
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
18
- gem.name = "mad_chatter"
19
- gem.version = MadChatter::VERSION
20
- gem.homepage = "http://github.com/andrewhavens/mad_chatter"
21
- gem.license = "MIT"
22
- gem.summary = %Q{Mad Chatter is a fun, easy to customize chat server, utilizing HTML 5 Web Sockets}
23
- gem.description = %Q{Mad Chatter is a fun, easy to customize chat server, utilizing HTML 5 Web Sockets}
24
- gem.email = "email@andrewhavens.com"
25
- gem.authors = ["Andrew Havens"]
26
- # dependencies defined in Gemfile
27
- end
28
- Jeweler::RubygemsDotOrgTasks.new
29
-
30
- require 'rake/testtask'
31
- Rake::TestTask.new(:test) do |test|
32
- test.libs << 'lib' << 'test'
33
- test.pattern = 'test/**/test_*.rb'
34
- test.verbose = true
35
- end
36
-
37
- require 'rcov/rcovtask'
38
- Rcov::RcovTask.new do |test|
39
- test.libs << 'test'
40
- test.pattern = 'test/**/test_*.rb'
41
- test.verbose = true
42
- test.rcov_opts << '--exclude "gems/*"'
43
- end
44
-
45
- task :default => :test
46
-
47
- require 'rake/rdoctask'
48
- Rake::RDocTask.new do |rdoc|
49
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
50
-
51
- rdoc.rdoc_dir = 'rdoc'
52
- rdoc.title = "mad_chatter #{version}"
53
- rdoc.rdoc_files.include('README*')
54
- rdoc.rdoc_files.include('lib/**/*.rb')
55
- end
1
+ require "bundler/gem_tasks"
data/TODO.txt ADDED
@@ -0,0 +1,5 @@
1
+ Goal: to become an open-source version of https://www.hipchat.com/
2
+
3
+ TODO:
4
+ Fix 'leave chatroom' functionality
5
+ Fix 'HTML injection' security vulnerability
data/bin/mad_chatter CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # lib_dir = File.expand_path('../lib', __FILE__)
3
+ # $:.unshift( lib_dir ) unless $:.include?( lib_dir )
2
4
 
3
5
  require 'thor'
4
- require File.expand_path('../../lib/mad_chatter', __FILE__)
5
6
 
6
7
  module MadChatter
7
8
 
@@ -23,8 +24,16 @@ module MadChatter
23
24
  copy_file "templates/web/stylesheets/styles.css", "#{name}/web/stylesheets/styles.css"
24
25
  end
25
26
 
27
+ desc 'preview', 'Starts both a web server and the Mad Chatter chat server'
28
+ def preview
29
+ t1 = Thread.new { require 'mad_chatter/web_server' }
30
+ t2 = Thread.new { require 'mad_chatter'; MadChatter.start }
31
+ t2.join()
32
+ end
33
+
26
34
  desc 'start', 'Starts the chat server'
27
35
  def start
36
+ require 'mad_chatter'
28
37
  MadChatter.start
29
38
  end
30
39
 
@@ -42,6 +51,7 @@ module MadChatter
42
51
 
43
52
  desc 'version', 'Displays the current version number'
44
53
  def version
54
+ require "mad_chatter/version"
45
55
  puts MadChatter::VERSION
46
56
  end
47
57
 
@@ -5,6 +5,7 @@ module MadChatter
5
5
  def initialize(config)
6
6
  @config = config
7
7
  @server = initialize_server
8
+ @subscribers = {};
8
9
  end
9
10
 
10
11
  def self.main_channel
@@ -14,7 +15,7 @@ module MadChatter
14
15
  def initialize_server
15
16
  # TODO: Figure out a better (more flexible/dynamic) way to initialize the server class
16
17
  if @config['websocket_backend'] && @config['websocket_backend'] == 'MadChatter::Servers::EventMachineWebSocket'
17
- return MadChatter::Servers::EventMachineWebSocket.new(self, @config['websocket_port'])
18
+ return MadChatter::Servers::EventMachineWebSocket.new(@config['websocket_port'], self)
18
19
  end
19
20
 
20
21
  raise 'You did not specify a valid class name for websocket_backend'
@@ -27,18 +28,25 @@ module MadChatter
27
28
  end
28
29
  end
29
30
 
30
- def register_connection(&send_client_message_block)
31
- subscriber_id = MadChatter::Server.main_channel.subscribe(send_client_message_block)
32
- send_client_message_block.call(connection_token)
31
+ def register_connection(&send_message)
32
+ subscriber_id = MadChatter::Server.main_channel.subscribe(send_message)
33
+ token = generate_token
34
+ send_message.call(MadChatter::Message.new('token', token).to_s)
35
+ @subscribers[subscriber_id] = token
36
+ subscriber_id
33
37
  end
34
38
 
35
- def connection_token
36
- token = Digest::SHA1.hexdigest Time.now.to_s
37
- MadChatter::Message.new('token', token).to_s
39
+ def generate_token
40
+ Digest::SHA1.hexdigest(Time.now.to_s)
38
41
  end
39
42
 
40
43
  def connection_closed(id)
44
+ token = @subscribers.delete(id)
45
+ username = MadChatter::Users.find_username_by_token(token)
41
46
  MadChatter::Server.main_channel.unsubscribe(id)
47
+ MadChatter::Users.remove(token)
48
+ MadChatter::Server.send_json(MadChatter::Message.new('status', "#{username} has left the chatroom").to_s)
49
+ MadChatter::Server.send_json(MadChatter::Message.new('users', MadChatter::Users.current).to_s)
42
50
  end
43
51
 
44
52
  def message_received(json)
@@ -4,7 +4,7 @@ module MadChatter
4
4
  module Servers
5
5
  class EventMachineWebSocket
6
6
 
7
- def initialize(main_server, port)
7
+ def initialize(port, main_server)
8
8
  @main_server = main_server
9
9
  @config = {
10
10
  :host => '0.0.0.0',
@@ -1,5 +1,5 @@
1
1
  module MadChatter
2
2
 
3
- VERSION = '0.1.0'
3
+ VERSION = '0.1.1'
4
4
 
5
5
  end
@@ -0,0 +1,3 @@
1
+ require 'webrick'
2
+ web_server = WEBrick::HTTPServer.new(:Port => 3000, :DocumentRoot => Dir.pwd + '/web')
3
+ web_server.start
data/lib/mad_chatter.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  lib_dir = File.expand_path('..', __FILE__)
2
2
  $:.unshift( lib_dir ) unless $:.include?( lib_dir )
3
3
 
4
- require 'bundler/setup'
5
4
  require 'eventmachine'
5
+ require 'yaml'
6
6
  require 'json'
7
7
  require 'digest/sha1'
8
8
 
@@ -12,6 +12,7 @@ require 'mad_chatter/extensions'
12
12
  require 'mad_chatter/message'
13
13
  require 'mad_chatter/server'
14
14
  require 'mad_chatter/users'
15
+ require 'mad_chatter/version'
15
16
 
16
17
  require 'mad_chatter/actions/join'
17
18
  require 'mad_chatter/actions/rename'
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "mad_chatter/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "mad_chatter"
7
+ s.version = MadChatter::VERSION
8
+ s.authors = ["Andrew Havens"]
9
+ s.email = ["email@andrewhavens.com"]
10
+ s.homepage = "http://github.com/andrewhavens/mad_chatter"
11
+ s.summary = %q{Mad Chatter is a fun, easy to customize chat server, utilizing HTML 5 Web Sockets}
12
+ s.description = %q{Mad Chatter is a fun, easy to customize chat server, utilizing HTML 5 Web Sockets}
13
+
14
+ # s.rubyforge_project = "mad_chatter"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_runtime_dependency "thor"
22
+ s.add_runtime_dependency "eventmachine"
23
+ s.add_runtime_dependency "em-websocket"
24
+ # s.add_runtime_dependency "sinatra"
25
+
26
+ s.add_development_dependency "rspec"
27
+ s.add_development_dependency "shoulda"
28
+ end
@@ -0,0 +1,15 @@
1
+ class Example
2
+
3
+ # include MadChatter::Extension
4
+
5
+ def handle(message)
6
+ if message.text == 'show me an example'
7
+ send_status_message "#{message.username} really wants an example"
8
+ send_message 'I said...I want an example!!!'
9
+ stop_message_handling # and don't let any other extensions handle it
10
+ else
11
+ # let other extensions handle it
12
+ end
13
+ end
14
+
15
+ end
@@ -8,6 +8,6 @@
8
8
  # Example:
9
9
  #
10
10
  # on_message /hey andrew: (.+)/ do |msg|
11
- # send_status_message 'Someone sent andrew a chat message'
11
+ # send_status_message 'Someone is talking to andrew'
12
12
  # end
13
13
  #
@@ -90,6 +90,9 @@ var MadChatter = {
90
90
  }
91
91
  if (type == 'message') {
92
92
  MadChatter.display_message(username, message);
93
+ if (!document.hasFocus) {
94
+ console.log(window.fluid);
95
+ }
93
96
  }
94
97
  MadChatter.scroll_to_bottom_of_chat();
95
98
  },
@@ -53,6 +53,7 @@
53
53
 
54
54
  #messages p {
55
55
  padding: 0.25em;
56
+ clear: both;
56
57
  }
57
58
 
58
59
  #messages p.message .username {
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.1.0
4
+ version: 0.1.1
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: 2011-12-07 00:00:00.000000000Z
12
+ date: 2011-12-13 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &2159049300 !ruby/object:Gem::Requirement
16
+ requirement: &2161151040 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,21 +21,21 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2159049300
24
+ version_requirements: *2161151040
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: eventmachine
27
- requirement: &2159048600 !ruby/object:Gem::Requirement
27
+ requirement: &2161150480 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
- - - =
30
+ - - ! '>='
31
31
  - !ruby/object:Gem::Version
32
- version: 0.12.10
32
+ version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2159048600
35
+ version_requirements: *2161150480
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: em-websocket
38
- requirement: &2159031280 !ruby/object:Gem::Requirement
38
+ requirement: &2161149460 !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: *2159031280
46
+ version_requirements: *2161149460
47
47
  - !ruby/object:Gem::Dependency
48
- name: shoulda
49
- requirement: &2159030600 !ruby/object:Gem::Requirement
48
+ name: rspec
49
+ requirement: &2161148320 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,32 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2159030600
58
- - !ruby/object:Gem::Dependency
59
- name: bundler
60
- requirement: &2159029860 !ruby/object:Gem::Requirement
61
- none: false
62
- requirements:
63
- - - ~>
64
- - !ruby/object:Gem::Version
65
- version: 1.0.0
66
- type: :development
67
- prerelease: false
68
- version_requirements: *2159029860
69
- - !ruby/object:Gem::Dependency
70
- name: jeweler
71
- requirement: &2159028900 !ruby/object:Gem::Requirement
72
- none: false
73
- requirements:
74
- - - ~>
75
- - !ruby/object:Gem::Version
76
- version: 1.6.4
77
- type: :development
78
- prerelease: false
79
- version_requirements: *2159028900
57
+ version_requirements: *2161148320
80
58
  - !ruby/object:Gem::Dependency
81
- name: rcov
82
- requirement: &2159027800 !ruby/object:Gem::Requirement
59
+ name: shoulda
60
+ requirement: &2161147460 !ruby/object:Gem::Requirement
83
61
  none: false
84
62
  requirements:
85
63
  - - ! '>='
@@ -87,23 +65,24 @@ dependencies:
87
65
  version: '0'
88
66
  type: :development
89
67
  prerelease: false
90
- version_requirements: *2159027800
68
+ version_requirements: *2161147460
91
69
  description: Mad Chatter is a fun, easy to customize chat server, utilizing HTML 5
92
70
  Web Sockets
93
- email: email@andrewhavens.com
71
+ email:
72
+ - email@andrewhavens.com
94
73
  executables:
95
74
  - mad_chatter
96
75
  extensions: []
97
- extra_rdoc_files:
98
- - LICENSE.txt
99
- - README.md
76
+ extra_rdoc_files: []
100
77
  files:
78
+ - .gitignore
101
79
  - CHANGELOG.txt
102
80
  - Gemfile
103
81
  - Gemfile.lock
104
82
  - LICENSE.txt
105
83
  - README.md
106
84
  - Rakefile
85
+ - TODO.txt
107
86
  - bin/mad_chatter
108
87
  - lib/mad_chatter.rb
109
88
  - lib/mad_chatter/action.rb
@@ -118,8 +97,11 @@ files:
118
97
  - lib/mad_chatter/servers/websocket_rack.rb
119
98
  - lib/mad_chatter/users.rb
120
99
  - lib/mad_chatter/version.rb
100
+ - lib/mad_chatter/web_server.rb
101
+ - mad_chatter.gemspec
121
102
  - templates/config.yml
122
103
  - templates/extensions.rb
104
+ - templates/extensions/example.rb
123
105
  - templates/web/index.html
124
106
  - templates/web/javascript.js
125
107
  - templates/web/stylesheets/reset.css
@@ -127,8 +109,7 @@ files:
127
109
  - test/helper.rb
128
110
  - test/test_mad_chatter.rb
129
111
  homepage: http://github.com/andrewhavens/mad_chatter
130
- licenses:
131
- - MIT
112
+ licenses: []
132
113
  post_install_message:
133
114
  rdoc_options: []
134
115
  require_paths:
@@ -139,9 +120,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
120
  - - ! '>='
140
121
  - !ruby/object:Gem::Version
141
122
  version: '0'
142
- segments:
143
- - 0
144
- hash: -79813361519807005
145
123
  required_rubygems_version: !ruby/object:Gem::Requirement
146
124
  none: false
147
125
  requirements:
@@ -155,4 +133,6 @@ signing_key:
155
133
  specification_version: 3
156
134
  summary: Mad Chatter is a fun, easy to customize chat server, utilizing HTML 5 Web
157
135
  Sockets
158
- test_files: []
136
+ test_files:
137
+ - test/helper.rb
138
+ - test/test_mad_chatter.rb