Skip to content

Instantly share code, notes, and snippets.

View young-steveo's full-sized avatar
🦑
Workin'

Stephen Young young-steveo

🦑
Workin'
View GitHub Profile
@young-steveo
young-steveo / example2-refined.php
Last active June 20, 2018 19:24
Array Oriented Programming - Refined Transaction
<?php
final class Payment {
public function subscribe(PostParams $data) : Transaction {
$transaction = Transaction::fromPost($data);
$model = new TransactionModel();
$model->create($transaction);
$processor = $model->getProcessor($transaction); // a Processor object
@young-steveo
young-steveo / example2.php
Last active June 20, 2018 19:21
Array Oriented Programming - Bad Example
<?php
final class Payment {
public function subscribe(array $transaction) : array {
// 1
$transaction = [
'payment_method' => $transaction['payment_method'] ?? 'credit-card',
'amount' => $transaction['total'] ?? $transaction['subtotal'] ?? 0.0,
'currency' => $transaction['currency_code'] ?? 'USD'
] + $transaction;
$model = new TransactionModel();
@young-steveo
young-steveo / search.php
Last active June 20, 2018 17:38
Better Example
<?php
$model = new User();
$model->search(SearchParams::fromData($data));
@young-steveo
young-steveo / search.php
Last active June 20, 2018 17:38
Bad Example
<?php
if (empty($data["username"])) {
throw new \Exception("Username is required.");
}
if (empty($data["name"])) {
$first = $data["first_name"] ?? '';
$last = $data["last_name"] ?? '';
$data["name"] = "$first $last";
}
$params = new SearchParams($data['username'], $data['name']);
@young-steveo
young-steveo / SearchParams.php
Last active June 20, 2018 17:39
SearchParams Refactored
<?php
final class SearchParams {
private $username;
private $name;
private function __construct(string $username, string $name) {
$this->username = $username;
$this->name = $name;
}
public static function fromArray(array $params) : SearchParams {
if (empty($params["username"])) {
@young-steveo
young-steveo / apo-search-refactored.php
Last active June 20, 2018 17:39
Array Oriented Programming Refactored
<?php
final class User extends Requester {
public function search(SearchParams $params) : array {
return $this->request($params->toArray())->toArray();
}
}
@young-steveo
young-steveo / SearchParams.php
Last active June 20, 2018 17:37
Array Oriented Programming - Search Params
<?php
final class SearchParams {
private $username;
private $name;
public function __construct(string $username, string $name) {
$this->username = $username;
$this->name = $name;
}
public function toArray() : array {
return [
@young-steveo
young-steveo / aop.php
Last active June 20, 2018 14:47
Array Oriented Programming
<?php
final class User extends Requester {
public function search(array $params) : array {
if (empty($params["username"])) {
throw new \Exception("Username is required.");
}
if (empty($params["name"])) {
$first = $params["first_name"] ?? '';
$last = $params["last_name"] ?? '';
$params["name"] = "$first $last";
-----BEGIN PGP MESSAGE-----
Version: Keybase OpenPGP v2.0.53
Comment: https://keybase.io/crypto
wcFMA6nGlPiddoX9AQ/+M/7mRkzgaaS+aV5R1ZgUkEq3ohEC2mJToKwOHObulm1g
gNLRo3dHQjaJSfE0Egeli3HSAz+9j5NbjFZ5w9m1Rh59v8k5FHN/gXJPbls7d1OZ
lE7F1jVjjUUnt+2jMtFbf6dZCDsbm3QFZLQkasUUIwAbdGr/FOd/3mbf8ZLLaspD
5l2/p03fINCdAypVilZ2dOGxje8CVPA576Megn2qIo5wwdeRoLlNLVlCwHtyNQC/
KFjuVu6mUCwQM7oU4ChdJZeAnT/rY7iQOHJUmH2Gcj2uuYO1hZukuPD2sVYRK/Zk
yCFLolW1Gm2+6atQFki45U1qwWKAOHmvRWVUC9xxK/vydWKZssYp3Yvc1MrhjMvE
const path = require('path');
const glob = require('glob');
const express = require('express');
const Bottle = require('bottlejs');
const bottle = Bottle.pop('MyPdfApp'); // name your instance here.
glob.sync(path.join(path.resolve(__dirname), 'app/**/*.js')).forEach((match) => {
require(match); // just require, no need to pass the bottle reference.
});