Skip to content

Instantly share code, notes, and snippets.

Kasper Timm Hansen kaspth

Block or report user

Report or block kaspth

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
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|
You can’t perform that action at this time.