sniffles 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module Sniffles
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/sniffles.rb CHANGED
@@ -4,16 +4,19 @@ require "sniffles/version"
4
4
 
5
5
  module Sniffles
6
6
  def self.sniff(html)
7
+ doc = Nokogiri::HTML::parse(html)
8
+
7
9
  output = {}
8
- output[:wordpress] = true if wordpress?(html)
10
+ output[:wordpress] = true if wordpress?(doc)
9
11
  output[:jquery] = true if jquery?(html)
10
12
  output[:quantcast] = true if quantcast?(html)
13
+ output[:mixpanel] = true if mixpanel?(html)
11
14
 
12
15
  output
13
16
  end
14
17
 
15
- def self.wordpress?(html)
16
- !!(html =~ /wp-content/i)
18
+ def self.wordpress?(doc)
19
+ !doc.xpath('.//link[contains(@href,"wp-content")]').empty?
17
20
  end
18
21
 
19
22
  def self.jquery?(html)
@@ -23,4 +26,8 @@ module Sniffles
23
26
  def self.quantcast?(html)
24
27
  !!(html =~ /\.quantserve\.com\/quant\.js/)
25
28
  end
29
+
30
+ def self.mixpanel?(html)
31
+ !!(html =~ /api.mixpanel.com\S+mixpanel.js/)
32
+ end
26
33
  end
