Sutto-marvin 0.2.4 → 0.3.0
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/VERSION.yml +2 -2
- data/handlers/debug_handler.rb +6 -1
- data/lib/marvin.rb +4 -2
- data/lib/marvin/command_handler.rb +25 -4
- data/lib/marvin/console.rb +75 -52
- data/lib/marvin/loader.rb +7 -4
- data/lib/marvin/options.rb +3 -3
- data/script/console +2 -8
- metadata +5 -1
data/VERSION.yml
CHANGED
data/handlers/debug_handler.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Use this class to debug stuff as you
|
2
2
|
# go along - e.g. dump events etc.
|
3
|
-
class DebugHandler < Marvin::
|
3
|
+
class DebugHandler < Marvin::CommandHandler
|
4
4
|
|
5
|
+
exposes :about
|
6
|
+
def about(*args)
|
7
|
+
reply "Marvin v#{Marvin::VERSION::STRING} running on Ruby #{RUBY_VERSION} (#{RUBY_PLATFORM})"
|
8
|
+
end
|
9
|
+
|
5
10
|
end
|
data/lib/marvin.rb
CHANGED
@@ -10,8 +10,8 @@ require 'marvin/exceptions'
|
|
10
10
|
module Marvin
|
11
11
|
module VERSION
|
12
12
|
MAJOR = 0
|
13
|
-
MINOR =
|
14
|
-
PATCH =
|
13
|
+
MINOR = 3
|
14
|
+
PATCH = 0
|
15
15
|
|
16
16
|
STRING = [MAJOR, MINOR, PATCH].join(".")
|
17
17
|
end
|
@@ -21,6 +21,8 @@ module Marvin
|
|
21
21
|
autoload :Distributed, 'marvin/distributed'
|
22
22
|
autoload :AbstractClient, 'marvin/abstract_client'
|
23
23
|
autoload :Base, 'marvin/base'
|
24
|
+
autoload :Console, 'marvin/console'
|
25
|
+
autoload :CoreCommands, 'marvin/core_commands'
|
24
26
|
autoload :ClientMixin, 'marvin/client_mixin'
|
25
27
|
autoload :Settings, 'marvin/settings'
|
26
28
|
autoload :Logger, 'marvin/logger'
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
1
3
|
module Marvin
|
2
4
|
|
3
5
|
# A Simple Marvin handler based on processing
|
@@ -5,15 +7,19 @@ module Marvin
|
|
5
7
|
class CommandHandler < Base
|
6
8
|
|
7
9
|
class_inheritable_accessor :exposed_methods, :command_prefix
|
10
|
+
cattr_accessor :descriptions, :last_description, :exposed_method_names
|
8
11
|
|
9
|
-
self.command_prefix
|
10
|
-
self.exposed_methods
|
12
|
+
self.command_prefix = ""
|
13
|
+
self.exposed_methods = Set.new
|
14
|
+
self.descriptions = {}
|
15
|
+
self.exposed_method_names = Set.new
|
11
16
|
|
12
17
|
class << self
|
13
18
|
|
14
19
|
def exposes(*args)
|
15
|
-
|
16
|
-
self.exposed_methods
|
20
|
+
names = args.map { |a| a.to_sym }.flatten
|
21
|
+
self.exposed_methods += names
|
22
|
+
self.exposed_method_names += names
|
17
23
|
end
|
18
24
|
|
19
25
|
end
|
@@ -54,6 +60,21 @@ module Marvin
|
|
54
60
|
end
|
55
61
|
end
|
56
62
|
|
63
|
+
class << self
|
64
|
+
|
65
|
+
def desc(desc)
|
66
|
+
self.last_description = desc
|
67
|
+
end
|
68
|
+
|
69
|
+
def method_added(name)
|
70
|
+
unless last_description.blank?
|
71
|
+
descriptions[name.to_sym] = self.last_description
|
72
|
+
self.last_description = nil
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
57
78
|
end
|
58
79
|
|
59
80
|
end
|
data/lib/marvin/console.rb
CHANGED
@@ -1,54 +1,77 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
Marvin
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
def parse(line)
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
def logger
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
def client
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
class ServerMock < Marvin::IRC::Server::BaseConnection
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
def server(reset = false)
|
43
|
-
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
def user(reset = false)
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
1
|
+
require 'irb'
|
2
|
+
|
3
|
+
module Marvin
|
4
|
+
class Console
|
5
|
+
|
6
|
+
module BaseExtensions
|
7
|
+
def parse(line)
|
8
|
+
Marvin::Settings.default_parser.parse(line)
|
9
|
+
end
|
10
|
+
|
11
|
+
def logger
|
12
|
+
Marvin::Logger.logger
|
13
|
+
end
|
14
|
+
|
15
|
+
def client
|
16
|
+
$client ||= Marvin::Settings.default_client.new(:port => 6667, :server => "irc.freenode.net")
|
17
|
+
end
|
18
|
+
|
19
|
+
class ServerMock < Marvin::IRC::Server::BaseConnection
|
20
|
+
def send_line(line)
|
21
|
+
puts ">> #{line}"
|
22
|
+
end
|
23
|
+
def kill_connection!
|
24
|
+
puts "Killing connection"
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_peername
|
28
|
+
# Localhost, HTTP
|
29
|
+
"\034\036\000P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000"
|
30
|
+
end
|
31
|
+
|
32
|
+
def host
|
33
|
+
"localhost"
|
34
|
+
end
|
35
|
+
|
36
|
+
def port
|
37
|
+
6667
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
def server(reset = false)
|
43
|
+
$server = ServerMock.new(:port => 6667, :host => "localhost") if $server.blank? || reset
|
44
|
+
return $server
|
45
|
+
end
|
46
|
+
|
47
|
+
def user(reset = false)
|
48
|
+
unless @user_created || reset
|
49
|
+
server.receive_line "NICK SuttoL"
|
50
|
+
server.receive_line "USER SuttoL 0 * :SuttoL"
|
51
|
+
@user_created = true
|
52
|
+
end
|
53
|
+
return server.connection_implementation
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def initialize(file = $0)
|
58
|
+
@file = file
|
59
|
+
setup_irb
|
60
|
+
end
|
61
|
+
|
62
|
+
def setup_irb
|
63
|
+
# This is a bit hacky, surely there is a better way?
|
64
|
+
# e.g. some way to specify which scope irb runs in.
|
65
|
+
eval("include Marvin::Console::BaseExtensions", TOPLEVEL_BINDING)
|
66
|
+
end
|
67
|
+
|
68
|
+
def run
|
69
|
+
IRB.start(@file)
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.run
|
73
|
+
self.new.run
|
74
|
+
end
|
75
|
+
|
52
76
|
end
|
53
|
-
return server.connection_implementation
|
54
77
|
end
|
data/lib/marvin/loader.rb
CHANGED
@@ -13,7 +13,7 @@ module Marvin
|
|
13
13
|
:server => Marvin::IRC::Server,
|
14
14
|
:ring_server => Marvin::Distributed::RingServer,
|
15
15
|
:distributed_client => Marvin::Distributed::DRbClient,
|
16
|
-
:console =>
|
16
|
+
:console => Marvin::Console
|
17
17
|
}
|
18
18
|
|
19
19
|
# For each of the known types, define a method
|
@@ -80,11 +80,11 @@ module Marvin
|
|
80
80
|
|
81
81
|
def run!
|
82
82
|
self.register_signals
|
83
|
-
Marvin::Options.parse!
|
83
|
+
Marvin::Options.parse!
|
84
84
|
Marvin::Daemon.daemonize! if Marvin::Settings.daemon?
|
85
85
|
Marvin::Logger.setup
|
86
86
|
self.load_settings
|
87
|
-
require(Marvin::Settings.root / "config/setup")
|
87
|
+
require(Marvin::Settings.root / "config" / "setup")
|
88
88
|
self.load_handlers
|
89
89
|
self.class.invoke_hooks! :before_run
|
90
90
|
attempt_controller_action! :run
|
@@ -138,7 +138,10 @@ module Marvin
|
|
138
138
|
|
139
139
|
# Register to the Marvin::DataStore methods
|
140
140
|
if Marvin::Loader.client?
|
141
|
-
before_run
|
141
|
+
before_run do
|
142
|
+
Marvin::CoreCommands.register!
|
143
|
+
Marvin::DataStore.load!
|
144
|
+
end
|
142
145
|
after_stop { Marvin::DataStore.dump! }
|
143
146
|
end
|
144
147
|
|
data/lib/marvin/options.rb
CHANGED
@@ -18,9 +18,9 @@ module Marvin
|
|
18
18
|
o.separator ""
|
19
19
|
o.separator ""
|
20
20
|
o.on("-l", "--level=[level]", String, "The log level to use",
|
21
|
-
"Default: #{options[:log_level]}") {|options[:log_level]
|
22
|
-
o.on("-v", "--verbose", "Be verbose (print to stdout)") {|options[:verbose]
|
23
|
-
o.on("-d", "--daemon", "Run as a daemon (drop the PID)") {|options[:daemon]
|
21
|
+
"Default: #{options[:log_level]}") {|v| options[:log_level] = v}
|
22
|
+
o.on("-v", "--verbose", "Be verbose (print to stdout)") {|v| options[:verbose] = v}
|
23
|
+
o.on("-d", "--daemon", "Run as a daemon (drop the PID)") {|v| options[:daemon] = v}
|
24
24
|
o.on("-k", "--kill", "Kill all of the current type / the running instances") do |kill|
|
25
25
|
if kill
|
26
26
|
Marvin::Daemon.kill_all(Marvin::Loader.type)
|
data/script/console
CHANGED
@@ -1,9 +1,3 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
cmd = "irb #{libs.join(" ")} --simple-prompt"
|
6
|
-
|
7
|
-
puts "Loading Marvin console..."
|
8
|
-
|
9
|
-
exec cmd
|
2
|
+
require File.join(File.dirname(__FILE__), "..", "config", "boot")
|
3
|
+
Marvin::Loader.run! :console
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Sutto-marvin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darcy Laycock
|
@@ -14,6 +14,7 @@ default_executable: marvin
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
17
|
+
type: :runtime
|
17
18
|
version_requirement:
|
18
19
|
version_requirements: !ruby/object:Gem::Requirement
|
19
20
|
requirements:
|
@@ -23,6 +24,7 @@ dependencies:
|
|
23
24
|
version:
|
24
25
|
- !ruby/object:Gem::Dependency
|
25
26
|
name: activesupport
|
27
|
+
type: :runtime
|
26
28
|
version_requirement:
|
27
29
|
version_requirements: !ruby/object:Gem::Requirement
|
28
30
|
requirements:
|
@@ -32,6 +34,7 @@ dependencies:
|
|
32
34
|
version:
|
33
35
|
- !ruby/object:Gem::Dependency
|
34
36
|
name: eventmachine
|
37
|
+
type: :runtime
|
35
38
|
version_requirement:
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
@@ -41,6 +44,7 @@ dependencies:
|
|
41
44
|
version:
|
42
45
|
- !ruby/object:Gem::Dependency
|
43
46
|
name: thor
|
47
|
+
type: :runtime
|
44
48
|
version_requirement:
|
45
49
|
version_requirements: !ruby/object:Gem::Requirement
|
46
50
|
requirements:
|