예제 #1
0
        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 + "');";
        }
예제 #2
0
        public static AdRepo GetRepo()
        {
            if (repo == null)
            {
                repo = new AdRepo(GetIO(), HttpContext.Current.Server.MapPath("~/App_Data/"));
            }

            return repo;
        }
예제 #3
0
        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);
        }
예제 #4
0
        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());
        }