Skip to content

Instantly share code, notes, and snippets.

View paulcsmith's full-sized avatar

Paul Smith paulcsmith

View GitHub Profile
@tipiirai
tipiirai / gist:a1f2d1f203de0b5f45a1
Created July 2, 2014 02:12
Riot.js full router
(function() {
var routes = [];
function on(route, fn) {
var keys = ['match'];
route = route.replace(/[\/\=\?\$\^]/g, '\\$&').replace(/\{(\w+)\}/g, function(match, key) {
keys.push(key);
return '(\\w+)';
});
@chrismccord
chrismccord / gist:86b02961af24f227bf33
Last active August 29, 2015 14:05
JSON only Phoenix view
defmodule MyApp.UserController do
use Phoenix.Controller
def show(conn, %{"id" => id}) do
render conn, "show", user: Repo.get!(user, id)
end
def index(conn, _) do
render conn, "index", users: Repo.all(User)
end
@mmmries
mmmries / tradeoffs.md
Created November 27, 2014 05:10
Tradeoffs Between SOA vs Modular Ruby Code (gems / engines)

Modular Ruby

  • Easier to combine / split apart components and re-deploy (ie. change your design)
  • Easier to manage dependencies (ie. gem versions + bundler)
  • No need to coordinate deploys since bundler pulls it all together for you
  • No need to serialize / deserialize data (ie. JSON, protobuf, etc)
  • No need to do service discovery / load balancing between pieces
  • Less need for integration tests (ie a staging environment)
  • Sometimes you can get caught wanting to upgrade a gem or ruby version, but something else in your big Rails app needs to the lower version
defmodule Rocket.DateTime do
def type, do: :datetime
# Provide our own casting rules.
def cast(string) when is_binary(string) do
# Try to parse different formats here
end
# Datetime itself should also be valid
def cast(%Ecto.DateTime{} = datetime) do
@javajosh
javajosh / gist:3c83cd66922ef27a0431
Created February 2, 2015 18:30
How to Tab out of a closed quote in Sublime text
{ "keys": ["tab"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
[
{ "key": "following_text", "operator": "regex_contains", "operand": "^[)'\"\\]]", "match_all": true },
{ "key": "auto_complete_visible", "operator": "equal", "operand": false }
]
}
if get_req_header(conn, "https") == "on" or
get_req_header(conn, "x-forwarded-ssl") == "on" or
get_req_header(conn, "x-forwarded-scheme") == "https" or
(get_req_header(conn, "x-forwarded-proto") |> to_string |> String.split(",") |> Enum.at(0)) == "https" or
conn.scheme == :https do
"Secure Request"
else
"Request"
end
@paulcsmith
paulcsmith / comment_view.ex
Last active August 29, 2015 14:17 — forked from jeregrine/comment_view.ex
Rendering JSON with views
defmodule MyApp.CommentView do
use MyApp.Web, :view
@attributes ~W(id name inserted_at)
def render("index.json", %{data: comments}) do
for comment <- comments, do: render("show.json", %{data: comment})
end
def render("show.json", %{data: comment}) do
comment
defmodule Themost.RateWorker do
use GenServer
def start_link do
:gen_server.start_link({ :local, :NAME }, __MODULE__, ARG, [])
end
def init do
IO.puts "Init"
:timer.send_interval(:crowl, 15000)
@t9md
t9md / Readme.md
Created May 30, 2015 18:03
Dirty hack to emulate visual-block mode using multi cursor feature.

Limitation

  • You only can extend selection area for up/down direction.
  • When escaped from visual-mode, multi-cursor not cleared.
@aseemk
aseemk / app.js
Created April 19, 2011 11:12
Express sample app using Eco templating engine.
var express = require('express');
var app = express.createServer();
app.configure(function () {
app.use(app.router);
});
app.set('views', __dirname + '/views');
app.set('view engine', 'html');
app.register('.html', require('eco'));