peachy 0.3.5 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,14 @@
1
+ == 0.3.5
2
+
3
+ * Improved compatibility for Ruby 1.9
4
+ * Method names are treated as symbols rather than strings
5
+
6
+ == 0.3.4
7
+
8
+ * Minor refactorings.
9
+
1
10
  == 0.3.3
11
+
2
12
  * Minor improvements
3
13
  * Added some more documentation to methods.
4
14
  * Removed whiny-ness from specs.
@@ -6,12 +16,14 @@
6
16
  * Added some guard clauses on specs that are impacted when Nokogiri is not installed.
7
17
 
8
18
  == 0.3.2
19
+
9
20
  * Minor improvements
10
21
  * Better support for Ruby 1.8.6
11
22
  * Better implementation of MorphIntoArray, which introduced the Mimic module.
12
23
  * Standardised to_s implementations to return the encapsulated XML from Proxies.
13
24
 
14
25
  == 0.3.1
26
+
15
27
  * Minor improvements
16
28
  * Should now work on 1.8.6, so removed minimum rqeuirement of Ruby version 1.8.7
17
29
  * Tweaked some implementation details.
@@ -58,6 +58,11 @@ available; otherwise REXML will be loaded and used at runtime.
58
58
  It is possible to extend out the parser support, for example Hpricot or LibXML,
59
59
  so let me know if there are any other XML parsers that you'd like Peachy to support.
60
60
 
61
+ A quick note about Nokogiri and XML namespaces: when Nokogiri creates a new XML node,
62
+ it currently strips all namespaces from the document. This simplification of the
63
+ underlying XML is necessary so that the interface that Peachy presents to the user is
64
+ still straightforward even when namespaces are set within the XML.
65
+
61
66
  === Elements and Attributes
62
67
  Currently, elements and attributes are accessed in almost exactly the same way;
63
68
  call a method on your current node matching the attribute or element name that
@@ -75,9 +80,27 @@ E.g.
75
80
  Peachy is just for slurping XML, so this convention should make it easy to know
76
81
  how to access the property that you're after, be they elements or attributes.
77
82
 
83
+ === Collections
84
+ Peachy allows collections to be traversed as arrays in the following way:
85
+ proxy = Peachy::Proxy.new('<peachy><node>One</node><node>Two</node><node>Three</node></peachy>')
86
+ puts "First node: " + proxy.peachy.node[0].value
87
+ => First node: One
88
+ puts "Second node: " + proxy.peachy.node[1].value
89
+ => Second node: Two
90
+
91
+ Note that a child of a Peachy Proxy can be either an array, or another proxy, and never
92
+ both. The intent is that a consumer of some XML would expect something to be a single child
93
+ all of the time, or a collection all of the time. It doesn't make sense to treat a particular
94
+ node as a singleton in some circumstances and a collection containing one element in others.
95
+
78
96
  === No method name match
79
97
  By default, Peachy will raise a NoMatchingXmlPart error if a method call does not
80
98
  match a child node of the current location. It's possible to globally switch of
81
99
  this behaviour and return nil when no child node is found. This might be
82
100
  desirable if you cannot be certain of the XML that you are trying to interpret
83
- until runtime.
101
+ until runtime.
102
+
103
+ Toggle between silent and noisy messages in Peachy using:
104
+
105
+ Peachy.be_quiet
106
+ Peachy.be_loud
@@ -51,11 +51,12 @@ module Peachy
51
51
  @whine = true
52
52
  end
53
53
 
54
- # Indactes whether Peachy will #whine when it runs or not.
54
+ # Indicates whether Peachy will #whine when it runs or not.
55
55
  def self.whiny?
56
56
  return @whine
57
57
  end
58
58
 
59
+ # Creates a new proxy from the XML string passed to it.
59
60
  def self.proxy xml
60
61
  create_factory unless defined? @factory
61
62
  return Proxy.new(@factory.make_from(xml))
@@ -67,4 +68,4 @@ module Peachy
67
68
  @factory.load_parser
68
69
  return @factory
69
70
  end
70
- end
71
+ end
@@ -12,10 +12,10 @@ module Peachy
12
12
  # The valid varations are the underlying method name, plus all variations
13
13
  # provided by methods defined in the StringStyler module.
14
14
  def variations
15
- variation_methods.inject([@method_name]) {|array, method| array << send(method)}.uniq
15
+ variation_methods.inject([]) {|array, method| array << send(method)}.uniq
16
16
  end
17
17
 
18
- def as_xpath
18
+ def as_xpath
19
19
  variations.map {|variation| "./#{variation}" } * '|'
20
20
  end
21
21
 
@@ -32,10 +32,10 @@ module Peachy
32
32
  end
33
33
 
34
34
  # Checks whether the method name matches the Ruby convention of lowercase with
