Skip to content

Instantly share code, notes, and snippets.

View KamilLelonek's full-sized avatar
🏋️‍♂️
Do you even lift?

Kamil Lelonek KamilLelonek

🏋️‍♂️
Do you even lift?
View GitHub Profile
@KamilLelonek
KamilLelonek / clients_controller.rb
Created February 1, 2016 07:18
Tell-Don't-Ask violation
class ClientsController < ApplicationController
def create
@client = Client.new(params[:client])
if @client.save
redirect_to @client
else
flash.now[:error] = "Could not save client"
render action: "new"
end
end
@KamilLelonek
KamilLelonek / file_writer.rb
Created January 31, 2016 20:23
FileWriter usage in Ruby
require_relative 'default_file_writer'
require_relative 'no_overwrite_file_writer'
require_relative 'no_null_file_writer'
file_writer = NoOverwriteFileWriter.new(
NoNullFileWriter.new(
DefaultFileWriter.new
)
)
@KamilLelonek
KamilLelonek / no_null_file_writer.rb
Created January 31, 2016 19:58
No null FileWriter in Ruby
class NoNullFileWriter
def initialize(default_file_writer)
@default_file_writer = default_file_writer
end
def write(path, contents)
fail_if_empty_contents(contents)
default_file_writer.write(path, contents)
end
@KamilLelonek
KamilLelonek / no_overwrite_file_writer.rb
Created January 31, 2016 19:53
No overwrite FileWriter in Ruby
class NoOverwriteFileWriter
def initialize(default_file_writer)
@default_file_writer = default_file_writer
end
def write(path, contents)
fail_if_file_exist(path)
default_file_writer.write(path, contents)
end
@KamilLelonek
KamilLelonek / default_file_writer.rb
Created January 31, 2016 19:46
Default FileFriter in Ruby
class DefaultFileWriter
def write(path, contents)
IO.write(path, contents)
end
end
@KamilLelonek
KamilLelonek / defensive_file_writer.rb
Last active January 31, 2016 19:47
Defensive FileWriter in Ruby
class DefensiveFileWriter
def write(path, contents)
fail_if_empty_contents(contents)
fail_if_file_exist(path)
write_file(path, contents)
end
private
def fail_if_empty_contents(contents)
raise 'Nothing to write!' if empty_contents?(contents)
@KamilLelonek
KamilLelonek / build.gradle
Last active October 23, 2015 19:17
Gradle config for Android Scala project
buildscript {
repositories {
maven { url 'https://dl.bintray.com/drummer-aidan/maven' }
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:1.3.1"
classpath "jp.leafytree.gradle:gradle-android-scala-plugin:1.4"
}
@KamilLelonek
KamilLelonek / 1_type.ex
Created October 7, 2015 20:21
General type
defmodule Type do
defmacro __using__(opts) do
quote location: :keep, bind_quoted: [
type: Macro.escape(opts[:type], unquote: true),
values: Macro.escape(opts[:values], unquote: true),
] do
@behaviour Ecto.Type
def type, do: type
def values, do: values
@KamilLelonek
KamilLelonek / yatzy.ex
Created September 23, 2015 18:27
An example implementaion on Yatzy game during Copenhagen Elixir Meetup
defmodule Yatzy.Score do
def upper(n, ds), do: n * count(n, ds)
defp count(n, ls), do: select_elements(n, ls) |> Enum.count
defp select_elements(n, ls), do: ls |> Enum.filter &(&1 == n)
def chance(ds), do: ds |> Enum.reduce &(&1 + &2)
def yatzy(ds) do
case count_unique_elements(ds) do
1 -> 50
@KamilLelonek
KamilLelonek / eight_divide_by.rb
Created September 7, 2015 16:58
For a given integer return a result of dividing 8 by that number with handling 0.
Contract Num, Func[Num => Any], Proc => Any
def eight_divide_by(number, success_action, failure_action)
case number
# ...
when 4 then success_action[2]
when 2 then success_action[4]
when 1 then success_action[8]
when 0 then failure_action.call
end
end