Sha256: 9e58c4ffa669c045dc73cf33b6fceb0860940e5da6ba371109cb29b83ac240c9

Contents?: true

Size: 1.13 KB

Versions: 8

Compression:

Stored size: 1.13 KB

Contents

module Makasi
  class AsariResult
    include ActionView::Helpers

    attr_reader :url

    def initialize(asari_result, query)
      @url = asari_result["url"]
      @asari_result = asari_result
      @query = query
    end

    def highlighted_url
      highlight url
    end

    def title
      highlight @asari_result["resource_name"].to_s
    end

    def snippet
      text = HTMLEntities.new.decode strip_tags(@asari_result["content"].to_s).gsub(/\s+/, ' ')
      highlight truncate(snippet_containing_query(text), length: 130)
    end

    private

    def highlight(text)
      word_regexp = Regexp.new "(#{@query.split.map{|word| Regexp.escape(word)}.join("|")})", true
      text.gsub(word_regexp, "<span class='highlighted'>\\1</span>").html_safe
    end

    # Extracts snippet which include query string or at least a word from it
    def snippet_containing_query(text)
      @query.split.each do |word|
        index = text.index(word)
        if index && index > 70
          text = text[index-70..-1]
          text = "..." + text[text.index(" ")+1..text.length]
        end
        break if index
      end
      text
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
makasi-0.1.8 lib/makasi/asari_result.rb
makasi-0.1.6 lib/makasi/asari_result.rb
makasi-0.1.5 lib/makasi/asari_result.rb
makasi-0.1.4 lib/makasi/asari_result.rb
makasi-0.1.3 lib/makasi/asari_result.rb
makasi-0.1.2 lib/makasi/asari_result.rb
makasi-0.1.1 lib/makasi/asari_result.rb
makasi-0.1.0 lib/makasi/asari_result.rb