Normalize u-* property values
This commit is contained in:
parent
c7a9820168
commit
e65c1a2407
10 changed files with 42 additions and 18 deletions
|
@ -25,7 +25,7 @@ module Microformats2
|
|||
end
|
||||
|
||||
def all
|
||||
@all ||= FormatParser.parse(@element).each do |format|
|
||||
@all ||= FormatParser.parse(@element, @base).each do |format|
|
||||
save_format_name(format.method_name)
|
||||
define_method(format.method_name)
|
||||
set_value(format.method_name, format)
|
||||
|
|
|
@ -4,8 +4,9 @@ module Microformats2
|
|||
|
||||
attr_reader :method_name
|
||||
|
||||
def initialize(element)
|
||||
def initialize(element, base)
|
||||
@element = element
|
||||
@base = base
|
||||
@method_name = to_method_name(format_types.first)
|
||||
@property_names = []
|
||||
end
|
||||
|
@ -27,13 +28,13 @@ module Microformats2
|
|||
end
|
||||
|
||||
def parse_properties
|
||||
PropertyParser.parse(@element.children).each do |property|
|
||||
PropertyParser.parse(@element.children, @base).each do |property|
|
||||
assign_property(property)
|
||||
end
|
||||
end
|
||||
|
||||
def add_property(property_class, value)
|
||||
property = Property.new(nil, property_class, value)
|
||||
property = Property.new(nil, property_class, value, @base)
|
||||
assign_property(property)
|
||||
end
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
module Microformats2
|
||||
class FormatParser
|
||||
class << self
|
||||
def parse(element)
|
||||
def parse(element, base=nil)
|
||||
@@base = base
|
||||
parse_node(element).flatten.compact
|
||||
end
|
||||
|
||||
|
@ -31,7 +32,7 @@ module Microformats2
|
|||
const_name = constant_name(html_class)
|
||||
klass = find_or_create_ruby_class(const_name)
|
||||
|
||||
klass.new(element).parse
|
||||
klass.new(element, @@base).parse
|
||||
end
|
||||
|
||||
def format_classes(element)
|
||||
|
|
|
@ -8,13 +8,13 @@ module Microformats2
|
|||
"e" => Embedded }
|
||||
|
||||
class << self
|
||||
def new(element, property_class, value=nil)
|
||||
def new(element, property_class, value=nil, base=nil)
|
||||
# p-class-name -> p
|
||||
prefix = property_class.split("-").first
|
||||
# find ruby class for kind of property
|
||||
klass = PREFIX_CLASS_MAP[prefix]
|
||||
raise InvalidPropertyPrefix unless klass
|
||||
klass.new(element, property_class, value)
|
||||
klass.new(element, property_class, value, base)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,10 +3,11 @@ module Microformats2
|
|||
class Foundation
|
||||
attr_reader :method_name
|
||||
|
||||
def initialize(element, html_class, string_value=nil)
|
||||
def initialize(element, html_class, string_value=nil, base=nil)
|
||||
@element = element
|
||||
@method_name = to_method_name(html_class)
|
||||
@string_value = string_value
|
||||
@base = base
|
||||
end
|
||||
|
||||
def parse
|
||||
|
|
|
@ -2,6 +2,22 @@ module Microformats2
|
|||
module Property
|
||||
class Url < Foundation
|
||||
|
||||
def to_s
|
||||
@to_s = absolutize(super.to_s)
|
||||
end
|
||||
|
||||
# TODO: make dry, repeated in Collection
|
||||
def absolutize(href)
|
||||
uri = URI.parse(href)
|
||||
|
||||
if @base && !uri.absolute?
|
||||
uri = URI.join(@base, href)
|
||||
end
|
||||
|
||||
uri.normalize!
|
||||
uri.to_s
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def attr_map
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
module Microformats2
|
||||
class PropertyParser
|
||||
class << self
|
||||
def parse(element)
|
||||
def parse(element, base)
|
||||
@@base = base
|
||||
parse_node(element).flatten.compact
|
||||
end
|
||||
|
||||
|
@ -26,8 +27,8 @@ module Microformats2
|
|||
|
||||
def parse_property(element)
|
||||
property_classes(element).map do |property_class|
|
||||
property = Property.new(element, property_class).parse
|
||||
properties = format_classes(element).empty? ? PropertyParser.parse(element.children) : []
|
||||
property = Property.new(element, property_class, nil, @@base).parse
|
||||
properties = format_classes(element).empty? ? PropertyParser.parse(element.children, @@base) : []
|
||||
|
||||
[property].concat properties
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue