Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View ourmaninamsterdam's full-sized avatar

Justin Perry ourmaninamsterdam

View GitHub Profile
@ourmaninamsterdam
ourmaninamsterdam / retryAsync.spec.ts
Created April 6, 2022 06:41
retryAsync - retry an async function a set amount of times
import retryAsync from '~utils/retryAsync';
describe('retryAsync', () => {
describe('with retry attempts left', () => {
describe('if the async function promise rejects', () => {
it('retries the given async function 3 times before eventually throwing', async () => {
const mockAsyncFn = jest.fn().mockRejectedValue('failed');
await expect(retryAsync(3, () => mockAsyncFn())).rejects.toThrow();
expect(mockAsyncFn).toHaveBeenCalledTimes(3);
@ourmaninamsterdam
ourmaninamsterdam / method-overloading.ts
Last active February 12, 2022 10:16
Method overloading in TypeScript
// Adapted from https://howtodoinjava.com/typescript/function-overloading
class MiddleEarthResident {
name: string;
constructor(name: string) {
this.name = name;
}
}
class ShireResident extends MiddleEarthResident {
@ourmaninamsterdam
ourmaninamsterdam / Person.java
Created July 17, 2021 09:41
Java - hierarchy relationship in an enum
// From https://stackoverflow.com/questions/44654291/is-it-good-practice-to-use-ordinal-of-enum
public enum Person {
GRANDPARENT(null),
PARENT(GRANDPARENT),
CHILD(PARENT);
private final Person parent;
private Person(Person parent) {
@ourmaninamsterdam
ourmaninamsterdam / useDirectorySync.ts
Created June 23, 2021 21:28
useDirectorySync - syncs React Native directories (using react-native-fs) on appState change
import { useState } from 'react';
import useAppState from 'react-native-appstate-hook';
import RNFS from 'react-native-fs';
async function copyDir(source: string, destination: string) {
const fileChangeLog: string[] = [];
await copyDirRecursive(source, destination, fileChangeLog);
return fileChangeLog;
@ourmaninamsterdam
ourmaninamsterdam / abstract.md
Last active January 16, 2021 11:32
Abstract list operations and signatures - racket-lang

Natural -> (listof X) - build-list

(listof X) -> (listof X) - filter

(listof X) -> (listof Y) - map

(listof X) -> Boolean - andmap

(listof X) -> Boolean - ormap

(define (find name dir)
(local [(define (c1 n rdirs rimgs)
(or (string=? name n)
rdirs
rimgs))
(define (c2 rdir rdirs)
(or rdir rdirs))
(define (c3 img rimgs)
false)]
(fold-dir c1 c2 c3 false false dir)))
@ourmaninamsterdam
ourmaninamsterdam / wait.ts
Last active November 19, 2020 09:55
For pausing execution while debugging
const wait = async (ms: number) =>
new Promise((resolve) => {
setTimeout(() => resolve(), ms);
});
await wait(10000); // wait for 10 seconds
// Continue...
@ourmaninamsterdam
ourmaninamsterdam / useDeviceOnlineStatus.ts
Last active November 19, 2020 09:54
useDeviceOnline wrapper hook for React Native's NetInfo
import NetInfo, { NetInfoState, NetInfoSubscription } from '@react-native-community/netinfo';
import { useState, useRef, useEffect } from 'react';
const useDeviceOnlineStatus = () => {
const [online, setOnline] = useState(false);
const unsubscribeRef = useRef<NetInfoSubscription | undefined>();
useEffect(() => {
unsubscribeRef.current = NetInfo.addEventListener((state: NetInfoState) => {
setOnline(state.isConnected);
@ourmaninamsterdam
ourmaninamsterdam / hyphenateText.js
Last active November 2, 2020 13:51
Forced text hyphenation
const hyphenateText = (text, breakpoint) => {
if (text.length > breakpoint) {
const words = text.split(' ');
return words.map((word) => {
if (word.length > breakpoint) {
const head = word.substr(0, breakpoint);
const tail = word.substr(breakpoint);
return `${head} -${tail}`;
}
return word;