juggernaut 0.5.8 → 2.0.0.beta1

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.
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Alexander MacCaw
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,7 @@
1
+ = Juggernaut
2
+
3
+ Description goes here.
4
+
5
+ == Copyright
6
+
7
+ Copyright (c) 2010 Alex MacCaw. See LICENSE for details.
data/Rakefile CHANGED
@@ -1,16 +1,18 @@
1
- # -*- ruby -*-
2
-
3
1
  require 'rubygems'
4
- require 'hoe'
5
- require './lib/juggernaut.rb'
6
-
7
- Hoe.new('juggernaut', Juggernaut::VERSION) do |p|
8
- p.rubyforge_name = 'juggernaut'
9
- p.author = 'Alex MacCaw'
10
- p.email = 'info@eribium.org'
11
- p.url = 'http://juggernaut.rubyforge.org'
12
- p.extra_deps << ['eventmachine', '>=0.10.0']
13
- p.extra_deps << ['json', '>=1.1.2']
14
- end
2
+ require 'rake'
15
3
 
16
- # vim: syntax=Ruby
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "juggernaut"
8
+ gem.summary = %Q{Simple realtime push}
9
+ gem.description = %Q{Use Juggernaut to easily implement realtime chat, collaboration, gaming and much more!}
10
+ gem.email = "info@eribium.org"
11
+ gem.homepage = "http://github.com/maccman/juggernaut"
12
+ gem.authors = ["Alex MacCaw"]
13
+ gem.add_dependency "redis", ">= 0"
14
+ end
15
+ Jeweler::GemcutterTasks.new
16
+ rescue LoadError
17
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
18
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 2.0.0.beta1
@@ -0,0 +1,47 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{juggernaut}
8
+ s.version = "2.0.0.beta1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Alex MacCaw"]
12
+ s.date = %q{2010-09-03}
13
+ s.description = %q{Use Juggernaut to easily implement realtime chat, collaboration, gaming and much more!}
14
+ s.email = %q{info@eribium.org}
15
+ s.extra_rdoc_files = [
16
+ "README"
17
+ ]
18
+ s.files = [
19
+ ".document",
20
+ ".gitignore",
21
+ "LICENSE",
22
+ "README",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "juggernaut.gemspec",
26
+ "lib/juggernaut.rb"
27
+ ]
28
+ s.homepage = %q{http://github.com/maccman/juggernaut}
29
+ s.rdoc_options = ["--charset=UTF-8"]
30
+ s.require_paths = ["lib"]
31
+ s.rubygems_version = %q{1.3.7}
32
+ s.summary = %q{Simple realtime push}
33
+
34
+ if s.respond_to? :specification_version then
35
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
36
+ s.specification_version = 3
37
+
38
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
39
+ s.add_runtime_dependency(%q<redis>, [">= 0"])
40
+ else
41
+ s.add_dependency(%q<redis>, [">= 0"])
42
+ end
43
+ else
44
+ s.add_dependency(%q<redis>, [">= 0"])
45
+ end
46
+ end
47
+
@@ -1,158 +1,19 @@
1
- require 'rubygems'
2
- require 'logger'
3
- require 'eventmachine'
4
- require 'json'
5
- $:.unshift(File.dirname(__FILE__))
1
+ require "redis"
2
+ require "json"
6
3
 
7
4
  module Juggernaut
8
- VERSION = '0.5.8'
9
-
10
- class JuggernautError < StandardError #:nodoc:
5
+ def redis
6
+ @redis ||= Redis.new
11
7
  end
12
-
13
- @@options = {}
14
8
 
15
- DEFAULT_CONFIG_FILE = <<-EOF
16
- # ======================
17
- # Juggernaut Options
18
- # ======================
19
-
20
- # === Subscription authentication ===
21
- # Leave all subscription options uncommented to allow anyone to subscribe.
22
-
23
- # If specified, subscription_url is called everytime a client subscribes.
24
- # Parameters passed are: session_id, client_id and an array of channels.
25
- #
26
- # The server should check that the session_id matches up to the client_id
27
- # and that the client is allowed to access the specified channels.
28
- #
29
- # If a status code other than 200 is encountered, the subscription_request fails
30
- # and the client is disconnected.
31
- #
32
- # :subscription_url: http://localhost:3000/sessions/juggernaut_subscription
33
-
34
- # === Broadcast and query authentication ===
35
- # Leave all broadcast/query options uncommented to allow anyone to broadcast/query.
36
- #
37
- # Broadcast authentication in a production environment is very importantant since broadcasters
38
- # can execute JavaScript on subscribed clients, leaving you vulnerable to cross site scripting
39
- # attacks if broadcasters aren't authenticated.
40
-
41
- # 1) Via IP address
42
- #
43
- # If specified, if a client has an ip that is specified in allowed_ips, than it is automatically
44
- # authenticated, even if a secret_key isn't provided.
45
- #
46
- # This is the recommended method for broadcast authentication.
47
- #
48
- :allowed_ips:
49
- - 127.0.0.1
50
- # - 192.168.0.1
51
-
52
- # 2) Via HTTP request
53
- #
54
- # If specified, if a client attempts a broadcast/query, without a secret_key or using an IP
55
- # no included in allowed_ips, then broadcast_query_login_url will be called.
56
- # Parameters passed, if given, are: session_id, client_id, channels and type.
57
- #
58
- # The server should check that the session_id matches up to the client id, and the client
59
- # is allowed to perform that particular type of broadcast/query.
60
- #
61
- # If a status code other than 200 is encountered, the broadcast_query_login_url fails
62
- # and the client is disconnected.
63
- #
64
- # :broadcast_query_login_url: http://localhost:3000/sessions/juggernaut_broadcast
65
-
66
- # 3) Via shared secret key
67
- #
68
- # This secret key must be sent with any query/broadcast commands.
69
- # It must be the same as the one in the Rails config file.
70
- #
71
- # You shouldn't authenticate broadcasts from subscribed clients using this method
72
- # since the secret_key will be easily visible in the page (and not so secret any more)!
73
- #
74
- # :secret_key: your_secret_key_here
75
-
76
- # == Subscription Logout ==
77
-
78
- # If specified, logout_connection_url is called everytime a specific connection from a subscribed client disconnects.
79
- # Parameters passed are session_id, client_id and an array of channels specific to that connection.
80
- #
81
- # :logout_connection_url: http://localhost:3000/sessions/juggernaut_connection_logout
82
-
83
- # Logout url is called when all connections from a subscribed client are closed.
84
- # Parameters passed are session_id and client_id.
85
- #
86
- # :logout_url: http://localhost:3000/sessions/juggernaut_logout
87
-
88
- # === Miscellaneous ===
89
-
90
- # timeout defaults to 10. A timeout is the time between when a client closes a connection
91
- # and a logout_request or logout_connection_request is made. The reason for this is that a client
92
- # may only temporarily be disconnected, and may attempt a reconnect very soon.
93
- #
94
- # :timeout: 10
95
-
96
- # store_messages defaults to false. If this option is true, messages send to connections will be stored.
97
- # This is useful since a client can then receive broadcasted message that it has missed (perhaps it was disconnected).
98
- #
99
- # :store_messages: false
100
-
101
- # === Server ===
102
-
103
- # Host defaults to "0.0.0.0". You shouldn't need to change this.
104
- # :host: 0.0.0.0
105
-
106
- # Port is mandatory
107
- :port: 5001
108
-
109
- # Defaults to value of :port. If you are doing port forwarding you'll need to configure this to the same
110
- # value as :public_port in the juggernaut_hosts.yml file
111
- # :public_port: 5001
112
-
113
- EOF
9
+ def redis=(val)
10
+ @redis = val
11
+ end
114
12
 
115
- class << self
116
- def options
117
- @@options
118
- end
119
-
120
- def options=(val)
121
- @@options = val
122
- end
123
-
124
- def logger
125
- return @@logger if defined?(@@logger) && !@@logger.nil?
126
- FileUtils.mkdir_p(File.dirname(log_path))
127
- @@logger = Logger.new(log_path)
128
- @@logger.level = Logger::INFO if options[:debug] == false
129
- @@logger
130
- rescue
131
- @@logger = Logger.new(STDOUT)
132
- end
133
-
134
- def logger=(logger)
135
- @@logger = logger
136
- end
137
-
138
- def log_path
139
- options[:log_path] || File.join(%w( / var run juggernaut.log ))
140
- end
141
-
142
- def pid_path
143
- options[:pid_path] || File.join(%w( / var run ), "juggernaut.#{options[:port]}.pid" )
144
- end
145
-
146
- def config_path
147
- options[:config_path] || File.join(%w( / var run juggernaut.yml ))
148
- end
149
-
13
+ def publish(channels, data)
14
+ message = {:channels => Array(channels), :data => data}
15
+ redis.publish(:juggernaut, message.to_json)
150
16
  end
151
- end
152
17
 
153
- require 'juggernaut/utils'
154
- require 'juggernaut/miscel'
155
- require 'juggernaut/message'
156
- require 'juggernaut/client'
157
- require 'juggernaut/server'
158
- require 'juggernaut/runner'
18
+ extend self
19
+ end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: juggernaut
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.8
4
+ prerelease: true
5
+ segments:
6
+ - 2
7
+ - 0
8
+ - 0
9
+ - beta1
10
+ version: 2.0.0.beta1
5
11
  platform: ruby
6
12
  authors:
7
13
  - Alex MacCaw
@@ -9,95 +15,72 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-09-08 00:00:00 +01:00
18
+ date: 2010-09-03 00:00:00 +01:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
- name: eventmachine
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ name: redis
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
23
- version: 0.10.0
24
- version:
25
- - !ruby/object:Gem::Dependency
26
- name: json
29
+ segments:
30
+ - 0
31
+ version: "0"
27
32
  type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 1.1.2
34
- version:
35
- - !ruby/object:Gem::Dependency
36
- name: hoe
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- version: 2.3.3
44
- version:
45
- description: |-
46
- See Plugin README:
47
- http://juggernaut.rubyforge.org/svn/trunk/juggernaut/README
33
+ version_requirements: *id001
34
+ description: Use Juggernaut to easily implement realtime chat, collaboration, gaming and much more!
48
35
  email: info@eribium.org
49
- executables:
50
- - juggernaut
36
+ executables: []
37
+
51
38
  extensions: []
52
39
 
53
40
  extra_rdoc_files:
54
- - Manifest.txt
55
- - README.txt
41
+ - README
56
42
  files:
57
- - Manifest.txt
58
- - README.txt
43
+ - .document
44
+ - .gitignore
45
+ - LICENSE
46
+ - README
59
47
  - Rakefile
60
- - bin/juggernaut
48
+ - VERSION
49
+ - juggernaut.gemspec
61
50
  - lib/juggernaut.rb
62
- - lib/juggernaut/client.rb
63
- - lib/juggernaut/message.rb
64
- - lib/juggernaut/miscel.rb
65
- - lib/juggernaut/runner.rb
66
- - lib/juggernaut/server.rb
67
- - lib/juggernaut/utils.rb
68
51
  has_rdoc: true
69
- homepage: http://juggernaut.rubyforge.org
52
+ homepage: http://github.com/maccman/juggernaut
70
53
  licenses: []
71
54
 
72
55
  post_install_message:
73
56
  rdoc_options:
74
- - --main
75
- - README.txt
57
+ - --charset=UTF-8
76
58
  require_paths:
77
59
  - lib
78
60
  required_ruby_version: !ruby/object:Gem::Requirement
61
+ none: false
79
62
  requirements:
80
63
  - - ">="
81
64
  - !ruby/object:Gem::Version
65
+ segments:
66
+ - 0
82
67
  version: "0"
83
- version:
84
68
  required_rubygems_version: !ruby/object:Gem::Requirement
69
+ none: false
85
70
  requirements:
86
- - - ">="
71
+ - - ">"
87
72
  - !ruby/object:Gem::Version
88
- version: "0"
89
- version:
73
+ segments:
74
+ - 1
75
+ - 3
76
+ - 1
77
+ version: 1.3.1
90
78
  requirements: []
91
79
 
92
- rubyforge_project: juggernaut
93
- rubygems_version: 1.3.5
80
+ rubyforge_project:
81
+ rubygems_version: 1.3.7
94
82
  signing_key:
95
83
  specification_version: 3
96
- summary: "See Plugin README: http://juggernaut.rubyforge.org/svn/trunk/juggernaut/README"
97
- test_files:
98
- - test/test_client.rb
99
- - test/test_juggernaut.rb
100
- - test/test_message.rb
101
- - test/test_runner.rb
102
- - test/test_server.rb
103
- - test/test_utils.rb
84
+ summary: Simple realtime push
85
+ test_files: []
86
+