atheme-ruby 0.0.5 → 0.0.6
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/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
|