class Middleman::LanguageTool::LanguageToolExtension

Constants

REJECTED_EXTS

Public Instance Methods

after_build(builder) click to toggle source
# File lib/middleman-language_tool/extension.rb, line 12
def after_build(builder)
  language_tool = ::LanguageTool::Process.new
  language_tool.start!
  spellchecker = ::LanguageTool::ErrorParser.new(language_tool)

  filtered = filter_resources(app, options.page)
  total_misspelled = []

  filtered.each do |resource|
    builder.say_status :spellcheck, "Running spell checker for #{resource.url}", :blue
    current_misspelled = run_check(spellchecker, select_content(resource))
    current_misspelled.each do |misspell|
      builder.say_status :misspell, error_message(misspell), :red
    end
    total_misspelled += current_misspelled
  end

  unless total_misspelled.empty?
    raise Thor::Error, "Build failed. There are spelling errors."
  end
end
error_message(misspell) click to toggle source
# File lib/middleman-language_tool/extension.rb, line 86
def error_message(misspell)
  "Category: #{misspell.category}\n" \
  "Message: #{misspell.msg}\n" \
  "Context: #{misspell.context}\n" \
  "Replacements: #{misspell.replacements.split('#').join(' ')}\n" \

  #"The word '#{misspell[:word]}' is misspelled"
end
exclude_allowed(results) click to toggle source
# File lib/middleman-language_tool/extension.rb, line 73
def exclude_allowed(results)
  results.reject { |entry| option_allowed.include? entry[:word].downcase }
end
filter_resources(app, pattern) click to toggle source
# File lib/middleman-language_tool/extension.rb, line 61
def filter_resources(app, pattern)
  app.sitemap.resources.select { |resource| resource.url.match(pattern) }
                       .reject { |resource| REJECTED_EXTS.include? resource.ext }
end
option_allowed() click to toggle source
# File lib/middleman-language_tool/extension.rb, line 77
def option_allowed
  allowed = if options.allow.is_a? Array
              options.allow
            else
              [options.allow]
            end
  allowed.map(&:downcase)
end
option_tags() click to toggle source
# File lib/middleman-language_tool/extension.rb, line 45
def option_tags
  if options.tags.is_a? Array
    options.tags
  else
    [options.tags]
  end
end
run_check(spellchecker, text) click to toggle source
# File lib/middleman-language_tool/extension.rb, line 66
def run_check(spellchecker, text)
  errors = spellchecker.find_errors(text)
  errors.reject { |e| e.ruleId == "WHITESPACE_RULE" }
  #results = exclude_allowed(results)
  #results.reject { |entry| entry[:correct] }
end
select_content(resource) click to toggle source
# File lib/middleman-language_tool/extension.rb, line 34
def select_content(resource)
  rendered_resource = resource.render(layout: false)
  doc = Nokogiri::HTML(rendered_resource)

  if options.tags.empty?
    doc.text
  else
    select_tagged_content(doc, option_tags)
  end
end
select_tagged_content(doc, tags) click to toggle source
# File lib/middleman-language_tool/extension.rb, line 53
def select_tagged_content(doc, tags)
  tags.map { |tag| texts_for_tag(doc, tag.to_s) }.flatten.join(' ')
end
texts_for_tag(doc, tag) click to toggle source
# File lib/middleman-language_tool/extension.rb, line 57
def texts_for_tag(doc, tag)
  doc.css(tag).map(&:text)
end