Skip to content

Instantly share code, notes, and snippets.

View trmcnvn's full-sized avatar
:shipit:

Thomas McNiven trmcnvn

:shipit:
View GitHub Profile
@trmcnvn
trmcnvn / authenticator.js
Last active November 3, 2016 15:28
ember couchdb
import Base from 'ember-simple-auth/authenticators/base';
import { remote } from 'budget/adapters/application';
import RSVP from 'rsvp';
import run from 'ember-runloop';
import get from 'ember-metal/get';
export default Base.extend({
restore(data) {
return new RSVP.Promise((resolve, reject) => {
if (get(data, 'name')) {
import Ember from 'ember';
const LAZY_KEY = 'REQUEST_COMPONENT_TWO_LAZY';
export default Ember.Component.extend({
isLoading: true,
lazy: Ember.inject.service(),
init() {
this._super(...arguments);
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
init() {
this._super(...arguments);
this.set('user', { name: 'vevix' });
}
});
@trmcnvn
trmcnvn / application-adapter.js
Created December 22, 2016 10:44
Cancel in-flight ember-data requests
export default JSONAPIAdapter.extend({
init() {
this._super(...arguments);
this.xhrRequests = [];
},
ajaxOptions() {
const options = this._super(...arguments);
const defaultBeforeSend = options.beforeSend;
options.beforeSend = function(xhr) {
@trmcnvn
trmcnvn / file.txt
Created May 24, 2017 21:46
Categories
Type
Looks
Exorcist
Digital Painting Studio
Poor
Salamander
Crinoline
Lion Books
Pottery
Lightning Magic
import Ember from 'ember';
import Changeset from 'ember-changeset';
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
init() {
this._super(...arguments);
this.model = new Ember.Object({ inputValue: 'Hello, World!' });
this.changeset = new Changeset(this.model, this.validate);
@trmcnvn
trmcnvn / keybase.md
Created May 29, 2018 02:05
Keybase Proof

Keybase proof

I hereby claim:

  • I am trmcnvn on github.
  • I am vevix (https://keybase.io/vevix) on keybase.
  • I have a public key whose fingerprint is 5339 A16C 444A 97BC 032F 2380 8962 FE71 D808 7F83

To claim this, I am signing this object:

action(query) {
const options = Object.assign({ cache: true }, query.options);
let key = Object.assign({}, query.expression, options);
key = JSON.stringify(sortObject(key));
const value = QUERY_CACHE[key];
if (value) {
if ((new Date()) > value) {
delete QUERY_CACHE[key];
} else {
04:35:59.714 POST https://kitsu.io/api/edge/posts [HTTP/2.0 201 Created 1590ms]
04:36:01.875 PATCH https://kitsu.io/api/edge/uploads/26756 [HTTP/2.0 200 OK 318ms]

# => https://kitsu.io/api/edge/uploads/26756
# => uploadOrder: 1
@trmcnvn
trmcnvn / directives.ts
Created February 8, 2019 21:02
GraphQL Directive example
import { SchemaDirectiveVisitor } from 'graphql-tools';
import { defaultFieldResolver, GraphQLField, GraphQLResolveInfo } from 'graphql';
import { ForbiddenError } from '../errors';
import { ContextParameters } from 'graphql-yoga/dist/types';
// Throws an error if the query requested a field that is marked by this directive
// and the requested user is not the authenticated user.
export default class OwnerDirective extends SchemaDirectiveVisitor {
visitFieldDefinition(field: GraphQLField<any, any>) {
this.checkIfOwner(field);