Skip to content

Instantly share code, notes, and snippets.

Avatar

Kasper Timm Hansen kaspth

View GitHub Profile
@kaspth
kaspth / output.rb
Last active Jun 6, 2019
Playground: test `segment` as a more broad `partition`.
View output.rb
# Ruby's Enumerable has `partition` to split it into true and false groups.
evens, odds = 1.upto(5).partition(&:even?)
evens # => [ 2, 4 ]
odds # => [ 1, 3, 5 ]
# But what if you have more than 2 segments? Well, here I'm playing with one way to do it.
# Respectively outputs:
# [[:first, :first], [:second, :second], [:third, :third]]
# [[:first, :first], [:second, :third, :second, :third]]
@kaspth
kaspth / after_runnable.rb
Created Sep 14, 2017
`Minitest.after_runnable` callbacks to execute after every test class method has been run… it might even work!
View after_runnable.rb
# minitest uses Gem.find_files, so this should be somewhere on the load path:
# $LOAD_PATH/minitest/after_runnable_plugin.rb
class Minitest
class AfterRunnableReporter < AbstractReporter
def initialize(after_runnable, methods)
@after_runnable, @methods = after_runnable, methods
end
def prerecord(klass, name)
@methods[klass].delete(name)
@kaspth
kaspth / upgrade_encrypted_secrets.rb
Last active May 2, 2018
A script to update encrypted secrets to use improved encryption.
View upgrade_encrypted_secrets.rb
# Download this to your Rails app directory and run with:
# bin/rails runner upgrade_encrypted_secrets.rb
# Everything below here is private API and not something your app should use.
Rails::Secrets.singleton_class.prepend Module.new {
def decrypt(data)
cipher = OpenSSL::Cipher.new("aes-256-cbc").decrypt
cipher.key = key
cipher.update(data) << cipher.final
end
View to_proc.rb
# This:
class String
def to_proc
split('.').to_proc
end
end
class Array
def to_proc
lambda do |obj|
View Event.m
#import "Event.h"
#import "AFNetworking.h" // it does not depend of AFNetworking at the moment, so I'd delete it
@implementation Event
// change the id here to instancetype, read more here http://nshipster.com/instancetype/
- (id)init
{
return [self initWithTitle:@"defaultTitle" detail:@"defaultDetail"]; // don't need to assign self
}
@kaspth
kaspth / old_css_select.rb
Last active Dec 20, 2015
An attempt to absolve css_select and assert_select from their argument parsing. To make the code more declarative and stuff... The order of arguments: 0: html element (optional) 1: selector 2: comparator 3: message
View old_css_select.rb
def css_select(*args)
# See assert_select to understand what's going on here.
arg = args.shift
if arg.is_a?(HTML::Node)
root = arg
arg = args.shift
elsif arg == nil
raise ArgumentError, "First argument is either selector or element to select, but nil found. Perhaps you called assert_select with an element that does not exist?"
elsif defined?(@selected) && @selected
@kaspth
kaspth / failures.txt
Last active Dec 19, 2015
The failures I'm seeing in sanitizers_test.rb.
View failures.txt
# In actionview dir run tests with
# rake test TEST=test/template/sanitizers_test.rb
1) Failure:
SanitizerTest#test_should_not_fall_for_xss_image_hack_4 [actionview/test/template/sanitizers_test.rb:173]:
Expected: "<img>"
Actual: "<img>alert(\"XSS\")\"&gt;"
2) Failure:
@kaspth
kaspth / scrub_that_api.rb
Last active Dec 18, 2015
A new API proposal for custom HTML scrubbing.
View scrub_that_api.rb
# By switching out the html-scanner lib with Loofah, we can make use of the custom HTML scrubbers within Loofah to get more control over what gets sanitized.
# This could be useful in apps where users submit text content.
# Say Twitter in an alternate universe allows users to format their tweets using some HTML tags. They then need a way to specify what tags are black- and/or whitelisted.
# This is an example of how it could work in a model.
class Comment < ActiveRecord::Base
# block based
# block takes a node
scrubs :body do |node|