data/sniffles.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
  require File.expand_path('../lib/sniffles/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
- gem.authors = ["Ezekiel Templin"]
5
+ gem.authors = ["Ezekiel Templin", "Jake Austwick"]
6
6
  gem.email = ["zeke@templ.in"]
7
7
  gem.description = %q{Detects popular CMS, Javascript libraries, and other items of interest.}
8
8
  gem.summary = %q{Sniffles helps you determine the platforms and libraries a website is running.}
@@ -0,0 +1,242 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.squidoo.com/
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Server:
16
+ - Apache
17
+ Vary:
18
+ - Accept-Encoding
19
+ Content-Encoding:
20
+ - gzip
21
+ Content-Type:
22
+ - text/html; charset=UTF-8
23
+ Content-Length:
24
+ - '7010'
25
+ Accept-Ranges:
26
+ - bytes
27
+ Date:
28
+ - Wed, 29 Feb 2012 20:24:24 GMT
29
+ X-Varnish:
30
+ - 369534020 369523927
31
+ Age:
32
+ - '50'
33
+ Via:
34
+ - 1.1 varnish
35
+ Connection:
36
+ - keep-alive
37
+ body:
38
+ encoding: ASCII-8BIT
39
+ string: ! "<!doctype html>\n<!--\n ____ _____ __ __ ______ ____ _____
40
+ \ _____ \n/\\ _`\\ /\\ __`\\/\\ \\/\\ \\/\\__ _\\ /\\ _`\\ /\\ __`\\/\\
41
+ \ __`\\ \n\\ \\,\\L\\_\\ \\ \\/\\ \\ \\ \\ \\ \\/_/\\ \\/ \\ \\ \\/\\ \\
42
+ \\ \\/\\ \\ \\ \\/\\ \\ \n \\/_\\__ \\\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\
43
+ \ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \n /\\ \\L\\ \\ \\ \\\\'\\\\ \\
44
+ \\_\\ \\ \\_\\ \\__\\ \\ \\_\\ \\ \\ \\_\\ \\ \\ \\_\\ \\ \n \\ `\\____\\
45
+ \\___\\_\\ \\_____\\/\\_____\\\\ \\____/\\ \\_____\\ \\_____\\\n \\/_____/\\/__//_/\\/_____/\\/_____/
46
+ \\/___/ \\/_____/\\/_____/\n-->\n<html xmlns=\"http://www.w3.org/1999/xhtml\"
47
+ xmlns:fb=\"http://www.facebook.com/2008/fbml\" xml:lang=\"en\" lang=\"en\"
48
+ >\n <head>\n <title>Squidoo : Welcome to Squidoo</title>\n <link rel=\"stylesheet\"
49
+ href=\"http://the.squidoocdn.com/styles/styles.v7102426.css\" />\n<link rel=\"stylesheet\"
50
+ href=\"http://the.squidoocdn.com/styles/style_home.v2963620451.css\" />\n
51
+ \ <!--[if ie 8]>\n <link rel=\"stylesheet\" type=\"text/css\" href=\"/styles/ie8.css\"
52
+ />\n <![endif]-->\n <!--[if ie 7]>\n <link rel=\"stylesheet\" type=\"text/css\"
53
+ href=\"/styles/ie7.css\" />\n <![endif]-->\n <!--[if ie 6]>\n <link
54
+ rel=\"stylesheet\" type=\"text/css\" href=\"/styles/ie6.css\" />\n <![endif]-->
55
+ \n <meta name=\"description\" content=\"Squidoo. The popular
56
+ (free) site for creating single webpages on your interests and recommendations.
57
+ Even earn money for charity or yourself.\">\n <meta name=\"verify-v1\"
58
+ content=\"Y9PqlcFaGSPBqNgqAeHOHmf4FVz33FWOmpvxqfm1Y+M=\">\n <meta
59
+ name=\"y_key\" content=\"139a6f82135ebc6f\">\n <meta name=\"msvalidate.01\"
60
+ content=\"47298C5F95BAB1EE1B12653250E13140\">\n <link rel=\"icon\"
61
+ type=\"image/vnd.microsoft.icon\" href=\"http://the.squidoocdn.com/images/favicon.ico\"
62
+ />\n <link rel=\"SHORTCUT ICON\" href=\"http://the.squidoocdn.com/images/favicon.ico\"/>\n
63
+ \ <script>\n if (top.location != self.location) {\n var href
64
+ = self.location.href;\n top.location = href;\n }\n </script>\n
65
+ \ \n <script src=\"//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js\"></script>\n<script>!window.jQuery
66
+ && document.write(unescape('%3Cscript src=\"http://the.squidoocdn.com/scripts/jquery/jquery-1.6.4.min.js\"%3E%3C/script%3E'))</script>\n<script>$J
67
+ = jQuery.noConflict();</script>\n<script>\nSquidoo={__generated__:'2012-02-29T14:58:11-05:00',host:'http://www.squidoo.com',secure:'https://www.squidoo.com',__captcha__:'_squidcap_e',DEPS:{}};Squidoo.DEPS.JQUERY={src:'//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js',alt:'jquery/jquery-1.6.4.min',isLoaded:function(callback){if('jQuery'in
68
+ window){if(jQuery.fn.jquery.substr(0,3)>=1.6){callback(true);}else{jQuery=null;callback(false);}}else{callback(false);}},onLoad:function(callback){window.$J=jQuery.noConflict()\ncallback();}};Squidoo.DEPS.TRACKER={src:'squidoo/lib/tracker',isLoaded:function(callback){callback(Squidoo.Tracker&&Squidoo.Tracker.lib);}};Squidoo.DEPS.JQUERY_UI={deps:[Squidoo.DEPS.JQUERY],src:'//ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js',alt:'jquery/jquery-ui-1.8.16.min',isLoaded:function(callback){callback(jQuery.ui&&jQuery.ui.version=='1.8.16');}};Squidoo.DEPS.TEMPLATES={deps:[Squidoo.DEPS.JQUERY],src:'http://the.squidoocdn.com/scripts/squidoo/lib/templates.v2202656513.js',isLoaded:function(callback){callback(Squidoo.Templates&&Squidoo.Templates.lib);}};Squidoo.DEPS.COUNTDOWN={deps:[],src:'http://the.squidoocdn.com/scripts/countdown/countdown.v1221151160.js',isLoaded:function(callback){callback(window.squidtime);}};Squidoo.DEPS.VALIDATION={deps:[Squidoo.DEPS.JQUERY],src:'http://the.squidoocdn.com/scripts/squidoo/core/validation.v353471365.js',isLoaded:function(callback){callback(Squidoo.Validation&&Squidoo.Validation.lib);}};Squidoo.DEPS.AUTOCOMPLETE={deps:[Squidoo.DEPS.JQUERY_UI],src:'squidoo/core/autocomplete',isLoaded:function(callback){callback(Squidoo.Autocomplete&&Squidoo.Autocomplete.lib);}};Squidoo.DEPS.MEDIA={deps:[Squidoo.DEPS.JQUERY],src:'squidoo/core/media',isLoaded:function(callback){callback(Squidoo.Media&&Squidoo.Media.Uploadable);}};Squidoo.DEPS.TOOLTIP={deps:[Squidoo.DEPS.JQUERY,Squidoo.DEPS.JQUERY_UI],src:'squidoo/lib/tooltip',isLoaded:function(callback){callback(jQuery.fn.pointer)}};Squidoo.DEPS.NOTIFYBAR={deps:[Squidoo.DEPS.JQUERY],src:'squidoo/lib/notifybar',isLoaded:function(callback){callback(window.NotifyBar)}};Squidoo.DEPS.FACEBOOK={deps:[Squidoo.DEPS.JQUERY],src:'http://the.squidoocdn.com/scripts/squidoo/lib/facebook.v2585570497.js',isLoaded:function(callback){callback(Squidoo.Facebook&&Squidoo.Facebook.lib);},onLoad:function(callback){Squidoo.waitForSelection('body',function(){$J('body').prepend('<div
69
+ id=\"fb-root\"></div>');window.fbAsyncInit=function(){FB.init({channelUrl:'/channel.html',appId:'37459380049',status:true,cookie:true,xfbml:true,oauth:true});Squidoo.Facebook.init();Squidoo.Facebook.sdkLoaded=true;callback();};(function(){var
70
+ e=document.createElement('script');e.async=true;e.src=document.location.protocol+'//connect.facebook.net/en_US/all.js';document.getElementById('fb-root').appendChild(e);}());});}};Squidoo.DEPS.AUTH={deps:[Squidoo.DEPS.JQUERY,Squidoo.DEPS.FACEBOOK],src:'http://the.squidoocdn.com/scripts/squidoo/core/auth.v3046163710.js',isLoaded:function(callback){callback(Squidoo.Auth&&Squidoo.Auth.lib);}};Squidoo.Facebook={appId:'37459380049',sdkLoaded:false,defaultPicture:'http://i3.squidoocdn.com/resize_square/squidoo_images/50/lm_placeholder.jpg',reload:function(btn,callback){if($.isFunction(btn)){callback=btn;btn=null;}\nFB.init({channelUrl:'/channel.html',appId:'37459380049',status:true,cookie:true,xfbml:true,oauth:true});self.sdkLoaded=true;if($.isFunction(callback)){callback(true);}\nif(btn){$J(btn).removeClass('btn_working');}},withFB:function(callback){if(Squidoo.Facebook.sdkLoaded){callback();}else{var
71
+ i=setInterval(function(){if(Squidoo.Facebook.sdkLoaded){clearInterval(i);callback();}},100);}}};$J.extend(Squidoo||{},{isMobile:'',isIPad:'',isIOS:''});theLensName='';theLensId='';theRequestServerName='www.squidoo.com';theServerName='www.squidoo.com';isLoggedIn=false;hasGaming=false;theWindowPref=false;theLensOwner=false;theMember=false;isMAP=false;</script><script
72
+ src=\"http://the.squidoocdn.com/scripts/squidoo/core/squidoo.v1407989711.js\"></script>\n
73
+ \ <!-- adsense setup -->\n <script type=\"text/javascript\" src=\"http://partner.googleadservices.com/gampad/google_service.js\">\n
74
+ \ </script>\n <script type=\"text/javascript\">\n GS_googleAddAdSenseService(\"ca-pub-9879162776784828\");\n
75
+ \ GS_googleEnableAllServices();\n </script>\n <script>\n \n GA_googleAddSlot(\"ca-pub-9879162776784828\",
76
+ \"squidoo_generic_728x90_top\");\n GA_googleAddSlot(\"ca-pub-9879162776784828\",
77
+ \"squidoo_generic_300x250_sidebartop\");\n GA_googleAddSlot(\"ca-pub-9879162776784828\",
78
+ \"squidoo_generic_160x600_sidebarbottom\");\n GA_googleAddSlot(\"ca-pub-9879162776784828\",
79
+ \"Chitika:Sidebar300x400\");\n GA_googleAddSlot(\"ca-pub-9879162776784828\",
80
+ \"say_media_twig\");\n\n GA_googleFetchAds();\n </script><!-- /adsense
81
+ setup -->\n <script>\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount',
82
+ 'UA-185209-2'],['_setDomainName', 'www.squidoo.com'],['_setCustomVar', 1,
83
+ 'Role', 'visitor', 1],['_trackPageview'],['sqev._setAccount', 'UA-185209-16'],['sqev._setDomainName',
84
+ 'www.squidoo.com'],['sqev._trackPageview']); // end gaq.push\n\n // \n //
85
+ Google Analytics lazy-load\n //\n (function() {\n var use_debug = false;
86
+ false;\n var ga = document.createElement('script'); ga.type = 'text/javascript';
87
+ ga.async = true;\n ga.src = ('https:' == document.location.protocol ? 'https://ssl'
88
+ : 'http://www') + '.google-analytics.com/' + (use_debug ? 'u/ga_debug.js'
89
+ : 'ga.js');\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga,
90
+ s);\n })();\n\n var evTrack = function(category, action, opt_label, opt_value)
91
+ {\n try {\n _gaq.push(['_trackEvent', category, action, opt_label,
92
+ opt_value]);\n } catch (ex) {}\n };\n\n var evSocial = function(network,
93
+ socialAction, opt_target, opt_pagePath) {\n try {\n _gaq.push(['_trackSocial',
94
+ network, socialAction, opt_target, opt_pagePath]);\n } catch (ex)
95
+ {}\n };\n\n // lens stats\n \n //\n // quantcast beacon\n //\n
96
+ \ _qoptions = {\n qacct:\"p-5aMDYnNLAd_xM\"\n };\n\n jQuery.getScript('http://edge.quantserve.com/quant.js');\n\n
97
+ \ //\n // mix panel\n //\n // var mpq=[];mpq.push([\"init\",\"688c8f775abde7c1135d8fe8aeeb8201\"]);(function(){var
98
+ b,a,e,d,c;b=document.createElement(\"script\");b.type=\"text/javascript\";b.async=true;b.src=(document.location.protocol===\"https:\"?\"https:\":\"http:\")+\"//api.mixpanel.com/site_media/js/api/mixpanel.js\";a=document.getElementsByTagName(\"script\")[0];a.parentNode.insertBefore(b,a);e=function(f){return
99
+ function(){mpq.push([f].concat(Array.prototype.slice.call(arguments,0)))}};d=[\"init\",\"track\",\"track_links\",\"track_forms\",\"register\",\"register_once\",\"identify\",\"name_tag\",\"set_config\"];for(c=0;c<d.length;c++){mpq[d[c]]=e(d[c])}})();\n
100
+ \ </script>\n\n<script type=\"text/javascript\">var NREUMQ=NREUMQ||[];NREUMQ.push([\"mark\",\"firstbyte\",new
101
+ Date().getTime()]);</script>\n \n \n</head> <body class=\"home_page\">\n
102
+ \ <!--INFOLINKS_OFF-->\n <div id=\"squidnav_wrap\" class=\"container\">\n
103
+ \ <div id=\"squidnav\" class=\"row\">\n \n <div id=\"squidnav_left\"
104
+ class=\"float_left six columns\">\n <ul class=\"fb_session_aware\">\n
105
+ \ \n <li><a href=\"https://www.squidoo.com/member/login\">Log
106
+ In</a></li>\n \n <li><a href=\"http://www.squidoo.com/topics\">Explore
107
+ Topics</a></li>\n \n <li><a onclick=\"_gaq.push(['_trackEvent',
108
+ 'Sign Up', 'Join Us']);\" href=\"http://www.squidoo.com/member/registration\"
109
+ class=\"onion_15 bold caps\">Join Us</a></li>\n </ul>\n </div>\n
110
+ \ <div id=\"squidnav_right\" class=\"float_right six columns\">\n <form
111
+ id=\"header_search\" method=\"get\" action=\"http://www.squidoo.com/search/results\"
112
+ name=\"searchForm\">\n <input id=\"query\" class=\"searchField\"
113
+ type=\"text\" onfocus=\"this.value = '';\" value=\"Search Squidoo\" name=\"q\"/>\n
114
+ \ <button id=\"btn_search_go\" type=\"submit\" value=\"Go\">Go</button>\n
115
+ \ </form>\n </div>\n </div>\n</div>\n\n<script type=\"text/javascript\">\n
116
+ \ (function($) {\n $(function() {\n if (screen.width <= 800) {\n $('#squidnav_wrap').css('position',
117
+ 'static');\n $('body').css('padding-top', '0');\n } \n });
118
+ \ \n \n $('#squidnav div').live('mouseenter', function() {\n $(this).parents('li').addClass('active_li');\n
119
+ \ }).live('mouseleave', function() {\n $(this).parents('li').removeClass('active_li');\n
120
+ \ });\n })(jQuery);\n</script><div id=\"header_wrap\">\n <div id=\"header\">\n
121
+ \ <h1><a href=\"http://www.squidoo.com/\">Squidoo</a></h1>\n </div>\n</div>\n\n<div
122
+ id=\"sg_container\"></div>\n\n <div id=\"content_wrap\">\n <div id=\"content\">\n
123
+ \ <div id=\"home_top_wrap\">\n <div id=\"home_top\">\n <h2>What's
124
+ your story?</h2>\n <p class=\"font24\">Create a collection of the things
125
+ you know and love. \n <a href=\"/lensbrainstorm\">\n Learn
126
+ how.\n </a>\n </p>\n <div id=\"home_btn\">\n <a
127
+ class=\"home_signup\" href=\"#\" onclick=\"Squidoo.register(function() { document.location='/build/start';
128
+ }); return false;\">Join for free!</a>\n <span class=\"font11\">and
129
+ build a page in minutes</span>\n \n </div>\n </div>\n</div>\n\n<div
130
+ id=\"errors\" style=\"display:none\">\n </div>\n<div id=\"info\" class=\"alert_box\"
131
+ style=\"display:none\">\n <p class=\"font13\"><a style=\"display: block;
132
+ float: right; margin: 0 0 10px 10px;\" href=\"#\" onclick=\"jQuery('#info').fadeOut('slow');\">Close</a>
133
+ </p>\n</div>\n<h3>Popular Pages</h3>\n\n<div id=\"home_left\" class=\"clear\">\n
134
+ \ <div class=\"home_lenses spinner\"></div>\n</div><!-- #home_left -->\n\n<div
135
+ id=\"home_right\">\n \n <div id=\"explore_box\" class=\"home_sb_item\">\n
136
+ \ <h3 class=\"\">\n Explore Topics</h3>\n <ul class=\"no_style\">\n
137
+ \ \n <li><a href=\"http://www.squidoo.com/topics/food-and-cooking\">Food
138
+ &amp; Cooking</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/hobbies-games-toys\">Hobbies,
139
+ Games &amp; Toys</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/parenting-and-kids\">Parenting
140
+ &amp; Kids</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/pets-and-animals\">Pets
141
+ &amp; Animals</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/books-poetry-writing\">Books,
142
+ Poetry &amp; Writing</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/videogames\">Video
143
+ Games</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/home-and-garden\">Home
144
+ &amp; Garden</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/holidays-and-celebrations\">Holidays
145
+ &amp; Celebrations</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/travel-and-places\">Travel
146
+ &amp; Places</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/fashion-and-beauty\">Fashion
147
+ &amp; Beauty</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/weddings\">Weddings</a></li>
148
+ \n \n <li><a href=\"http://www.squidoo.com/topics/computers-and-electronics\">Computers
149
+ &amp; Electronics</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/education\">Education</a></li>
150
+ \n \n <li><a href=\"http://www.squidoo.com/topics/arts-and-design\">Arts
151
+ &amp; Design</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/entertainment\">Entertainment
152
+ &amp; Media</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/culture-and-society\">Culture
153
+ &amp; Society</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/music\">Music</a></li>
154
+ \n \n <li><a href=\"http://www.squidoo.com/topics/business-and-work\">Business
155
+ &amp; Work</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/sports-and-recreation\">Sports
156
+ &amp; Recreation</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/cars\">Cars</a></li>
157
+ \n \n <li><a href=\"http://www.squidoo.com/topics/nonprofits\">Nonprofits</a></li>
158
+ \n \n <li><a href=\"http://www.squidoo.com/topics/healthy-living\">Healthy
159
+ Living</a></li> \n \n <li><a href=\"http://www.squidoo.com/topics/internet\">Internet</a></li>
160
+ \n \n <li><a href=\"http://www.squidoo.com/topics/relationships-and-family\">Relationships
161
+ &amp; Family</a></li> \n </ul> \n </div>\n \n \n <div class=\"home_sb_item\">\n
162
+ \ <h3>Testimonials</h3>\n <ul class=\"quotes\">\n <li>\"I
163
+ just used some of my Squidoo earnings to buy Tim McGraw concert tickets for
164
+ my wife's birthday.\"\n <span><a href=\"/lensmasters/mac33\">Mac33</a></span>\n
165
+ \ <li>\"Squidoo is very addictive. Perhaps we need a warning label!
166
+ I love the opportunity to write on diverse topics and quickly create a lens
167
+ on the fly. The independence is wonderful, as well as the ability to create
168
+ lenses that automatically donate to charity.\"\n <span><a href=\"/lensmasters/genglo\">Genglo</a></span>\n
169
+ \ <li>\"Word of mouth at your fingertips.\"\n <span><a
170
+ href=\"/lensmasters/skysuccess\">Skysuccess</a></span>\n <li>\"I
171
+ love reading, learning, writing, organizing and connecting on Squidoo. I can
172
+ combine all my interests here. Squidoo lets me be me!\"\n <span><a
173
+ href=\"/lensmasters/MysticTurtle\">MysticTurtle</a></span>\n <li>\"Thanks
174
+ to contributed royalties from thousands of lensmasters, Room to Read has built
175
+ a computer room for kids in Kheri Kalan, an industrial town in India. Thank
176
+ you for helping us to create a brighter future through education.\"\n <span><a
177
+ href=\"http://www.roomtoread.org/\">John Wood, Room to Read</a></span>\n </ul>\n
178
+ \ </div>\n</div><!-- #home_right -->\n\n<script>\n$J.ajax({\n type: 'POST',\n
179
+ \ dataType: 'json',\n url: '/home/json_home',\n success: function(content)
180
+ {\n $J('#home_left').html(content.lenses.html);\n }\n});\n$J('#home_left
181
+ .spinner').spin(SPINNER_HOME);\n</script>\n\n </div><!--
182
+ /content -->\n </div><!-- /content_wrap --> \n <!-- INFOLINKS_OFF -->\n<div
183
+ id=\"footer_wrap\" class=\"container\">\n <div id=\"footer\" class=\"row\">\n
184
+ \ \n <div class=\"footer_left eight columns\">\n <ul class=\"footer_nav\">\n
185
+ \ <li class=\"first\"><a href=\"http://www.squidoo.com/squidoo/65355501-Terms-of-Service\">TOS</a></li>\n
186
+ \ <li><a href=\"http://www.squidoo.com/originalitypact\">Originality
187
+ Pact</a></li>\n <li><a href=\"http://www.squidoo.com/pages/squidteam\">About
188
+ Us</a></li>\n <li><a href=\"http://www.squidoohq.com/\">SquidooHQ</a></li>\n
189
+ \ <li><a href=\"http://www.squidoo.com/charity-sign-up\">Charity</a></li>\n
190
+ \ <li><a href=\"http://www.squidoo.com/squidoo/65431441-Help-Feedback#module83018671\"
191
+ onclick=\"$Sq.bug(); return false;\">Feedback &amp; Bugs</a></li>\n </ul>\n
192
+ \ <!-- remove \"#footer_copy\" from stylesheet -->\n <div class=\"font12
193
+ footer_copy\">Copyright &copy; 2012,\n Squidoo, LLC and respective
194
+ copyright owners</div>\n <div class=\"font11 footer_copy\">This page
195
+ and all the pages on Squidoo generate income for lensmasters and charities
196
+ based on affiliate relationships with our partners, including Amazon, Google,
197
+ eBay and others. Have fun.</div>\n </div>\n \n <div class=\"four columns\">\n
198
+ \ <div class=\"footer_right\" id=\"news_sub\" >\n <h4
199
+ class=\"font13 nl_h4\">Want our Newsletter?</h4>\n <form action=\"#\"
200
+ onsubmit=\"Newsletter.subscribe(this); return false;\">\n <input
201
+ type=\"text\" class=\"italic nl_input\" \n onfocus=\"this.value='';
202
+ jQuery(this.removeClass('italic'));\" id=\"footer_nl_input\"
203
+ name=\"email_address\" value=\"enter e-mail address\" />\n <button
204
+ class=\"b b24 float_left\" type=\"submit\" id=\"\">Sign up!</button>\n </form>\n
205
+ \ </div>\n </div>\n \n </div>\n</div>\n<script>\n(function($)
206
+ {\n var self = window.Newsletter = {\n subscribe: function(form) {\n var
207
+ form = $(form);\n $.post('/member/ajax_subscribe/squidu', form.serialize(),
208
+ function(error) {\n if (error) {\n alert(error);\n }
209
+ else {\n alert('Thank you for subscribing!');\n $('#news_sub').fadeOut();\n
210
+ \ }\n });\n }\n };\n})(jQuery);\n</script>\n\n <script>\n
211
+ \ if (jQuery('.twitter-share-button').size()) {\n jQuery.getScript('http://platform.twitter.com/widgets.js',
212
+ function() {\n twttr.events.bind('tweet', function(event) {\n function
213
+ extractParamFromUri(uri, paramName) {\n if (!uri) {\n return;\n
214
+ \ }\n var uri = uri.split('#')[0]; // Remove
215
+ anchor.\n var parts = uri.split('?'); // Check for query params.\n
216
+ \ if (parts.length == 1) {\n return;\n }\n
217
+ \ var query = decodeURI(parts[1]);\n\n // Find
218
+ url param.\n paramName += '=';\n var params
219
+ = query.split('&');\n for (var i = 0, param; param = params[i];
220
+ ++i) {\n if (param.indexOf(paramName) === 0) {\n return
221
+ unescape(param.split('=')[1]);\n }\n }\n }
222
+ \ \n\n if (event) {\n var targetUrl;\n if
223
+ (event.target && event.target.nodeName == 'IFRAME') {\n targetUrl
224
+ = extractParamFromUri(event.target.src, 'url');\n }\n evSocial('twitter',
225
+ 'tweet', targetUrl);\n }\n });\n });\n }\n
226
+ \ </script>\n \n<script type=\"text/javascript\" language=\"JavaScript\">\nvar
227
+ _comscore = _comscore || [];\n_comscore.push({ c1: \"2\", c2: \"6035233\"
228
+ });\n(function() {\nvar s = document.createElement(\"script\"), el =document.getElementsByTagName(\"script\")[0];
229
+ s.async = true;\ns.src = (document.location.protocol == \"https:\" ? \"https://sb\":
230
+ \"http://b\") + \".scorecardresearch.com/beacon.js\";\nel.parentNode.insertBefore(s,
231
+ el);\n})();\n</script>\n<noscript>\n <img src=\"http://b.scorecardresearch.com/p?c1=2&c2=6035233&cv=2.0&cj=1\"
232
+ />\n <img src=\"http://pixel.quantserve.com/pixel/p-5aMDYnNLAd_xM.gif\" style=\"display:
233
+ none;\" border=\"0\" height=\"1\" width=\"1\" alt=\"Quantcast\"/>\n</noscript>\n\n<script
234
+ type=\"text/javascript\">if(!NREUMQ.f){NREUMQ.f=function(){NREUMQ.push([\"load\",new
235
+ Date().getTime()]);var e=document.createElement(\"script\");e.type=\"text/javascript\";e.async=true;e.src=\"https://d1ros97qkrwjf5.cloudfront.net/30/eum/rum.js\";document.body.appendChild(e);if(NREUMQ.a)NREUMQ.a();};NREUMQ.a=window.onload;window.onload=NREUMQ.f;};NREUMQ.push([\"nrf2\",\"beacon-1.newrelic.com\",\"3cd3786cd7\",657144,\"MQdQbBEHCEJYARdcCQhNcU0QEglcFkg=\",0,42,new
236
+ Date().getTime()]);</script>\n\n\n\n\n<div id=\"default_onion\" class=\"default_onion\"
237
+ style=\"display: none;\"></div>\n<div id=\"alert-overlay\" style=\"display:none;\"></div>\n<div
238
+ id=\"lens_overlay\" class=\"overlay_wrap\" style=\"display:none;\"></div>\n\n\n
239
+ \ </body>\n</html>"
240
+ http_version: '1.1'
241
+ recorded_at: Wed, 29 Feb 2012 20:24:24 GMT
242
+ recorded_with: VCR 2.0.0.rc2
@@ -24,5 +24,19 @@ describe Sniffles do
24
24
  it "should identify Quantcast" do
