Skip to content

Instantly share code, notes, and snippets.

@kimjoar
kimjoar / fakeresponse.js
Created April 30, 2012 08:52
Wrapping Sinon.js Ajax mocking
function fakeResponse(response, options, callback) {
var statusCode, headers, server, resp;
// some default values, so we don't have to set status code and
// content type all the time.
statusCode = options.statusCode || 200;
headers = options.headers || { "Content-Type": "application/json" }
// we create what Sinon.js calls a fake server. This is basically just
// a name for mocking out all XMLHttpRequests. (There are no actual
@kimjoar
kimjoar / integration-test.js
Created April 30, 2012 08:53
integration testing Backbone.js
it("should show error message when pagination fails", function() {
// ajax responses
var response = readFixtures("responses/persons.json");
var errorResponse = readFixtures("responses/errors.json");
// create our initial view
var view = new PersonsView({ collection: new Persons() });
view.render(); // show header and other static stuff
@kimjoar
kimjoar / test-abstraction.js
Created April 30, 2012 08:54
getPersonsViewFromResponse
function getPersonsViewFromResponse(response, options) {
var view = new PersonsView({ collection: new Persons() });
view.render();
fakeResponse(response, options, function() {
view.collection.fetch();
});
return view;
}
@kimjoar
kimjoar / view-example.js
Created May 2, 2012 11:59
An example of a view
// a view constructor which accepts:
// - el, which is a jQuery object of the HTML element the view owns
// - user, which is a user model with key-value pairs
var UserView = function(el, user) {
this.el = el;
this.user = user;
}
UserView.prototype.showImage = function() {
this.el.append('<img src="' + user.image + '" />');
describe('user view', function() {
it('should be able to show image', function() {
var user = {
image: "user.png"
};
var view = new UserView($('<div></div>'), user);
view.showImage();
// remember that `view.el` is a jQuery object. So now we can call
@kimjoar
kimjoar / view-helper.js
Created May 2, 2012 12:02
jQuery view helper
UserView.prototype.$ = function(selector) {
return this.el.find(selector);
}
@kimjoar
kimjoar / events-example.js
Created May 2, 2012 12:02
EventEmitter example
var events = new EventEmitter();
var UserView = function(el, user) {
this.el = el;
this.user = user;
// Let's listen for someone emitting the event 'user:showImage', which
// we listen for and then show the user's image.
// The first parameter is the event name, the second is the function
// to call when the event is triggered, and the third is the context
@kimjoar
kimjoar / RubyXmlDslExercise.md
Created May 23, 2012 06:25 — forked from follesoe/RubyXmlDslExercise.md
Simple Ruby XML DSL exercise implemented by Torgeir and Jonas

Simple Ruby DSL to generate XML

Implemented as an exercise to learn about metaprogramming in Ruby. The DSL is implemented using instance_eval and method_missing.

Usage

require 'xmldsl'

Twitter = Struct.new :name, :avatar, :text
twitters = []
5.times { twitters << Twitter.new("Jonas", "/profile.png", "Hello World!") }
@kimjoar
kimjoar / create_xml.rb
Created May 23, 2012 06:47
Simple Ruby DSL to generate XML
require './xmldsl'
Twitter = Struct.new :name, :avatar, :text
twitters = []
5.times { twitters << Twitter.new("Jonas", "/profile.png", "Hello World!") }
xml = XML.generate do
html do
body do
twitters.each do |tw|
@kimjoar
kimjoar / 1.diff
Created July 13, 2012 19:57
Step 1 -> 2
+function addStatus(options) {
+ $.ajax({
+ url: '/status',
+ type: 'POST',
+ dataType: 'json',
+ data: { text: $('#new-status textarea').val() },
+ success: function(data) {
+ $('#statuses ul').append('<li>' + data.text + '</li>');
+ $('#new-status textarea').val('');
+ }