public LiquidViewTemplate GetCachedTemplate(string source) { var errors = Enumerable.Empty <string>(); var result = _memoryCache.GetOrCreate(source, (ICacheEntry e) => { if (!_liquidViewParser.TryParse(source, out var parsed, out var error)) { // If the source string cannot be parsed, create a template that contains the parser errors _liquidViewParser.TryParse(String.Join(System.Environment.NewLine, errors), out parsed, out error); } // Define a default sliding expiration to prevent the // cache from being filled and still apply some micro-caching // in case the template is used commonly e.SetSlidingExpiration(TimeSpan.FromSeconds(30)); return(new LiquidViewTemplate(parsed)); });
public void Process(string path, string basePath, LocalizableStringCollection strings) { var liquidMetadataProvider = new LiquidMetadataProvider(basePath); var liquidVisitor = new ExtractingLiquidWalker(new[] { new LiquidStringExtractor(liquidMetadataProvider) }, strings); foreach (var file in Directory.EnumerateFiles(path, "*.liquid", SearchOption.AllDirectories).OrderBy(file => file)) { using (var stream = File.OpenRead(file)) { using (var reader = new StreamReader(stream)) { if (_parser.TryParse(reader.ReadToEnd(), out var template, out var errors)) { ProcessTemplate(template, liquidVisitor, file); } } } } }