class BuilderLinks::Analize
Public Class Methods
new(text, opts = {})
click to toggle source
# File lib/builder_links/analize.rb, line 5 def initialize(text, opts = {}) @options = {black_uris: []}.merge(opts) @doc = Nokogiri::HTML(text) @analized_text = nil @total_links = 0 end
Public Instance Methods
run()
click to toggle source
# File lib/builder_links/analize.rb, line 12 def run return @analized_text unless @analized_text.blank? BuilderLinks.patterns.each do |pattern| break if max_links_generated? next if black_pattern?(pattern) next if !@doc.content.include?(pattern[:anchortext]) links_per_pattern = 0 @doc.search('p').children.each do |child| break if max_links_generated?(links_per_pattern) if analize_node(child, pattern) links_per_pattern += 1 @total_links += 1 end end end @analized_text = @doc.at('body').nil? ? '' : @doc.at('body').inner_html end
total_links()
click to toggle source
# File lib/builder_links/analize.rb, line 34 def total_links @total_links end
Private Instance Methods
analize_node(node, pattern)
click to toggle source
# File lib/builder_links/analize.rb, line 39 def analize_node(node, pattern) if %('text', 'strong').include?(node.name) && node.children.count < 2 replace_text = node.content prefix_suffix = pattern[:anchortext].include?(' ') ? '' : ' ' result = replace_text.sub!(/(#{prefix_suffix}#{pattern[:anchortext]}#{prefix_suffix})/i, '<a href="' + pattern[:uri] + '" title="\1">\1</a>') unless result.nil? if node.name == 'text' node.replace replace_text else new_node = @doc.create_element node.name new_node.inner_html = replace_text node.replace new_node end return true end end false end
black_pattern?(pattern)
click to toggle source
# File lib/builder_links/analize.rb, line 74 def black_pattern?(pattern) @options[:black_uris].each do |black_uri| return true if black_uri.include?(pattern[:uri]) end return false end
max_links_generated?(links_per_pattern=nil)
click to toggle source
# File lib/builder_links/analize.rb, line 63 def max_links_generated?(links_per_pattern=nil) if !links_per_pattern.nil? && !BuilderLinks.links_per_pattern.nil? && links_per_pattern >= BuilderLinks.links_per_pattern return true end if !BuilderLinks.total_links.nil? && @total_links >= BuilderLinks.total_links return true end false end