Skip to content

Instantly share code, notes, and snippets.

View bajtos's full-sized avatar

Miroslav Bajtoš bajtos

View GitHub Profile
@bajtos
bajtos / discovery.js
Last active April 18, 2018 08:44
Discover LoopBack models
'use strict';
const loopback = require('loopback');
const promisify = require('util').promisify;
const fs = require('fs');
const writeFile = promisify(fs.writeFile);
const mkdirp = promisify(require('mkdirp'));
const app = loopback();
const db = app.dataSource('db', {
@bajtos
bajtos / text.md
Created February 2, 2018 10:54
On experimental and in-progress pull requests

On experimental and in-progress pull requests

Introduction

A recent discussion on GitHub (link) triggered a discussion about the protocol to use for work that takes longer to complete and/or is experimental.

So far, it seems the team reached the following consenus:

  • Pull request with a title prefixed with [WIP] are not done and ready for proper review. Early feedback is welcome though.
  • Pull requests with a title prefixed with [DO NOT REVIEW] should not be looked at at all.
@bajtos
bajtos / text.md
Created June 2, 2017 07:29
How we developed LoopBack 3.0

How to develop LoopBack 3.0

Based on the current roadmap for v3.0, it will take several months until we will be able to cut the final 3.0.0 release. In the meantime, we need keep improving 2.x series that most customers are running on. This document describes the process.

Note that we are bumping up the major version to 3.0 primarily in order to allow us to make breaking changes, as ruled by semver. This is different from marketing practice of bumping up the major version to create an impression that the product has matured to a next level.

Branching strategy

Not all loopback modules have to be bumped to 3.0. We will keep using the current major version (typically 2.x) in all modules where we can preserve backwards compatibility. The major version will be bumped (and a major-version branch will be created) only at the point when we need to land a backwards incompatible (breaking) change.

@bajtos
bajtos / issues.md
Last active June 8, 2016 11:34
Coercion in strong-remoting

Coercion in strong-remoting - issues & changes

Changes introduced by v2.16.1

json body - array of booleans: non-boolean values (null, 0, 1, 2) are coerced to booleans. String items "true"/"false" are converted to true/false.

json body - arrays: scalar values are coerced to arrays, e.g. request body 1 is converted to [1].

form data - arrays: malformed JSON-like value is treated as verbatim string. E.g. ?arg={malformed} is converted to ['{malformed}'].

@bajtos
bajtos / text.md
Last active September 27, 2016 22:06
LoopBack Replication & Offline sync

The offline data access & synchronization is built from three components:

  1. Change tracking
  2. Replication of changes
  3. Browser version of LoopBack

Setup

Enable change tracking

@bajtos
bajtos / 1-updateattributes.js
Last active August 29, 2015 14:16
Model.updateAttributes
var loopback = require('loopback');
var app = loopback();
var Car = loopback.createModel('Car');
Car.observe('before save', function(ctx) {
console.log('before save %j', ctx);
return Promise.resolve();
});
@bajtos
bajtos / Git intro.md
Last active January 3, 2017 15:32
Introduction to GitHub workflow
@bajtos
bajtos / hooks-status.md
Last active April 18, 2016 09:53
LoopBack Hooks
@bajtos
bajtos / 1-source benchmark-fs-promised-stat.js
Last active August 29, 2015 14:11
Benchmark of fs.stat with promises
// Call fs.stat over and over again really fast.
// Then see how many times it got called.
// Yes, this is a silly benchmark. Most benchmarks are silly.
var path = require('path');
var common = require('../common.js');
var fs = require('fs');
var FILES = [
require.resolve('../../lib/assert.js'),
@bajtos
bajtos / testing-framework.md
Last active August 29, 2015 14:10
Unit-test framework requirements
  • API to group test cases into test suites, e.g. describe and it

  • setup/teardown hooks (before, beforeEach, after, afterEach)

  • Support for promises: test case returns a promise, the test runner waits until the promise is resolved

  • Output formatters: junit/xunit for CI, spec-like for humans (a list of failed tests is printed again at the end)

  • Run all tests in a single file, run a single test case, run a single test suite.