xml-magic 0.1.0 → 0.1.1

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/README CHANGED
@@ -19,4 +19,12 @@ puts project_info[:title]
19
19
  puts project_info.description
20
20
  for contact in project_info.contact
21
21
  puts "#{contact} the #{contact[:type]}"
22
- end
22
+ end
23
+
24
+ == example output
25
+
26
+ XML Magic
27
+ Test description.
28
+ Anthony the Project Manager
29
+ Ben the Worker Bee
30
+ Jason the Designer Bee
@@ -1,8 +1,13 @@
1
1
  module CommonThread
2
2
  module XML
3
+ # Credit to Jim Weirich at http://onestepback.org/index.cgi/Tech/Ruby/BlankSlate.rdoc
4
+ class BlankSlate
5
+ instance_methods.each { |m| undef_method m unless m =~ /^__/ }
6
+ end
7
+
3
8
  # Class that makes accessing xml objects more like any other ruby object
4
9
  # thanks to the magic of method missing
5
- class XmlMagic
10
+ class XmlMagic < BlankSlate
6
11
  require 'rexml/document'
7
12
 
8
13
  def initialize(xml, namespace="")
@@ -15,18 +20,10 @@ module CommonThread
15
20
  @namespace = namespace
16
21
  end
17
22
 
18
- def class(selection=nil)
19
- evaluate("class", selection)
20
- end
21
-
22
23
  def each
23
24
  @element.each {|e| yield CommonThread::XML::XmlMagic.new(e, @namespace)}
24
25
  end
25
26
 
26
- def id(selection=nil)
27
- evaluate("id", selection)
28
- end
29
-
30
27
  def method_missing(method, selection=nil)
31
28
  evaluate(method.to_s, selection)
32
29
  end
@@ -47,10 +44,6 @@ module CommonThread
47
44
  end
48
45
  end
49
46
 
50
- def type(selection=nil)
51
- evaluate("type", selection)
52
- end
53
-
54
47
  def [](index, count = nil)
55
48
  if index.is_a?(Fixnum) or index.is_a?(Bignum) or index.is_a?(Integer) or index.is_a?(Range)
56
49
  if @element.is_a?(Array)
@@ -6,22 +6,31 @@ class TestXmlMagic < Test::Unit::TestCase
6
6
  end
7
7
 
8
8
  def test_xml_magic
9
- x = CommonThread::XML::XmlMagic.new('<project title="Sewer work"><media:content>This is the content.</media:content><type>New</type><contact name="Anthony">Anthony</contact><contact name="Ben">Ben</contact><contact name="Jason">Jason</contact><description>Test description.</description></project>')
10
- assert_equal("Sewer work", x[:title])
11
- assert_equal("New", x.type.to_s)
12
- assert_equal("Anthony", x.contact[0][:name])
13
- x.contact.each do |contact|
14
- assert(contact[:name] != nil, "Attribute name should not be nil")
15
- assert(contact[:phone] == nil, "Attribute phone should be nil")
16
- end
17
- assert_equal(3, x.contact(:count))
18
- assert_equal("Test description.", x.description.to_s)
19
- assert_equal("AnthonyBenJason", x.contact.to_s)
20
- assert_equal(nil, x.note)
21
- assert_equal(nil, x.content)
9
+ x = CommonThread::XML::XmlMagic.new('<project title="Xml Magic" class="CommonThread::XML::XmlMagic"><media:content>This is the content.</media:content><type>New</type><contact name="Anthony">Anthony</contact><contact name="Ben">Ben</contact><contact name="Jason">Jason</contact><description>Test description.</description></project>')
10
+
11
+ # Elements without namespaces
12
+ assert_equal("Test description.", x.description.to_s, "Element text not retrieved for to_s.")
13
+ assert_equal("AnthonyBenJason", x.contact.to_s, "Multiple element text not retrieved for to_s.")
14
+ assert_equal(nil, x.note, "Element selector should return nil when there are no matches.")
15
+ assert_equal("New", x.type.to_s, "Element names clash with inherited Object methods and properties")
16
+
17
+ # Namespaced elements
18
+ assert_equal(nil, x.content, "Namespaced elements should return nil when namespace is not provided.")
22
19
  x.namespace = "media"
23
- assert_equal("This is the content.", x.content.to_s)
20
+ assert_equal("This is the content.", x.content.to_s, "Namespaced element selection is broken.")
24
21
  x.namespace = ""
25
- assert_equal(nil, x.content)
22
+ assert_equal(nil, x.content, "Namespace was not removed from selection.")
23
+
24
+ # Element attributes
25
+ assert_equal("Xml Magic", x[:title], "Invalid attribute value.")
26
+ assert_equal("CommonThread::XML::XmlMagic", x[:class], "Attribute names clash with inherited Object methods and properties")
27
+
28
+ # Selector matches multiple elements
29
+ assert_equal("Anthony", x.contact[0][:name], "Multiple elements not quacking like an Array.")
30
+ x.contact.each do |contact|
31
+ assert(contact[:name] != nil, "Attribute name should not be nil.")
32
+ assert(contact[:phone] == nil, "Attribute phone should be nil.")
33
+ end
34
+ assert_equal(3, x.contact(:count), "Multiple element count is wrong.")
26
35
  end
27
36
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xml-magic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Crumley
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2008-03-05 00:00:00 -06:00
13
+ date: 2008-03-15 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies: []
16
16