Skip to content

Instantly share code, notes, and snippets.

@dsherret
dsherret / ensure-public-api-has-tests.ts
Last active September 24, 2018 18:02
Analyzes code to find missing tests.
/**
* Ensure Public API Has Tests
* ---------------------------
* This demonstrates analyzing code to find methods and properties from the public
* api that don't appear in the tests.
*
* This is a very basic implementation... a better implementation would examine more
* aspects of the code (ex. are the return values properly checked?) and report
* statistics about the tests that possibly indicate how they could be improved (ex.
* "this test has a lot of overlap with these other tests"). The goal would be to
// only works with number enums...
class EnumEx {
private constructor() {
}
static getMembersCount(e: any) {
return EnumEx.getNames(e).length;
}
static getMemberValue(e: any, memberName: string) {
import * as ts from "typescript";
import * as Lint from "tslint/lib/lint";
export class Rule extends Lint.Rules.AbstractRule {
static FAILURE_STRING = "duplicate imports from same file forbidden";
apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
return this.applyWithWalker(new NoImportsWalker(sourceFile, this.getOptions()));
}
}
@dsherret
dsherret / jquery.regex-limit.js
Last active December 28, 2017 09:43
Limit input by regex
/*!
* Copyright 2014 - David Sherret
* MIT License
*/
// Limits an input to specific values without checking keycodes and without flickering the value.
//
// Example usage:
// $("input").limitRegex(/^[0-9]+\.?[0-9]{0,2}$/); -- limit to numbers, up to 2 decimal places
//
@dsherret
dsherret / DictionaryExtensionMethods.cs
Last active May 31, 2017 20:34
Dictionary - AddIfNotExists Extension Method
/// <summary>
/// Very simple extension method for adding an item to a dictionary
/// and not evaluating the function unless the key doesn't exist.
///
/// Example with Entity Framework:
/// dataValueCache.AddIfNotExists(dataID, () => db.DataItems.First(d => d.DataID == dataID).Value);
/// </summary>
/// <param name="key">The dictionary key.</param>
/// <param name="value">The dictionary value.</param>
/// <returns>If the item was added to the dictionary.</returns>
export class ThrottledQueue {
private isThrottling = false;
private items: (() => void)[] = [];
constructor(private duration: number) {
}
run(item: () => void) {
this.items.push(item);
this.attemptExecute();
/* Typescript conversion of Ben Nadel's Collection class.
Based on the fact that subclassing Array directly does not work very well,
at least in Ecmascript versions < 6. Instead, this is based on creating a
collection from an array, where the actual methods are added to the array
after creation.
It works exactly like an array, while at the same time having additional
functionality.
*/