Как вы издеваетесь над OpenCascade? - PullRequest
3 голосов
/ 30 августа 2011

OpenCascade является рекурсивным OpenStruct от Hashery:

http://rubyworks.github.com/hashery/

Это позволяет ссылаться на вложенные значения в хэше с помощью последовательности ключей:

h = {:a=>1,:b=>{:x=>1,:y=>2}}
c = OpenCascade.new(h)
c.b.y
=> 2

Мы используем его для чтения в конфигурации YAML.Теперь мы хотели бы смоделировать значения в тестах, однако

mock(c.b).y { 5 }

не работает.Как мы высмеиваем это?

1 Ответ

0 голосов
/ 28 февраля 2014

Когда вопрос был задан, реализация OpenCascade method_missing создавала новый объект каждый раз, когда запрашивался Hash:

def method_missing(sym, *args, &blk)
  # ...snip..
  if key?(name)
    self[name] = transform_entry(self[name])
  # ...snip...
  end
end

private

#
def transform_entry(entry)
  case entry
  when Hash
    OpenCascade.new(entry) #self.class.new(val)
  when Array
    entry.map{ |e| transform_entry(e) }
  else
    entry
  end
end

Это означает, чтов этой версии следующее:

c.b equal? c.b
# => false

Вот почему насмешка c.b не работала ...

С тех пор она была исправлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...