Skip to content

Instantly share code, notes, and snippets.

@billy3321
Last active February 5, 2018 06:59
Show Gist options
  • Save billy3321/0d20b186f2649a0e9f0d8f3c8546f0f9 to your computer and use it in GitHub Desktop.
Save billy3321/0d20b186f2649a0e9f0d8f3c8546f0f9 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
# usage: ./rwd-tester.rb FILE
# the file is a url list
# install mechanize by `gem install mechanize`.
# require 'rubygems'
require 'mechanize'
def get_page(url)
agent = Mechanize.new
agent.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
page = agent.get(url)
return page
end
def get_css_urls(page)
result = []
page.css('link').each do |link|
href = link.attr('href').to_s
if href.match(/\.css$/)
href = page.mech.resolve(href).to_s
result << href
end
end
return result
end
def get_css_url(url)
css = ""
begin
page = get_page(url)
css = page.body.to_s
end
return css
end
def parse_css(css)
css = css.gsub(/\/\*.*\*\//, '')
result = false
if css.match(/@media/)
result = true
end
return result
end
def parse_css_in_html(page)
result = false
page.css('style').each do |style|
css = style.text
result = parse_css(css)
if result == true
break
end
end
return result
end
def find_device_width(page)
viewport = page.at('meta[name="viewport"]')
return false unless viewport
content = viewport.attr('content').to_s
if content.match(/width=device-width/)
return true
else
return false
end
end
def detect_rwd(url)
begin
page = get_page(url)
device_width = find_device_width(page)
media = parse_css_in_html(page)
if not media
css_urls = get_css_urls(page)
css_urls.each do |css_url|
css = get_css_url(css_url)
if parse_css(css)
media = true
break
end
end
end
puts "#{url},#{device_width},#{media},\n"
rescue => error
error_line = nil
error.backtrace.each do |backtrace|
if backtrace.match(/rwd-tester\.rb/)
error_line = backtrace
break
end
end
error = "#{error_line} #{error.to_s}"
puts "#{url},n/a,n/a,\"#{error}\"\n"
end
end
def main
puts "url,viewport,media,error\n"
urls = File.readlines(ARGV[0]).map {|i| i.strip }
urls.each do |url|
detect_rwd(url)
end
end
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment