Sha256: 702a7a039cf69c81e4ec6021da899769a4d445f18e03992e8552a53847b79907

Contents?: true

Size: 831 Bytes

Versions: 5

Compression:

Stored size: 831 Bytes

Contents

class Spieker::LinkValidator
  LOCAL_LINK_REGEX = /^(?!(http(s)?\:|\/\/)).*/
  
  def initialize(link, origin)
    @link = link
    @origin = origin
  end

  def valid?
    assertions.all? { |assert| send(assert) }
  end

  private

  def assertions
    private_methods.select { |m| m.to_s.start_with?('assert_') }
  end

  def assert_is_local
    link =~ LOCAL_LINK_REGEX ||
      begin
        URI.parse(link).hostname == origin.hostname
      rescue
        false
      end
  end

  def assert_is_not_email
    link !~ /mailto/
  end

  def assert_is_not_javascript
    link !~ /javascript/
  end

  def assert_is_not_pdf
    link !~ /\bpdf\b/
  end

  def assert_is_not_data
    link !~ /^data/
  end

  def link
    @link
  end

  def origin
    URI.parse @origin.start_with?('http') ? @origin : 'http://' + @origin
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
spieker-0.0.10 lib/spieker/link_validator.rb
spieker-0.0.9 lib/spieker/link_validator.rb
spieker-0.0.8 lib/spieker/link_validator.rb
spieker-0.0.7 lib/spieker/link_validator.rb
spieker-0.0.3 lib/spieker/link_validator.rb