25
25
  @wp.should include(:quantcast => true)
26
26
  end
27
+
28
+ describe "#mixpanel" do
29
+ before(:all) do
30
+ VCR.use_cassette("squidoo") do
31
+ @body = Typhoeus::Request.get("http://www.squidoo.com/", :follow_location => true).body
32
+ end
33
+ @squid = Sniffles.sniff(@body)
34
+ end
35
+
36
+ it "should identify MixPanel" do
37
+ @squid.should include(:mixpanel => true)
38
+ end
39
+ end
40
+
27
41
  end
28
42
  end
metadata CHANGED
@@ -1,19 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sniffles
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ezekiel Templin
9
+ - Jake Austwick
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2012-02-28 00:00:00.000000000 Z
13
+ date: 2012-02-29 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: nokogiri
16
- requirement: &2156025180 !ruby/object:Gem::Requirement
17
+ requirement: &2152169360 !ruby/object:Gem::Requirement
17
18
  none: false
18
19
  requirements:
19
20
  - - ~>
@@ -21,10 +22,10 @@ dependencies:
21
22
  version: 1.5.0
22
23
  type: :runtime
23
24
  prerelease: false
24
- version_requirements: *2156025180
25
+ version_requirements: *2152169360
25
26
  - !ruby/object:Gem::Dependency
