Skip to content

Instantly share code, notes, and snippets.

View dsalahutdinov's full-sized avatar

Dmitry Salahutdinov dsalahutdinov

View GitHub Profile
@dsalahutdinov
dsalahutdinov / ftpd.rb
Created June 30, 2014 04:53
Simple ftp-server with Ruby
require 'ftpd'
class Driver
def initialize(temp_dir)
@temp_dir = temp_dir
end
def authenticate(user, password)
true
end
def file_system(user)
@dsalahutdinov
dsalahutdinov / poor_orm.rb
Last active August 29, 2015 14:02
poor orm (ruby+mysql2)
require 'mysql2'
client = Mysql2::Client.new(:host => "localhost", :username => "root", :password => "password", :database => "ar_sample")
results = client.query('DROP TABLE if exists pet')
results = client.query('CREATE TABLE pet (id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, name CHAR(30), owner_name CHAR(20), age SMALLINT(6));')
class String
def to_sql; "\"#{self.to_s}\""; end
end
@dsalahutdinov
dsalahutdinov / wrapper.rb
Last active August 29, 2015 14:02
Wrapper оборачивает вызовы методов вызовами before- и after-методов
# wrap_method оборачивает вызовы методов вызовами before- и after-методов
# Возможно множественная обертка, в ходе которой образуется method-chain
module Wrappable
class WrapperOptions
attr_reader :before_callback, :after_callback
def initialize(&block)
instance_eval(&block)
end
# Представим, что у нас есть некоторый внешний источник, который возвращает нам данные в виде массива хэшей.
# Причём все значения в хэшах передаются как строки. Создайте такой универсальный класс Storage, который позволит
# создавать классы преобразователи:
require 'time'
class Storage
def self.attrb(attribute_name, attribute_accessor = nil, &process_proc)
raise ArgumentError if attribute_name.nil?