Skip to content

Instantly share code, notes, and snippets.

View Kashkovsky's full-sized avatar
😎

Denys Kashkovskyi Kashkovsky

😎
  • Grammarly, Inc.
  • Kyiv, Ukraine
View GitHub Profile
@Kashkovsky
Kashkovsky / MockBaseRepository.cs
Created June 8, 2016 10:10
Mock for abstract base repository
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using Moq;
namespace Test.Common.Mock.Repository
{
public abstract class MockBaseRepository<T, TEntity> : Mock<T>
where TEntity : class, IEntity
where T : BaseRepository<TEntity>
@Kashkovsky
Kashkovsky / NamespaceConstraint.cs
Created June 8, 2016 12:38
Namespace constraint attribute
public class NamespaceConstraint : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
{
var dataTokenNamespace = (string)controllerContext.RouteData.DataTokens.FirstOrDefault(dt => dt.Key == "Namespace").Value;
var actionNamespace = methodInfo?.DeclaringType?.FullName;
return dataTokenNamespace == actionNamespace;
}
}
@Kashkovsky
Kashkovsky / ApplicationDynamicDiscovery.cs
Last active June 8, 2016 15:20
Dynamic discovery of mvc application assemblies
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Web.Compilation;
//Add to AssemblyInfo [assembly: PreApplicationStartMethod(typeof(ApplicationDynamicDiscovery), "Discover")]
namespace Web
{
public static class ApplicationDynamicDiscovery
@Kashkovsky
Kashkovsky / NinjectControllerFactory.cs
Created June 8, 2016 13:13
Ninject Controller Factory
using Ninject;
using System;
using System.Web.Mvc;
namespace Factories
{
public class NinjectControllerFactory : DefaultControllerFactory
{
public IKernel Kernel { get; private set; }
@Kashkovsky
Kashkovsky / HttpResponseResult.cs
Last active June 9, 2016 16:06
Web Api HttpResponseResult
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq.Expressions;
using System.Net;
using System.Net.Http;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using System.Web.Http.ModelBinding;
@Kashkovsky
Kashkovsky / CustomAuth.cs
Last active June 10, 2016 09:28
Custom authorize attribute
using System;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
namespace Common
{
public class CustomAuthAttribute : AuthorizeAttribute
@Kashkovsky
Kashkovsky / csvparse.js
Created June 15, 2016 08:06
JS CSV parser
// ref: http://stackoverflow.com/a/1293163/2343
// This will parse a delimited string into an array of
// arrays. The default delimiter is the comma, but this
// can be overriden in the second argument.
function CSVToArray( strData, strDelimiter ){
// Check to see if the delimiter is defined. If not,
// then default to comma.
strDelimiter = (strDelimiter || ",");
// Create a regular expression to parse the CSV values.
@Kashkovsky
Kashkovsky / gulpfile.js
Created June 15, 2016 23:30
Common gulpfile
var lr = require('tiny-lr'),
gulp = require('gulp'),
nib = require('nib'),
jade = require('gulp-jade'),
stylus = require('gulp-stylus'),
livereload = require('gulp-livereload'),
myth = require('gulp-myth'),
csso = require('gulp-csso'),
imagemin = require('gulp-imagemin'),
uglify = require('gulp-uglify'),
@Kashkovsky
Kashkovsky / Logger.cs
Created November 15, 2017 15:29
C# Logger with log rotation
public abstract class Logger : IDisposable
{
private LogVerbosity _verbosity;
private Queue<Action> _queue = new Queue<Action>();
private ManualResetEvent _hasNewItems = new ManualResetEvent(false);
private ManualResetEvent _terminate = new ManualResetEvent(false);
private ManualResetEvent _waiting = new ManualResetEvent(false);
private Thread _loggingThread;
private static readonly Lazy<Logger> _lazyLog = new Lazy<Logger>(() => {
@Kashkovsky
Kashkovsky / Button.js
Created April 25, 2018 13:33
Overriding Office UI Fabric component styles using Styling API
import * as React from 'react';
import PropTypes from 'prop-types';
import { DefaultButton } from 'office-ui-fabric-react/lib/Button';
import { getStyles } from './Button.styles';
import { classNamesFunction, customizable, styled } from 'office-ui-fabric-react/lib/Utilities';
/** Button example */
export function Button({ label, disabled, onClick, isPrimary, className, getStyles, theme }) {
const classNames = classNamesFunction()(getStyles, {
theme: theme,