julien51-babylon 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -17,7 +17,7 @@ begin
17
17
  gem.add_dependency('julien51-sax-machine')
18
18
  gem.add_dependency('templater')
19
19
  gem.add_dependency('daemons')
20
- gem.requirements = ["eventmachine", "yaml", "fileutils", "log4r", "nokogiri", "sax-machine", "templater", "daemons", "optparse", "digest/sha1", "base64", "resolv"]
20
+ gem.requirements = ["eventmachine", "yaml", "fileutils", "log4r", "nokogiri", "sax-machine", "templater", "daemons", "optparse", "digest/sha1", "base64", "resolv", "activesupport"]
21
21
  gem.executables = "babylon"
22
22
  gem.files = [ "bin/babylon",
23
23
  "lib/babylon.rb",
@@ -3,6 +3,7 @@ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname
3
3
 
4
4
  require 'eventmachine'
5
5
  require 'log4r'
6
+ require 'activesupport'
6
7
  require 'nokogiri'
7
8
  require 'yaml'
8
9
  require 'fileutils'
@@ -10,8 +11,8 @@ require 'sax-machine'
10
11
  require 'digest/sha1'
11
12
  require 'base64'
12
13
  require 'resolv'
13
- require "templater"
14
-
14
+ require 'templater'
15
+ require 'cgi'
15
16
 
16
17
  require 'babylon/xmpp_connection'
17
18
  require 'babylon/xmpp_parser'
@@ -20,7 +21,7 @@ require 'babylon/client_connection'
20
21
  require 'babylon/router'
21
22
  require 'babylon/runner'
22
23
  require 'babylon/generator'
23
- require "babylon/xpath_helper"
24
+ require 'babylon/xpath_helper'
24
25
  require 'babylon/base/controller'
25
26
  require 'babylon/base/view'
26
27
  require 'babylon/base/stanza'
@@ -100,17 +101,7 @@ module Babylon
100
101
  ##
101
102
  # Decodes XML special characters.
102
103
  def self.decode_xml(str)
103
- entities = {
104
- 'lt' => '<',
105
- 'gt' => '>',
106
- '#38' => '&',
107
- 'amp' => '&',
108
- 'quot' => '"',
109
- '#13' => "\r",
110
- }
111
- entities.keys.inject(str) { |string, key|
112
- string.gsub(/&#{key};/, entities[key])
113
- }
104
+ CGI.unescapeHTML(str)
114
105
  end
115
106
 
116
107
  end
@@ -16,7 +16,7 @@ module Babylon
16
16
  def render(xml, options = {})
17
17
  # First, we need to identify the partial file path, based on the @view_template path.
18
18
  partial_path = (@view_template.split("/")[0..-2] + options[:partial].split("/")).join("/").gsub(".xml.builder", "") + ".xml.builder"
19
- raise ViewFileNotFound unless Babylon.views[partial_path]
19
+ raise ViewFileNotFound, "No such file #{partial_path}" unless Babylon.views[partial_path]
20
20
  eval(Babylon.views[partial_path], binding, partial_path, 1)
21
21
  end
22
22
 
@@ -34,7 +34,7 @@ module Babylon
34
34
  # "Loads" the view file, and uses the Nokogiri Builder to build the XML stanzas that will be sent.
35
35
  def evaluate
36
36
  return if @view_template == ""
37
- raise ViewFileNotFound unless Babylon.views[@view_template]
37
+ raise ViewFileNotFound, "No such file #{@view_template}" unless Babylon.views[@view_template]
38
38
  builder = Nokogiri::XML::Builder.new
39
39
  builder.stream do |xml|
40
40
  eval(Babylon.views[@view_template], binding, @view_template, 1)
@@ -157,9 +157,9 @@ module Babylon
157
157
  # receive_data is called when data is received. It is then passed to the parser.
158
158
  def receive_data(data)
159
159
  begin
160
- # Babylon.logger.debug {
161
- # "RECEIVED : #{data}"
162
- # }
160
+ Babylon.logger.debug {
161
+ "RECEIVED : #{data}"
162
+ }
163
163
  @parser.push(data)
164
164
  rescue
165
165
  Babylon.logger.error {
@@ -44,6 +44,7 @@ module Babylon
44
44
  @doc ||= Nokogiri::XML::Document.new
45
45
  @elem ||= @doc # If we have no current element, then, we take the doc
46
46
  @elem = @elem.add_child(Nokogiri::XML::Element.new(qname, @doc))
47
+
47
48
  add_namespaces_and_attributes_to_current_node(attributes)
48
49
 
49
50
  if @elem.name == "stream:stream"
@@ -85,21 +86,32 @@ module Babylon
85
86
  private
86
87
 
87
88
  ##
88
- # Adds namespaces and attributes. Nokogiri passes them as a array of [name, value, name, value]...
89
+ # Adds namespaces and attributes. Nokogiri passes them as a array of [[ns_name, ns_url], [ns_name, ns_url]..., key, value, key, value]...
89
90
  def add_namespaces_and_attributes_to_current_node(attrs)
90
- (attrs.size / 2).times do |i|
91
- name, value = attrs[2 * i], attrs[2 * i + 1]
92
- # TODO : FIX namespaces :they give a lot of problems with Nokogiri
93
- # if name == "xmlns"
94
- # @elem.add_namespace(nil, value)
95
- # elsif name =~ /\Axmlns:/
96
- # @elem.add_namespace(name.gsub("xmlns:", ""), value)
97
- # else
91
+ # Namespaces
92
+ attrs.select {|k| k.is_a? Array}.each do |pair|
93
+ # set_namespace(pair[0], pair[1])
94
+ set_normal_attribute(pair[0], pair[1])
95
+ end
96
+ # Attributes
97
+ attrs.select {|k| k.is_a? String}.in_groups_of(2) do |pair|
98
+ set_normal_attribute(pair[0], pair[1])
99
+ end
100
+ end
98
101
 
99
- #
100
- @elem.set_attribute name, Babylon.decode_xml(value)
101
- # end
102
+ def set_normal_attribute(key, value)
103
+ @elem.set_attribute key, Babylon.decode_xml(value)
104
+ end
105
+
106
+ def set_namespace(key, value)
107
+ if key.include? ':'
108
+ @elem.add_namespace(key.split(':').last, value)
109
+ else
110
+ @elem.add_namespace(nil, value)
102
111
  end
103
112
  end
113
+
114
+
115
+
104
116
  end
105
117
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: julien51-babylon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - julien Genestoux
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-16 00:00:00 -07:00
12
+ date: 2009-07-31 00:00:00 -07:00
13
13
  default_executable: babylon
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -123,6 +123,7 @@ files:
123
123
  - templates/babylon/tmp/pids/README
124
124
  has_rdoc: true
125
125
  homepage: http://github.com/julien51/babylon
126
+ licenses:
126
127
  post_install_message:
127
128
  rdoc_options:
128
129
  - --charset=UTF-8
@@ -153,8 +154,9 @@ requirements:
153
154
  - digest/sha1
154
155
  - base64
155
156
  - resolv
157
+ - activesupport
156
158
  rubyforge_project: babylon
157
- rubygems_version: 1.2.0
159
+ rubygems_version: 1.3.5
158
160
  signing_key:
159
161
  specification_version: 2
160
162
  summary: Babylon is a framework to create EventMachine based XMPP External Components in Ruby.