julien51-babylon 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/babylon/base/controller.rb +9 -3
- data/lib/babylon/base/view.rb +1 -1
- data/lib/babylon/client_connection.rb +9 -3
- data/lib/babylon/component_connection.rb +3 -1
- data/lib/babylon/router.rb +3 -1
- data/lib/babylon/runner.rb +20 -5
- data/lib/babylon/xmpp_connection.rb +34 -12
- data/spec/lib/babylon/base/view_spec.rb +1 -1
- data/spec/lib/babylon/xmpp_connection_spec.rb +0 -25
- metadata +1 -1
@@ -21,7 +21,9 @@ module Babylon
|
|
21
21
|
begin
|
22
22
|
self.send(@action_name)
|
23
23
|
rescue
|
24
|
-
Babylon.logger.error
|
24
|
+
Babylon.logger.error {
|
25
|
+
"#{$!}:\n#{$!.backtrace.join("\n")}"
|
26
|
+
}
|
25
27
|
end
|
26
28
|
self.render
|
27
29
|
end
|
@@ -86,9 +88,13 @@ module Babylon
|
|
86
88
|
##
|
87
89
|
# Creates the view and "evaluates" it to build the XML for the stanza
|
88
90
|
def render_for_file(file)
|
89
|
-
Babylon.logger.info
|
91
|
+
Babylon.logger.info {
|
92
|
+
"RENDERING : #{file}"
|
93
|
+
}
|
90
94
|
@view = Babylon::Base::View.new(file, assigns)
|
91
|
-
Babylon.logger.info
|
95
|
+
Babylon.logger.info {
|
96
|
+
" "
|
97
|
+
}
|
92
98
|
end
|
93
99
|
|
94
100
|
end
|
data/lib/babylon/base/view.rb
CHANGED
@@ -25,7 +25,7 @@ module Babylon
|
|
25
25
|
raise ViewFileNotFound unless Babylon.views[@view_template]
|
26
26
|
builder = Nokogiri::XML::Builder.new
|
27
27
|
builder.stream do |xml|
|
28
|
-
eval(Babylon.views[@view_template])
|
28
|
+
eval(Babylon.views[@view_template], binding, @view_template, 1)
|
29
29
|
end
|
30
30
|
builder.doc.root.children # we output the document built
|
31
31
|
end
|
@@ -27,7 +27,9 @@ module Babylon
|
|
27
27
|
# If ruby version is too old and SRV is unknown, this will raise a NameError
|
28
28
|
# which is caught below
|
29
29
|
host_from_jid = params["jid"].split("/").first.split("@").last
|
30
|
-
Babylon.logger.debug
|
30
|
+
Babylon.logger.debug {
|
31
|
+
"RESOLVING: _xmpp-client._tcp.#{host_from_jid} (SRV)"
|
32
|
+
}
|
31
33
|
srv = dns.getresources("_xmpp-client._tcp.#{host_from_jid}", Resolv::DNS::Resource::IN::SRV)
|
32
34
|
}
|
33
35
|
# Sort SRV records: lowest priority first, highest weight first
|
@@ -45,7 +47,9 @@ module Babylon
|
|
45
47
|
end
|
46
48
|
}
|
47
49
|
rescue NameError
|
48
|
-
Babylon.logger.debug
|
50
|
+
Babylon.logger.debug {
|
51
|
+
"Resolv::DNS does not support SRV records. Please upgrade to ruby-1.8.3 or later! \n#{$!} : #{$!.backtrace.join("\n")}"
|
52
|
+
}
|
49
53
|
end
|
50
54
|
end
|
51
55
|
|
@@ -181,7 +185,9 @@ module Babylon
|
|
181
185
|
begin
|
182
186
|
@handler.on_connected(self) if @handler and @handler.respond_to?("on_connected")
|
183
187
|
rescue
|
184
|
-
Babylon.logger.error
|
188
|
+
Babylon.logger.error {
|
189
|
+
"on_connected failed : #{$!}\n#{$!.backtrace.join("\n")}"
|
190
|
+
}
|
185
191
|
end
|
186
192
|
@state = :connected
|
187
193
|
end
|
@@ -52,7 +52,9 @@ module Babylon
|
|
52
52
|
begin
|
53
53
|
@handler.on_connected(self) if @handler and @handler.respond_to?("on_connected")
|
54
54
|
rescue
|
55
|
-
Babylon.logger.error
|
55
|
+
Babylon.logger.error {
|
56
|
+
"on_connected failed : #{$!}\n#{$!.backtrace.join("\n")}"
|
57
|
+
}
|
56
58
|
end
|
57
59
|
@state = :connected
|
58
60
|
elsif stanza.name == "stream:error"
|
data/lib/babylon/router.rb
CHANGED
@@ -31,7 +31,9 @@ module Babylon
|
|
31
31
|
# Executes the route for the given xml_stanza, by instantiating the controller_name, calling action_name and sending
|
32
32
|
# the result to the connection
|
33
33
|
def execute_route(controller_name, action_name, xml_stanza = nil)
|
34
|
-
Babylon.logger.info
|
34
|
+
Babylon.logger.info {
|
35
|
+
"ROUTING TO #{controller_name}::#{action_name}"
|
36
|
+
}
|
35
37
|
stanza = nil
|
36
38
|
stanza = Kernel.const_get(action_name.capitalize).new(xml_stanza) if xml_stanza
|
37
39
|
controller = controller_name.new(stanza)
|
data/lib/babylon/runner.rb
CHANGED
@@ -13,7 +13,14 @@ module Babylon
|
|
13
13
|
|
14
14
|
# Add an outputter to the logger
|
15
15
|
log_file = Log4r::RollingFileOutputter.new("#{Babylon.environment}", :filename => "log/#{Babylon.environment}.log", :trunc => false)
|
16
|
-
|
16
|
+
case Babylon.environment
|
17
|
+
when "production"
|
18
|
+
log_file.formatter = Log4r::PatternFormatter.new(:pattern => "%d (#{Process.pid}) [%l] :: %m", :date_pattern => "%d/%m %H:%M")
|
19
|
+
when "development"
|
20
|
+
log_file.formatter = Log4r::PatternFormatter.new(:pattern => "%d (#{Process.pid}) [%l] :: %m", :date_pattern => "%d/%m %H:%M")
|
21
|
+
else
|
22
|
+
log_file.formatter = Log4r::PatternFormatter.new(:pattern => "%d (#{Process.pid}) [%l] :: %m", :date_pattern => "%d/%m %H:%M")
|
23
|
+
end
|
17
24
|
Babylon.logger.add(log_file)
|
18
25
|
|
19
26
|
# Requiring all models, stanza, controllers
|
@@ -76,10 +83,14 @@ module Babylon
|
|
76
83
|
def self.add_connection_observer(observer)
|
77
84
|
@@observers ||= Array.new
|
78
85
|
if observer.ancestors.include? Babylon::Base::Controller
|
79
|
-
Babylon.logger.debug
|
86
|
+
Babylon.logger.debug {
|
87
|
+
"Added #{observer} to the list of Connection Observers"
|
88
|
+
}
|
80
89
|
@@observers.push(observer) unless @@observers.include? observer
|
81
90
|
else
|
82
|
-
Babylon.logger.error
|
91
|
+
Babylon.logger.error {
|
92
|
+
"Observer can only be Babylon::Base::Controller"
|
93
|
+
}
|
83
94
|
false
|
84
95
|
end
|
85
96
|
end
|
@@ -111,10 +122,14 @@ module Babylon
|
|
111
122
|
begin
|
112
123
|
Babylon.router.route(stanza)
|
113
124
|
rescue Babylon::NotConnected
|
114
|
-
Babylon.logger.fatal
|
125
|
+
Babylon.logger.fatal {
|
126
|
+
"#{$!.class} => #{$!.inspect}\n#{$!.backtrace.join("\n")}"
|
127
|
+
}
|
115
128
|
EventMachine::stop_event_loop
|
116
129
|
rescue
|
117
|
-
Babylon.logger.error
|
130
|
+
Babylon.logger.error {
|
131
|
+
"#{$!.class} => #{$!.inspect}\n#{$!.backtrace.join("\n")}"
|
132
|
+
}
|
118
133
|
end
|
119
134
|
end
|
120
135
|
|
@@ -45,11 +45,15 @@ module Babylon
|
|
45
45
|
# It passes itself (as handler) and the configuration
|
46
46
|
# This can very well be overwritten by subclasses.
|
47
47
|
def self.connect(params, handler)
|
48
|
-
Babylon.logger.debug
|
48
|
+
Babylon.logger.debug {
|
49
|
+
"CONNECTING TO #{params["host"]}:#{params["port"]} with #{handler.inspect} as connection handler" # Very low level Logging
|
50
|
+
}
|
49
51
|
begin
|
50
52
|
EventMachine.connect(params["host"], params["port"], self, params.merge({"handler" => handler}))
|
51
53
|
rescue RuntimeError
|
52
|
-
Babylon.logger.error
|
54
|
+
Babylon.logger.error {
|
55
|
+
"CONNECTION ERROR : #{$!.class} => #{$!}" # Very low level Logging
|
56
|
+
}
|
53
57
|
raise NotConnected
|
54
58
|
end
|
55
59
|
end
|
@@ -58,18 +62,24 @@ module Babylon
|
|
58
62
|
# Called when the connection is completed.
|
59
63
|
def connection_completed
|
60
64
|
@connected = true
|
61
|
-
Babylon.logger.debug
|
65
|
+
Babylon.logger.debug {
|
66
|
+
"CONNECTED"
|
67
|
+
} # Very low level Logging
|
62
68
|
end
|
63
69
|
|
64
70
|
##
|
65
71
|
# Called when the connection is terminated and stops the event loop
|
66
72
|
def unbind()
|
67
73
|
@connected = false
|
68
|
-
Babylon.logger.debug
|
74
|
+
Babylon.logger.debug {
|
75
|
+
"DISCONNECTED"
|
76
|
+
} # Very low level Logging
|
69
77
|
begin
|
70
78
|
@handler.on_disconnected() if @handler and @handler.respond_to?("on_disconnected")
|
71
79
|
rescue
|
72
|
-
Babylon.logger.error
|
80
|
+
Babylon.logger.error {
|
81
|
+
"on_disconnected failed : #{$!}\n#{$!.backtrace.join("\n")}"
|
82
|
+
}
|
73
83
|
end
|
74
84
|
end
|
75
85
|
|
@@ -94,12 +104,16 @@ module Babylon
|
|
94
104
|
##
|
95
105
|
# Called when a full stanza has been received and returns it to the central router to be sent to the corresponding controller.
|
96
106
|
def receive_stanza(stanza)
|
97
|
-
Babylon.logger.debug
|
107
|
+
Babylon.logger.debug {
|
108
|
+
"PARSED : #{stanza.to_xml}"
|
109
|
+
}
|
98
110
|
# If not handled by subclass (for authentication)
|
99
111
|
case stanza.name
|
100
112
|
when "stream:error"
|
101
113
|
if !stanza.children.empty? and stanza.children.first.name == "xml-not-well-formed"
|
102
|
-
Babylon.logger.error
|
114
|
+
Babylon.logger.error {
|
115
|
+
"DISCONNECTED DUE TO MALFORMED STANZA"
|
116
|
+
}
|
103
117
|
raise XmlNotWellFormed
|
104
118
|
end
|
105
119
|
# In any case, we need to close the connection.
|
@@ -108,7 +122,9 @@ module Babylon
|
|
108
122
|
begin
|
109
123
|
@handler.on_stanza(stanza) if @handler and @handler.respond_to?("on_stanza")
|
110
124
|
rescue
|
111
|
-
Babylon.logger.error
|
125
|
+
Babylon.logger.error {
|
126
|
+
"on_stanza failed : #{$!}\n#{$!.backtrace.join("\n")}"
|
127
|
+
}
|
112
128
|
end
|
113
129
|
end
|
114
130
|
end
|
@@ -130,8 +146,10 @@ module Babylon
|
|
130
146
|
def send_chunk(string)
|
131
147
|
raise NotConnected unless @connected
|
132
148
|
return if string.blank?
|
133
|
-
raise StanzaTooBig if string.length > XmppConnection.max_stanza_size
|
134
|
-
Babylon.logger.debug
|
149
|
+
raise StanzaTooBig, "Stanza Too Big (#{string.length} vs. #{XmppConnection.max_stanza_size})\n #{string}" if string.length > XmppConnection.max_stanza_size
|
150
|
+
Babylon.logger.debug {
|
151
|
+
"SENDING : " + string
|
152
|
+
}
|
135
153
|
send_data string
|
136
154
|
end
|
137
155
|
|
@@ -139,10 +157,14 @@ module Babylon
|
|
139
157
|
# receive_data is called when data is received. It is then passed to the parser.
|
140
158
|
def receive_data(data)
|
141
159
|
begin
|
142
|
-
Babylon.logger.debug
|
160
|
+
# Babylon.logger.debug {
|
161
|
+
# "RECEIVED : #{data}"
|
162
|
+
# }
|
143
163
|
@parser.push(data)
|
144
164
|
rescue
|
145
|
-
Babylon.logger.error
|
165
|
+
Babylon.logger.error {
|
166
|
+
"#{$!}\n#{$!.backtrace.join("\n")}"
|
167
|
+
}
|
146
168
|
end
|
147
169
|
end
|
148
170
|
end
|
@@ -49,7 +49,7 @@ describe Babylon::Base::View do
|
|
49
49
|
|
50
50
|
it "should call eval on the view file" do
|
51
51
|
Babylon.views.stub!(:[]).with(@view_template).and_return(@xml_string)
|
52
|
-
@view.should_receive(:eval).with(@xml_string)
|
52
|
+
@view.should_receive(:eval).with(@xml_string, an_instance_of(Binding), @view_template, 1)
|
53
53
|
@view.evaluate
|
54
54
|
end
|
55
55
|
|
@@ -62,14 +62,9 @@ describe Babylon::XmppConnection do
|
|
62
62
|
@connection.post_init
|
63
63
|
@connection.instance_variable_get("@parser").should == parser
|
64
64
|
end
|
65
|
-
|
66
65
|
end
|
67
66
|
|
68
67
|
describe "connection_completed" do
|
69
|
-
it "should write a log message" do
|
70
|
-
Babylon.logger.should_receive(:debug).with("CONNECTED")
|
71
|
-
@connection.connection_completed
|
72
|
-
end
|
73
68
|
it "should set @connected to true" do
|
74
69
|
@connection.connection_completed
|
75
70
|
@connection.instance_variable_get("@connected").should be_true
|
@@ -77,11 +72,6 @@ describe Babylon::XmppConnection do
|
|
77
72
|
end
|
78
73
|
|
79
74
|
describe "unbind" do
|
80
|
-
it "should write a log message, and call on_disconnected" do
|
81
|
-
Babylon.logger.should_receive(:debug).with("DISCONNECTED")
|
82
|
-
handler_mock.should_receive(:on_disconnected)
|
83
|
-
@connection.unbind
|
84
|
-
end
|
85
75
|
it "should set @connected to false" do
|
86
76
|
@connection.connection_completed
|
87
77
|
@connection.unbind
|
@@ -95,11 +85,6 @@ describe Babylon::XmppConnection do
|
|
95
85
|
@doc = Nokogiri::XML::Document.new
|
96
86
|
end
|
97
87
|
|
98
|
-
it "should write a log message for debug" do
|
99
|
-
Babylon.logger.should_receive(:debug).with(/PARSED/)
|
100
|
-
@connection.receive_stanza(Nokogiri::XML::Node.new("node", @doc))
|
101
|
-
end
|
102
|
-
|
103
88
|
describe "with an stanza that starts with stream:error" do
|
104
89
|
|
105
90
|
before(:each) do
|
@@ -118,10 +103,6 @@ describe Babylon::XmppConnection do
|
|
118
103
|
@error_stanza.add_child(@xml_not_well_formed_stanza)
|
119
104
|
end
|
120
105
|
|
121
|
-
it "should write an error to the log and raise an error" do
|
122
|
-
Babylon.logger.should_receive(:error).with(/DISCONNECTED DUE TO MALFORMED STANZA/)
|
123
|
-
lambda {@connection.receive_stanza(@error_stanza)}.should raise_error(Babylon::XmlNotWellFormed)
|
124
|
-
end
|
125
106
|
end
|
126
107
|
end
|
127
108
|
|
@@ -206,12 +187,6 @@ describe Babylon::XmppConnection do
|
|
206
187
|
@connection.instance_variable_get("@parser").stub!(:push).and_return(true)
|
207
188
|
end
|
208
189
|
|
209
|
-
it "should show a message on the log" do
|
210
|
-
data = "<hello>hello world!</hello>"
|
211
|
-
Babylon.logger.should_receive(:debug).with("RECEIVED : #{data}")
|
212
|
-
@connection.__send__(:receive_data, data)
|
213
|
-
end
|
214
|
-
|
215
190
|
it "should push the received data to the parser" do
|
216
191
|
data = "<hello>hello world!</hello>"
|
217
192
|
@connection.instance_variable_get("@parser").should_receive(:push).with(data).and_return(true)
|