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.
@@ -3,6 +3,8 @@ end
3
3
 
4
4
  require "xmlrpc/client"
5
5
 
6
+ require 'active_support/inflector'
7
+
6
8
  require "atheme/error"
7
9
  require "atheme/helpers"
8
10
  require "atheme/version"
@@ -1,5 +1,5 @@
1
1
  module Atheme
2
- class Channel < Entity
2
+ class Channel < EntityBase
3
3
 
4
4
  def fetch! #:nodoc:
5
5
  @session.chanserv.info(@token)
@@ -24,6 +24,8 @@ module Atheme
24
24
  self.send(meth, *args, &block)
25
25
  end
26
26
 
27
+ def to_ary; end
28
+
27
29
  def fetch!
28
30
  raise "#{self} does not know how to update itself. Slap the developer!"
29
31
  end
@@ -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
@@ -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
- if raw_output.kind_of?(Atheme::Error)
80
- return raw_output
81
- end
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
- return response
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
- command :to_a do
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
- { channel: channel, owner: owner }
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
@@ -1,3 +1,3 @@
1
1
  module Atheme
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
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.5
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-03 00:00:00.000000000 Z
12
+ date: 2013-09-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler