class Blinkr::Extensions::Meta
Constants
- TMPL
Public Class Methods
new(config)
click to toggle source
# File lib/blinkr/extensions/meta.rb, line 10 def initialize config @config = config @descriptions = {} @titles = {} end
Public Instance Methods
analyze(context, typhoeus)
click to toggle source
# File lib/blinkr/extensions/meta.rb, line 21 def analyze context, typhoeus context.duplicate_descriptions = @descriptions.reject{ |description, pages| pages.length <= 1 } context.duplicate_titles = @titles.reject{ |title, pages| pages.length <= 1 } end
append(context)
click to toggle source
# File lib/blinkr/extensions/meta.rb, line 26 def append context Slim::Template.new(TMPL).render(OpenStruct.new({ :descriptions => context.duplicate_descriptions, :titles => context.duplicate_titles })) end
collect(page)
click to toggle source
# File lib/blinkr/extensions/meta.rb, line 16 def collect page description page title page end
Private Instance Methods
description(page)
click to toggle source
# File lib/blinkr/extensions/meta.rb, line 69 def description page elms = page.body.css('meta[name=description]') if elms.length > 1 snippets = [] lines = [] elms.each do |elm| lines << elm.line snippets << elm.to_s end page.errors << Blinkr::Error.new({:severity => :danger, :category => 'HTML Compatibility/Correctness', :type => '<meta name="description"> tag declared more than once', :title => %Q{<meta name="description"> tag declared more than once (lines #{lines.join(', ')})}, :message => %Q{<meta name="description"> tag declared more than once}, :snippet => snippets.join('\n'), :icon => 'fa-header'}) elsif elms.empty? page.errors << Blinkr::Error.new({:severity => :warning, :category => 'SEO', :type => '<meta name="description"> tag missing', :title => %Q{<meta name="description"> tag missing}, :message => %Q{<meta name="description"> tag missing}, :icon => 'fa-header'}) else desc = elms.first['content'] @descriptions[desc] ||= {} @descriptions[desc][page.response.effective_url] = page if desc.length < 60 page.errors << Blinkr::Error.new({:severity => :warning, :category => 'SEO', :type => '<meta name="description"> too short', :title => %Q{<meta name="description"> too short (lines #{elms.first.line})}, :message => %Q{<meta name="description"> too short (< 60 characters)}, :snippet => elms.first.to_s, :icon => 'fa-header'}) end if desc.length > 115 page.errors << Blinkr::Error.new({:severity => :warning, :category => 'SEO', :type => '<meta name="description"> too long', :title => %Q{<meta name="description"> too long (lines #{elms.first.line})}, :message => %Q{<meta name="description"> too long (> 115 characters)}, :snippet => elms.first.to_s, :icon => 'fa-header'}) end end end
title(page)
click to toggle source
# File lib/blinkr/extensions/meta.rb, line 32 def title page elms = page.body.css('title') if elms.length > 1 snippets = [] lines = [] elms.each do |elm| lines << elm.line snippets << elm.to_s end page.errors << Blinkr::Error.new({:severity => :danger, :category => 'HTML Compatibility/Correctness', :type => '<title> tag declared more than once', :title => %Q{<title> declared more than once (lines #{lines.join(', ')})}, :message => %Q{<title> declared more than onc}, :snippet => snippets.join('\n'), :icon => 'fa-header'}) elsif elms.empty? page.errors << Blinkr::Error.new({:severity => :warning, :category => 'SEO', :type => '<title> tag missing', :title => %Q{<title> tag missing}, :message => %Q{<title> tag missing}, :icon => 'fa-header'}) else title = elms.first.text @titles[title] ||= {} @titles[title][page.response.effective_url] = page if title.length < 20 page.errors << Blinkr::Error.new({:severity => :warning, :category => 'SEO', :type => 'page title too short', :title => %Q{<title> too short (line #{elms.first.line})}, :message => %Q{<title> too short (< 20 characters)}, :snippet => elms.first.to_s, :icon => 'fa-header'}) end if title.length > 55 page.errors << Blinkr::Error.new({:severity => :warning, :category => 'SEO', :type => 'page title too long', :title => %Q{<title> too long (line #{elms.first.line})}, :message => %Q{<title> too long (> 55 characters)}, :snippet => elms.first.to_s, :icon => 'fa-header'}) end end end