Module: Stella::Utils
Overview
A motley collection of methods that Stella loves to call!
Instance Method Summary collapse
-
#external_ip_address ⇒ Object
Return the external IP address (the one seen by the internet).
-
#internal_ip_address ⇒ Object
Return the local IP address which receives external traffic from: coderrr.wordpress.com/2008/05/28/get-your-local-ip-address/ NOTE: This does not open a connection to the IP address.
-
#noindent(str) ⇒ Object
Returns
strwith the leading indentation removed. -
#require_glob(*path) ⇒ Object
requirea glob of files. -
#require_vendor(name, version) ⇒ Object
requirea library from the vendor directory. -
#service_available?(host, port, wait = 3) ⇒ Boolean
Checks whether something is listening to a socket.
-
#strand(len = 8, safe = true) ⇒ Object
Generates a string of random alphanumeric characters.
-
#write_to_file(filename, content, mode, chmod = 600) ⇒ Object
A basic file writer.
Instance Method Details
#external_ip_address ⇒ Object
Return the external IP address (the one seen by the internet)
15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/stella/utils.rb', line 15 def external_ip_address ip = nil begin %w{solutious.heroku.com/ip}.each do |sponge| ipstr = Net::HTTP.get(URI.parse("http://#{sponge}")) || '' ip = /([0-9]{1,3}\.){3}[0-9]{1,3}/.match(ipstr).to_s break if ip && !ip.empty? end rescue SocketError, Errno::ETIMEDOUT => ex Stella.le "Connection Error. Check your internets!" end ip end |
#internal_ip_address ⇒ Object
Return the local IP address which receives external traffic from: coderrr.wordpress.com/2008/05/28/get-your-local-ip-address/ NOTE: This does not open a connection to the IP address.
32 33 34 35 36 37 38 39 |
# File 'lib/stella/utils.rb', line 32 def internal_ip_address # turn off reverse DNS resolution temporarily orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true ip = UDPSocket.open {|s| s.connect('75.101.137.7', 1); s.addr.last } # Solutious IP ip ensure Socket.do_not_reverse_lookup = orig end |
#noindent(str) ⇒ Object
Returns str with the leading indentation removed. Stolen from github.com/mynyml/unindent/ because it was better.
135 136 137 138 |
# File 'lib/stella/utils.rb', line 135 def noindent(str) indent = str.split($/).each {|line| !line.strip.empty? }.map {|line| line.index(/[^\s]/) }.compact.min str.gsub(/^[[:blank:]]{#{indent}}/, '') end |
#require_glob(*path) ⇒ Object
require a glob of files.
-
pathis a list of path elements which is sent to File.join
and then to Dir.glob. The list of files found are sent to require. Nothing is returned but LoadError exceptions are caught. The message is printed to STDERR and the program exits with 7.
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/stella/utils.rb', line 47 def require_glob(*path) begin Dir.glob(File.join(*path.flatten)).each do |path| require path end rescue LoadError => ex puts "Error: #{ex.message}" exit 7 end end |
#require_vendor(name, version) ⇒ Object
require a library from the vendor directory. The vendor directory should be organized such that name and version can be used to create the path to the library.
e.g.
vendor/httpclient-2.1.5.2/httpclient
68 69 70 71 |
# File 'lib/stella/utils.rb', line 68 def require_vendor(name, version) $:.unshift File.join(LIB_HOME, '..', 'vendor', "#{name}-#{version}") require name end |
#service_available?(host, port, wait = 3) ⇒ Boolean
Checks whether something is listening to a socket.
-
hostA hostname -
portThe port to check -
waitThe number of seconds to wait for before timing out.
Returns true if host allows a socket connection on port. Returns false if one of the following exceptions is raised: Errno::EAFNOSUPPORT, Errno::ECONNREFUSED, SocketError, Timeout::Error
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/stella/utils.rb', line 83 def service_available?(host, port, wait=3) if Stella.sysinfo.vm == :java begin iadd = Java::InetSocketAddress.new host, port socket = Java::Socket.new socket.connect iadd, wait * 1000 # milliseconds success = !socket.isClosed && socket.isConnected rescue NativeException => ex puts ex., ex.backtrace if Stella.debug? false end else begin status = Timeout::timeout(wait) do socket = Socket.new( AF_INET, SOCK_STREAM, 0 ) sockaddr = Socket.pack_sockaddr_in( port, host ) socket.connect( sockaddr ) end true rescue Errno::EAFNOSUPPORT, Errno::ECONNREFUSED, SocketError, Timeout::Error => ex puts ex.class, ex., ex.backtrace if Stella.debug? false end end end |
#strand(len = 8, safe = true) ⇒ Object
Generates a string of random alphanumeric characters.
-
lenis the length, an Integer. Default: 8 -
safein safe-mode, ambiguous characters are removed (default: true):i l o 1 0
125 126 127 128 129 130 131 |
# File 'lib/stella/utils.rb', line 125 def strand( len=8, safe=true ) chars = ("a".."z").to_a + ("0".."9").to_a chars.delete_if { |v| %w(i l o 1 0).member?(v) } if safe str = "" 1.upto(len) { |i| str << chars[rand(chars.size-1)] } str end |
#write_to_file(filename, content, mode, chmod = 600) ⇒ Object
A basic file writer
110 111 112 113 114 115 116 117 118 |
# File 'lib/stella/utils.rb', line 110 def write_to_file(filename, content, mode, chmod=600) mode = (mode == :append) ? 'a' : 'w' f = File.open(filename,mode) f.puts content f.close return unless Stella.sysinfo.os == :unix raise "Provided chmod is not a Fixnum (#{chmod})" unless chmod.is_a?(Fixnum) File.chmod(chmod, filename) end |