yipit 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ *.swp
6
+ *.swo
7
+ coverage
8
+ doc
9
+ .yardoc
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.2@yipit
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in yipit.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1 @@
1
+ This is a work in progress. Coming soon, bitches.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,5 @@
1
+ class Array
2
+ def extract_options!
3
+ last.is_a?(::Hash) ? pop : {}
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module Yipit
2
+ VERSION = "0.0.1"
3
+ end
data/lib/yipit.rb ADDED
@@ -0,0 +1,25 @@
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'core_ext/array'
4
+
5
+ module Yipit
6
+ class Client
7
+ attr_reader :api_key, :conn
8
+ def initialize(api_key)
9
+ @api_key = api_key
10
+ @conn = Faraday.new(:url => 'http://api.yipit.com') do |builder|
11
+ builder.adapter Faraday.default_adapter
12
+ builder.adapter :logger
13
+ builder.use Faraday::Response::ParseJson
14
+ builder.use Faraday::Response::Mashify
15
+ end
16
+ end
17
+ def method_missing(sym, *args, &block)
18
+ puts "Method: #{sym }"
19
+ options = args.extract_options!
20
+ options = options.merge(:key => api_key)
21
+ response = conn.get("/v1/#{sym.to_s}/#{args[0]}") { |req| req.params = options }
22
+ response.body.response.send sym
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,82 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: http://api.yipit.com:80/deals/?key=XZgnp3v2vyrBr3eR
6
+ body:
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 404
11
+ message: NOT FOUND
12
+ headers:
13
+ server:
14
+ - nginx/0.8.54
15
+ date:
16
+ - Mon, 14 Mar 2011 20:57:15 GMT
17
+ content-type:
18
+ - text/html; charset=utf-8
19
+ transfer-encoding:
20
+ - chunked
21
+ connection:
22
+ - keep-alive
23
+ vary:
24
+ - Cookie
25
+ set-cookie:
26
+ - session_id=ea15f233c3e6938bae1e82c96caae9be; Domain=.yipit.com; expires=Sat, 10-Sep-2011 20:57:15 GMT; Max-Age=15552000; Path=/
27
+ content-encoding:
28
+ - gzip
29
+ body: "\n\
30
+ <!DOCTYPE html>\n\
31
+ <html>\n\
32
+ <head>\n <script type=\"text/javascript\">var _sf_startpt=(new Date()).getTime();</script>\n <link rel=\"stylesheet\" type=\"text/css\" href=\"http://d22nv2k05ynu7x.cloudfront.net/css/yipit.min.2f59ba5d99a86487.css\" media=\"screen\">\n \n <!--[if lt IE 8]>\n <link rel=\"stylesheet\" href=\"http://d22nv2k05ynu7x.cloudfront.net/css/ie.css\" type=\"text/css\" media=\"screen\">\n <![endif]-->\n <link rel=\"shortcut icon\" href=\"http://d22nv2k05ynu7x.cloudfront.net/img/favicon.ico\" type=\"image/x-icon\" />\n <link rel=\"apple-touch-icon\" href=\"http://d22nv2k05ynu7x.cloudfront.net/img/iphone.png\"/>\n <script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js\"></script>\n <script>!window.jQuery && document.write(unescape('%3Cscript src=\"http://d22nv2k05ynu7x.cloudfront.net/js/jquery.min.js\"%3E%3C/script%3E'))</script>\n <script type=\"text/javascript\" src=\"http://d22nv2k05ynu7x.cloudfront.net/js/yipit.min.c12f4436be3b328d.js\"></script>\n\n <title>Page Not Found | Yipit</title>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n <meta name=\"keywords\" content=\" Daily, Deals, Groupon, LivingSocial, Tippr\" />\n <meta name=\"description\" content=\"Rur-roh. We didn't find this page.\" />\n <meta content=\"noarchive,noindex,follow\" name=\"robots\"/>\n \n\n \n \n <script type=\"text/javascript\">\n var _gaq = _gaq || [];\n _gaq.push(['_setAccount', 'UA-1967270-3']);\n _gaq.push(['_trackPageview']);\n\n (function() {\n var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n })();\n </script>\n \n \n \n\
33
+ <script type=\"text/javascript\">\n\n\
34
+ function get_screen_height() {\n var myHeight = 0;\n if( typeof( window.innerWidth ) == 'number' ) {\n //Non-IE\n myHeight = window.innerHeight;\n } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {\n //IE 6+ in 'standards compliant mode'\n myHeight = document.documentElement.clientHeight;\n }\n return myHeight;\n\
35
+ }\n\n\
36
+ function fix_height() { \n var screen_height = get_screen_height();\n var wrapper_height = $(\"#wrapper\").height();\n var footer_height = $(\"#footer\").height();\n new_height = (footer_height + wrapper_height < screen_height) ? screen_height - footer_height : wrapper_height;\n $(\"#wrapper\").css('min-height',new_height);\n\
37
+ }\n\n\
38
+ jQuery(document).ready(fix_height);\n\n\
39
+ window.onresize = fix_height;\n\n\
40
+ </script>\n\n\
41
+ </head>\n\
42
+ <body id=\"Something has gone horribly, horribly wrong...\" onload=\"\">\n \n\
43
+ <div id=\"wrapper\">\n <div class=\"wrap\">\n <div id=\"header\" class=\"\">\n \n <div id=\"logo\"><a href=\"/\">Yipit</a></div>\n \n \n <div class=\"location\"><a href=\"/ajax/city_list/\" class=\"fancyboxForm\">Looking for your city?</a></div>\n \n <div class=\"login\">\n <a href=\"/\" class=\"formbutton buttonblue\">Sign Up</a>\n <a href=\"/ajax/login_box/\" id=\"login_box_launch\">Login</a></div>\n \n <div class=\"clear\"></div>\n \n \n </div><!-- end #header -->\n \n \n \n \n <div id=\"content\">\n <div class=\"box landing_page \">\n <div class=\"breadcrumb\">\n \n </div><!-- end .breadrumb -->\n \n\
44
+ <h2>Whooops!</h2>\n\
45
+ <img src=\"http://d22nv2k05ynu7x.cloudfront.net/img/404.jpg\">\n\
46
+ <h2>This page doesn't exist.</h2>\n\
47
+ <hr />\n\n <div class=\"deal\">\n \n </div><!-- end .deal -->\n <div class=\"sidebar\">\n \n </div><!-- end .sidebar -->\n <div class=\"clear\"></div>\n </div><!-- end box landing_page -->\n </div><!-- end .content -->\n <div class=\"clear\"></div> \n\n\n </div><!-- end .wrap -->\n\
48
+ </div><!-- end #wrapper -->\n\
49
+ <div class='clear'></div>\n\
50
+ <div id=\"footer\">\n <div class=\"wrap\">\n \n <div id=\"footer-menu\">\n <h5>Cities</h5>\n <ul>\n \n <li><a href=\"/atlanta/\">Atlanta</a></li>\n \n <li><a href=\"/austin/\">Austin</a></li>\n \n <li><a href=\"/baltimore/\">Baltimore</a></li>\n \n <li><a href=\"/boston/\">Boston</a></li>\n \n <li><a href=\"/brooklyn/\">Brooklyn </a></li>\n \n <li><a href=\"/charlotte/\">Charlotte</a></li>\n \n <li><a href=\"/chicago/\">Chicago</a></li>\n \n <li><a href=\"/cincinnati/\">Cincinnati</a></li>\n \n <li><a href=\"/cleveland/\">Cleveland</a></li>\n \n <li><a href=\"/columbus/\">Columbus</a></li>\n \n <li><a href=\"/dallas/\">Dallas</a></li>\n \n <li><a href=\"/denver/\">Denver</a></li>\n \n <li><a href=\"/houston/\">Houston</a></li>\n \n <li><a href=\"/indianapolis/\">Indianapolis</a></li>\n \n <li><a href=\"/las-vegas/\">Las Vegas</a></li>\n \n <li><a href=\"/london/\">London</a></li>\n \n <li><a href=\"/los-angeles/\">Los Angeles</a></li>\n \n <li><a href=\"/miami/\">Miami</a></li>\n \n <li><a href=\"/minneapolis/\">Minneapolis</a></li>\n \n <li><a href=\"/montreal/\">Montreal </a></li>\n \n <li><a href=\"/new-york/\">New York</a></li>\n \n <li><a href=\"/northern-va/\">Northern VA</a></li>\n \n <li><a href=\"/oakland/\">Oakland</a></li>\n \n <li><a href=\"/orange-county/\">Orange County</a></li>\n \n <li><a href=\"/philadelphia/\">Philadelphia</a></li>\n \n <li><a href=\"/phoenix/\">Phoenix</a></li>\n \n <li><a href=\"/portland/\">Portland</a></li>\n \n <li><a href=\"/raleigh-durham/\">Raleigh-Durham</a></li>\n \n <li><a href=\"/san-diego/\">San Diego</a></li>\n \n <li><a href=\"/san-francisco/\">San Francisco</a></li>\n \n <li><a href=\"/san-jose/\">San Jose</a></li>\n \n <li><a href=\"/seattle/\">Seattle</a></li>\n \n <li><a href=\"/st-louis/\">St. Louis</a></li>\n \n <li><a href=\"/toronto/\">Toronto</a></li>\n \n <li><a href=\"/vancouver/\">Vancouver</a></li>\n \n <li><a href=\"/washington-dc/\">Washington DC</a></li>\n \n </ul>\n\n <h5>Deals</h5>\n <ul>\n \n <li><a href=\"/atlanta/deal_directory\">Atlanta</a></li>\n \n <li><a href=\"/austin/deal_directory\">Austin</a></li>\n \n <li><a href=\"/baltimore/deal_directory\">Baltimore</a></li>\n \n <li><a href=\"/boston/deal_directory\">Boston</a></li>\n \n \n \n \n \n <li><a href=\"/chicago/deal_directory\">Chicago</a></li>\n \n \n \n \n \n \n \n <li><a href=\"/dallas/deal_directory\">Dallas</a></li>\n \n <li><a href=\"/denver/deal_directory\">Denver</a></li>\n \n <li><a href=\"/houston/deal_directory\">Houston</a></li>\n \n \n \n <li><a href=\"/las-vegas/deal_directory\">Las Vegas</a></li>\n \n \n \n <li><a href=\"/los-angeles/deal_directory\">Los Angeles</a></li>\n \n <li><a href=\"/miami/deal_directory\">Miami</a></li>\n \n <li><a href=\"/minneapolis/deal_directory\">Minneapolis</a></li>\n \n <li><a href=\"/montreal/deal_directory\">Montreal </a></li>\n \n <li><a href=\"/new-york/deal_directory\">New York</a></li>\n \n \n \n \n \n \n \n <li><a href=\"/philadelphia/deal_directory\">Philadelphia</a></li>\n \n <li><a href=\"/phoenix/deal_directory\">Phoenix</a></li>\n \n <li><a href=\"/portland/deal_directory\">Portland</a></li>\n \n \n \n <li><a href=\"/san-diego/deal_directory\">San Diego</a></li>\n \n <li><a href=\"/san-francisco/deal_directory\">San Francisco</a></li>\n \n \n \n <li><a href=\"/seattle/deal_directory\">Seattle</a></li>\n \n <li><a href=\"/st-louis/deal_directory\">St. Louis</a></li>\n \n <li><a href=\"/toronto/deal_directory\">Toronto</a></li>\n \n <li><a href=\"/vancouver/deal_directory\">Vancouver</a></li>\n \n <li><a href=\"/washington-dc/deal_directory\">Washington DC</a></li>\n \n \n </ul>\n </div><!-- end #footer-menu -->\n\n <div id=\"footer-sitemap\">\n <ul>\n <li ><a href=\"/\">Home</a></li>\n <li ><a href=\"/about/\">About</a></li>\n <li ><a href=\"/nation/\">Nation</a></li>\n <li><a href=\"http://blog.yipit.com\">Blog</a></li>\n <li ><a href=\"/about/api/\">API</a></li>\n <li ><a href=\"/data/\">Yipit Data</a></li>\n <li ><a href=\"/about/businesses/\">Businesses</a></li>\n </ul>\n <ul>\n <li ><a href=\"/about/daily_deal_sites/\">Daily Deal Sites</a></li>\n <li ><a href=\"/about/jobs/\">Jobs</a></li>\n <li ><a href=\"/about/press/\">Press</a></li>\n <li ><a href=\"/about/terms/\">Terms</a></li>\n <li ><a href=\"/about/privacy/\">Privacy</a></li>\n <li ><a href=\"/about/faq/\">FAQ</a></li>\n \n </ul>\n <p>Copyright &copy; 2011 Yipit</p>\n </div><!-- end #footer-sitemap -->\n <div class=\"clear\"></div>\n \n </div><!-- end .wrap -->\n\
51
+ </div><!-- end #footer -->\n\n \n \n <!-- Start Chartbeat-->\n <script type=\"text/javascript\">\n var _sf_async_config={uid:8463,domain:\"yipit.com\"};\n (function(){\n function loadChartbeat() {\n window._sf_endpt=(new Date()).getTime();\n var e = document.createElement('script');\n e.setAttribute('language', 'javascript');\n e.setAttribute('type', 'text/javascript');\n e.setAttribute('src',\n ((\"https:\" == document.location.protocol) ? \"https://s3.amazonaws.com/\" : \"http://\") +\n \"static.chartbeat.com/js/chartbeat.js\");\n document.body.appendChild(e);\n }\n var oldonload = window.onload;\n window.onload = (typeof window.onload != 'function') ?\n loadChartbeat : function() { oldonload(); loadChartbeat(); };\n })();\n </script>\n <!-- End Chartbeat-->\n <!-- Start Quantcast tag -->\n <script type=\"text/javascript\">\n _qoptions={\n qacct:\"p-3dF18ONyTUxBQ\"\n };\n </script>\n <script type=\"text/javascript\" src=\"http://edge.quantserve.com/quant.js\"></script>\n <noscript>\n <img src=\"http://pixel.quantserve.com/pixel/p-3dF18ONyTUxBQ.gif\" style=\"display: none;\" border=\"0\" height=\"1\" width=\"1\" alt=\"Quantcast\"/>\n </noscript>\n <!-- End Quantcast tag -->\n \n \n\
52
+ </body>\n\
53
+ </html>\n"
54
+ http_version: "1.1"
55
+ - !ruby/struct:VCR::HTTPInteraction
56
+ request: !ruby/struct:VCR::Request
57
+ method: :get
58
+ uri: http://api.yipit.com:80/v1/deals/?key=XZgnp3v2vyrBr3eR
59
+ body:
60
+ headers:
61
+ response: !ruby/struct:VCR::Response
62
+ status: !ruby/struct:VCR::ResponseStatus
63
+ code: 200
64
+ message: OK
65
+ headers:
66
+ server:
67
+ - nginx/0.8.54
68
+ date:
69
+ - Mon, 14 Mar 2011 21:01:34 GMT
70
+ content-type:
71
+ - application/json; charset=utf-8
72
+ transfer-encoding:
73
+ - chunked
74
+ connection:
75
+ - keep-alive
76
+ vary:
77
+ - Authorization, Cookie
78
+ set-cookie:
79
+ - session_id=95e28c298958507657e1723c72a8f15a; Domain=.yipit.com; expires=Sat, 10-Sep-2011 21:01:34 GMT; Max-Age=15552000; Path=/
80
+ body: "{\n \"meta\": {\n \"code\": 200\n }, \n \"response\": {\n \"deals\": [\n {\n \"id\": 54041, \n \"date_added\": \"2011-03-14 13:46:19\", \n \"end_date\": \"2011-03-16 05:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 87, \n \"formatted\": \"87%\"\n }, \n \"price\": {\n \"raw\": \"89.00\", \n \"formatted\": \"$89\"\n }, \n \"value\": {\n \"raw\": \"700.00\", \n \"formatted\": \"$700\"\n }, \n \"purchased\": 5, \n \"left\": null, \n \"title\": \"$89 for 8 IPL Treatments at R\xC3\xAAve Soleil\", \n \"yipit_title\": \"87% off 8 IPL Treatments\", \n \"url\": \"http://yipit.com/aff/click/?deal=asReJyv8&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/montreal/team-buy/89-for-8-ipl-treatments-at-reve-soleil/\", \n \"mobile_url\": \"http://m.yipit.com/montreal/team-buy/89-for-8-ipl-treatments-at-reve-soleil/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/89-for-8-ipl-treatments-at-reve-soleil-1300110379_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/89-for-8-ipl-treatments-at-reve-soleil-1300110379_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"montreal\", \n \"name\": \"Montreal \", \n \"active\": 1, \n \"time_zone_diff\": -5, \n \"lat\": 45.299999999999997, \n \"lon\": -73.349999999999994, \n \"url\": \"http://yipit.com/montreal/\"\n }, \n \"tags\": [\n {\n \"name\": \"Dermatology\", \n \"slug\": \"dermatology\", \n \"url\": \"http://yipit.com/montreal/deals/dermatology/\"\n }\n ], \n \"business\": {\n \"id\": 34372, \n \"name\": \"R\xC3\xAAve Soleil\", \n \"url\": \"\", \n \"locations\": [\n {\n \"id\": 44448, \n \"address\": \"4699 Boulevard Lavoisier\", \n \"locality\": \"Saint-L\xC3\xA9onard\", \n \"phone\": \"514-325-3459\", \n \"lat\": 45.584130100000003, \n \"lon\": -73.611951700000006\n }\n ]\n }, \n \"source\": {\n \"name\": \"TeamBuy\", \n \"slug\": \"team-buy\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/montreal/team-buy\"\n }\n }, \n {\n \"id\": 54040, \n \"date_added\": \"2011-03-14 13:44:32\", \n \"end_date\": \"2011-03-15 04:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 80, \n \"formatted\": \"80%\"\n }, \n \"price\": {\n \"raw\": \"12.00\", \n \"formatted\": \"$12\"\n }, \n \"value\": {\n \"raw\": \"60.00\", \n \"formatted\": \"$60\"\n }, \n \"purchased\": null, \n \"left\": null, \n \"title\": \"$12 for Unlimited Pool + 1 Beverage and Meal at Sharx Pool Bar ($60 Value)\", \n \"yipit_title\": \"80% off All You Can Play Pool and More\", \n \"url\": \"http://yipit.com/aff/click/?deal=UqbwCAwk&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/montreal/steal-the-deal/12-for-unlimited-pool-1-beverage-and-meal-at-sharx-pool-bar-60-value-1/\", \n \"mobile_url\": \"http://m.yipit.com/montreal/steal-the-deal/12-for-unlimited-pool-1-beverage-and-meal-at-sharx-pool-bar-60-value-1/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/12-for-unlimited-pool-1-beverage-and-meal-at-sharx-pool-bar-60-value-1-1300110272_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/12-for-unlimited-pool-1-beverage-and-meal-at-sharx-pool-bar-60-value-1-1300110272_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"montreal\", \n \"name\": \"Montreal \", \n \"active\": 1, \n \"time_zone_diff\": -5, \n \"lat\": 45.299999999999997, \n \"lon\": -73.349999999999994, \n \"url\": \"http://yipit.com/montreal/\"\n }, \n \"tags\": [\n {\n \"name\": \"Bar & Club\", \n \"slug\": \"bar-club\", \n \"url\": \"http://yipit.com/montreal/deals/bar-club/\"\n }\n ], \n \"business\": {\n \"id\": 34371, \n \"name\": \"Sharx Pool Bar\", \n \"url\": \"\", \n \"locations\": []\n }, \n \"source\": {\n \"name\": \"Steal the Deal\", \n \"slug\": \"steal-the-deal\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/montreal/steal-the-deal\"\n }\n }, \n {\n \"id\": 54039, \n \"date_added\": \"2011-03-14 13:42:31\", \n \"end_date\": \"2011-03-15 04:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 51, \n \"formatted\": \"51%\"\n }, \n \"price\": {\n \"raw\": \"39.00\", \n \"formatted\": \"$39\"\n }, \n \"value\": {\n \"raw\": \"80.00\", \n \"formatted\": \"$80\"\n }, \n \"purchased\": 38, \n \"left\": null, \n \"title\": \"$39 for a 1 Hour Therapeutic Massage and More at Spa Bora Bora\", \n \"yipit_title\": \"51% off a Therapeutic Massage and More\", \n \"url\": \"http://yipit.com/aff/click/?deal=7AVAySvU&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/montreal/red-flag-deals/39-for-a-1-hour-therapeutic-massage-and-more-at-spa-bora-bora/\", \n \"mobile_url\": \"http://m.yipit.com/montreal/red-flag-deals/39-for-a-1-hour-therapeutic-massage-and-more-at-spa-bora-bora/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/39-for-a-1-hour-therapeutic-massage-and-more-at-spa-bora-bora-1300110150_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/39-for-a-1-hour-therapeutic-massage-and-more-at-spa-bora-bora-1300110150_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"montreal\", \n \"name\": \"Montreal \", \n \"active\": 1, \n \"time_zone_diff\": -5, \n \"lat\": 45.299999999999997, \n \"lon\": -73.349999999999994, \n \"url\": \"http://yipit.com/montreal/\"\n }, \n \"tags\": [\n {\n \"name\": \"Massage\", \n \"slug\": \"massage\", \n \"url\": \"http://yipit.com/montreal/deals/massage/\"\n }, \n {\n \"name\": \"Spa\", \n \"slug\": \"spa\", \n \"url\": \"http://yipit.com/montreal/deals/spa/\"\n }\n ], \n \"business\": {\n \"id\": 34370, \n \"name\": \"Spa Bora Bora\", \n \"url\": \"\", \n \"locations\": [\n {\n \"id\": 44447, \n \"address\": \"4800 Rue Ren\xC3\xA9 \xC3\x89mard\", \n \"locality\": \"Pierrefonds\", \n \"phone\": \"514-620-9620\", \n \"lat\": 45.491167599999997, \n \"lon\": -73.848158499999997\n }\n ]\n }, \n \"source\": {\n \"name\": \"Red Flag Deals\", \n \"slug\": \"red-flag-deals\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/montreal/red-flag-deals\"\n }\n }, \n {\n \"id\": 54038, \n \"date_added\": \"2011-03-14 12:56:41\", \n \"end_date\": \"2011-03-15 09:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 91, \n \"formatted\": \"91%\"\n }, \n \"price\": {\n \"raw\": \"44.00\", \n \"formatted\": \"$44\"\n }, \n \"value\": {\n \"raw\": \"495.00\", \n \"formatted\": \"$495\"\n }, \n \"purchased\": 51, \n \"left\": null, \n \"title\": \"$44 for a 45 Minute Dental Exam and Cleaning, Including Oral Cancer Screening, TMJ Evaluation, Full Mouth Panoramic X-ray, Fluoride Treatment and Take-Home Whitening Pen at ProDent NY Dr. Benjamin Schwartz ($495 Value)\", \n \"yipit_title\": \"91% off a Dental Exam, Cleaning, and More\", \n \"url\": \"http://yipit.com/aff/click/?deal=8bNPRMMc&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/new-york/deal-find/44-for-a-45-minute-dental-exam-and-cleaning-including-oral-cancer-screening-tmj-evaluation-full-mouth-panoramic-x-ray-fluoride-treatment-and/\", \n \"mobile_url\": \"http://m.yipit.com/new-york/deal-find/44-for-a-45-minute-dental-exam-and-cleaning-including-oral-cancer-screening-tmj-evaluation-full-mouth-panoramic-x-ray-fluoride-treatment-and/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/44-for-a-45-minute-dental-exam-and-cleaning-including-oral-cancer-screening-tmj-evaluation-full-mouth-panoramic-x-ray-fluoride-treatment-and-1300107401_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/44-for-a-45-minute-dental-exam-and-cleaning-including-oral-cancer-screening-tmj-evaluation-full-mouth-panoramic-x-ray-fluoride-treatment-and-1300107401_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"new-york\", \n \"name\": \"New York\", \n \"active\": 1, \n \"time_zone_diff\": -4, \n \"lat\": 40.714269000000002, \n \"lon\": -74.005972999999997, \n \"url\": \"http://yipit.com/new-york/\"\n }, \n \"tags\": [\n {\n \"name\": \"Teeth Whitening\", \n \"slug\": \"teeth-whitening\", \n \"url\": \"http://yipit.com/new-york/deals/teeth-whitening/\"\n }, \n {\n \"name\": \"Dental\", \n \"slug\": \"dental\", \n \"url\": \"http://yipit.com/new-york/deals/dental/\"\n }\n ], \n \"business\": {\n \"id\": 17621, \n \"name\": \"ProDent NY\", \n \"url\": \"http://www.prodentny.com/\", \n \"locations\": [\n {\n \"id\": 18739, \n \"address\": \"220 Madison Ave, #B\", \n \"locality\": \"New York\", \n \"phone\": \"212-213-6622\", \n \"lat\": 40.749557500000002, \n \"lon\": -73.981841500000002\n }\n ]\n }, \n \"source\": {\n \"name\": \"DealFind\", \n \"slug\": \"deal-find\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/new-york/deal-find\"\n }\n }, \n {\n \"id\": 54037, \n \"date_added\": \"2011-03-14 12:54:32\", \n \"end_date\": \"2011-03-15 08:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 60, \n \"formatted\": \"60%\"\n }, \n \"price\": {\n \"raw\": \"120.00\", \n \"formatted\": \"$120\"\n }, \n \"value\": {\n \"raw\": \"300.00\", \n \"formatted\": \"$300\"\n }, \n \"purchased\": 20, \n \"left\": null, \n \"title\": \"$120 for a Certified Bartending Course with Empire Bartending Corporation ($300 Value)\", \n \"yipit_title\": \"60% off a Certified Bartending Course\", \n \"url\": \"http://yipit.com/aff/click/?deal=DRSqmaXY&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/new-york/ny-daily-news/120-for-a-certified-bartending-course-with-empire-bartending-corporation-300-value/\", \n \"mobile_url\": \"http://m.yipit.com/new-york/ny-daily-news/120-for-a-certified-bartending-course-with-empire-bartending-corporation-300-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/120-for-a-certified-bartending-course-with-empire-bartending-corporation-300-value-1300107271_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/120-for-a-certified-bartending-course-with-empire-bartending-corporation-300-value-1300107271_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"new-york\", \n \"name\": \"New York\", \n \"active\": 1, \n \"time_zone_diff\": -4, \n \"lat\": 40.714269000000002, \n \"lon\": -74.005972999999997, \n \"url\": \"http://yipit.com/new-york/\"\n }, \n \"tags\": [\n {\n \"name\": \"Life Skills Classes\", \n \"slug\": \"life-skills-classes\", \n \"url\": \"http://yipit.com/new-york/deals/life-skills-classes/\"\n }\n ], \n \"business\": {\n \"id\": 34369, \n \"name\": \"Empire Bartending Academy\", \n \"url\": \"http://www.empirebartendingacademy.com/\", \n \"locations\": []\n }, \n \"source\": {\n \"name\": \"NY Daily News\", \n \"slug\": \"ny-daily-news\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/new-york/ny-daily-news\"\n }\n }, \n {\n \"id\": 54036, \n \"date_added\": \"2011-03-14 12:51:33\", \n \"end_date\": \"2011-03-15 10:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 67, \n \"formatted\": \"67%\"\n }, \n \"price\": {\n \"raw\": \"49.00\", \n \"formatted\": \"$49\"\n }, \n \"value\": {\n \"raw\": \"150.00\", \n \"formatted\": \"$150\"\n }, \n \"purchased\": 0, \n \"left\": null, \n \"title\": \"$49 for One Month of Unlimited CrossFit Classes by CrossFit Knockout at South Florida Boxing ($150 Value)\", \n \"yipit_title\": \"67% off Unlimited CrossFit Classes\", \n \"url\": \"http://yipit.com/aff/click/?deal=npmcVdgk&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/miami/dealtificate/49-for-one-month-of-unlimited-crossfit-classes-by-crossfit-knockout-at-south-florida-boxing-150-value/\", \n \"mobile_url\": \"http://m.yipit.com/miami/dealtificate/49-for-one-month-of-unlimited-crossfit-classes-by-crossfit-knockout-at-south-florida-boxing-150-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/49-for-one-month-of-unlimited-crossfit-classes-by-crossfit-knockout-at-south-florida-boxing-150-value-1300107093_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/49-for-one-month-of-unlimited-crossfit-classes-by-crossfit-knockout-at-south-florida-boxing-150-value-1300107093_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"miami\", \n \"name\": \"Miami\", \n \"active\": 1, \n \"time_zone_diff\": -4, \n \"lat\": 25.7889689, \n \"lon\": -80.226439299999996, \n \"url\": \"http://yipit.com/miami/\"\n }, \n \"tags\": [\n {\n \"name\": \"Fitness Class\", \n \"slug\": \"fitness-classes\", \n \"url\": \"http://yipit.com/miami/deals/fitness-classes/\"\n }\n ], \n \"business\": {\n \"id\": 10967, \n \"name\": \"South Florida Boxing\", \n \"url\": \"http://southfloridaboxing.com/\", \n \"locations\": [\n {\n \"id\": 11296, \n \"address\": \"715 Washington Ave\", \n \"locality\": \"Miami\", \n \"phone\": \"305-672-8262\", \n \"lat\": 25.726782100000001, \n \"lon\": -80.259598400000002\n }\n ]\n }, \n \"source\": {\n \"name\": \"dealtificate\", \n \"slug\": \"dealtificate\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/miami/dealtificate\"\n }\n }, \n {\n \"id\": 54035, \n \"date_added\": \"2011-03-14 12:49:16\", \n \"end_date\": \"2011-03-15 10:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 75, \n \"formatted\": \"75%\"\n }, \n \"price\": {\n \"raw\": \"49.00\", \n \"formatted\": \"$49\"\n }, \n \"value\": {\n \"raw\": \"200.00\", \n \"formatted\": \"$200\"\n }, \n \"purchased\": null, \n \"left\": null, \n \"title\": \"$49 for $200 Worth of Designer Prescription Eyewear from Eye Desire Eyecare\", \n \"yipit_title\": \"75% off Designer Prescription Eyewear\", \n \"url\": \"http://yipit.com/aff/click/?deal=CkLqKx2z&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/miami/couptessa/49-for-200-worth-of-designer-prescription-eyewear-from-eye-desire-eyecare/\", \n \"mobile_url\": \"http://m.yipit.com/miami/couptessa/49-for-200-worth-of-designer-prescription-eyewear-from-eye-desire-eyecare/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/49-for-200-worth-of-designer-prescription-eyewear-from-eye-desire-eyecare-1300106955_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/49-for-200-worth-of-designer-prescription-eyewear-from-eye-desire-eyecare-1300106955_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"miami\", \n \"name\": \"Miami\", \n \"active\": 1, \n \"time_zone_diff\": -4, \n \"lat\": 25.7889689, \n \"lon\": -80.226439299999996, \n \"url\": \"http://yipit.com/miami/\"\n }, \n \"tags\": [\n {\n \"name\": \"Eye & Vision\", \n \"slug\": \"eye-vision\", \n \"url\": \"http://yipit.com/miami/deals/eye-vision/\"\n }\n ], \n \"business\": {\n \"id\": 21890, \n \"name\": \"Eye Desire Eyecare & Optical Boutique \", \n \"url\": \"http://www.eyedesire.com/\", \n \"locations\": [\n {\n \"id\": 27852, \n \"address\": \"1211 17th St\", \n \"locality\": \"Miami Beach\", \n \"phone\": null, \n \"lat\": 25.792051099999998, \n \"lon\": -80.141986299999999\n }, \n {\n \"id\": 44440, \n \"address\": \"136 NE 2nd Ave\", \n \"locality\": \"Miami\", \n \"phone\": null, \n \"lat\": 25.775928799999999, \n \"lon\": -80.190344699999997\n }\n ]\n }, \n \"source\": {\n \"name\": \"CoupTessa\", \n \"slug\": \"couptessa\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/miami/couptessa\"\n }\n }, \n {\n \"id\": 54034, \n \"date_added\": \"2011-03-14 12:33:50\", \n \"end_date\": \"2011-03-21 05:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 50, \n \"formatted\": \"50%\"\n }, \n \"price\": {\n \"raw\": \"15.00\", \n \"formatted\": \"$15\"\n }, \n \"value\": {\n \"raw\": \"30.00\", \n \"formatted\": \"$30\"\n }, \n \"purchased\": 87, \n \"left\": null, \n \"title\": \"$15 for $30 Worth of Mexican Fare at Primo's Mexican Grill\", \n \"yipit_title\": \"50% off at Primo's Mexican Grill\", \n \"url\": \"http://yipit.com/aff/click/?deal=D9ByCdzQ&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/vancouver/wag-jag/15-for-30-worth-of-mexican-fare-at-primos-mexican-grill/\", \n \"mobile_url\": \"http://m.yipit.com/vancouver/wag-jag/15-for-30-worth-of-mexican-fare-at-primos-mexican-grill/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/15-for-30-worth-of-mexican-fare-at-primos-mexican-grill-1300106030_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/15-for-30-worth-of-mexican-fare-at-primos-mexican-grill-1300106030_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"vancouver\", \n \"name\": \"Vancouver\", \n \"active\": 1, \n \"time_zone_diff\": -8, \n \"lat\": 49.159999999999997, \n \"lon\": -123.06999999999999, \n \"url\": \"http://yipit.com/vancouver/\"\n }, \n \"tags\": [\n {\n \"name\": \"Restaurants\", \n \"slug\": \"restaurants\", \n \"url\": \"http://yipit.com/vancouver/deals/restaurants/\"\n }\n ], \n \"business\": {\n \"id\": 34368, \n \"name\": \"Primo's Mexican Grill\", \n \"url\": \"http://www.primoson12th.com/\", \n \"locations\": [\n {\n \"id\": 44435, \n \"address\": \"1509 W 12th Ave\", \n \"locality\": \"Vancouver\", \n \"phone\": null, \n \"lat\": 49.260894700000001, \n \"lon\": -123.1391588\n }\n ]\n }, \n \"source\": {\n \"name\": \"WagJag\", \n \"slug\": \"wag-jag\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/vancouver/wag-jag\"\n }\n }, \n {\n \"id\": 54033, \n \"date_added\": \"2011-03-14 12:31:02\", \n \"end_date\": \"2011-03-16 00:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 61, \n \"formatted\": \"61%\"\n }, \n \"price\": {\n \"raw\": \"21.00\", \n \"formatted\": \"$21\"\n }, \n \"value\": {\n \"raw\": \"55.00\", \n \"formatted\": \"$55\"\n }, \n \"purchased\": 4, \n \"left\": null, \n \"title\": \"$21 for a $55 Credit for Easy Off Wall Murals from InkShuffle.com\", \n \"yipit_title\": \"61% off Wall Murals\", \n \"url\": \"http://yipit.com/aff/click/?deal=Etv4D3gU&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/vancouver/team-buy/21-for-a-55-credit-for-easy-off-wall-murals-from-inkshufflecom/\", \n \"mobile_url\": \"http://m.yipit.com/vancouver/team-buy/21-for-a-55-credit-for-easy-off-wall-murals-from-inkshufflecom/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/21-for-a-55-credit-for-easy-off-wall-murals-from-inkshufflecom-1300105862_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/21-for-a-55-credit-for-easy-off-wall-murals-from-inkshufflecom-1300105862_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"vancouver\", \n \"name\": \"Vancouver\", \n \"active\": 1, \n \"time_zone_diff\": -8, \n \"lat\": 49.159999999999997, \n \"lon\": -123.06999999999999, \n \"url\": \"http://yipit.com/vancouver/\"\n }, \n \"tags\": [\n {\n \"name\": \"Home Services\", \n \"slug\": \"home-services\", \n \"url\": \"http://yipit.com/vancouver/deals/home-services/\"\n }\n ], \n \"business\": {\n \"id\": 34367, \n \"name\": \"Ink Shuffle\", \n \"url\": \"http://inkshuffle.com/\", \n \"locations\": []\n }, \n \"source\": {\n \"name\": \"TeamBuy\", \n \"slug\": \"team-buy\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/vancouver/team-buy\"\n }\n }, \n {\n \"id\": 54032, \n \"date_added\": \"2011-03-14 12:28:52\", \n \"end_date\": \"2011-03-18 07:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 50, \n \"formatted\": \"50%\"\n }, \n \"price\": {\n \"raw\": \"20.00\", \n \"formatted\": \"$20\"\n }, \n \"value\": {\n \"raw\": \"40.00\", \n \"formatted\": \"$40\"\n }, \n \"purchased\": null, \n \"left\": null, \n \"title\": \"$20 gets you $40 of Artisan Eco Jewelry from Spark Sustainable Jewelry\", \n \"yipit_title\": \"50% off at Spark Jewelry\", \n \"url\": \"http://yipit.com/aff/click/?deal=hSwLse3m&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/vancouver/ethical-deal/20-gets-you-40-of-artisan-eco-jewelry-from-spark-sustainable-jewelry/\", \n \"mobile_url\": \"http://m.yipit.com/vancouver/ethical-deal/20-gets-you-40-of-artisan-eco-jewelry-from-spark-sustainable-jewelry/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/20-gets-you-40-of-artisan-eco-jewelry-from-spark-sustainable-jewelry-1300105731_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/20-gets-you-40-of-artisan-eco-jewelry-from-spark-sustainable-jewelry-1300105731_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"vancouver\", \n \"name\": \"Vancouver\", \n \"active\": 1, \n \"time_zone_diff\": -8, \n \"lat\": 49.159999999999997, \n \"lon\": -123.06999999999999, \n \"url\": \"http://yipit.com/vancouver/\"\n }, \n \"tags\": [\n {\n \"name\": \"Women's Clothing\", \n \"slug\": \"women-s-clothing\", \n \"url\": \"http://yipit.com/vancouver/deals/women-s-clothing/\"\n }\n ], \n \"business\": {\n \"id\": 34366, \n \"name\": \"Spark Jewelry\", \n \"url\": \"http://sparkjewlery.myshopify.com/\", \n \"locations\": []\n }, \n \"source\": {\n \"name\": \"ethicalDeal\", \n \"slug\": \"ethical-deal\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/vancouver/ethical-deal\"\n }\n }, \n {\n \"id\": 54031, \n \"date_added\": \"2011-03-14 12:24:59\", \n \"end_date\": \"2011-03-17 07:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 55, \n \"formatted\": \"55%\"\n }, \n \"price\": {\n \"raw\": \"40.00\", \n \"formatted\": \"$40\"\n }, \n \"value\": {\n \"raw\": \"90.00\", \n \"formatted\": \"$90\"\n }, \n \"purchased\": 0, \n \"left\": null, \n \"title\": \"$40 for $90 Worth of Interior Gutter Cleaning - Residential or Commercial from Magic Clean Eco Solutions\", \n \"yipit_title\": \"55% off Interior Gutter Cleaning\", \n \"url\": \"http://yipit.com/aff/click/?deal=RRE6RZrV&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/vancouver/web-piggy/40-for-90-worth-of-interior-gutter-cleaning-residential-or-commercial-from-magic-clean-eco-solutions/\", \n \"mobile_url\": \"http://m.yipit.com/vancouver/web-piggy/40-for-90-worth-of-interior-gutter-cleaning-residential-or-commercial-from-magic-clean-eco-solutions/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/40-for-90-worth-of-interior-gutter-cleaning-residential-or-commercial-from-magic-clean-eco-solutions-1300105499_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/40-for-90-worth-of-interior-gutter-cleaning-residential-or-commercial-from-magic-clean-eco-solutions-1300105499_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"vancouver\", \n \"name\": \"Vancouver\", \n \"active\": 1, \n \"time_zone_diff\": -8, \n \"lat\": 49.159999999999997, \n \"lon\": -123.06999999999999, \n \"url\": \"http://yipit.com/vancouver/\"\n }, \n \"tags\": [\n {\n \"name\": \"Home Services\", \n \"slug\": \"home-services\", \n \"url\": \"http://yipit.com/vancouver/deals/home-services/\"\n }\n ], \n \"business\": {\n \"id\": 34365, \n \"name\": \"Magic Clean Eco Solutions\", \n \"url\": \"http://www.magicclean.ca/\", \n \"locations\": [\n {\n \"id\": 44425, \n \"address\": \"\", \n \"locality\": \"Vancouver\", \n \"phone\": \"604-628-3388\", \n \"lat\": 49.261226000000001, \n \"lon\": -123.1139268\n }\n ]\n }, \n \"source\": {\n \"name\": \"WebPiggy\", \n \"slug\": \"web-piggy\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/vancouver/web-piggy\"\n }\n }, \n {\n \"id\": 54030, \n \"date_added\": \"2011-03-14 12:24:50\", \n \"end_date\": \"2011-03-16 02:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 82, \n \"formatted\": \"82%\"\n }, \n \"price\": {\n \"raw\": \"29.99\", \n \"formatted\": \"$29.99\"\n }, \n \"value\": {\n \"raw\": \"170.00\", \n \"formatted\": \"$170\"\n }, \n \"purchased\": null, \n \"left\": null, \n \"title\": \"$29.99 for 2 Massages and Sugar Scrub Body Treatment from Pure Escape Spa ($170 Value)\", \n \"yipit_title\": \"82% Off Two Massages and a Sugar Scrub\", \n \"url\": \"http://yipit.com/aff/click/?deal=774gfeB5&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/seattle/icoupon/2999-for-2-massages-and-sugar-scrub-body-treatment-from-pure-escape-spa-170-value/\", \n \"mobile_url\": \"http://m.yipit.com/seattle/icoupon/2999-for-2-massages-and-sugar-scrub-body-treatment-from-pure-escape-spa-170-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/2999-for-2-massages-and-sugar-scrub-body-treatment-from-pure-escape-spa-170-value-1300105490_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/2999-for-2-massages-and-sugar-scrub-body-treatment-from-pure-escape-spa-170-value-1300105490_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"seattle\", \n \"name\": \"Seattle\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 47.606209499999999, \n \"lon\": -122.3320708, \n \"url\": \"http://yipit.com/seattle/\"\n }, \n \"tags\": [\n {\n \"name\": \"Massage\", \n \"slug\": \"massage\", \n \"url\": \"http://yipit.com/seattle/deals/massage/\"\n }, \n {\n \"name\": \"Spa\", \n \"slug\": \"spa\", \n \"url\": \"http://yipit.com/seattle/deals/spa/\"\n }\n ], \n \"business\": {\n \"id\": 34364, \n \"name\": \"Pure Escape Spa\", \n \"url\": \"http://www.thepureescapespa.com/\", \n \"locations\": [\n {\n \"id\": 44424, \n \"address\": \"24030 132nd Ave SE\", \n \"locality\": \"Kent\", \n \"phone\": \"253-630-1332\", \n \"lat\": 47.386731599999997, \n \"lon\": -122.1653737\n }\n ]\n }, \n \"source\": {\n \"name\": \"iCoupon\", \n \"slug\": \"icoupon\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/seattle/icoupon\"\n }\n }, \n {\n \"id\": 54029, \n \"date_added\": \"2011-03-14 12:24:32\", \n \"end_date\": \"2011-03-18 17:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 78, \n \"formatted\": \"78%\"\n }, \n \"price\": {\n \"raw\": \"33.00\", \n \"formatted\": \"$33\"\n }, \n \"value\": {\n \"raw\": \"150.00\", \n \"formatted\": \"$150\"\n }, \n \"purchased\": 3, \n \"left\": null, \n \"title\": \"$33 for your Choice of 3 Pilates Mat or Reformer Sessions at Hot Body Pilates (up to $150 value)\", \n \"yipit_title\": \"78% off your Choice of 3 Pilates Mat or Reformer Sessions\", \n \"url\": \"http://yipit.com/aff/click/?deal=2HUqBqY8&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/san-diego/kgb-deals/33-for-your-choice-of-3-pilates-mat-or-reformer-sessions-at-hot-body-pilates-up-to-150-value/\", \n \"mobile_url\": \"http://m.yipit.com/san-diego/kgb-deals/33-for-your-choice-of-3-pilates-mat-or-reformer-sessions-at-hot-body-pilates-up-to-150-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/33-for-your-choice-of-3-pilates-mat-or-reformer-sessions-at-hot-body-pilates-up-to-150-value-1300105472_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/33-for-your-choice-of-3-pilates-mat-or-reformer-sessions-at-hot-body-pilates-up-to-150-value-1300105472_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"san-diego\", \n \"name\": \"San Diego\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 32.715328999999997, \n \"lon\": -117.15725500000001, \n \"url\": \"http://yipit.com/san-diego/\"\n }, \n \"tags\": [\n {\n \"name\": \"Pilates\", \n \"slug\": \"pilates\", \n \"url\": \"http://yipit.com/san-diego/deals/pilates/\"\n }\n ], \n \"business\": {\n \"id\": 15683, \n \"name\": \"Hot Body Pilates\", \n \"url\": \"http://hotbodypilates.com/\", \n \"locations\": [\n {\n \"id\": 44437, \n \"address\": \"560 6th Ave\", \n \"locality\": \"San Diego\", \n \"phone\": \"858-220-1415\", \n \"lat\": 32.711153000000003, \n \"lon\": -117.1593561\n }\n ]\n }, \n \"source\": {\n \"name\": \"kgb deals\", \n \"slug\": \"kgb-deals\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/san-diego/kgb-deals\"\n }\n }, \n {\n \"id\": 54028, \n \"date_added\": \"2011-03-14 12:24:29\", \n \"end_date\": \"2011-03-18 17:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 63, \n \"formatted\": \"63%\"\n }, \n \"price\": {\n \"raw\": \"49.00\", \n \"formatted\": \"$49\"\n }, \n \"value\": {\n \"raw\": \"135.00\", \n \"formatted\": \"$135\"\n }, \n \"purchased\": 0, \n \"left\": null, \n \"title\": \"$49 for a 90-Minute Luxury Electric Boat Rental from Newport Fun Tours ($135 Rental)\", \n \"yipit_title\": \"63% off Electric Boat Rentals\", \n \"url\": \"http://yipit.com/aff/click/?deal=spLw3wg8&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/los-angeles/kgb-deals/49-for-a-90-minute-luxury-electric-boat-rental-from-newport-fun-tours-135-rental/\", \n \"mobile_url\": \"http://m.yipit.com/los-angeles/kgb-deals/49-for-a-90-minute-luxury-electric-boat-rental-from-newport-fun-tours-135-rental/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/49-for-a-90-minute-luxury-electric-boat-rental-from-newport-fun-tours-135-rental-1300105469_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/49-for-a-90-minute-luxury-electric-boat-rental-from-newport-fun-tours-135-rental-1300105469_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"los-angeles\", \n \"name\": \"Los Angeles\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 34.052233999999999, \n \"lon\": -118.243685, \n \"url\": \"http://yipit.com/los-angeles/\"\n }, \n \"tags\": [\n {\n \"name\": \"Outdoor Adventures\", \n \"slug\": \"outdoor-adventures\", \n \"url\": \"http://yipit.com/los-angeles/deals/outdoor-adventures/\"\n }\n ], \n \"business\": {\n \"id\": 9292, \n \"name\": \"Newport Fun Tours\", \n \"url\": \"http://newportfuntours.com/\", \n \"locations\": [\n {\n \"id\": 9502, \n \"address\": \"2122 Newport Blvd\", \n \"locality\": \"Newport Beach\", \n \"phone\": \"949-675-8433\", \n \"lat\": 33.609636999999999, \n \"lon\": -117.928128\n }\n ]\n }, \n \"source\": {\n \"name\": \"kgb deals\", \n \"slug\": \"kgb-deals\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/los-angeles/kgb-deals\"\n }\n }, \n {\n \"id\": 54027, \n \"date_added\": \"2011-03-14 12:24:25\", \n \"end_date\": \"2011-03-18 17:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 50, \n \"formatted\": \"50%\"\n }, \n \"price\": {\n \"raw\": \"39.00\", \n \"formatted\": \"$39\"\n }, \n \"value\": {\n \"raw\": \"79.00\", \n \"formatted\": \"$79\"\n }, \n \"purchased\": 11, \n \"left\": null, \n \"title\": \"$39 for a 60-Minute Full-Body Neuromuscular Massage at Massage Revolution ($79 Value)\", \n \"yipit_title\": \"50% off a 60-Minute Neuromuscular Massage\", \n \"url\": \"http://yipit.com/aff/click/?deal=ZFFEzdF7&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/los-angeles/kgb-deals/39-for-a-60-minute-full-body-neuromuscular-massage-at-massage-revolution-79-value/\", \n \"mobile_url\": \"http://m.yipit.com/los-angeles/kgb-deals/39-for-a-60-minute-full-body-neuromuscular-massage-at-massage-revolution-79-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/39-for-a-60-minute-full-body-neuromuscular-massage-at-massage-revolution-79-value-1300105465_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/39-for-a-60-minute-full-body-neuromuscular-massage-at-massage-revolution-79-value-1300105465_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"los-angeles\", \n \"name\": \"Los Angeles\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 34.052233999999999, \n \"lon\": -118.243685, \n \"url\": \"http://yipit.com/los-angeles/\"\n }, \n \"tags\": [\n {\n \"name\": \"Massage\", \n \"slug\": \"massage\", \n \"url\": \"http://yipit.com/los-angeles/deals/massage/\"\n }\n ], \n \"business\": {\n \"id\": 4023, \n \"name\": \"Massage Revolution\", \n \"url\": \"http://www.massagerevolution.com/\", \n \"locations\": [\n {\n \"id\": 4053, \n \"address\": \"500 S Sepulveda Blvd\", \n \"locality\": \"Manhattan Beach\", \n \"phone\": \"310-798-4263\", \n \"lat\": 33.875138999999997, \n \"lon\": -118.39530600000001\n }\n ]\n }, \n \"source\": {\n \"name\": \"kgb deals\", \n \"slug\": \"kgb-deals\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/los-angeles/kgb-deals\"\n }\n }, \n {\n \"id\": 54026, \n \"date_added\": \"2011-03-14 12:24:24\", \n \"end_date\": \"2011-03-18 17:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 50, \n \"formatted\": \"50%\"\n }, \n \"price\": {\n \"raw\": \"12.00\", \n \"formatted\": \"$12\"\n }, \n \"value\": {\n \"raw\": \"24.00\", \n \"formatted\": \"$24\"\n }, \n \"purchased\": 4, \n \"left\": null, \n \"title\": \"$12 for a Ticket to San Francisco\xE2\x80\x99s Championship for The 27th Annual Harmony Sweepstakes A Cappella Festival on March 19 ($24 Value)\", \n \"yipit_title\": \"50% off a Ticket to the 27th Annual Harmony Sweepstakes A Cappella Festival\", \n \"url\": \"http://yipit.com/aff/click/?deal=vkG58DY7&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/san-francisco/kgb-deals/12-for-a-ticket-to-san-franciscos-championship-for-the-27th-annual-harmony-sweepstakes-a-cappella-festival-on-march-19-24-value/\", \n \"mobile_url\": \"http://m.yipit.com/san-francisco/kgb-deals/12-for-a-ticket-to-san-franciscos-championship-for-the-27th-annual-harmony-sweepstakes-a-cappella-festival-on-march-19-24-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/12-for-a-ticket-to-san-franciscos-championship-for-the-27th-annual-harmony-sweepstakes-a-cappella-festival-on-march-19-24-value-1300105464_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/12-for-a-ticket-to-san-franciscos-championship-for-the-27th-annual-harmony-sweepstakes-a-cappella-festival-on-march-19-24-value-1300105464_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"san-francisco\", \n \"name\": \"San Francisco\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 37.774929999999998, \n \"lon\": -122.419415, \n \"url\": \"http://yipit.com/san-francisco/\"\n }, \n \"tags\": [\n {\n \"name\": \"Theater\", \n \"slug\": \"theater\", \n \"url\": \"http://yipit.com/san-francisco/deals/theater/\"\n }\n ], \n \"business\": {\n \"id\": 34363, \n \"name\": \"The 27th Annual Harmony Sweepstakes A Cappella Festival\", \n \"url\": \"\", \n \"locations\": [\n {\n \"id\": 44438, \n \"address\": \"3301 Lyon St\", \n \"locality\": \"San Francisco\", \n \"phone\": \"415-392-4400\", \n \"lat\": 37.801884000000001, \n \"lon\": -122.448249\n }\n ]\n }, \n \"source\": {\n \"name\": \"kgb deals\", \n \"slug\": \"kgb-deals\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/san-francisco/kgb-deals\"\n }\n }, \n {\n \"id\": 54025, \n \"date_added\": \"2011-03-14 12:22:10\", \n \"end_date\": \"2011-03-15 07:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 62, \n \"formatted\": \"62%\"\n }, \n \"price\": {\n \"raw\": \"89.00\", \n \"formatted\": \"$89\"\n }, \n \"value\": {\n \"raw\": \"240.00\", \n \"formatted\": \"$240\"\n }, \n \"purchased\": null, \n \"left\": null, \n \"title\": \"$89 for 4 week Complete BootCamp with Get P.H.A.T Bootcamp in April ($240 Value)\", \n \"yipit_title\": \"62% off 4 Week Bootcamp\", \n \"url\": \"http://yipit.com/aff/click/?deal=DhX8gqmr&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/vancouver/steal-the-deal/89-for-4-week-complete-bootcamp-with-get-phat-bootcamp-in-april-240-value/\", \n \"mobile_url\": \"http://m.yipit.com/vancouver/steal-the-deal/89-for-4-week-complete-bootcamp-with-get-phat-bootcamp-in-april-240-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/89-for-4-week-complete-bootcamp-with-get-phat-bootcamp-in-april-240-value-1300105329_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/89-for-4-week-complete-bootcamp-with-get-phat-bootcamp-in-april-240-value-1300105329_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"vancouver\", \n \"name\": \"Vancouver\", \n \"active\": 1, \n \"time_zone_diff\": -8, \n \"lat\": 49.159999999999997, \n \"lon\": -123.06999999999999, \n \"url\": \"http://yipit.com/vancouver/\"\n }, \n \"tags\": [\n {\n \"name\": \"Boot Camp\", \n \"slug\": \"boot-camp\", \n \"url\": \"http://yipit.com/vancouver/deals/boot-camp/\"\n }\n ], \n \"business\": {\n \"id\": 34362, \n \"name\": \"Get Phat Boot Camp\", \n \"url\": \"http://www.getphatbootcamp.com/\", \n \"locations\": [\n {\n \"id\": 44420, \n \"address\": \"19572 Fraser Way\", \n \"locality\": \"Pitt Meadows\", \n \"phone\": \"778-834-7424\", \n \"lat\": 49.202722100000003, \n \"lon\": -122.67973019999999\n }\n ]\n }, \n \"source\": {\n \"name\": \"Steal the Deal\", \n \"slug\": \"steal-the-deal\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/vancouver/steal-the-deal\"\n }\n }, \n {\n \"id\": 54024, \n \"date_added\": \"2011-03-14 12:21:30\", \n \"end_date\": \"2011-03-16 11:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 50, \n \"formatted\": \"50%\"\n }, \n \"price\": {\n \"raw\": \"35.00\", \n \"formatted\": \"$35\"\n }, \n \"value\": {\n \"raw\": \"70.00\", \n \"formatted\": \"$70\"\n }, \n \"purchased\": null, \n \"left\": null, \n \"title\": \"$35 for a Series of 6 Beginning Bellydancing Classes with Leslie Rosen ($70 Value)\", \n \"yipit_title\": \"50% Off 6 Beginning Belly Dance Classes\", \n \"url\": \"http://yipit.com/aff/click/?deal=MSj22ehR&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/seattle/townhog/35-for-a-series-of-6-beginning-bellydancing-classes-with-leslie-rosen-70-value-2/\", \n \"mobile_url\": \"http://m.yipit.com/seattle/townhog/35-for-a-series-of-6-beginning-bellydancing-classes-with-leslie-rosen-70-value-2/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/35-for-a-series-of-6-beginning-bellydancing-classes-with-leslie-rosen-70-value-2-1300105289_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/35-for-a-series-of-6-beginning-bellydancing-classes-with-leslie-rosen-70-value-2-1300105289_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"seattle\", \n \"name\": \"Seattle\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 47.606209499999999, \n \"lon\": -122.3320708, \n \"url\": \"http://yipit.com/seattle/\"\n }, \n \"tags\": [\n {\n \"name\": \"Dance Classes\", \n \"slug\": \"dance-classes\", \n \"url\": \"http://yipit.com/seattle/deals/dance-classes/\"\n }\n ], \n \"business\": {\n \"id\": 27663, \n \"name\": \"Leslie Rosen @ Youngstown Cultural Arts Center\", \n \"url\": \"http://townhog.com/c_ext/2412/aHR0cDovL3d3dy5sZXNsaWVyb3Nlbi5jb20v\", \n \"locations\": [\n {\n \"id\": 36146, \n \"address\": \"4408 Delridge Way SW\", \n \"locality\": \"Seattle\", \n \"phone\": \"206-696-1444\", \n \"lat\": 47.563775, \n \"lon\": -122.363035\n }\n ]\n }, \n \"source\": {\n \"name\": \"TownHog\", \n \"slug\": \"townhog\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/seattle/townhog\"\n }\n }, \n {\n \"id\": 54023, \n \"date_added\": \"2011-03-14 12:19:24\", \n \"end_date\": \"2011-03-15 12:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 64, \n \"formatted\": \"64%\"\n }, \n \"price\": {\n \"raw\": \"24.00\", \n \"formatted\": \"$24\"\n }, \n \"value\": {\n \"raw\": \"68.00\", \n \"formatted\": \"$68\"\n }, \n \"purchased\": 60, \n \"left\": null, \n \"title\": \"$24 for an Oil Change, Including Oil, Lube and Filter, Tire Rotation, Plus a 40 Point Inspection at H&A Service ($68 Value)\", \n \"yipit_title\": \"64% off an Oil Change\", \n \"url\": \"http://yipit.com/aff/click/?deal=RgYY4eP4&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/vancouver/deal-find/24-for-an-oil-change-including-oil-lube-and-filter-tire-rotation-plus-a-40-point-inspection-at-ha-service-68-value/\", \n \"mobile_url\": \"http://m.yipit.com/vancouver/deal-find/24-for-an-oil-change-including-oil-lube-and-filter-tire-rotation-plus-a-40-point-inspection-at-ha-service-68-value/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/24-for-an-oil-change-including-oil-lube-and-filter-tire-rotation-plus-a-40-point-inspection-at-ha-service-68-value-1300105164_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/24-for-an-oil-change-including-oil-lube-and-filter-tire-rotation-plus-a-40-point-inspection-at-ha-service-68-value-1300105164_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"vancouver\", \n \"name\": \"Vancouver\", \n \"active\": 1, \n \"time_zone_diff\": -8, \n \"lat\": 49.159999999999997, \n \"lon\": -123.06999999999999, \n \"url\": \"http://yipit.com/vancouver/\"\n }, \n \"tags\": [\n {\n \"name\": \"Automotive Services\", \n \"slug\": \"automotive-services\", \n \"url\": \"http://yipit.com/vancouver/deals/automotive-services/\"\n }\n ], \n \"business\": {\n \"id\": 34361, \n \"name\": \"H&A Service\", \n \"url\": \"http://www.haservice.ca/\", \n \"locations\": [\n {\n \"id\": 44414, \n \"address\": \"5678 199 St\", \n \"locality\": \"Langley\", \n \"phone\": null, \n \"lat\": 49.105925800000001, \n \"lon\": -122.6708802\n }\n ]\n }, \n \"source\": {\n \"name\": \"DealFind\", \n \"slug\": \"deal-find\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/vancouver/deal-find\"\n }\n }, \n {\n \"id\": 54022, \n \"date_added\": \"2011-03-14 12:19:10\", \n \"end_date\": \"2011-03-15 08:00:00\", \n \"active\": 1, \n \"discount\": {\n \"raw\": 50, \n \"formatted\": \"50%\"\n }, \n \"price\": {\n \"raw\": \"10.00\", \n \"formatted\": \"$10\"\n }, \n \"value\": {\n \"raw\": \"20.00\", \n \"formatted\": \"$20\"\n }, \n \"purchased\": 7, \n \"left\": null, \n \"title\": \"$10 for $20 to Spend at Tenoch Mexican Grill\", \n \"yipit_title\": \"50% Off at Tenoch Mexican Grill\", \n \"url\": \"http://yipit.com/aff/click/?deal=DUZRJSF4&key=WYjGuDFf\", \n \"yipit_url\": \"http://yipit.com/seattle/voice-deal-of-the-day/10-for-20-to-spend-at-tenoch-mexican-grill/\", \n \"mobile_url\": \"http://m.yipit.com/seattle/voice-deal-of-the-day/10-for-20-to-spend-at-tenoch-mexican-grill/\", \n \"images\": {\n \"image_big\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/10-for-20-to-spend-at-tenoch-mexican-grill-1300105150_display_image.jpg\", \n \"image_small\": \"http://d22nv2k05ynu7x.cloudfront.net/deal_images/deal/10-for-20-to-spend-at-tenoch-mexican-grill-1300105150_small_image.jpg\"\n }, \n \"division\": {\n \"slug\": \"seattle\", \n \"name\": \"Seattle\", \n \"active\": 1, \n \"time_zone_diff\": -7, \n \"lat\": 47.606209499999999, \n \"lon\": -122.3320708, \n \"url\": \"http://yipit.com/seattle/\"\n }, \n \"tags\": [\n {\n \"name\": \"Restaurants\", \n \"slug\": \"restaurants\", \n \"url\": \"http://yipit.com/seattle/deals/restaurants/\"\n }\n ], \n \"business\": {\n \"id\": 34360, \n \"name\": \"Tenoch Mexican Grill\", \n \"url\": \"http://www.tenochmexicangrill.com/\", \n \"locations\": [\n {\n \"id\": 44413, \n \"address\": \"2232 Queen Anne Ave N\", \n \"locality\": \"Seattle\", \n \"phone\": \"206-352-3271\", \n \"lat\": 47.639417999999999, \n \"lon\": -122.35660300000001\n }\n ]\n }, \n \"source\": {\n \"name\": \"VOICE Deal of the Day\", \n \"slug\": \"voice-deal-of-the-day\", \n \"paid\": 0, \n \"url\": \"http://yipit.com/seattle/voice-deal-of-the-day\"\n }\n }\n ]\n }\n\
81
+ }"
82
+ http_version: "1.1"
@@ -0,0 +1,57 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+ describe Yipit::Client do
3
+ context "api" do
4
+ before(:all) do
5
+ api_key="XZgnp3v2vyrBr3eR"
6
+ @client = Yipit::Client.new(api_key)
7
+ end
8
+ context "deals" do
9
+ context "search deals" do
10
+ # use_vcr_cassette
11
+ before do
12
+ @deals = @client.deals
13
+ end
14
+ specify { @deals.size.should == 20 }
15
+ end
16
+ context "deal details" do
17
+ before do
18
+ @deals = @client.deals("7238")
19
+ end
20
+ specify { @deals.size.should == 1 }
21
+ end
22
+ end
23
+ context "sources" do
24
+ context "search sources" do
25
+ # use_vcr_cassette
26
+ before do
27
+ @sources = @client.sources
28
+ end
29
+ specify { @sources.size.should == 20 }
30
+ end
31
+ context "source details" do
32
+ before do
33
+ @sources = @client.sources("groupon")
34
+ end
35
+ specify { @sources.size.should == 1 }
36
+ specify { @sources.first.name.should == "Groupon" }
37
+ end
38
+ end
39
+ context "businesses" do
40
+ context "search businesses" do
41
+ # use_vcr_cassette
42
+ before do
43
+ @businesses = @client.businesses
44
+ end
45
+ specify { @businesses.size.should > 1 }
46
+ end
47
+ context "business details" do
48
+ before do
49
+ @businesses = @client.businesses(18005)
50
+ end
51
+ specify { @businesses.size.should == 1 }
52
+ specify { @businesses.first.name.should == "Orpheum Theatre" }
53
+ end
54
+ end
55
+ end
56
+ end
57
+
@@ -0,0 +1,20 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_group 'Yipit', 'lib/yipit'
4
+ add_group 'Specs', 'spec'
5
+ end
6
+
7
+ require File.expand_path('../../lib/yipit', __FILE__)
8
+ require 'rubygems'
9
+ require 'rspec'
10
+ require 'vcr'
11
+
12
+ VCR.config do |c|
13
+ c.cassette_library_dir = 'spec/cassettes'
14
+ c.stub_with :typhoeus
15
+ c.default_cassette_options = { :record => :new_episodes }
16
+ end
17
+
18
+ RSpec.configure do |c|
19
+ c.extend VCR::RSpec::Macros
20
+ end
data/yipit.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "yipit/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "yipit"
7
+ s.version = Yipit::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Josh Deeden"]
10
+ s.email = ["jdeeden@gmail.com"]
11
+ s.homepage = "http://github.com/jdeeden/yipit"
12
+ s.summary = %q{A simple wrapper for the Yipit API}
13
+ s.description = %q{A simple wrapper for the Yipit API}
14
+
15
+ s.rubyforge_project = "yipit"
16
+ s.add_development_dependency('rake', '~> 0.8')
17
+ s.add_development_dependency('rspec', '~> 2.5')
18
+ s.add_development_dependency('simplecov', '~> 0.4')
19
+ s.add_development_dependency('vcr', '~> 1.7.0')
20
+ s.add_development_dependency('fakeweb')
21
+ s.add_development_dependency('yard', '~> 0.6')
22
+ s.add_development_dependency('maruku', '~> 0.6')
23
+ s.add_runtime_dependency("faraday", '~> 0.5.7')
24
+ s.add_runtime_dependency("faraday_middleware", '~> 0.3.2')
25
+ s.add_runtime_dependency("typhoeus", '~> 0.2.4')
26
+ s.add_runtime_dependency('hashie', '~> 1.0.0')
27
+ s.add_runtime_dependency('multi_json', '~> 0.0.5')
28
+
29
+ s.files = `git ls-files`.split("\n")
30
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
31
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
32
+ s.require_paths = ["lib"]
33
+ end
metadata ADDED
@@ -0,0 +1,201 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yipit
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Josh Deeden
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-03-14 00:00:00 -04:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rake
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: "0.8"
25
+ type: :development
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: "2.5"
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: simplecov
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: "0.4"
47
+ type: :development
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: vcr
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: 1.7.0
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: fakeweb
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ type: :development
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: yard
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: "0.6"
80
+ type: :development
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
+ name: maruku
84
+ prerelease: false
85
+ requirement: &id007 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: "0.6"
91
+ type: :development
92
+ version_requirements: *id007
93
+ - !ruby/object:Gem::Dependency
94
+ name: faraday
95
+ prerelease: false
96
+ requirement: &id008 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 0.5.7
102
+ type: :runtime
103
+ version_requirements: *id008
104
+ - !ruby/object:Gem::Dependency
105
+ name: faraday_middleware
106
+ prerelease: false
107
+ requirement: &id009 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ~>
111
+ - !ruby/object:Gem::Version
112
+ version: 0.3.2
113
+ type: :runtime
114
+ version_requirements: *id009
115
+ - !ruby/object:Gem::Dependency
116
+ name: typhoeus
117
+ prerelease: false
118
+ requirement: &id010 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ~>
122
+ - !ruby/object:Gem::Version
123
+ version: 0.2.4
124
+ type: :runtime
125
+ version_requirements: *id010
126
+ - !ruby/object:Gem::Dependency
127
+ name: hashie
128
+ prerelease: false
129
+ requirement: &id011 !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ~>
133
+ - !ruby/object:Gem::Version
134
+ version: 1.0.0
135
+ type: :runtime
136
+ version_requirements: *id011
137
+ - !ruby/object:Gem::Dependency
138
+ name: multi_json
139
+ prerelease: false
140
+ requirement: &id012 !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ~>
144
+ - !ruby/object:Gem::Version
145
+ version: 0.0.5
146
+ type: :runtime
147
+ version_requirements: *id012
148
+ description: A simple wrapper for the Yipit API
149
+ email:
150
+ - jdeeden@gmail.com
151
+ executables: []
152
+
153
+ extensions: []
154
+
155
+ extra_rdoc_files: []
156
+
157
+ files:
158
+ - .gitignore
159
+ - .rvmrc
160
+ - Gemfile
161
+ - README.md
162
+ - Rakefile
163
+ - lib/core_ext/array.rb
164
+ - lib/yipit.rb
165
+ - lib/yipit/version.rb
166
+ - spec/cassettes/Yipit_Client/api/search_deals.yml
167
+ - spec/client/client_spec.rb
168
+ - spec/spec_helper.rb
169
+ - yipit.gemspec
170
+ has_rdoc: true
171
+ homepage: http://github.com/jdeeden/yipit
172
+ licenses: []
173
+
174
+ post_install_message:
175
+ rdoc_options: []
176
+
177
+ require_paths:
178
+ - lib
179
+ required_ruby_version: !ruby/object:Gem::Requirement
180
+ none: false
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: "0"
185
+ required_rubygems_version: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: "0"
191
+ requirements: []
192
+
193
+ rubyforge_project: yipit
194
+ rubygems_version: 1.6.2
195
+ signing_key:
196
+ specification_version: 3
197
+ summary: A simple wrapper for the Yipit API
198
+ test_files:
199
+ - spec/cassettes/Yipit_Client/api/search_deals.yml
200
+ - spec/client/client_spec.rb
201
+ - spec/spec_helper.rb