Skip to content

Instantly share code, notes, and snippets.

View makaroni4's full-sized avatar

Anatoli Makarevich makaroni4

View GitHub Profile
@makaroni4
makaroni4 / caesar_cypher.rb
Created April 21, 2012 18:22
Caesar cypher for Ruby
class String
def to_caesar shift
shift = (shift % 26).abs
each_byte.map { |b| ((b + shift - 97) % 26 + 97).chr }.join
end
end
a = "Caesar was a cool guy"
p a.split.map { |w| w.to_caesar 4 }.join(' ') # => "aeiwev aew e gssp kyc"
@makaroni4
makaroni4 / methods_wrapper.rb
Created April 26, 2012 09:11
Wrap instance methods of object to log them
class User
def say
puts "Hello"
end
end
def override_instance_methods(c)
c.instance_methods(false).each do |m|
c.class_eval <<-RUBY
alias #{m}_original #{m}
@makaroni4
makaroni4 / bindex.rb
Created June 21, 2012 16:45
Source of article about binary search at Gistflow.com
class Array
def bindex element, lower = 0, upper = length - 1
return if lower > upper
mid = (lower + upper) / 2
element < self[mid] ? upper = mid - 1 : lower = mid + 1
element == self[mid] ? mid : bindex(element, lower, upper)
end
end
class Array
@makaroni4
makaroni4 / deploy.rb
Created September 25, 2012 12:39 — forked from divineforest/deploy.rb
Lock deploy in Capistrano (only 1 deploy at a moment)
at_exit do
deploy.unlock
end
set :deploy_lock_file, "#{shared_path}/tmp/deploing_lock_file"
namespace :deploy do
desc "Check if somebody already is deploing"
task :check_lock do
require 'benchmark'
require 'benchmark/ips'
Benchmark.ips do |r|
r.report("group_by") do
(0..1000).group_by { |w| w % 2 == 0 }.values
end
EVEN = 0
ODD = 1
require 'active_record'
require 'csv'
ActiveRecord::Base.establish_connection(
adapter: "mysql2",
host: "localhost",
database: "36on_development",
user: "username",
password: "password",
pool: 5,
train_path.each do |obj|
result << obj.obj_id
end if train_path.any?
#
# 1. Если ты вызываешь метод .each, то как минимум переменная
# должна иметь множественное число, это ведь коллекция (массив),
# т.е. это train_paths
#
# 2. Если массив пуст, то метод .each сразу вернет пустой массив
@makaroni4
makaroni4 / analyzer.rb
Created December 22, 2013 22:07
Simple static analyser for one-letter variable names.
require 'parser'
require 'parser/current'
module OneLetterVariableDetector
class NodeAnalyzer < Struct.new(:node, :path)
def analyze
return unless node && node.respond_to?(:type)
if node.type == :lvasgn || node.type == :lvar
if lvar_name.size == 1
require "socket"
socket = TCPSocket.open("www.theonion.com", "80")
TCPSocket.open("www.theonion.com", 80) do |socket|
socket.puts "GET / HTTP/1.0\n\n"
puts socket.read
end
@makaroni4
makaroni4 / Question_4.rb
Created March 24, 2014 13:31
Ruby Quiz questions
# Reddit thread: http://www.reddit.com/r/ruby/comments/217yvm/trivia_ruby_quiz/
# Quiz page: http://makaroni4.com/ruby/quiz/2014/03/24/ruby-quiz/
# Explanation link: http://www.medihack.org/2011/03/15/intend-to-extend/
# Code example:
module Human
def eat
puts "Yam"
end