julien51-babylon 0.1.2 → 0.1.3
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/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)
|