2013-04-30 104 views
1

所以我在VisualRuby上做了一個可以發推文的小程序。因此,這裏是我的main.rb是什麼樣子:把認證信息放在哪裏

#!/usr/bin/ruby 

require 'vrlib' 
require 'twitter_oauth' 

#make program output in real time so errors visible in VR. 
STDOUT.sync = true 
STDERR.sync = true 

#everything in these directories will be included 
my_path = File.expand_path(File.dirname(__FILE__)) 
require_all Dir.glob(my_path + "/bin/**/*.rb") 

LoginWindow.new.show 

和我LoginWindow.rb看起來像這樣

require 'twitter_oauth' 

class LoginWindow #(change name) 

    include GladeGUI 

    client = TwitterOAuth::Client.new(
     :consumer_key => '****', 
     :consumer_secret => '****', 
     :token => '****-****', 
     :secret => '****' 
    ) 

    def show() 
     load_glade(__FILE__) #loads file, glade/MyClass.glade into @builder 
     set_glade_all() #populates glade controls with insance variables (i.e. Myclass.label1) 
     show_window() 
    end 

    def button1__clicked(*argv) 
     if client.authorized? 
      puts "true" 
     end 
    end 

end 

最後我的窗前,看起來像這樣:
enter image description here

現在,當我運行這個,然後點擊登錄按鈕,VR吐出來

C:/Users/*/visualruby/Test/bin/LoginWindow.rb:22:in `button1__clicked': undefined local variable or method `client' for #<LoginWindow:0x3f56aa8> 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/vrlib-0.0.33/lib/GladeGUI.rb:146:in `call' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/vrlib-0.0.33/lib/GladeGUI.rb:146:in `block (3 levels) in parse_signals' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/vrlib-0.0.33/lib/GladeGUI.rb:331:in `call' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/vrlib-0.0.33/lib/GladeGUI.rb:331:in `main' 
    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/vrlib-0.0.33/lib/GladeGUI.rb:331:in `show_window' 
    from C:/Users/*/visualruby/Test/bin/LoginWindow.rb:17:in `show' 
    from main.rb:14:in `<main>' 

我不認爲我應該把client = Twitter....的東西放在LoginWindow這個班裏,但我想不出其他任何地方。有關如何解決此問題的任何想法?

+1

也許你應該在實例變量中轉換客戶端。您可以在初始化方法中調用TwitterOAuth。 – 2013-04-30 19:48:30

+0

@amalrikmaia你究竟是什麼意思?你是否說在它內部有一個實例變量'@ client'的初始化函數? – Richard 2013-04-30 20:43:36

+1

_你說有一個初始化函數,裏面有一個實例變量@client?_是。 – 2013-04-30 21:09:33

回答

2

這是您所需要的快速解決方案。 在LoginWindow.rb

def initialize 
    @client = TwitterOAuth::Client.new( 
     :consumer_key => '****', 
     :consumer_secret => '****', 
     :token => '****-****', 
     :secret => '****' 
    ) 
end 


def button1__clicked(*argv) 
    if @client.authorized? 
     puts "true" 
    end 
end 

這種解決方案的問題,現在是你不能叫沒有之前初始化LogginWindow button1_clicked,所以要小心。