Instantly share code, notes, and snippets.

@jimweirich
jimweirich / allocation.rb
Last active Jan 3, 2016
This is a refactoring of the Allocation Elimination code. The original code (by Mike Doel and Adam McRae) was originally refactored by a large group at the Neo pairing booth at CodeMash. I then took the final version there and continued to refactor over the course of an evening and this is the result of that. I hope to blog about the refactoring…
View allocation.rb
Allocation = Struct.new(:project, :person, :start, :finish) do
include Comparable
def mergable_with?(other)
if start > other.start
other.mergable_with?(self)
else
same_assignment?(other) &&
finish >= other.start - 1
end
@jimweirich
jimweirich / beer_song_test.rb
Created Nov 19, 2013
For Cincy.rb tonight. Download the following test file. Remove the first "skip" command get the test to pass. Then remove the next "skip" command and continue.
View beer_song_test.rb
gem 'minitest'
require 'minitest/autorun'
require './beer_song'
class BeerSongTest < Minitest::Test
V8 =
"8 bottles of beer on the wall, 8 bottles of beer.\n" +
"Take one down and pass it around, 7 bottles of beer on the wall.\n"
View sample.new.rb
def new
allocate.tap { |obj| obj.initialize }
end
@jimweirich
jimweirich / Rakefile
Last active Jan 10, 2019
Bottles of Beer, for Sandi Metz
View Rakefile
#!/usr/bin/env ruby
require 'rake/clean'
require 'rake/testtask'
task :default => [:spec, :test]
task :spec do
sh "rspec ."
end
@jimweirich
jimweirich / weird.rb
Created Nov 5, 2013
What does the following print? I was surprised. (Actually, I was surprised it was legal syntax.)
View weird.rb
def foo(a=:default, b)
puts "a=#{a}, b=#{b}"
end
foo(:value)
foo(:x, :y)
@jimweirich
jimweirich / configure.rb
Created Oct 2, 2013
Demonstrating a flexible DSL for configuration .
View configure.rb
def project(name, &block)
Project.new(name, &block)
end
class Project
def initialize(name, &block)
@name = name
@context = eval("self", block.binding)
instance_eval(&block) if block_given?
View run.out
$ rspec xx_spec.rb
....
Finished in 0.00287 seconds
4 examples, 0 failures
@jimweirich
jimweirich / spy_test_fragment.rb
Created Aug 31, 2013
Example how to use argument matchers with spies.
View spy_test_fragment.rb
def test_spy
d = flexmock(f: :ok)
assert_equal :ok, d.f("Woof",2)
assert_spy_called d, :f, String, Integer
end
@jimweirich
jimweirich / JRuby_Output.txt
Last active Dec 21, 2015
Differences between JRuby and Ruby2 Ripper output
View JRuby_Output.txt
SOURCE: defined?(a)
RESULT:
[:program, [:stmts_add, [:stmts_new], [:defined, [:@rparen, ")", [1, 10]]]]]
SOURCE: "my name is #{name}"
RESULT:
[:program,
[:stmts_add,
[:stmts_new],
[:string_literal,
@jimweirich
jimweirich / sqrt_spec.rb
Created Aug 10, 2013
Square Root function
View sqrt_spec.rb
# -*- coding: utf-8 -*-
Sqrt = ->(n) {
guess = n / 2.0
loop do
if (guess**2 - n) < 0.0001
return guess
end
guess = (guess + n/guess) / 2.0
end