Skip to content

Instantly share code, notes, and snippets.

@myronmarston
myronmarston / registry.ex
Last active September 23, 2016 17:35
Example of handling errors when using `GenServer.reply/2`
defmodule Registry do
# ...
def handle_call({:execute_against_shard, campaign_id, fun}, from, state) do
{shard_process, state} = find_or_create_shard(campaign_id, state)
ShardProcess.execute_and_reply(shard_process, fun, from)
{:noreply, state}
end
# ...
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:specs_prep) do |t|
t.rspec_opts = "--out tmp/specs_task.out"
end
task :specs => :specs_prep do
results = File.read("tmp/specs_task.out")
# do something with results
end
RSpec.configure do |config|
# Either put conditional logic in the hook...
config.around(:example) do |ex|
unless ex.metadata[:slow]
puts "Not tagged slow"
end
ex.run
end
A group of examples
 passes
 is pending (PENDING: not yet passing)
 fails (FAILED - 1)
 fails with a diff (FAILED - 2)
 fails with a multiline snippet in order to show off syntax highlighting (FAILED - 3)
Pending: (Failures listed here are expected and do not affect your suite's status)
HTTP/1.1 400 Bad Request
connection: close
server: Cowboy
date: Tue, 24 Nov 2015 20:24:58 GMT
content-length: 0
@myronmarston
myronmarston / observer.md
Created November 5, 2015 23:26 — forked from pnc/observer.md
Using Erlang observer/appmon remotely

Using OTP's observer (appmon replacement) remotely

$ ssh remote-host "epmd -names"
epmd: up and running on port 4369 with data:
name some_node at port 58769

Note the running on port for epmd itself and the port of the node you're interested in debugging. Reconnect to the remote host with these ports forwarded:

$ ssh -L 4369:localhost:4369 -L 58769:localhost:58769 remote-host
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
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.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
@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: