Skip to content

Instantly share code, notes, and snippets.

@eternal44
eternal44 / app_helpers_group_helper.rb
Last active August 26, 2015 18:05
lity.herokuapp.com - complex authorizations
module GroupHelper
def admin(group)
true if group.memberships.admin.where(user_id: current_user.id).present?
end
def regular(group)
true if group.memberships.member.where(user_id: current_user.id).present?
end
end
@eternal44
eternal44 / app_models_friendship.rb
Last active September 11, 2015 17:58
lity.herokuapp.com - complex associations
# == Schema Information
#
# Table name: friendships
#
# id :integer not null, primary key
# user_id :integer
# friend_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
require 'test_helper'
class RoutesTest < ActionDispatch::IntegrationTest
test 'should create new post' do
assert_routing({ path: 'posts', method: :post }, { controller: 'posts',
action: 'create' })
end
test 'should get post' do
assert_routing '/posts/1', { controller: 'posts', action: 'show', id: '1' }
#########
# PROXY #
#########
def fahrenheit_to_kelvin(value)
(value + 459.67) * 5 / 9
end
def kelvin_to_celcius(value)
value -= 273.15
@eternal44
eternal44 / temperature_conversions.rb
Created October 6, 2015 06:13
No argument in conversion methods
class UnitConversion
def initialize(measurement, unit)
@measurement = measurement
@unit = unit
end
# Proxy with Kelvin
def to_kelvin
case @unit
when 'celcius'
@eternal44
eternal44 / elseif.js
Created December 4, 2015 00:07
else / else if review
function each(collection, predicate){
if (Array.isArray(collection) || typeof collection === 'string'){
for (var i = 0; i < collection.length; i++){
predicate(collection[i]);
}
} else if(typeof collection === 'object') {
for (var j in collection){
predicate(collection[j]);
}
}
@eternal44
eternal44 / transform.js
Created December 9, 2015 02:16
transform (map) function
var transform = function(collection, predicate){
if (Array.isArray(collection)){
return collection.map(predicate);
} else if (typeof collection === 'string'){
collection = collection.split('');
return collection.map(predicate).join('');
} else if (typeof collection === 'object'){
return Object.keys(collection).reduce(function(results, property){
results[property] = predicate(collection[property]);
return results;
@eternal44
eternal44 / sort.js
Created December 15, 2015 15:44
Custom 'sort' function
var sort = function(arr){
var newArray = [];
var copyOfArr = arr;
var count = arr.length;
while(copyOfArr.length > 0){
var minIndex = copyOfArr.indexOf(Math.min.apply(null, arr));
newArray.push(Number(copyOfArr.splice(minIndex, 1)));
}
return newArray;
@eternal44
eternal44 / memoize.js
Last active December 20, 2015 18:14
Function decorators
_.memoize = function(func) {
var history = {};
/* PSEUDO CODE
check if func & arguments in history
if they are: look up the stored return value
if not: run it with 'once' and store it in 'history' as an object with 3 properties:
history = {
{
function: ____,
@eternal44
eternal44 / memoize.js
Created December 21, 2015 19:23
Memoize solution
_.memoize = function(func) {
var history = {};
var result;
return function() {
var args = Array.prototype.slice.call(arguments); // to set as object keys
var setResult = function(func){
result = func.apply(this, args);
};