Skip to content

Instantly share code, notes, and snippets.

View buren's full-sized avatar

Jacob Burenstam Linder buren

View GitHub Profile
@buren
buren / subdomain_matcher.rb
Created June 23, 2018 10:19
Match valid subdomain string.
SUBDOMAIN_MATCHER = /\A([a-z][a-z\d]*(-[a-z\d]+)*|xn--[\-a-z\d]+)\z/i
[
['as a', nil],
['a-a', 0],
['todd2', 0],
['todd-2', 0],
['todd-admin', 0],
['_todd-admin', nil],
['-todd-admin', nil],
@buren
buren / print_sitemap_urls.rb
Created June 14, 2018 15:13
Print Sitemap URLs
require 'open-uri'
require 'wayback_archiver' # requires `gem install wayback_archiver`
sitemap_urls = ARGV
sitemap_urls.map do |url|
sitemap_xml = open(url).read
sitemap = WaybackArchiver::Sitemap.new(sitemap_xml)
sitemap.urls
end.flat_map { |url| puts url }
@buren
buren / event_emitter.rb
Last active January 23, 2018 16:23
Simple event emitter
# Returns an event emitter class with given event names
# @return [Object] the event emitter class
# @param [String, Symbol] event_names
# @example Simple event emitter
# class CrawlEvent < EventEmitter(:found_url, :page_title)
# end
#
# event = CrawlEvent.new do |on|
# on.every_found_url { {|url| puts "Found URL: #{url}" }
# on.every_page_title { {|title| puts "Page title: #{title}" }
@buren
buren / cross-origin-local-storage.js
Created November 1, 2017 10:21
Cross origin local storage sharing example (using an iframe and postMessage)
const CrossOriginLocalStorage = function(currentWindow, iframe, allowedOrigins, onMessage) {
this.allowedOrigins = allowedOrigins;
let childWindow;
// some browser (don't remember which one) throw exception when you try to access
// contentWindow for the first time, it works when you do that second time
try {
childWindow = iframe.contentWindow;
} catch(e) {
childWindow = iframe.contentWindow;
const articles = {
data: [{
id: 3,
type: 'articles'
attributes: {
title: 'LMA-kort',
slug: 'lma-kort',
body_html: '<p>LMA-kort är ett bevis på...</p>',
language_id: 192,
traits: ['bank_account', 'skill_ids', 'resume', 'personal_letter'], // zero to many
class KeyStruct < Struct
def initialize(**keyword_args)
keyword_args.each do |key, value|
if members.include?(key)
self[key] = value
else
raise ArgumentError, "Unknown key struct member: #{key}"
end
end
end
{
"variables": [],
"info": {
"name": "WaybackArchiver",
"_postman_id": "e073f167-ab7a-2b60-024b-0e6d405cb45e",
"description": "API for api.waybackarchiver.com.",
"schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json"
},
"item": [
{
sv_lang = Language.find_by(lang_code: :sv)
en_lang = Language.find_by(lang_code: :en)
ar_lang = Language.find_by(lang_code: :ar)
root_industry = nil
result = csv.map do |row|
sv, en, ar = row
is_root_industry = false
if sv.start_with?('__')
@buren
buren / parse_documents.rb
Last active June 25, 2017 21:12
Parse documents with the yomu gem.
require 'yomu'
filename_or_stream = ARGV[0] # This could also be a tempfile or any object that responds to #read
parsed_document = Yomu.new(filename_or_stream)
metadata = parsed_document.metadata
result = {
title: metadata['title'],
created_at: metadata['meta:creation-date'],
@buren
buren / just-arrived-dev-machine-setup.md
Created May 12, 2017 12:05
Just Arrived - Dev machine setup

Just Arrived - Dev machine setup

  1. Install Homebrew

    First of all install Homebrew a.k.a brew (OSX package manager, like apt-get).

    Goto https://brew.sh/ and follow the instructions.

  2. Install Command Line Tools