diff --git a/lib/diaspora_federation/discovery/h_card.rb b/lib/diaspora_federation/discovery/h_card.rb index 5a247af..941b7b2 100644 --- a/lib/diaspora_federation/discovery/h_card.rb +++ b/lib/diaspora_federation/discovery/h_card.rb @@ -161,7 +161,7 @@ module DiasporaFederation def self.from_html(html_string) doc = parse_html_and_validate(html_string) - data = { + new( guid: guid_from_doc(doc), nickname: content_from_doc(doc, :nickname), full_name: content_from_doc(doc, :fn), @@ -173,12 +173,10 @@ module DiasporaFederation # TODO: public key is new and can be missing public_key: (content_from_doc(doc, :key) unless element_from_doc(doc, :key).nil?), - # TODO: remove me! ################### + # TODO: remove first_name and last_name! first_name: content_from_doc(doc, :given_name), last_name: content_from_doc(doc, :family_name) - ####################################### - } - new(data) + ) end private diff --git a/lib/diaspora_federation/discovery/web_finger.rb b/lib/diaspora_federation/discovery/web_finger.rb index a500d43..d8759a8 100644 --- a/lib/diaspora_federation/discovery/web_finger.rb +++ b/lib/diaspora_federation/discovery/web_finger.rb @@ -175,10 +175,10 @@ module DiasporaFederation # @return [Hash] data XML data # @raise [InvalidData] if the given XML string is invalid or incomplete def self.parse_xml_and_validate(webfinger_xml) - data = XrdDocument.xml_data(webfinger_xml) - valid = data.key?(:subject) && data.key?(:aliases) && data.key?(:links) - raise InvalidData, "webfinger xml is incomplete" unless valid - data + XrdDocument.xml_data(webfinger_xml).tap do |data| + valid = data.key?(:subject) && data.key?(:aliases) && data.key?(:links) + raise InvalidData, "webfinger xml is incomplete" unless valid + end end private_class_method :parse_xml_and_validate diff --git a/lib/diaspora_federation/discovery/xrd_document.rb b/lib/diaspora_federation/discovery/xrd_document.rb index c03f077..7e1a22a 100644 --- a/lib/diaspora_federation/discovery/xrd_document.rb +++ b/lib/diaspora_federation/discovery/xrd_document.rb @@ -92,19 +92,18 @@ module DiasporaFederation # @raise [InvalidDocument] if the XRD is malformed def self.xml_data(xrd_doc) doc = parse_xrd_document(xrd_doc) - data = {} - exp_elem = doc.at_xpath("xrd:XRD/xrd:Expires", NS) - data[:expires] = DateTime.strptime(exp_elem.content, DATETIME_FORMAT) unless exp_elem.nil? + {}.tap do |data| + exp_elem = doc.at_xpath("xrd:XRD/xrd:Expires", NS) + data[:expires] = DateTime.strptime(exp_elem.content, DATETIME_FORMAT) unless exp_elem.nil? - subj_elem = doc.at_xpath("xrd:XRD/xrd:Subject", NS) - data[:subject] = subj_elem.content unless subj_elem.nil? + subj_elem = doc.at_xpath("xrd:XRD/xrd:Subject", NS) + data[:subject] = subj_elem.content unless subj_elem.nil? - parse_aliases_from_xml_doc(doc, data) - parse_properties_from_xml_doc(doc, data) - parse_links_from_xml_doc(doc, data) - - data + parse_aliases_from_xml_doc(doc, data) + parse_properties_from_xml_doc(doc, data) + parse_links_from_xml_doc(doc, data) + end end private diff --git a/lib/diaspora_federation/entity.rb b/lib/diaspora_federation/entity.rb index 814d447..ffe6be0 100644 --- a/lib/diaspora_federation/entity.rb +++ b/lib/diaspora_federation/entity.rb @@ -76,16 +76,12 @@ module DiasporaFederation # some of this is from Rails "Inflector.demodulize" and "Inflector.undersore" def self.entity_name - word = name.dup - i = word.rindex("::") - word = word[(i + 2)..-1] if i - - word.gsub!("::", "/") - word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2') - word.gsub!(/([a-z\d])([A-Z])/, '\1_\2') - word.tr!("-", "_") - word.downcase! - word + name.rpartition("::").last.tap do |word| + word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2') + word.gsub!(/([a-z\d])([A-Z])/, '\1_\2') + word.tr!("-", "_") + word.downcase! + end end private @@ -122,30 +118,28 @@ module DiasporaFederation # @return [Nokogiri::XML::Element] root node def entity_xml doc = Nokogiri::XML::DocumentFragment.new(Nokogiri::XML::Document.new) - root_element = Nokogiri::XML::Element.new(self.class.entity_name, doc) - - self.class.class_props.each do |prop_def| - name = prop_def[:name] - type = prop_def[:type] - if type == String - root_element << simple_node(doc, name) - else - # call #to_xml for each item and append to root - [*send(name)].compact.each do |item| - root_element << item.to_xml + Nokogiri::XML::Element.new(self.class.entity_name, doc).tap do |root_element| + self.class.class_props.each do |prop_def| + name = prop_def[:name] + type = prop_def[:type] + if type == String + root_element << simple_node(doc, name) + else + # call #to_xml for each item and append to root + [*send(name)].compact.each do |item| + root_element << item.to_xml + end end end end - - root_element end # create simple node, fill it with text and append to root def simple_node(doc, name) - node = Nokogiri::XML::Element.new(name.to_s, doc) - data = send(name).to_s - node.content = data unless data.empty? - node + Nokogiri::XML::Element.new(name.to_s, doc).tap do |node| + data = send(name).to_s + node.content = data unless data.empty? + end end end end