atheme-ruby 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/atheme.rb +2 -0
- data/lib/atheme/entities/channel.rb +1 -1
- data/lib/atheme/entity.rb +2 -0
- data/lib/atheme/helpers.rb +10 -0
- data/lib/atheme/service.rb +28 -8
- data/lib/atheme/services/chanserv.rb +11 -3
- data/lib/atheme/services/hostserv.rb +18 -0
- data/lib/atheme/version.rb +1 -1
- metadata +2 -2
data/lib/atheme.rb
CHANGED
data/lib/atheme/entity.rb
CHANGED
data/lib/atheme/helpers.rb
CHANGED
@@ -11,4 +11,14 @@ module Atheme::Helpers
|
|
11
11
|
|
12
12
|
constant
|
13
13
|
end
|
14
|
+
|
15
|
+
class List < Array
|
16
|
+
|
17
|
+
def method_missing(method, *args, &block)
|
18
|
+
method = method.to_s.singularize.to_sym
|
19
|
+
return self.map {|v| v[method] }.flatten if self.first.has_key? method
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
14
24
|
end
|
data/lib/atheme/service.rb
CHANGED
@@ -28,9 +28,10 @@ module Atheme
|
|
28
28
|
|
29
29
|
def call(session, raw_output)
|
30
30
|
@raw_output = raw_output
|
31
|
+
@session = session
|
31
32
|
value = self.instance_eval(&@block)
|
32
33
|
return value if !@opts[:as] || value.nil?
|
33
|
-
@opts[:as].new(session, value)
|
34
|
+
@opts[:as].new(@session, value)
|
34
35
|
end
|
35
36
|
|
36
37
|
private
|
@@ -38,6 +39,10 @@ module Atheme
|
|
38
39
|
@raw_output
|
39
40
|
end
|
40
41
|
|
42
|
+
def session
|
43
|
+
@session
|
44
|
+
end
|
45
|
+
|
41
46
|
def match(expression)
|
42
47
|
raw_output[expression, 1]
|
43
48
|
end
|
@@ -66,8 +71,8 @@ module Atheme
|
|
66
71
|
@@staged_parser.register_command(Atheme::Service::Command.new(name, opts, &block))
|
67
72
|
end
|
68
73
|
|
69
|
-
def self.responds_with(atheme_class)
|
70
|
-
@@staged_parser.responder = atheme_class
|
74
|
+
def self.responds_with(atheme_class=nil, &block)
|
75
|
+
@@staged_parser.responder = atheme_class || block
|
71
76
|
end
|
72
77
|
|
73
78
|
def initialize(session)
|
@@ -76,19 +81,34 @@ module Atheme
|
|
76
81
|
|
77
82
|
def method_missing(method, *args, &block)
|
78
83
|
raw_output = @session.service_call(service_name, method, *args)
|
79
|
-
|
80
|
-
|
81
|
-
|
84
|
+
|
85
|
+
#if an error occurred, just return it to the user
|
86
|
+
return raw_output if raw_output.kind_of?(Atheme::Error)
|
87
|
+
|
88
|
+
#building up the response hash...
|
82
89
|
response = {raw_output: raw_output}
|
90
|
+
|
91
|
+
#get the parser of the method registered with 'parse :key'
|
83
92
|
parser = @@parsers.has_key?(service_name) && @@parsers[service_name][method]
|
84
93
|
|
94
|
+
#no parser is available, return generic Entity which holds only the raw_output
|
85
95
|
return Atheme::Entity.new(@session, response, &block) unless parser
|
86
|
-
|
96
|
+
|
97
|
+
#a responds_with is defined and associates a block
|
98
|
+
#we do not need any further command-handling
|
99
|
+
#as we only serve the raw_output if the request
|
100
|
+
return parser.responder.call(@session, response[:raw_output]) if parser.responder && parser.responder.kind_of?(Proc)
|
101
|
+
|
102
|
+
#add further commands/key-values to the hash registered with 'command :key'
|
87
103
|
parser.commands.each do |command|
|
88
104
|
response[command.name] = command.call(@session, raw_output)
|
89
105
|
end
|
106
|
+
|
107
|
+
#create a special Entity registered with resonds_with if available
|
90
108
|
return parser.responder.new(@session, response, &block) if parser.responder
|
91
|
-
|
109
|
+
|
110
|
+
#last but not least, return a generic Entity but with extended commands/values
|
111
|
+
return Atheme::Entity.new(@session, response, &block)
|
92
112
|
end
|
93
113
|
|
94
114
|
private
|
@@ -1,23 +1,31 @@
|
|
1
1
|
module Atheme
|
2
2
|
class ChanServ < Service
|
3
3
|
|
4
|
+
# Returns an Atheme::Channel entity which holds all information about the requested channel
|
4
5
|
parse :info do
|
5
6
|
responds_with Atheme::Channel
|
6
7
|
end
|
7
8
|
|
9
|
+
# Returns an Atheme::Helpers::List
|
10
|
+
# with {channel: Atheme::Channel, founder: Atheme::User}
|
8
11
|
parse :list do
|
9
|
-
|
12
|
+
responds_with do |session, raw_output|
|
10
13
|
output = raw_output.split("\n")
|
11
14
|
output.delete_at(0)
|
12
15
|
output.delete_at(output.length - 1)
|
13
16
|
|
14
|
-
output.map do |info|
|
17
|
+
output.map! do |info|
|
15
18
|
out = info.sub('- ', '').split('(')
|
16
19
|
channel = out[0].sub(' ', '')
|
17
20
|
owner = out[1].sub(')', '').sub(' ', '')
|
18
21
|
|
19
|
-
{
|
22
|
+
{
|
23
|
+
channel: Atheme::Channel.new(session, channel),
|
24
|
+
founder: Atheme::User.new(session, owner)
|
25
|
+
}
|
20
26
|
end
|
27
|
+
|
28
|
+
Atheme::Helpers::List.new(output)
|
21
29
|
end
|
22
30
|
end
|
23
31
|
end
|
@@ -1,4 +1,22 @@
|
|
1
1
|
module Atheme
|
2
2
|
class HostServ < Service
|
3
|
+
|
4
|
+
# Returns an Atheme::Helpers::List
|
5
|
+
# with {user: Atheme::User, vhost: String}
|
6
|
+
parse :listvhost do
|
7
|
+
responds_with do |session, raw_output|
|
8
|
+
output = raw_output.split("\n")[0..-2]
|
9
|
+
|
10
|
+
output.map! do |info|
|
11
|
+
out = info.split(" ")
|
12
|
+
{
|
13
|
+
user: Atheme::User.new(session, out[1]),
|
14
|
+
vhost: out[2]
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
Atheme::Helpers::List.new(output)
|
19
|
+
end
|
20
|
+
end
|
3
21
|
end
|
4
22
|
end
|
data/lib/atheme/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atheme-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-09-
|
12
|
+
date: 2013-09-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|