Class: XTF::Result::Element::DocHit

Inherits:
Object
  • Object
show all
Defined in:
lib/xtf/result/element/doc_hit.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(xml, query_params = "") {|_self| ... } ⇒ DocHit

Returns a new instance of DocHit.

Yields:

  • (_self)

Yield Parameters:



27
28
29
30
31
32
# File 'lib/xtf/result/element/doc_hit.rb', line 27

def initialize(xml, query_params="")
  start = Time.now
  parse_xml(xml, query_params)
  yield self if block_given?
#     RAILS_DEFAULT_LOGGER.debug("~~~~~ #{self.class.name} initialized in #{Time.now - start} seconds.")
end

Instance Attribute Details

#docObject (readonly)

require ‘rubygems’

require 'libxml_helper'
require 'erb'
include ERB::Util
include ExportableDocument


9
10
11
# File 'lib/xtf/result/element/doc_hit.rb', line 9

def doc
  @doc
end

#pathObject (readonly)

require ‘rubygems’

require 'libxml_helper'
require 'erb'
include ERB::Util
include ExportableDocument


9
10
11
# File 'lib/xtf/result/element/doc_hit.rb', line 9

def path
  @path
end

#queryObject (readonly)

require ‘rubygems’

require 'libxml_helper'
require 'erb'
include ERB::Util
include ExportableDocument


9
10
11
# File 'lib/xtf/result/element/doc_hit.rb', line 9

def query
  @query
end

#rankObject (readonly)

require ‘rubygems’

require 'libxml_helper'
require 'erb'
include ERB::Util
include ExportableDocument


9
10
11
# File 'lib/xtf/result/element/doc_hit.rb', line 9

def rank
  @rank
end

#raw_pathObject (readonly)

require ‘rubygems’

require 'libxml_helper'
require 'erb'
include ERB::Util
include ExportableDocument


9
10
11
# File 'lib/xtf/result/element/doc_hit.rb', line 9

def raw_path
  @raw_path
end

#raw_snippetsObject (readonly)

require ‘rubygems’

require 'libxml_helper'
require 'erb'
include ERB::Util
include ExportableDocument


9
10
11
# File 'lib/xtf/result/element/doc_hit.rb', line 9

def raw_snippets
  @raw_snippets
end

#scoreObject (readonly)

require ‘rubygems’

require 'libxml_helper'
require 'erb'
include ERB::Util
include ExportableDocument


9
10
11
# File 'lib/xtf/result/element/doc_hit.rb', line 9

def score
  @score
end

#snippetsObject (readonly)

require ‘rubygems’

require 'libxml_helper'
require 'erb'
include ERB::Util
include ExportableDocument


9
10
11
# File 'lib/xtf/result/element/doc_hit.rb', line 9

def snippets
  @snippets
end

#total_hitsObject (readonly)

require ‘rubygems’

require 'libxml_helper'
require 'erb'
include ERB::Util
include ExportableDocument


9
10
11
# File 'lib/xtf/result/element/doc_hit.rb', line 9

def total_hits
  @total_hits
end

#xmlObject (readonly)

require ‘rubygems’

require 'libxml_helper'
require 'erb'
include ERB::Util
include ExportableDocument


9
10
11
# File 'lib/xtf/result/element/doc_hit.rb', line 9

def xml
  @xml
end

Class Method Details

.create(xml, query_params = "") ⇒ Object



34
35
36
# File 'lib/xtf/result/element/doc_hit.rb', line 34

def self.create(xml, query_params="")
  new(xml.to_s, query_params)
end

Instance Method Details

#parse_xml(xml, query) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/xtf/result/element/doc_hit.rb', line 38

def parse_xml(xml, query)
  @xml = xml.to_s.gsub(/\s+/, " ").strip
  @query = query
  @doc = XML::Document.parse_string(xml).root
  doc_hit = @doc.at('//docHit')
#     meta = doc_hit.at('//meta')

  @rank = doc_hit['rank']
  @path = @raw_path = doc_hit['path']

  @score = doc_hit['score']

  # only retrieves the non-meta snippets
  @snippets = @raw_snippets = @doc.search('//docHit/snippet').collect { |s| s.to_s }

  # NOTE if there are totalHits, then use them, else use meta_hit_count. XTF gives a count for all hits when
  # there are totalHits, but none at all when only metadata hits.
  # NOTE some of the XTF devs argued against counting Meta Data Hits.
#     @meta_hit_count = doc_hit.search('//meta//hit').size rescue 0
#     @total_hits = doc_hit['totalHits'].to_i > 0 ? doc_hit['totalHits'] : @meta_hit_count.to_s
  @total_hits = doc_hit['totalHits']
end

#query_with_all_snippetsObject

Converts maxSnippets to a value of -1 (all), so that proper hit counts are shown in the XTF-rendered document. An instance variable is lazily loaded.



23
24
25
# File 'lib/xtf/result/element/doc_hit.rb', line 23

def query_with_all_snippets
  self.query.gsub(/maxSnippets=("|')\d+("|')/, %Q{maxSnippets="-1"})
end