Module: MemoryIO::Util
- Defined in:
- lib/memory_io/util.rb
Overview
Defines utility methods.
Class Method Summary collapse
-
.file_permission(file) ⇒ #readable?, ...
private
Struct with two boolean method.
-
.safe_eval(str, **vars) ⇒ Integer
Evaluate string safely.
-
.trim_libname(name) ⇒ String
Remove extension name (.so) and version in library name.
-
.underscore(str) ⇒ String
Convert input into snake-case.
Class Method Details
.file_permission(file) ⇒ #readable?, ...
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns Struct with two boolean method. nil for file not exists or is inaccessible.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/memory_io/util.rb', line 42 def (file) return nil unless File.file?(file) stat = File.stat(file) # we do a trick here because /proc/[pid]/mem might be marked as readable but fails at sysopen. os = OpenStruct.new(readable?: stat.readable_real?, writable?: stat.writable_real?) begin os.readable? && File.open(file, 'rb').close rescue Errno::EACCES os[:readable?] = false end begin os.writable? && File.open(file, 'wb').close rescue Errno::EACCES os[:writable?] = false end os end |
.safe_eval(str, **vars) ⇒ Integer
Evaluate string safely.
73 74 75 76 77 78 |
# File 'lib/memory_io/util.rb', line 73 def safe_eval(str, **vars) return str if str.is_a?(Integer) # dentaku 2 doesn't support hex str = str.gsub(/0x[0-9a-zA-Z]+/) { |c| c.to_i(16) } Dentaku::Calculator.new.store(vars).evaluate(str) end |
.trim_libname(name) ⇒ String
Remove extension name (.so) and version in library name.
95 96 97 98 99 |
# File 'lib/memory_io/util.rb', line 95 def trim_libname(name) type1 = '(-[\d.]+)?\.so$' type2 = '\.so.\d+[\d.]+$' name.sub(/#{type1}|#{type2}/, '') end |
.underscore(str) ⇒ String
Convert input into snake-case.
This method also removes strings before ‘::’ in str.
25 26 27 28 29 30 31 32 |
# File 'lib/memory_io/util.rb', line 25 def underscore(str) return '' if str.empty? str = str.split('::').last str.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2') str.gsub!(/([a-z\d])([A-Z])/, '\1_\2') str.downcase! str end |