26
27
  name: rspec
27
- requirement: &2156040820 !ruby/object:Gem::Requirement
28
+ requirement: &2152168480 !ruby/object:Gem::Requirement
28
29
  none: false
29
30
  requirements:
30
31
  - - ~>
@@ -32,10 +33,10 @@ dependencies:
32
33
  version: 2.8.0
33
34
  type: :development
34
35
  prerelease: false
35
- version_requirements: *2156040820
36
+ version_requirements: *2152168480
36
37
  - !ruby/object:Gem::Dependency
37
38
  name: typhoeus
38
- requirement: &2156040120 !ruby/object:Gem::Requirement
39
+ requirement: &2152187880 !ruby/object:Gem::Requirement
39
40
  none: false
40
41
  requirements:
41
42
  - - ~>
@@ -43,10 +44,10 @@ dependencies:
43
44
  version: 0.3.3
44
45
  type: :development
45
46
  prerelease: false
46
- version_requirements: *2156040120
47
+ version_requirements: *2152187880
47
48
  - !ruby/object:Gem::Dependency
48
49
  name: vcr
49
- requirement: &2156039420 !ruby/object:Gem::Requirement
50
+ requirement: &2152186820 !ruby/object:Gem::Requirement
50
51
  none: false
51
52
  requirements:
52
53
  - - =
@@ -54,7 +55,7 @@ dependencies:
54
55
  version: 2.0.0.rc2
55
56
  type: :development
56
57
  prerelease: false
57
- version_requirements: *2156039420
58
+ version_requirements: *2152186820
58
59
  description: Detects popular CMS, Javascript libraries, and other items of interest.
59
60
  email:
60
61
  - zeke@templ.in
@@ -74,6 +75,7 @@ files:
74
75
  - lib/sniffles.rb
75
76
  - lib/sniffles/version.rb
76
77
  - sniffles.gemspec
78
+ - spec/cassettes/squidoo.yml
77
79
  - spec/cassettes/wordpress.yml
78
80
  - spec/sniffles_spec.rb
79
81
  - spec/spec_helper.rb
@@ -102,6 +104,7 @@ signing_key:
102
104
  specification_version: 3
103
105
  summary: Sniffles helps you determine the platforms and libraries a website is running.
104
106
  test_files:
107
+ - spec/cassettes/squidoo.yml
105
108
  - spec/cassettes/wordpress.yml
106
109
  - spec/sniffles_spec.rb
107
110
  - spec/spec_helper.rb