Skip to content

Instantly share code, notes, and snippets.

View matsumonkie's full-sized avatar

iori matsumonkie

View GitHub Profile
@matsumonkie
matsumonkie / virtual_proxy.rb
Created June 4, 2014 22:07
ruby - virtual proxy pattern
class VirtualProxy < BasicObject
def initialize(&loader)
@loader = loader
@object = nil
end
def method_missing(name, *args, &block)
__load__
@object.public_send(name, *args, &block)
end
require 'delegate'
#----------------------------------------------------------------------
class Logger
DEFAULT_FORMATTER = '%d'
def initialize(formatter)
@formatter = formatter || DEFAULT_FORMATTER
@matsumonkie
matsumonkie / module_functions.rb
Created June 10, 2014 22:10
module functions
#----------------------------------------------------------------------
module Util
module StringFormatter
module_function
def prettry_string(string)
"-> [#{string}] <-"
end
end
@matsumonkie
matsumonkie / delegator.rb
Created June 12, 2014 21:17
forwordable
require 'forwardable'
class Vehicle
extend Forwardable
def_delegators :@vehicle, :name, :power, :color
def to_s
"#{name} with #{power} HP"
@matsumonkie
matsumonkie / singleton_object.rb
Created June 12, 2014 21:48
singleton object
# singleton object are usefull if you
# want an object that is stateless
class << (FERRARI = Object.new)
def to_s
"Ferrari from Maranello"
end
end
case FERRARI
when FERRARI then puts FERRARI # "Ferrari from Maranello"
#------------------------------------------------------------------------
def Fallback(lambda, &fallback)
fallback ||= -> { raise }
begin
lambda.call()
rescue
fallback.call()
end
end
@matsumonkie
matsumonkie / registry.rb
Created June 14, 2014 21:39
registry pattern
module Registry
class << self
def logger
# some default logger...
end
def server
# some server
end
@matsumonkie
matsumonkie / dci.rb
Created June 15, 2014 21:21
dci benchmarks
require 'benchmark'
require 'delegate'
#---------------------------------------------------------------
# ruby normal implementation
#---------------------------------------------------------------
module Mover
def accelerate(speed:)
@speed += speed
end
@matsumonkie
matsumonkie / null_object.rb
Created August 3, 2014 08:52
null object pattern
class NullObject
def method_missing(*)
self
end
def respond_to_method_missing?(name)
true
end
def nil?
@matsumonkie
matsumonkie / result_callback.rb
Created August 12, 2014 14:21
return value method callback
class Result
def self.success
Result.new
end
def self.error(error)
Result.new(error)
end