Skip to content

Instantly share code, notes, and snippets.

# A sample Gemfile
source "https://rubygems.org"
gem 'rspec'
@myronmarston
myronmarston / a_string_including.rb
Created April 9, 2015 17:35
Example of using `a_string_including`
expect {
expect(the_dbl).to have_received(:expected_method).with(:one).once
}.to raise_error(Expectations::ExpectationNotMetError,
a_string_including("expected: 1 time",
"received: 2 times"))
@myronmarston
myronmarston / raise_error_spec.rb
Created April 10, 2015 16:58
Demonstration of using matcher for the first argument to `raise_error`
RSpec::Matchers.define :an_exception_caused_by do |cause|
match do |exception|
cause === exception.cause
end
end
expect {
begin
"foo".gsub # requires 2 args
rescue ArgumentError
class Sentence
def test(sen)
first = sen[0]
last = sen.split('').last
rest = sen[1..-1]
word_arr = sen.split
word_arr_len = word_arr.length
unless first == first.upcase then
puts "the first letter is not in uppercase"
@myronmarston
myronmarston / named_doubles.rb
Created July 9, 2015 17:48
How to get the name of a double.
# to get the name, you can use `instance_variable_get`:
tweet = double("Twitter::Tweet")
tweet.instance_variable_get(:@name) # => "Twitter::Tweet"
# that's clearly violating the public API, though. Another way is to pass it as a stub:
tweet = double("Twitter::Tweet", name: "Twitter::Tweet")
tweet.name # => "Twitter::Tweet"
# If you like that approach, you could create a new `named_double`
# helper method:
defmodule Delorean.Parallel do
def map(list, fun) do
list
|> Enum.map(fn(item) -> Task.async(fn -> fun.(item) end) end)
|> Enum.map(&Task.await/1)
end
end
defmodule MyApp.SnapshotRepositoryTest do
use ExUnit.Case, async: true
doctest MyApp.SnapshotRepository
alias MyApp.SnapshotRepository.SnapshotOptions
test "queries S3 with a prefix and returns the matched keys" do
options = %SnapshotOptions{ campaign_id: "prod.0.1", backend: "SomeBackend", cycle_type: "week" }
prefix = SnapshotOptions.to_key_prefix(options)
key_1 = "#{prefix}0/2013-03-19T15:04:50Z/mtoken.json.gz"
key_2 = "#{prefix}1/2013-03-19T15:04:50Z/mtoken.json.gz"
defmodule Delorean.RankingsShardRepository.RunningShard.Supervisor do
use Supervisor
def start_link(opts) do
Supervisor.start_link(__MODULE__, opts, [])
end
def start_shard(supervisor, shard_opts) do
Supervisor.start_child(supervisor, shard_opts)
end
@myronmarston
myronmarston / heroku.rake
Created December 18, 2009 23:48
Rake task to download a sql dump from a heroku app
namespace :heroku do
def app_name
@app_name ||= Heroku::Command::BaseWithApp.new([]).app
end
def latest_bundle(timeout = 30)
puts "Attempting to get latest bundle..."
get_bundle = lambda do
bundles = Heroku::Command.run('bundles', {})
bundles.sort { |b1, b2| b1[:created_at] <=> b2[:created_at] }
def find_element(xpath_expression, text, case_insensitive = false)
exp = if case_insensitive
xpath_expression % ["translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvqxyz')", text.downcase]
else
xpath_expression % ["text()", text]
end
unless elem = find(exp)
if case_insensitive
raise "Failed to find element using locator #{text}"