julien51-babylon 0.1.7 → 0.1.8

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