Skip to content

Instantly share code, notes, and snippets.

View david's full-sized avatar

David Leal david

View GitHub Profile
require 'zeus/rails'
class CucumberPlan < Zeus::Rails
def cucumber_environment
require 'cucumber/rspec/disable_option_parser'
require 'cucumber/cli/main'
@cucumber_runtime = Cucumber::Runtime.new
end
def cucumber(argv=ARGV)
We couldn’t find that file to show.
@david
david / gist:3247739
Created August 3, 2012 13:34
Lunacy? Or OO?
# Deciding how to handle a collection based on its size.
#
# Inspired by http://silkandspinach.net/2012/07/06/hexagonal-rails-hiding-the-finders/
#
# See below for usage
module Demux
def demux(demux, outputs = nil, &block)
if outputs && block_given?
raise ArgumentError, "Pass either a block or an object, not both"
module MyMixin
def say_hello
"hello!"
end
end
Object.new.extend(MyMixin).say_hello #=> "hello!"
class PersistentCollection
def initialize(klass)
@klass = klass
end
# ...
end
# This should be reusable
class ScopedCollection
@david
david / outcome.rb
Created October 10, 2012 08:55
Outcomes
class Outcome
HANDLER = "if_"
HANDLER_RX = /^#{HANDLER}/
QUERY_RX = /\?$/
def self.new(result, *args, &b)
super.tap { |o| yield o if block_given? }
end
def initialize(result, *args)
@david
david / alternative_1.rb
Created November 15, 2012 18:38
Which is better?
# admin/real_estate_companies.rb
ActiveAdmin.register RealEstateCompany do
form do |f|
f.inputs do
f.input :vendors, collection: Vendor.sorted_by_name
end
end
end
# models/vendor.rb
module Assertions
def demand(&block)
block.call or raise ConditionFailed
end
def promise(&block)
tap { |o| yield o or raise ConditionFailed }
end
def refuse(&block)