class Example singleton_class? #=> false class << self singleton_class? #=> true end end
Object.ancestors.include?(Object) #=> true Object.singleton_class.ancestors.include?(Object.singleton_class) #=> true
class Example def self.test end def test2 end end # returns class method Example.singleton_method(:test) #=> #<Method: Example.test> # doesn't return instance method Example.singleton_method(:test2) #=> #<NameError: undefined singleton method `test2' for `Example'> # doesn't return inherited class method Example.singleton_method(:name) #=> #<NameError: undefined singleton method `name' for `Example'>
example = Object.new def example.test end example.singleton_method(:test) #=> #<Method: #<Object:0x007fc54997a610>.test>
class Example def foo "foo" end alias bar foo end example = Example.new example.method(:foo).original_name #=> :foo example.method(:bar).original_name #=> :foo Example.instance_method(:bar).original_name #=> :foo
class MyHash < Hash end example = MyHash.new example[:a] = 1 example[:b] = 2 example.reject {|k,v| v > 1}.class #=> MyHash
example.rb:8: warning: copying unguaranteed attributes: {:a=>1, :b=>2} example.rb:8: warning: following atributes will not be copied in the future version: example.rb:8: warning: subclass: MyHash
require "matrix" Vector[1, 0, 0].cross_product(Vector[0, 1, 0]) #=> Vector[0, 0, -1]
128.bit_length #=> 8 32768.bit_length #=> 16 2147483648.bit_length #=> 32 4611686018427387904.bit_length #=> 63
# output may differ depending on the endianness of your system unsigned_long_long_max = [2**64 - 1].pack("Q!") #=> "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" signed_long_long_min = [-2**63].pack("q!") #=> "\x00\x00\x00\x00\x00\x00\x00\x80" signed_long_long_max = [2**63 - 1].pack("q!") #=> "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F" unsigned_long_long_max.unpack("Q!") #=> 18446744073709551615 signed_long_long_min.unpack("q!") #=> -9223372036854775808 signed_long_long_max.unpack("q!") #=> 9223372036854775807
File.write("composed_e\u{301}xample.txt", "") File.write("precomposed_\u{e9}xample.txt", "") puts Dir["*"].map(&:dump)
"composed_\u{e9}xample.txt" "example.rb" "precomposed_\u{e9}xample.txt"
def primes(begin: 2, end: 1000) [binding.local_variable_get(:begin), 2].max.upto(binding.local_variable_get(:end)).each_with_object([]) do |i, array| array << i unless (2...i).any? {|j| (i % j).zero?} end end primes(end: 10) #=> [2, 3, 5, 7]
def make_binding(hash) b = TOPLEVEL_BINDING.dup hash.each {|k,v| b.local_variable_set(k, v)} b end require "erb" cover = %Q{<h1><%= title %></h1>\n<h2 class="big friendly"><%= subtitle %></h2>} locals = {:title => "Hitchhiker's Guide to the Galaxy", :subtitle => "Don't Panic"} ERB.new(cover).result(make_binding(locals)) #=> "<h1>Hitchhiker's Guide to the Galaxy</h1>\n<h2 class=\"big friendly\">Don't Panic</h2>"
require "cgi/util" CGI.escape("hello world!") #=> "hello+world%21" include CGI::Util escape("hello world!") #=> "hello+world%21"
require "digest" Digest::SHA2.new(512).hexdigest(File.read("example.txt")) #=> "f7fbba..."
require "digest" Digest::SHA2.file("example.txt", 512).hexdigest #=> "f7fbba..."
require "net/smtp" smtp = Net::SMTP.start("some.smtp.server") notification = "Hi %s,\n ..." users.each do |user| begin smtp.mailfrom("noreply@example.com") smtp.rcptto(user.email) smtp.data(sprintf(notification, user.name)) rescue smtp.rset end end smtp.finish
require "open-uri" f = open("http://google.com") f.meta["set-cookie"].class #=> String f.metas["set-cookie"].class #=> Array f.metas["set-cookie"].length #=> 2
require "pathname" path = Pathname.new("test.txt").expand_path(__dir__) path.write("foo") path.write("bar", 3) # offset path.write("baz", mode: "a") # append
require "tempfile" path = nil Tempfile.create("example") do |f| f #=> #<File:/tmp/example20140428-16851-15kf046> path = f.path end File.exist?(path) #=> false
require "rinda/ring" require "rinda/tuplespace" DRb.start_service tuple_space = Rinda::TupleSpace.new server = Rinda::RingServer.new(tuple_space, ["239.0.0.1"]) DRb.thread.join
require "rinda/ring" DRb.start_service ring_finger = Rinda::RingFinger.new(["239.0.0.1"]) tuple_space = ring_finger.lookup_ring_any tuple_space.write([:message_service, "localhost", 8080]) # start messaging service on localhost:8080
require "rinda/ring" DRb.start_service ring_finger = Rinda::RingFinger.new(["239.0.0.1"]) tuple_space = ring_finger.lookup_ring_any _, host, port = tuple_space.read([:message_service, String, Fixnum]) # connect to messaging service
tuple_space = nil ring_finger.lookup_ring(0.01) {|x| break tuple_space = x}
client = XMLRPC::Client.new("example.com") client.http.keep_alive_timeout = 30 # keep connection open for longer # use client ...
;
as a delimiter, &
only default delimiter, but you can set the delimiter value using a named argument separator :. require "uri" URI.decode_www_form("foo=1;bar=2", separator: ";") #=> [["foo", "1"], ["bar", "2"]]
require "uri" string = URI.encode_www_form(foo: 1, bar: nil, baz: 3) #=> "foo=1&bar&baz=3" URI.decode_www_form("foo=1&bar&baz=3") #=> [["foo", "1"], ["bar", ""], ["baz", "3"]]
require "rbconfig/sizeof" RbConfig::SIZEOF["short"] #=> 2 RbConfig::SIZEOF["int"] #=> 4 RbConfig::SIZEOF["long"] #=> 8
require "syslog/logger" facility = Syslog::LOG_LOCAL0 logger = Syslog::Logger.new("MyApp", facility) logger.debug("test")
require "csv" enum = CSV.foreach("example.csv") enum.next #=> ["1", "foo"] enum.next #=> ["2", "bar"] enum.next #=> ["3", "baz"]
require "openssl" OpenSSL::BN.new(4_611_686_018_427_387_904) #=> #<OpenSSL::BN:0x007fce7a0c56e8>
require "thread" queue = Queue.new enum = Enumerator.new(queue.method(:size)) do |yielder| loop {yielder << queue.pop} end queue << "foo" enum.size #=> 1
require "tsort" camping_steps = { "sleep" => ["food", "tent"], "tent" => ["camping site", "canvas"], "canvas" => ["tent poles"], "tent poles" => ["camping site"], "food" => ["fish", "fire"], "fire" => ["firewood", "matches", "camping site"], "fish" => ["stream", "fishing rod"] } all_nodes = camping_steps.to_a.flatten each_node = all_nodes.method(:each) each_child = -> step, &b {camping_steps.fetch(step, []).each(&b)} puts TSort.tsort(each_node, each_child)
stream fishing rod fish firewood matches camping site fire food tent poles canvas tent sleep
require "socket" unless Socket.const_defined?(:TCP_FASTOPEN) abort "TCP Fast Open not supported on this system" end server = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM) server.setsockopt(Socket::SOL_TCP, Socket::TCP_FASTOPEN, 5) addrinfo = Addrinfo.new(Socket.sockaddr_in(3000, "localhost")) server.bind(addrinfo) server.listen(1) socket = server.accept socket.write(socket.readline)
require "socket" unless Socket.const_defined?(:MSG_FASTOPEN) abort "TCP Fast Open not supported on this system" end socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM) socket.send("foo\n", Socket::MSG_FASTOPEN, Socket.sockaddr_in(3000, "localhost")) puts socket.readline socket.close
Source: https://habr.com/ru/post/223521/
All Articles