Module: Suggest

Defined in:
lib/suggest.rb,
lib/suggest/version.rb

Defined Under Namespace

Modules: Mixin

Constant Summary collapse

SUGGEST_MODS =
Set.new([
  Array,
  BasicObject,
  Comparable,
  Complex,
  Enumerable,
  FalseClass,
  Float,
  Hash,
  Integer,
  Math,
  NilClass,
  Numeric,
  Range,
  Regexp,
  Regexp,
  Set,
  String,
  Struct,
  Symbol,
  Time,
  TrueClass,
])
UNSAFE_WITH_BLOCK =
Set.new([
  [Array, :cycle],
  [Enumerable, :cycle]
])
INCONSISTENT =
Set.new([
  [Array, :sample],
  [Array, :shuffle],
  [Array, :shuffle!]
])
TOO_COMPLICATED =
Set.new([
  [String, :freeze],
  [Set, :freeze],
  [Set, :taint],
  [Set, :untaint],
  [Numeric, :singleton_method_added],
  [Numeric, :clone],
  [Numeric, :dup],
])
VERSION =
"0.3.0"

Class Method Summary collapse

Class Method Details

.eq?(result, expected) ⇒ Boolean

Returns:

  • (Boolean)


109
110
111
# File 'lib/suggest.rb', line 109

def self.eq?(result, expected)
  result.is_a?(expected.class) && result == expected
end

.suggestable_methodsObject



113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/suggest.rb', line 113

def self.suggestable_methods
  candidates = []
  SUGGEST_MODS.each do |mod|
    owned_methods = mod.instance_methods.select { |m| mod.instance_method(m).owner == mod }
    next if owned_methods.none?
    candidates += [mod].product(owned_methods)
  end

  candidates.reject do |m|
    INCONSISTENT.include?(m) || TOO_COMPLICATED.include?(m)
  end
end