mad_chatter 0.1.0 → 0.1.1
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/.gitignore +3 -0
- data/CHANGELOG.txt +5 -0
- data/Gemfile +1 -12
- data/Gemfile.lock +19 -13
- data/Rakefile +1 -55
- data/TODO.txt +5 -0
- data/bin/mad_chatter +11 -1
- data/lib/mad_chatter/server.rb +15 -7
- data/lib/mad_chatter/servers/em_websocket.rb +1 -1
- data/lib/mad_chatter/version.rb +1 -1
- data/lib/mad_chatter/web_server.rb +3 -0
- data/lib/mad_chatter.rb +2 -1
- data/mad_chatter.gemspec +28 -0
- data/templates/extensions/example.rb +15 -0
- data/templates/extensions.rb +1 -1
- data/templates/web/javascript.js +3 -0
- data/templates/web/stylesheets/styles.css +1 -0
- metadata +28 -48
data/.gitignore
ADDED
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
|
-
|
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
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
24
|
-
|
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
|
-
|
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
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
|
|
data/lib/mad_chatter/server.rb
CHANGED
@@ -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(
|
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(&
|
31
|
-
subscriber_id = MadChatter::Server.main_channel.subscribe(
|
32
|
-
|
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
|
36
|
-
|
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)
|
data/lib/mad_chatter/version.rb
CHANGED
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'
|
data/mad_chatter.gemspec
ADDED
@@ -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
|
data/templates/extensions.rb
CHANGED
data/templates/web/javascript.js
CHANGED
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.
|
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-
|
12
|
+
date: 2011-12-13 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
16
|
-
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: *
|
24
|
+
version_requirements: *2161151040
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: eventmachine
|
27
|
-
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
|
32
|
+
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2161150480
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: em-websocket
|
38
|
-
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: *
|
46
|
+
version_requirements: *2161149460
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
49
|
-
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: *
|
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:
|
82
|
-
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: *
|
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:
|
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
|