lib/solrizer/xml/terminology_based_solrizer.rb in solrizer-1.0.0 vs lib/solrizer/xml/terminology_based_solrizer.rb in solrizer-1.0.1

- old
+ new

@@ -6,13 +6,13 @@ end # Module Methods # Build a solr document from +doc+ based on its terminology - # @doc OM::XML::Document - # @solr_doc (optional) Solr::Document to populate - def self.solrize(doc, solr_doc=Solr::Document.new, field_mapper = nil) + # @param [OM::XML::Document] doc + # @param [Hash] (optional) solr_doc (values hash) to populate + def self.solrize(doc, solr_doc=Hash.new, field_mapper = nil) unless doc.class.terminology.nil? doc.class.terminology.terms.each_pair do |term_name,term| doc.solrize_term(term, solr_doc, field_mapper) # self.solrize_by_term(accessor_name, accessor_info, :solr_doc=>solr_doc) end @@ -21,13 +21,14 @@ return solr_doc end # Populate a solr document with fields based on nodes in +xml+ corresponding to the # term identified by +term_pointer+ within +terminology+ - # @doc OM::XML::Document or Nokogiri::XML::Node - # @term_pointer Array pointing to the desired term in +terminology+ - def self.solrize_term(doc, term, solr_doc = Solr::Document.new, field_mapper = nil, opts={}) + # @param [OM::XML::Document] doc xml document to extract values from + # @param [OM::XML::Term] term corresponding to desired xml values + # @param [Hash] (optional) solr_doc (values hash) to populate + def self.solrize_term(doc, term, solr_doc = Hash.new, field_mapper = nil, opts={}) terminology = doc.class.terminology parents = opts.fetch(:parents, []) term_pointer = parents+[term.name] @@ -50,14 +51,15 @@ solr_doc end # Populate a solr document with solr fields corresponding to the given xml node # Field names are generated using settings from the term in the +doc+'s terminology corresponding to +term_pointer+ - # @doc OM::XML::Document or Nokogiri::XML::Node - # @term_pointer Array pointing to the desired term in +terminology+ - # @solr_doc (optional) Solr::Document to populate - def self.solrize_node(node, doc, term_pointer, term, solr_doc = Solr::Document.new, field_mapper = nil, opts = {}) + # @param [Nokogiri::XML::Node] node to solrize + # @param [OM::XML::Document] doc document the node came from + # @param [Array] term_pointer Array pointing to the term that should be used for solrization settings + # @param [Hash] (optional) solr_doc (values hash) to populate + def self.solrize_node(node, doc, term_pointer, term, solr_doc = Hash.new, field_mapper = nil, opts = {}) field_mapper ||= self.default_field_mapper terminology = doc.class.terminology # term = terminology.retrieve_term(*term_pointer) if term.path.kind_of?(Hash) && term.path.has_key?(:attribute) @@ -68,43 +70,37 @@ generic_field_name_base = OM::XML::Terminology.term_generic_name(*term_pointer) field_mapper.solr_names_and_values(generic_field_name_base, node_value, term.data_type, term.index_as).each do |field_name, field_value| unless field_value.join("").strip.blank? - solr_doc << Solr::Field.new(field_name => self.format_node_value(field_value)) + ::Solrizer::Extractor.insert_solr_field_value(solr_doc, field_name, field_value) end end if term_pointer.length > 1 hierarchical_field_name_base = OM::XML::Terminology.term_hierarchical_name(*term_pointer) field_mapper.solr_names_and_values(hierarchical_field_name_base, node_value, term.data_type, term.index_as).each do |field_name, field_value| unless field_value.join("").strip.blank? - solr_doc << Solr::Field.new(field_name => self.format_node_value(field_value)) + ::Solrizer::Extractor.insert_solr_field_value(solr_doc, field_name, field_value) end end end solr_doc end - - # Strips the majority of whitespace from the values array and then joins them with a single blank delimitter - # @values Array of strings representing the values returned - def self.format_node_value values - values.map{|val| val.gsub(/\s+/,' ').strip}.join(" ") - end # Instance Methods attr_accessor :field_mapper - def to_solr(solr_doc = Solr::Document.new, field_mapper = self.field_mapper) # :nodoc: + def to_solr(solr_doc = Hash.new, field_mapper = self.field_mapper) # :nodoc: Solrizer::XML::TerminologyBasedSolrizer.solrize(self, solr_doc, field_mapper) end - def solrize_term(term, solr_doc = Solr::Document.new, field_mapper = self.field_mapper, opts={}) + def solrize_term(term, solr_doc = Hash.new, field_mapper = self.field_mapper, opts={}) Solrizer::XML::TerminologyBasedSolrizer.solrize_term(self, term, solr_doc, field_mapper, opts) end - def solrize_node(node, term_pointer, term, solr_doc = Solr::Document.new, field_mapper = self.field_mapper, opts={}) + def solrize_node(node, term_pointer, term, solr_doc = Hash.new, field_mapper = self.field_mapper, opts={}) Solrizer::XML::TerminologyBasedSolrizer.solrize_node(node, self, term_pointer, solr_doc, field_mapper, opts) end end