Skip to content

Instantly share code, notes, and snippets.

View djspiewak's full-sized avatar

Daniel Spiewak djspiewak

View GitHub Profile
#!/usr/bin/env ruby
if ARGV.size < 2
$stderr.puts 'usage: monitor <path> <command> [arg1 arg2 ...]'
exit 100
end
PATH = ARGV[0]
COMMAND = ARGV[1]
ARGS = ARGV[2..-1]
/* I'm trying to refactor $and and $or (which are essentially the same code returning a different outer query).
The problem is that currently only "String, Any" pairs work, and I need to be able to combine both those *AND* "Query Expression Objects".
Here's the $or spec right now
*/
"Casbah's DSL $or Operator" should {
"Accept multiple values" in {
val or = $or("foo" -> "bar", "x" -> "y")
import Data.List
import Data.Maybe
import Control.Monad
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
base = length alphabet
encode :: Int -> String
encode 0 = "a"
encode id = map $ ((!!) alphabet) (reverse . tail) (map snd options)
trait StorageCompopnent {
def storeUser(user: User)
def retrieveUser(id: Int): Option[User]
}
trait MySQLStorageComponent extends StorageComponent {
override def storeUser(user: User) { ... }
override def retrieveUser(id: Int): Option[User] = ...
}
trait StorageCompopnent {
def storeUser(user: User)
def retrieveUser(id: Int): Option[User]
}
trait MySQLStorageComponent extends StorageComponent {
override def storeUser(user: User) { ... }
override def retrieveUser(id: Int): Option[User] = ...
}
trait AuthComponent extends StorageComponent {
def authenticate(id: Int, hash: Vector[Byte]): Boolean =
retrieveUser(id) map { _.hash == hash } getOrElse false
}
trait StorageComponent {
type User <: UserLike
def storeUser(user: User)
def retrieveUser(id: Int): Option[User]
trait UserLike {
def id: Int
def hash: Vector[Byte]
}
trait ConfigComponent {
type Config
def config: Config
}
trait MySQLStorageComponent extends StorageComponent with ConfigComponent {
type Config <: MySQLConfig
override def storeUser(user: User) { ... }
override def retrieveUser(id: Int): Option[User] = ...
@djspiewak
djspiewak / gist:11334157
Created April 26, 2014 23:49
Scala Typed Logic DSL
trait Unifiable[A] {
???
}
def symbol[A: Unifiable]: Symbol[A] = ???
def pred[A: Unifiable](a: Symbol[A])(f: => Set[Fact]): Predicate1[A] = ???
def pred[A: Unifiable, B: Unifiable](a: Symbol[A], b: Symbol[B])(f: => Set[Fact]): Predicate2[A, B] = ???
lazy val factorial: Predicate2[Int, Int] = {
def ???: Nothing = sys.error("TODO")