xommelier 0.1.15 → 0.1.16

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,6 +13,7 @@ module Xommelier
13
13
  autoload :Link, 'xommelier/atom/link'
14
14
  autoload :Person, 'xommelier/atom/person'
15
15
  autoload :Category, 'xommelier/atom/category'
16
+ autoload :Content, 'xommelier/atom/content'
16
17
  autoload :Generator, 'xommelier/atom/generator'
17
18
  autoload :Source, 'xommelier/atom/source'
18
19
  autoload :Feed, 'xommelier/atom/feed'
@@ -0,0 +1,13 @@
1
+ require 'xommelier/atom'
2
+
3
+ module Xommelier
4
+ module Atom
5
+ # The Atom content construct is defined in section 4.1.3 of the format spec.
6
+ class Content < Xml::Element
7
+ attribute :type
8
+ attribute :src, type: Uri
9
+
10
+ text
11
+ end
12
+ end
13
+ end
@@ -12,7 +12,7 @@ module Xommelier
12
12
  element :updated, type: Time
13
13
 
14
14
  may do
15
- element :content
15
+ element :content, type: Content
16
16
  element :published, type: Time
17
17
  element :rights
18
18
  element :source
@@ -1,3 +1,3 @@
1
1
  module Xommelier
2
- VERSION = '0.1.15'
2
+ VERSION = '0.1.16'
3
3
  end
@@ -51,14 +51,15 @@ module Xommelier
51
51
  instance_variable_set :@_xmlns, nil
52
52
  end
53
53
 
54
+ # Define XML default namespace
54
55
  extend ClassMethods
55
56
  xmlns DEFAULT_NS, as: :xml
56
57
 
57
- module CommonAttributes
58
- def self.included(base)
59
- base.attribute :lang, ns: Xml.xmlns
60
- base.attribute :base, type: Uri, ns: Xml.xmlns
61
- end
58
+ # Inject common XML attributes to every XML element
59
+ require 'xommelier/xml/element'
60
+ class Element
61
+ attribute :lang, ns: Xml.xmlns, as: 'xml:lang'
62
+ attribute :base, type: Uri, ns: Xml.xmlns, as: 'xml:base'
62
63
  end
63
64
  end
64
65
  end
@@ -48,8 +48,8 @@ module Xommelier
48
48
  @_xml_node = options.delete(:node) { xml.at_xpath(element_xpath(xml.document, element_name)) }
49
49
  validate if options[:validate]
50
50
 
51
- if text? && @_xml_node.text?
52
- self.text = @_xml_node.text
51
+ if text? && @_xml_node.inner_html.present?
52
+ self.text = @_xml_node.inner_html
53
53
  end
54
54
 
55
55
  self.class.attributes.each do |name, options|
@@ -132,6 +132,38 @@ module Xommelier
132
132
  end
133
133
  end
134
134
 
135
+ def <=>(other)
136
+ if text? && other.is_a?(String)
137
+ text.to_s <=> other
138
+ else
139
+ super
140
+ end
141
+ end
142
+
143
+ def ==(other)
144
+ if text? && other.is_a?(String)
145
+ text.to_s == other
146
+ else
147
+ super
148
+ end
149
+ end
150
+
151
+ def =~(other)
152
+ if text? && other.is_a?(Regexp)
153
+ text.to_s =~ other
154
+ else
155
+ super
156
+ end
157
+ end
158
+
159
+ def to_s
160
+ if text?
161
+ text.to_s
162
+ else
163
+ super
164
+ end
165
+ end
166
+
135
167
  protected
136
168
 
137
169
  delegate :ns_element, to: 'self.class'
@@ -68,7 +68,6 @@ module Xommelier
68
68
  def inherited(child)
69
69
  child.elements = elements.dup
70
70
  child.attributes = attributes.dup
71
- child.send(:include, Xml::CommonAttributes)
72
71
  end
73
72
 
74
73
  # Defines containing element
@@ -171,6 +170,7 @@ module Xommelier
171
170
  read_text
172
171
  end
173
172
  alias_method :text=, :text
173
+ alias_attribute :content, :text
174
174
  end
175
175
  end
176
176
 
@@ -37,7 +37,7 @@ describe 'Atom feed' do
37
37
  its(:rights) { should == '© Mark Pilgrim, 2003' }
38
38
  describe 'Generator' do
39
39
  subject { feed.generator }
40
- pending 'Make Xommelier::Xml::Element.to_s respond with #text.to_s' do
40
+ context '#to_s' do
41
41
  it { should == 'Example Toolkit' }
42
42
  its(:text) { should == 'Example Toolkit' }
43
43
  end
@@ -89,12 +89,15 @@ describe 'Atom feed' do
89
89
  it { entry.contributors[0].name.should == 'Sam Ruby' }
90
90
  it { entry.contributors[1].name.should == 'Joe Gregorio' }
91
91
  its(:summary) { should == 'Some text.' }
92
- its(:content) { should ~ /#{Regexp.escape('[Update: The Atom draft is fiished.]')}/ }
93
- pending 'should parse text-based elements\' attributes' do
92
+ context 'Content' do
94
93
  subject { entry.content }
94
+ it { should =~ /#{Regexp.escape('[Update: The Atom draft is finished.]')}/ }
95
+ its(:text) do
96
+ should == "\n <div xmlns=\"http://www.w3.org/1999/xhtml\">\n <p><i>[Update: The Atom draft is finished.]</i></p>\n </div>\n "
97
+ end
95
98
  its(:type) { should == 'xhtml' }
96
99
  its(:lang) { should == 'en' }
97
- its(:base) { should == 'http://diveintomark.org/' }
100
+ its(:base) { should == URI.parse('http://diveintomark.org/') }
98
101
  its(:content) { should ~ Regexp.new(Regexp.escape('<p><i>[Update: The Atom draft is fiished.]</i></p>')) }
99
102
  end
100
103
  its(:total) { should == 1 }
@@ -10,4 +10,8 @@ ATOM_XMLNS = 'http://www.w3.org/2005/Atom'
10
10
 
11
11
  RSpec.configure do |config|
12
12
  config.mock_with :rspec
13
+ config.order = 'random'
14
+ config.treat_symbols_as_metadata_keys_with_true_values = true
15
+ config.filter_run focus: true
16
+ config.run_all_when_everything_filtered = true
13
17
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xommelier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.15
4
+ version: 0.1.16
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-29 00:00:00.000000000 Z
12
+ date: 2013-01-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -81,6 +81,7 @@ files:
81
81
  - lib/xommelier.rb
82
82
  - lib/xommelier/atom.rb
83
83
  - lib/xommelier/atom/category.rb
84
+ - lib/xommelier/atom/content.rb
84
85
  - lib/xommelier/atom/entry.rb
85
86
  - lib/xommelier/atom/feed.rb
86
87
  - lib/xommelier/atom/full.rb