Как добавить метод (расширить класс) для объекта нативного класса в Ruby?
Добрый день.
Не нужно в классе Hash делать такой метод, т.к. любой хэш это валидный json
Пример:a = {'a'=>'n'}
a.to_json #=> Валидная строка в формате json
Можно, но я не рекомендую добавлять методы в руби классы, создайте лучше свой и работайте с ним, можете свой класс унаследовать от Hash и делать с ним что хотитеclass MyHash < Hash

  def foo_value?
    has_value? 'foo'
  end

end

a = MyHash.new
a[:a] = 'foo'
b = MyHash.new
b[:a] = 'baz'
p a.foo_value?
p b.foo_value?
Просто работать с кодом где много изменений в стандартных классах не удобно.
Разобрался. Собсна все просто:class String
  def is_wtf_string?
    self == 'wtf'
  end
end
a = 'wtf'
p a.is_wtf_string? #=> true
#update Александр Швайкин навел на мысль, что так будет лучше:# ./ExtStandartClass.rb
module ExtString 
  def is_wtf_string?
    self == 'wtf'
  end
end

module ExtFixnum
  def squared
    self*self
  end
end

# добавим расширенные методы
class String; include ExtString; end
class Fixnum; include ExtFixnum; end


# ./SomeCode.rb
# include 'ExtStandartClass.rb'
# ...
a = 'wtf'
p a.is_wtf_string? #=> true
# ...
# где нибудь в коде если приспичит узнать что откуда
p a.method(:to_s) 
p a.method(:is_wtf_string?)
# аналогично
b = 5
p b.squared
p b.method(:to_s) 
p b.method(:squared)