Skip to content

Instantly share code, notes, and snippets.

View react-dates.inc.js
var ReactDates =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
@andrewhr
andrewhr / README.md
Created Jun 21, 2016
Clojure, Ring & `wrap-defaults`
View README.md

Primeiramente, fora Temer.

Segundamente, Compojure nada mais é que um "facilitador" para construir aplicações Ring, logo é importante entender o segundo para "desmistificar" a coisa toda. A documentação é bem abrangente, mas vai aqui um breve resumo na intenção de facilitar tua jornada.

A idéia base é criar aplicações usando apenas funções. Uma aplicação é uma função que converte um request em um response:

(defn hello-world [request]
  {:status 200, :headers {}, :body "Hello World"})
@andrewhr
andrewhr / gist:98c3e44581e54988bc09
Last active Aug 29, 2015 — forked from edipofederle/gist:84ebea07db68021cedaa
Comparado ao original, foi adicionado o middleware the EDN, já que o ring-defaults não inclui nenhuma serialização por padrão. No lado do cliente removi o reader extra e exibido apenas a string retornada. Isso se deve por que no servidor é retornado como "Params: ...", o que não é um EDN válido, quebrando a deserialização
View gist:98c3e44581e54988bc09
;; Testando somente o server side funciona OK.
curl -X POST -d "foo=bar" http://localhost:10555/posts
Params: {:foo "bar"}%
;; Client Side
(def ^:private meths
{:get "GET"
:put "PUT"
:post "POST"
:delete "DELETE"})
@andrewhr
andrewhr / 💩.rb
Created Jun 17, 2015
Sometimes you just...
View 💩.rb
def 💩; :💩; end
def fan; catch :💩 do; yield; end; end
fan do
throw 💩
puts 'Oops...'
end
puts 'SPLASH!'
@andrewhr
andrewhr / failture.clj
Created May 21, 2015
#protip this is not the Clojure you're looking for...
View failture.clj
(deftype Event (U :new-release))
(defn probability :- Float
"Return the probability of some `Event` to occur. IRL this should be some
real and complicated calculus instead of a simply constant"
[event :- Event :> Float]
0.95)
(defn descriptive-propability
"Describe the probability of a given `Event` to occur, for human readers."
@andrewhr
andrewhr / regex.rb
Last active Aug 29, 2015
Uso de gsub vs operadores de regex para limpeza (opcional) de dados.
View regex.rb
require 'benchmark/ips'
MATCH = '123.123.123-99'
NON_MATCH = 'João da Silva'
CPF_REGEX = /\A(\d{3})\.?(\d{3})\.?(\d{3})\-?(\d{2})\z/
def do_gsub(candidate)
candidate.gsub(CPF_REGEX, '\1\2\3\4')
end
@andrewhr
andrewhr / native.rb
Created Feb 23, 2015
Opal: Wrapping native objects with default helper vs wrapping with custom Opal objects
View native.rb
require 'native'
doc = Native(`document`)
puts %Q[Object instance of #{doc.body.class} for "#{doc.title}"]
puts %Q[Body DOM element class: "#{doc.body.className}"]
# => Object instance of Native::Object for "Try Opal: Browser compiler and REPL"
# => Body DOM element class: "try try_index"
@andrewhr
andrewhr / Adapt.java
Last active Aug 29, 2015
Some kind of API to be more descriptive while instantiating adapters and binding them to `ListView`s. In reality, will be just a bunch of Builder classes... just sugar. Maybe I've just become spoiled by keyword arguments from other languages (like you see a lot in Ruby)
View Adapt.java
/*
* Let take the simplest example possible... our beloved `ArrayAdapter`.
*/
adapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, arrayOrList);
listView.setAdapter(adapter);
// becomes
Adapt.with(context, android.R.layout.simple_list_item_1)
.load(arrayOrList)
.into(listView); // or `.build()` when we need to store the adapter for later use
View company.rb
class Company
validates :cnpj, cnpj: true, only_if: :has_cnpj?
def has_cnpj?
cnpj.size == 11 # não lembro o número.... dêem um desconto!
end
end
@andrewhr
andrewhr / ReallyAwesomeActivity.java
Created Aug 15, 2013
List view com uma view especial de header que contém um `ViewPager`. Esse código permite a navegação normal da `ListView` caso algum dos itens seja tocado. Para o caso de tocar diretamente no `ViewPager`, ele assume os eventos. Para tanto, além do código normalmente esperado para cabeçalhos de uma `ListView`, precisamos adicionar um listener de …
View ReallyAwesomeActivity.java
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View header = getLayoutInflater().inflate(R.layout.sections, null);
assert header != null;