Just a small fix to get try working on false, since it is often a return value instead of nil
–> false.try(:xxx) == nil
class FalseClass
def try(x)
nil
end
end
Just a small fix to get try working on false, since it is often a return value instead of nil
–> false.try(:xxx) == nil
class FalseClass
def try(x)
nil
end
end
I just hate things that fail silently, just like User.order_by(:created_at).find_each
Which will simply ignore the order option….
So here comes the alternative…
class ActiveRecord::Base
# normal find_each does not use given order but uses id asc
def self.find_each_with_order(options={})
raise "offset is not yet supported" if options[:offset]
page = 1
limit = options[:limit] || 1000
loop do
offset = (page-1) * limit
batch = find(:all, options.merge(:limit => limit, :offset => offset))
page += 1
batch.each{|x| yield x }
break if batch.size < limit
end
end
end
(the 😮 is : and o)
With ReadableRandom you get readable, short and unique strings.
while token.blank? or User.find_by_token(token)
self.token = ReadableRandom.get(6)
end
Evil users often write something like “SomeThingNewAndGreat,use,it aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa” just to annoy us developers who try to get their content into a 50x100px div (at least I suspect it…).
Usage
(Use it after truncating, since it adds additional characters)
#!invisible char between 6 and 7! "12345 12345678".split_after(3) == "12345 12345678" "12345 12345678".split_after(6, :with=>'<br />') == "12345 123456<br />78"
Code
# splits to long words after max chars with invisible "zero-length-space"
# UTF8 char that should display in all browsers
# http://www.fileformat.info/info/unicode/char/200b/index.htm
def split_after(max, options={})
zero_length_space = '' #aka
options[:with] ||= zero_length_space
split(/ /).map do |part|
part = part.mb_chars
if part.length > max
part[0...max] + options[:with] + part[max..-1].to_s.split_after(max)
else
part
end
end * ' '
end
Make any kind of params to a path
# :controller=>'xxx' --> /xxx
# /xxx -> /xxx
# http://adasd.com/xxx -> /xxx
def path_for(path)
if path.is_a? Hash
url_for(path.merge(:only_path=>true))
else
URI.parse(path).path
end
end