cleans up implied property and adds lots of specs for them
This commit is contained in:
parent
3f2a627816
commit
10ea0256fc
15 changed files with 339 additions and 62 deletions
|
@ -1,6 +1,8 @@
|
|||
module Microformats2
|
||||
module ImpliedProperty
|
||||
class Foundation
|
||||
attr_reader :selector
|
||||
|
||||
def initialize(element)
|
||||
@element = element
|
||||
end
|
||||
|
@ -14,7 +16,7 @@ module Microformats2
|
|||
end
|
||||
|
||||
def value
|
||||
@value ||= element_value
|
||||
@value ||= element_value || selector_value
|
||||
end
|
||||
|
||||
def to_hash
|
||||
|
@ -29,15 +31,27 @@ module Microformats2
|
|||
|
||||
def element_value
|
||||
ev = nil
|
||||
attr_map.each_pair do |k, v|
|
||||
selected_elements = @element.css(k)
|
||||
if selected_elements.first
|
||||
ev ||= selected_elements.first.attribute(v).to_s
|
||||
name_map.each_pair do |elname, attr|
|
||||
if elname == @element.name && @element.attribute(attr)
|
||||
ev ||= @element.attribute(attr).to_s
|
||||
@selector ||= elname
|
||||
end
|
||||
end
|
||||
ev
|
||||
end
|
||||
|
||||
def selector_value
|
||||
sv = nil
|
||||
selector_map.each_pair do |sel, attr|
|
||||
selected_elements = @element.css(sel)
|
||||
if selected_elements.first
|
||||
sv ||= selected_elements.first.attribute(attr).to_s
|
||||
@selector ||= sel
|
||||
end
|
||||
end
|
||||
sv
|
||||
end
|
||||
|
||||
def attribute
|
||||
attr_map[@element.name]
|
||||
end
|
||||
|
|
|
@ -7,23 +7,27 @@ module Microformats2
|
|||
end
|
||||
|
||||
def value
|
||||
@value ||= element_value || text_value
|
||||
@value ||= element_value || selector_value || text_value
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def attr_map
|
||||
{ "img[alt]" => "alt",
|
||||
"abbr[title]" => "title",
|
||||
">img[alt]:only-of-type" => "alt",
|
||||
def name_map
|
||||
{ "img" => "alt",
|
||||
"abbr" => "title" }
|
||||
end
|
||||
|
||||
def selector_map
|
||||
{ ">img[alt]:only-of-type" => "alt",
|
||||
">abbr[title]:only-of-type" => "title",
|
||||
">:only-of-type>img[alt]:only-of-type" => "alt",
|
||||
">:only-of-type>abbr[title]:only-of-type" => "title" }
|
||||
">:only-of-type>abbr[title]:only-of-type" => "title" } # only-of-type bit not working
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def text_value
|
||||
@selector = "inner_text"
|
||||
@element.inner_text.gsub(/\n+/, " ").gsub(/\s+/, " ").strip
|
||||
end
|
||||
end
|
||||
|
|
|
@ -8,10 +8,13 @@ module Microformats2
|
|||
|
||||
protected
|
||||
|
||||
def attr_map
|
||||
{ "img[src]" => "src",
|
||||
"object[data]" => "data",
|
||||
">img[src]:only-of-type" => "src",
|
||||
def name_map
|
||||
{ "img" => "src",
|
||||
"object" => "data" }
|
||||
end
|
||||
|
||||
def selector_map
|
||||
{ ">img[src]:only-of-type" => "src",
|
||||
">object[data]:only-of-type" => "data",
|
||||
">:only-child>img[src]:only-of-type" => "src",
|
||||
">:only-child>object[data]:only-of-type" => "data" }
|
||||
|
|
|
@ -8,9 +8,12 @@ module Microformats2
|
|||
|
||||
protected
|
||||
|
||||
def attr_map
|
||||
{ "a[href]" => "href",
|
||||
">a[href]:only-of-type" => "href" }
|
||||
def name_map
|
||||
{ "a" => "href" }
|
||||
end
|
||||
|
||||
def selector_map
|
||||
{ ">a[href]:only-of-type" => "href" }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue