public void SetupDecoratorForTest()
        {
            Engine = new Mock <ILessEngine>();
            Cache  = new Mock <ICache>();

            Imports  = new List <string>();
            Less     = "the less";
            Css      = "the css";
            FileName = "file.less";
            CacheKey = FileName + "CEaZzayH8iHMO6dQWSalPiDS7TY=";
            Cached   = false;

            Engine.Setup(e => e.GetImports()).Returns(Imports);
            Engine.Setup(e => e.TransformToCss(Less, FileName)).Returns(() => Css);

            Cache.Setup(c => c.Exists(CacheKey)).Returns(() => Cached);
            Cache.Setup(c => c.Retrieve(CacheKey))
            .Returns(() => Cached ? Css : "")
            .Callback(() => { if (!Cached)
                              {
                                  Assert.Fail("not cached");
                              }
                      });

            CacheDecorator = new CacheDecorator(Engine.Object, Cache.Object);
        }
        public void RetrievesIfAlreadyCached()
        {
            Cached = true;

            CacheDecorator.TransformToCss(Less, FileName);

            Cache.Verify(c => c.Retrieve(CacheKey));
        }
        public void IncludesDependancyForAllImports()
        {
            Imports.Add("myfile.less");
            Imports.Add("myotherfile.less");

            CacheDecorator.TransformToCss(Less, FileName);

            Cache.Verify(c => c.Insert(CacheKey, It.Is <IEnumerable <string> >(i => Imports.All(s => i.Contains(s))), Css));
        }
Beispiel #4
0
            public static ICommandHandler <TCommand> DefaultWithRetry <TCommand>(object handler, IServiceProvider provider)
            {
                var logger      = provider.GetService <ILogger>();
                var cache       = provider.GetService <ICache>();
                var validations = provider.GetServices <IValidator <TCommand> >();

                var transactionDecorator = new TransactionDecorator <TCommand>((ICommandHandler <TCommand>)handler);
                var loggingDecorator     = new LoggingDecorator <TCommand>(transactionDecorator, logger);
                var validationDecorator  = new ValidationDecorator <TCommand>(loggingDecorator, validations);
                var retryDecorator       = new RetryDecorator <TCommand>(validationDecorator, logger, nrRetry: 3);
                var cacheDecorator       = new CacheDecorator <TCommand>(retryDecorator, cache);

                return(cacheDecorator); // order is revers for decorators
            }
        /// <inheritdoc />
        protected override Task <IEnumerable <IDocument> > ExecuteContextAsync(IExecutionContext context)
        {
            DotlessConfiguration config = DotlessConfiguration.GetDefault();

            // config.Logger = typeof(LessLogger);
            EngineFactory    engineFactory    = new EngineFactory(config);
            FileSystemReader fileSystemReader = new FileSystemReader(context.FileSystem);

            return(context.Inputs.ParallelSelectAsync(ProcessLessAsync));

            async Task <IDocument> ProcessLessAsync(IDocument input)
            {
                context.LogDebug("Processing Less for {0}", input.ToSafeDisplayString());

                // This is a hack to get to the underlying engine
                ParameterDecorator parameterDecorator = (ParameterDecorator)engineFactory.GetEngine();
                CacheDecorator     cacheDecorator     = (CacheDecorator)parameterDecorator.Underlying;
                LessEngine         engine             = (LessEngine)cacheDecorator.Underlying;

                engine.Logger = new LessLogger(context);
                ((Importer)engine.Parser.Importer).FileReader = fileSystemReader;

                // Less conversion
                FilePath path = await _inputPath.GetValueAsync(input, context);

                if (path != null)
                {
                    engine.CurrentDirectory = path.Directory.FullPath;
                }
                else
                {
                    engine.CurrentDirectory = string.Empty;
                    path = new FilePath(Path.GetRandomFileName());
                    context.LogWarning($"No input path found for document {input.ToSafeDisplayString()}, using {path.FileName.FullPath}");
                }
                string content = engine.TransformToCss(await input.GetContentStringAsync(), path.FileName.FullPath);

                // Process the result
                FilePath cssPath = path.GetRelativeInputPath(context).ChangeExtension("css");

                return(input.Clone(
                           cssPath,
                           await context.GetContentProviderAsync(content)));
            }
        }
        public void SetupDecoratorForTest()
        {
            Engine = new Mock<ILessEngine>();
            Cache = new Mock<ICache>();

            Imports = new List<string>();
            Less = "the less";
            Css = "the css";
            FileName = "file.less";
            CacheKey = FileName + "CEaZzayH8iHMO6dQWSalPiDS7TY=";
            Cached = false;

            Engine.Setup(e => e.GetImports()).Returns(Imports);
            Engine.Setup(e => e.TransformToCss(Less, FileName)).Returns(() => Css);

            Cache.Setup(c => c.Exists(CacheKey)).Returns(() => Cached);
            Cache.Setup(c => c.Retrieve(CacheKey))
                .Returns(() => Cached ? Css : "")
                .Callback(() => { if (!Cached) Assert.Fail("not cached"); });

            CacheDecorator = new CacheDecorator(Engine.Object, Cache.Object);
        }
Beispiel #7
0
        private static void LoadWithDecorators()
        {
            DABase      decd;
            EMFetcher   concrete = new EMFetcher();
            DBDecorator dbdec    = new DBDecorator();

            dbdec.SetComponent(concrete);
            CacheDecorator cachedec = new CacheDecorator();

            cachedec.SetComponent(dbdec);
            MemCacheDecorator memdec = new MemCacheDecorator();

            memdec.SetComponent(cachedec);

            decd = memdec;

            var results = new Dictionary <string, string>();

            decd.Load("loan", ref results);
            foreach (var a in results)
            {
                Console.WriteLine(a.Value);
            }
        }
        //TODO: Cache sadece bir kere yaratılmalı, her seferinde değil.
        public static IDao <TModel> Cached <TModel>(this IDao <TModel> decorated)
        {
            IDao <TModel> decorator = new CacheDecorator <TModel>(decorated);

            return(decorator);
        }
        public void OneDependancyIfNoImports()
        {
            CacheDecorator.TransformToCss(Less, FileName);

            Cache.Verify(c => c.Insert(CacheKey, It.Is <IEnumerable <string> >(i => i.Count() == 1), Css));
        }
        public void DependanciesContainsFileName()
        {
            CacheDecorator.TransformToCss(Less, FileName);

            Cache.Verify(c => c.Insert(CacheKey, It.Is <IEnumerable <string> >(i => i.Contains(FileName)), Css));
        }
        public void InsertsIfNotAlreadyCached()
        {
            CacheDecorator.TransformToCss(Less, FileName);

            Cache.Verify(c => c.Insert(CacheKey, It.IsAny <IEnumerable <string> >(), Css));
        }