public static string GetAdAsScript(AdRepo repo, iDateTime dateTime, string zoneName) { var output = GetAd(repo, dateTime, zoneName).Html; output = output.Replace("'", "\\'").Replace("\r\n", "").Replace("\n", "").Replace("\r", ""); return "document.write('" + output + "');"; }
public static AdRepo GetRepo() { if (repo == null) { repo = new AdRepo(GetIO(), HttpContext.Current.Server.MapPath("~/App_Data/")); } return repo; }
public static IAd GetAd(AdRepo repo, iDateTime dateTime, string zoneName) { // Get the given zone var zone = repo.Zones.FirstOrDefault(z => z.Name.ToLower() == zoneName.ToLower()); if (zone == null) { throw new Exception("Zone not found"); } // Get all ads that have a time span covering now var now = dateTime.Now(); var ads = zone.Ads.Where(a => a.StartDate < now && a.EndDate > now).ToList(); //if (ads.Count == 0) //{ // // return Error ad, or blank ad // return new DummyAd( //} // Get the sum of all rotation values var sum = ads.Sum(a => a.Rotation); // Select one at random, weighted by rotation var randomSelector = r.Next(0, sum); var counter = 0; while (randomSelector > -1) { if (ads[counter].Rotation > randomSelector) { return ads[counter]; } randomSelector -= ads[counter].Rotation; counter++; } throw new Exception("this should never happen, probably an off by 1 error. r = " + randomSelector); }
public void AdRepo_Should_Load_Zones_From_Directories() { var io = new ZoneTest.TestIO(); var list = new List<string>() { "file1", "file2" }; var leader = new ZoneTest.DummyDirectory("leader"); var box = new ZoneTest.DummyDirectory("box"); var sky = new ZoneTest.DummyDirectory("sky"); io.DummyDirectories.Add("leader", leader); io.DummyDirectories.Add("box", box); io.DummyDirectories.Add("sky", sky); var sut = new AdRepo(io, "root"); Assert.AreEqual(3, sut.Zones.Count()); }