Ruby-クラスメソッドのプロキシ

コード内でクラスメソッドをコーディング(ラップ)することが必要になる場合があります。



例:





したがって、habrmanに関する情報を取得する特定のクラスがあるとします。

Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  1. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  2. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  3. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  4. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  5. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  6. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  7. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  8. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  9. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  10. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  11. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  12. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  13. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  14. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  15. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  16. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  17. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  18. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  19. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  20. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  21. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  22. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  23. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  24. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  25. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  26. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  27. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  28. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  29. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  30. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  31. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  32. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  33. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  34. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  35. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  36. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end



  37. Copy Source | Copy HTML require 'rubygems' require 'open-uri' require 'iconv' require 'nokogiri' $KCODE = 'u' class Habr attr_accessor :user, :uid def initialize (user) @user = user @uid = get_uid end def get (url) Nokogiri::HTML( open (url)) end def get_uid html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div.karma-holder" )[ 0 ].get_attribute( 'id' ) end def get_rating result = [] html = get ( "http://#{@user}.habrahabr.ru" ) html.css( "div[@id='#{@uid}']" ).each{|el| result << el.css( 'span.mark' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'span.number' )[ 0 ].content. gsub !( ',' , '.' ).to_f result << el.css( 'dd.total' )[ 0 ].content.to_i } result end def get_posts result = [] html = get ( "http://#{@user}.habrahabr.ru/blog/" ) html.css( "div[@id='main-content'] a.topic" ).each{|el| result << { :title => el.content, :url => el.attribute( 'href' ) } } result end end





次のように使用します。

Copy Source | Copy HTML



  1. info = Habr。 新規'tenkoff'
  2. p info.get_rating
  3. p info.get_posts


最も簡単な解決策は、クラスの新しいインスタンスをプロキシクラスに渡すことです。

Copy Source | Copy HTML



  1. プロキシ=プロキシ。 new (ProxedClass.new)


これを行うには、 method_missingメソッドが必要です。

Copy Source | Copy HTML



  1. クラス プロキシ
  2. def 初期化 (obj)
  3. @ class = obj || 自己
  4. 終わり
  5. def method_missing (名前、*引数、およびブロック)
  6. p 「## {name}の前」
  7. result = @ class .send name、* args、&block
  8. p 「## {name}の後」
  9. 結果
  10. 終わり
  11. 終わり


これで、以前のコードは次のように使用できます。

Copy Source | Copy HTML



  1. info =プロキシ。 new (Habr。new( 'tenkoff' ))
  2. p info.get_rating
  3. p info.get_posts


本当にしたい場合は、Proxyクラスを継承の基本クラスとして使用できます。そのためには、 method_addedメソッドが必要です (ここではgoogleする必要があります)。

Copy Source | Copy HTML



  1. クラス プロキシ
  2. def 初期化 (obj = ''
  3. @ class = obj || 自己
  4. 終わり
  5. def method_missing (名前、*引数、およびブロック)
  6. p 「## {name}の前」
  7. result = @ class .send name、* args、&block
  8. p 「## {name}の後」
  9. 結果
  10. 終わり
  11. def self .method_added(メソッド)
  12. もしself .public_method_defined? 方法
  13. プライベートメソッド
  14. 終わり
  15. 終わり
  16. 終わり


クラスのメソッドがmethod_missingメソッドのラッパーに確実に収まるように、すべてのパブリックメソッドをプライベートにするprivateメソッドを使用します。



また、プロキシクラスを次のように変更して、基本クラスの適切な初期化に注意する必要があります。

Copy Source | Copy HTML



  1. def initialize (ユーザー)
  2. @user =ユーザー
  3. @uid = get_uid
  4. スーパー自己
  5. 終わり




実際、これはすべて黒魔術であり、人生のすべての場合に100%は機能しません。



それでは、どのように機能しますか

method_missing-このメソッドは、存在しないまたはアクセスできないクラスメソッドを要求するとトリガーされます。次の3つのパラメーターが必要です。

メソッド名

引数

ブロックする



次に、sendメソッドを使用して、任意のクラスのメソッドを呼び出すことができます。次に例を示します。

Copy Source | Copy HTML



  1. irb(メイン): 0010 > カーネル .send: print「hello world」
  2. Hello world => nil




method_added-このメソッドは、新しいメソッドがクラスに追加された瞬間にトリガーされます。これは、記述した場所、つまり、 method_addedの後に他のメソッドがある場合は、それらもキャッチします。



したがって、method_missingを使用すると、存在しないまたはアクセスできないクラスメソッドをキャッチして、基本クラスからこのブラックマジックを継承する既存のクラスメソッドを作成できます。method_addedを使用して、新しいメソッドの追加を登録し、プライベートメソッド、したがってmethod_missingに入ることを保証します。



プロキシされたクラスが呼び出されるプログラムのコードを変更することなく、作業中のクラスに触れることなく、追加のロジックでそれらをラップできます。



All Articles