35
- # underscores. This method does not allow question marks, excalmation marks
36
- # or numbers, however.
35
+ # underscores. The only exception is using NS to indicate the end of an XML namespace.
36
+ # Note that this method does not allow question marks, exclamation marks or numbers.
37
37
  def matches_convention?
38
- @method_name =~ /^[a-z]+(?:_[a-z]+){0,}$/
38
+ @method_name =~ /^[a-z]+(?:_[a-z]+){0,}(?:NS[a-z]+(?:_[a-z]+){0,})?$/
39
39
  end
40
40
  end
41
41
  end
@@ -11,7 +11,7 @@ module Peachy
11
11
  # returning nil if no element or attribute matching the method name is found
12
12
  # in the children of the current location in the DOM.
13
13
  def find_matches method_name
14
- matches = xpath(method_name.as_xpath)
14
+ matches = xpath method_name.as_xpath
15
15
  matches.any? ? matches : nil
16
16
  end
17
17
 
@@ -47,4 +47,4 @@ module Peachy
47
47
  end
48
48
  end
49
49
  end
50
- end
50
+ end
@@ -23,7 +23,8 @@ module Peachy
23
23
  end
24
24
 
25
25
  Parsers =
26
- [{:gem => 'nokogiri', :implementation => lambda {|xml| NokogiriWrapper.new(Nokogiri::XML(xml)) }}]
26
+ [{:gem => 'nokogiri',
27
+ :implementation => lambda {|xml| NokogiriWrapper.new(Nokogiri::XML(xml).remove_namespaces!)}}]
27
28
 
28
29
  DefaultParser =
29
30
  {
@@ -32,4 +33,4 @@ module Peachy
32
33
  }
33
34
  end
34
35
  end
35
- end
36
+ end
@@ -24,5 +24,9 @@ module Peachy
24
24
  def as_hyphen_separated
25
25
  @method_name.gsub(/_/, '-')
26
26
  end
27
+
28
+ def as_underscore
29
+ @method_name
30
+ end
27
31
  end
28
32
  end
@@ -1,3 +1,3 @@
1
1
  module Peachy
2
- VERSION = '0.3.5'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "how to use Peachy::MethodName" do
3
+ describe "Peachy::MethodName" do
4
4
  before(:each) do
5
5
  @method_name = Peachy::MethodName.new 'method_name'
6
6
  end
@@ -57,4 +57,9 @@ describe "how to use Peachy::MethodName" do
57
57
  method_name = Peachy::MethodName.new('method_Name')
58
58
  lambda { method_name.check_for_convention }.should raise_error(MethodNotInRubyConvention)
59
59
  end
60
- end
60
+ end
61
+
62
+ class MultipleNamespacesNotAllowed < Exception
63
+ def initialize method_name
64
+ end
65
+ end
File without changes
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'all_parser_wrappers_group'
2
3
 
3
4
  # this is to ignore this spec if the nokogiri gem is not available
4
5
  if Gem.available? 'nokogiri'
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
8
- - 5
9
- version: 0.3.5
7
+ - 4
8
+ - 0
9
+ version: 0.4.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - NJ Pearman
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-13 00:00:00 +00:00
17
+ date: 2011-01-16 00:00:00 +00:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -57,19 +57,18 @@ files:
57
57
  - lib/already_an_only_child.rb
58
58
  - spec/nodes_with_children_spec.rb
59
59
  - spec/nokigiri_wrapper_spec.rb
60
+ - spec/all_parser_wrappers_group.rb
60
61
  - spec/method_name_spec.rb
61
- - spec/mimc_spec.rb
62
62
  - spec/pascal_case_names_spec.rb
63
63
  - spec/rexml_wrapper_spec.rb
64
+ - spec/mimic_spec.rb
64
65
  - spec/simple_element_referenced_as_collections_spec.rb
65
66
  - spec/make_peachy_quiet_spec.rb
66
67
  - spec/inferring_a_method_from_an_attribute_spec.rb
67
68
  - spec/camel_case_names_spec.rb
68
69
  - spec/collections_with_children_as_arrays_spec.rb
69
70
  - spec/nokogiri_is_the_available_xml_parser_spec.rb
70
- - spec/simple_content_wrapper_for_Peachy_spec.rb
71
71
  - spec/simple_xml_collections_as_arrays_spec.rb
72
- - spec/all_parser_wrappers_spec.rb
73
72
  - spec/nested_elements_spec.rb
74
73
  - spec/inferring_a_method_from_element_name_spec.rb
75
74
  - spec/rexml_attribute_wrapper_spec.rb
@@ -82,6 +81,7 @@ files:
82
81
  - spec/spec_helper.rb
83
82
  - spec/childless_elements_referenced_as_collections_spec.rb
84
83
  - spec/hyphen_separated_names_spec.rb
84
+ - spec/simple_content_wrapper_for_peachy_spec.rb
85
85
  - README.rdoc
86
86
  - History.txt
87
87
  has_rdoc: true