# File lib/contracts/support.rb, line 32 def contract_id(contract) contract.object_id end
# File lib/contracts/support.rb, line 45 def eigenclass?(target) module_eigenclass?(target) || target <= eigenclass_of(Object) end
# File lib/contracts/support.rb, line 36 def eigenclass_hierarchy_supported? return false if RUBY_PLATFORM == "java" && RUBY_VERSION.to_f < 2.0 RUBY_VERSION.to_f > 1.8 end
# File lib/contracts/support.rb, line 41 def eigenclass_of(target) class << target; self; end end
# File lib/contracts/support.rb, line 19 def method_name(method) method.is_a?(Proc) ? "Proc" : method.name end
# File lib/contracts/support.rb, line 4 def method_position(method) return method.method_position if method.is_a?(MethodReference) if RUBY_VERSION =~ /^1\.8/ if method.respond_to?(:__file__) method.__file__ + ":" + method.__line__.to_s else method.inspect end else file, line = method.source_location file + ":" + line.to_s end end
Generates unique id, which can be used as a part of identifier
Example:
Contracts::Support.unique_id # => "i53u6tiw5hbo"
# File lib/contracts/support.rb, line 27 def unique_id # Consider using SecureRandom.hex here, and benchmark which one is better (Time.now.to_f * 1000).to_i.to_s(36) + rand(1_000_000).to_s(36) end
Module eigenclass can be detected by its ancestor chain containing a Module
# File lib/contracts/support.rb, line 54 def module_eigenclass?(target) target < Module end