Проблемы с именами в Ruby - PullRequest
       22

Проблемы с именами в Ruby

0 голосов
/ 21 февраля 2012

Я пытаюсь создать жемчужину для взаимодействия с API Yahoo Placemaker, но столкнулся с проблемой. Когда я пытаюсь запустить следующий код, я получаю:

NameError: uninitialized constant Yahoo::Placemaker::Net
    from /Users/Kyle/.rvm/gems/ruby-1.9.2-p290/gems/yahoo-placemaker-0.0.1/lib/yahoo-placemaker.rb:17:in `extract'
    from (irb):4
    from /Users/Kyle/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>'

Yahoo-placemaker.rb

require "yahoo-placemaker/version"
require 'json'
require 'ostruct'
require 'net/http'

module Yahoo
  module Placemaker
    def self.extract (text = '')
      host = 'wherein.yahooapis.com'
      payload = {
        'documentContent' => text,
        'appid' => APP_ID,
        'outputType' => 'json',
        'documentType' => 'text/plain'
      }

      req = Net::HTTP::Post.new('/v1/document')
      req.body = to_url_params(payload)
      response = Net::HTTP.new(host).start do |http|
        http.request(req)
      end
      json = JSON.parse(response.body)
      Yahoo::Placemaker::Result.new(json)
    end
  end
end

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Мне еще предстоит выяснить, как точно постоянное разрешение имен работает в Ruby (я думаю, что здесь правила немного запутаны), но из моего опыта вполне может быть, что Net ищетсяв текущем пространстве имен вместо глобального.Попробуйте использовать полное имя:

::Net::HTTP::Post.new

Аналогичная проблема может возникнуть в этой строке:

Yahoo::Placemaker::Result

Вы должны заменить его на ::Yahoo::Placemaker::Result или лучше Result (какон живет в текущем пространстве имен).

0 голосов
/ 21 февраля 2012

Попробуйте запросить net / http.Руби отступает, чтобы найти его в модуле, если он не определен.

require 'net/http'

...