Skip to content

Instantly share code, notes, and snippets.

View jhannes's full-sized avatar

Johannes Brodwall jhannes

View GitHub Profile
@jhannes
jhannes / package.json
Last active August 29, 2015 14:10
Promises you can trust
{
"name": "promises",
"scripts": {
"test": "node node_modules/mocha/bin/mocha --watch --growl"
},
"devDependencies": {
"chai": "^1.10.0",
"mocha": "^2.0.1"
},
"dependencies": {
@jhannes
jhannes / AnnotationScanner.java
Created January 16, 2015 14:49
Jetty 9 embedded Servlet 3.0 annotations without war file
public class AnnotationScanner {
protected void scanForAnnotations(final String javaPackage, WebAppContext webapp) throws Exception {
Set<AnnotationParser.Handler> handlers = new HashSet<>();
handlers.add(new WebServletAnnotationHandler(webapp));
handlers.add(new WebFilterAnnotationHandler(webapp));
handlers.add(new WebListenerAnnotationHandler(webapp));
AnnotationParser annotationParser = new AnnotationParser();
for (URL url : ((URLClassLoader) getClass().getClassLoader()).getURLs()) {
@jhannes
jhannes / print-tree.clj
Created April 29, 2011 10:22
Tree pretty printer in clojure
(defn print-subtree [subtree prefix]
(if (empty? subtree)
""
(apply str prefix (first subtree) "\n"
(map #(print-subtree %1 (str "\t" prefix)) (rest subtree)))))
(defn print-tree [tree]
(print-subtree tree ""))
(deftest print-empty-tree
@jhannes
jhannes / investigate.rb
Created May 13, 2011 11:06
Refactoring in the 4th dimension
require 'rubygems'
require 'awesome_print'
load 'repodepot.rb'
class CodeEvent
def full_method_name
class_name + "#" + method_name
end
@jhannes
jhannes / minefield_spec.coffee
Created December 21, 2011 15:28
minefield_spec
describe "Explored minefield", ->
expectHints = (mines) ->
expect(new exports.Minefield(mines:mines,explored:true).hints())
it "shows rows and columns", ->
expectHints(["...","..."]).toEqual ["000", "000"]
it "shows minefield shape", ->
expectHints(["..","..",".."]).toEqual ["00","00","00"]
@jhannes
jhannes / minefield.coffee
Created January 26, 2012 19:20
CoffeeScript from irb.no 26th january
class exports.Minefield
constructor: (@cells)->
hints: ->
((@hint(row,col) for col in @cols()).join("") for row in @rows())
rows: -> [0...@cells.length]
cols: -> [0...@cells[0].length]
hint: (row,col) ->
@jhannes
jhannes / Separate Solar and Bounce
Created March 18, 2012 18:45
Mikado "tree" for "space" exercise 2
v Separate Solar system and bouncing ball logic
v Delete IS_BOUNCING_BALL flagg
v Move main method of Space to subclasses
v Create subclasses of "Space"
v Remove IS_BOUNCING_BALLS if-test in main
v Extract main method logic to non-static method
v Make IS_BOUNCING_BALLS into an argument
v Convert if statements into polymorphism
v Convert IS_BOUNCING_BALLS into non-static field in Space
v Move IS_BOUNCING_BALLS to Space
@jhannes
jhannes / shopping.coffee
Created March 20, 2012 19:31
Potter kata tests
class ShoppingCart
constructor: (@items)->
@counts = (count for item,count of @items).sort().reverse()
totalPrice: -> @subTotal() - @discount()
subTotal: ->
result = 0
result += count*8 for item,count of @items
result
discount: ->
@discountForSetOfSize(2, 5) +
@jhannes
jhannes / Xmldemo.java
Created June 26, 2012 20:48
Syntax proof-of-concept for XML library
public class Demo {
private static Object baseUrl;
public static void main(String[] args) {
Namespace SOAP_NS = new Namespace("http://soap.com", "SOAP");
Namespace MSG_NS = new Namespace("http://msg.com", "msg");
TagName envelopeTag = SOAP_NS.tag("Envelope");
Element envelope = envelopeTag.create(
@jhannes
jhannes / CurrencyPublisherTest.java
Created July 16, 2012 20:39
Test driving external dependencies
public class CurrencyPublisherTest {
private SubscriptionRepository subscriptionRepository = mock(SubscriptionRepository.class);
private EmailService emailService = mock(EmailService.class);
private CurrencyPublisher publisher = new CurrencyPublisher();
private CurrencyService currencyService = mock(CurrencyService.class);
private GeolocationService geolocationService = mock(GeolocationService.class);
@Test
public void shouldPublishCurrency() throws Exception {