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.
@@ -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