午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > ruby元編程實際使用實例

ruby元編程實際使用實例

熱門標簽:柯城手機地圖如何做地圖標注 征服者企業地圖標注 天津外呼系統怎么收費 中牟外呼系統違法嗎 漯河電銷 AI電銷機器人 線路 外呼線路從哪里出來的 巫師3地圖標注魔力之所 淮安自動外呼系統供應商

很喜歡ruby元編程,puppet和chef用到了很多ruby的語言特性,來定義一個新的部署語言。
分享幾個在實際項目中用到的場景,能力有限,如果有更優方案,請留言給我:)

rpc接口模板化——使用eval、alias、defind_method

require 'rack/rpc'

class Server  Rack::RPC::Server
 def hello_world
  "Hello, world!"
 end

 rpc 'hello_world' => :hello_world
end

上面是一個rpc server,編寫一個函數,調用rpc命令進行注冊。

采用define_method、eval、alias方法,可以實現一個判斷rpc/目錄下的*.rb文件,進行加載和rpc接口注冊的功能,實現代碼如下:

module RPC
  require 'rack/rpc'
  #require rpc/*.rb文件
  Dir.glob(File.join(File.dirname(__FILE__), 'rpc', "*.rb")) do |file|
   require file
  end
  class Runner  Rack::RPC::Server
   #include rpc/*.rb and regsiter rpc call
   #eg. rpc/god.rb  god.hello
   @@rpc_list = []
   Dir.glob(File.join(File.dirname(__FILE__), 'rpc', "*.rb")) do |file|
    rpc_class = File.basename(file).split('.rb')[0].capitalize
    rpc_list = []
    
    #加載module下的方法到Runner這個類下面
    eval "include Frigga::RPC::#{rpc_class}"
    #獲取聲明的RPC接口
    eval "rpc_list = Frigga::RPC::#{rpc_class}::RPC_LIST"
    rpc_list.each do |rpc_name|
     #alias一個新的rpc方法,叫old_xxxx_xxxx
     eval "alias :old_#{rpc_class.downcase}_#{rpc_name} :#{rpc_name}"

     #重新定義rpc方法,添加一行日志打印功能,然后再調用old_xxxx_xxxx rpc方法
     define_method "#{rpc_class.downcase}_#{rpc_name}".to_sym do |*arg|
      Logger.info "[#{request.ip}] called #{rpc_class.downcase}.#{rpc_name} #{arg.join(', ')}"
      eval "old_#{rpc_class.downcase}_#{rpc_name} *arg"
     end 

     #注冊RPC調用
     rpc "#{rpc_class.downcase}.#{rpc_name}" => "#{rpc_class.downcase}_#{rpc_name}".to_sym

     #添加到全局變量,匯總所有的rpc方法
     @@rpc_list  "#{rpc_class.downcase}.#{rpc_name}"
    end
   end
   
   def help
    rpc_methods = (['help'] + @@rpc_list.sort).join("\n")
   end
   rpc "help" => :help

  end
 end #RPC

完成上述功能后,可以非常方便的開發rpc接口,例如下面這個IP地址增、刪、查的代碼,注冊ip.list, ip.add和ip.del方法:

module RPC
  module Ip
   #RPC_LIST used for regsiter rpc_call
   RPC_LIST = %w(list add del)

   def list
    $white_lists
   end   

   def add(ip) 
    if ip =~ /^((25[0-5]|2[0-4]\d|[0-1]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[0-1]?\d\d?)$/
     $white_lists  ip
     write_to_file
     return "succ"
    else
     return "fail"
    end
   end

   def del(ip)
    if $white_lists.include?(ip)
     $white_lists.delete ip
     write_to_file
     return "succ"
    else
     return "fail"
    end    
   end

   def write_to_file
     File.open(IP_yml, "w") do |f|
      $white_lists.uniq.each {|i| f  "- #{i}\n"}
     end
   end
  end 
 end

DSL——使用instance_eval

instance_eval是ruby語言中的瑞士軍刀,特別是支持DSL方面。
我們來看一下chef(一個開源的自動化部署工具)中設置文件模板的API:

復制代碼 代碼如下:

    template "/path/to/file.conf" do
      source "file.conf.erb"
      owner  "wilbur"
      mode   "0744"
    end

上述代碼中,source、owner、mode需要從外部block,傳遞到template內部的block中,為了實現該目的,采用了instance_eval代碼如下:

  class ChefDSL
   def template(path, block)
    TemplateDSL.new(path, block)
   end
  end

  class TemplateDSL
   def initialize(path, block)
    @path = path
    instance_eval block
   end

   def source(source); @source = source; end
   def owner(owner);  @owner = owner; end
   def mode(mode);   @mode  = mode;  end
  end

上面這個小技巧使得TemplateDSL對象可以應用block,和在自己的scope一樣。block可以訪問和調用TemplateDSL中的變量和方法。

如果沒有使用instance_eval,如下面的代碼,ruby就會拋出一個NoMethodError,因為source、owner、mode無法在block中被訪問到。

復制代碼 代碼如下:

    class TemplateDSL
      def initialize(path, block)
        @path = path
        block.call
      end
    end

當然也可以使用yeild傳遞變量的方式實現,但沒有instance_eval簡潔和靈活。

命令行交互——使用instance_eval

命令行交互,可以采用highline這個gem.
但highline在有些方面不能滿足我的需求,比如類似上面介紹的chef template功能,達到的效果如下,大大簡化了重復代碼:

復制代碼 代碼如下:

        #檢查frigga fail,詢問是否繼續
        Tip.ask frigga_fail? do
          banner "Check some frigga failed, skip failed host and continue deploy?"
          on :yes
          on :quit do
            raise Odin::TipQuitExcption
          end
        end
        ...

        #運行時顯示結果如下:
        Check some frigga failed, skip failed host and continue deploy? [yes/quit]
        #輸入yes繼續,輸入quit退出

實現代碼如下:

 require 'colorize'
 class Tip
  def self.ask(stat = true, block)
   new(block).ret if stat == true
  end

  attr_reader :ret
  def initialize(block)
   @opt = []
   @caller = {}
   @banner = ""
   @ret = false
   self.instance_eval(block)
   print "#{@banner} [#{@opt.join('/')}]: ".light_yellow
   loop do
    x = gets.chomp.strip.to_sym
    if @opt.include?(x)
     @ret = ( @caller[x].call if @caller.key?(x) )
     if @ret == :retry
      print "\n#{@banner} [#{@opt.join('/')}]: ".light_yellow
      next
     else
      return @ret
     end
    else
     print "input error, please enter [#{@opt.join('/')}]: ".light_yellow
    end
   end

  end

  def on(opt, block)
   @opt  opt
   @caller[opt] = block if block_given?
  end
  def banner(str)
   @banner = str
  end
 end
您可能感興趣的文章:
  • Ruby元編程的一些值得注意的地方
  • ruby元編程之創建自己的動態方法
  • ruby元編程之method_missing的一個使用細節
  • Ruby元編程之夢中情人method_missing方法詳解
  • Ruby元編程技術詳解(Ruby Metaprogramming techniques)
  • Ruby元編程小結
  • Ruby和元編程之萬物皆為對象
  • Ruby元編程基礎學習筆記整理

標簽:大慶 克拉瑪依 河池 西雙版納 南昌 甘孜 內江 棗莊

巨人網絡通訊聲明:本文標題《ruby元編程實際使用實例》,本文關鍵詞  ruby,元,編程,實際,使用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《ruby元編程實際使用實例》相關的同類信息!
  • 本頁收集關于ruby元編程實際使用實例的相關信息資訊供網民參考!
  • 推薦文章
    欧美精品一区二区三区视频| 国产亚洲色婷婷久久99精品91| 欧美视频一二区| 国产91久久婷婷一区二区| 国产传媒免费在线观看| 亚洲精品国精品久久99热| 激情五月激情综合| 欧美xxxx18性欧美| 草草视频在线播放| 国严精品久久久久久亚洲影视| 奇米影视一区二区三区小说| 91手机在线观看| 成人av在线资源网站| 99精品人妻少妇一区二区| 一区二区三区国产精品| 久久人人爽人人片| 亚洲网站在线看| www.成人在线观看| 国产三级中文字幕| 色琪琪一区二区三区亚洲区| 女同久久另类69精品国产| 欧美精品亚州精品| 国产呦精品一区二区三区网站| 无码人妻精品一区二区蜜桃百度| 黑人巨大精品欧美一区免费视频| 级毛片内射视频| 欧美自拍大量在线观看| 91视频观看免费| 手机看片国产精品| 久久免费视频在线观看| 国产又黄又大久久| 国产精品www在线观看| 欧美日韩国产一级| 99草在线视频| 亚洲中文字幕无码中文字| 亚洲精选一区二区| 成人妖精视频yjsp地址| 蜜桃av乱码一区二区三区| 国产精品久久久久久久久影视| 久久久国产一区二区三区四区小说| 欧美深性狂猛ⅹxxx深喉| 日本不卡高字幕在线2019| 中文字幕一区二区在线观看| 欧美国产精品一二三| 久久99精品国产99久久| 欧美中文字幕不卡| 日韩电影在线观看网站| www.自拍偷拍| 天堂社区 天堂综合网 天堂资源最新版| 午夜成人在线视频| 美女视频黄 久久| 国产在线综合视频| 日本成人三级电影网站| 日韩久久精品电影| 国产精品欧美一区二区三区| 国产精品视频一区在线观看| 97碰在线视频| 国产视频观看一区| 日韩国产在线播放| 亚洲欧美日韩在线不卡| 国产黄色的视频| 99热成人精品热久久66| 久久久免费精品视频| 调教驯服丰满美艳麻麻在线视频| 妺妺窝人体色WWW精品| 国产午夜精品一区二区三区| 男人操女人的视频在线观看欧美| 在线观看一区二区三区四区| 国产一区二区无遮挡| 欧美日韩午夜激情| 丰满大乳国产精品| 日本中文在线视频| jizz大全欧美jizzcom| 欧美日本亚洲| 亚洲最新在线视频| 欧美精品 日韩| 成人精品视频一区二区三区尤物| 亚洲天堂网一区二区| 人妻av无码专区| 国产伦理久久久| 午夜精品久久久99热福利| 日韩一区二区不卡| www.欧美日韩| 久久久人人人| 国产偷人爽久久久久久老妇app | 亚洲精品乱码久久久久久久| 中文字幕日韩精品一区二区| 亚洲专区国产精品| 日本欧美黄网站| 亚洲精品少妇网址| 91黄色在线观看| 午夜欧美2019年伦理| 国产一区91精品张津瑜| 日本黄色片免费观看| 免费a级黄色片| 亚洲成av人片在线观看无| 免费观看黄色大片| 91丝袜美腿美女视频网站| 97视频在线观看网址| 国产亚洲精品一区二区| 欧美r级电影在线观看| 777欧美精品| 亚洲国内精品视频| 日韩欧美999| 亚洲国产一区二区视频| 国产精品久久久久久久久免费桃花 | 国内老熟妇对白hdxxxx| 97人人爽人人爽人人爽| 在线观看中文字幕av| 国产99对白在线播放| 精品无码人妻一区二区三| 国产黄色片在线| 卡通动漫亚洲综合| 国产精品扒开腿做爽爽| 伊人网在线综合| 女同性恋一区二区三区| 日韩av网站在线播放| 四虎永久免费在线| 国产第一页在线观看| 亚洲成人第一网站| 狂野欧美性猛交xxxx巴西| 极品少妇一区二区| 久久久99久久| 日本乱码高清不卡字幕| 亚洲欧洲午夜一线一品| 国产成人免费av| 成人免费视频视频在| 亚洲色图都市激情| 午夜影院免费观看视频| 久久一二三四区| 日本不卡中文字幕| 欧美国产一区视频在线观看| 欧美人牲a欧美精品| 欧美第一黄网免费网站| 精品国产乱码一区二区三区四区 | 欧亚精品中文字幕| 成人在线视频网址| 日本999视频| 日韩欧美一级视频| 国产91综合网| 在线亚洲高清视频| 亚洲精品国产精品乱码不99按摩 | 在线免费视频一区| 中文字幕 亚洲视频| 国产亚洲综合av| 91精品国产欧美一区二区18| 国产精品久久久久久久久粉嫩av| 公共露出暴露狂另类av| 男人晚上看的视频| 中文字幕 欧美激情| 视频一区中文字幕国产| 欧美日韩美女在线观看| 亚洲精品在线观| 国产嫩草一区二区三区在线观看| 宅男av一区二区三区| 青娱乐国产在线| 国产精品美女一区二区| 亚洲国产成人91精品| 亚洲看片网站| 成人免费看片98欧美| 亚洲欧美另类小说| 国产精品欧美激情在线播放| 亚洲麻豆一区二区三区| 日本不卡在线视频| 色8久久精品久久久久久蜜| 肥熟一91porny丨九色丨| asian性开放少妇pics| 国产91丝袜在线观看| 精品国内二区三区| 91黄色在线看| 日韩在线a电影| 久久精品国产清自在天天线| 亚洲国产精品一区二区第四页av | 天天爱天天做天天爽| 一区二区中文视频| 欧美日本在线视频中文字字幕| 一道本在线免费视频| 国内一区二区视频| 97**国产露脸精品国产| 日韩精品视频一区二区| 日韩国产欧美视频| 日韩女优电影在线观看| 北条麻妃在线视频| 成人国产精品视频| 91精品在线一区| 你懂得在线观看| 午夜婷婷国产麻豆精品| 欧美日韩一区二区三区在线观看免| 中文字幕乱码一区| 亚洲欧洲日韩综合一区二区| 国产99久久精品一区二区永久免费 | 成人免费精品动漫网站| 国产精品久久久久影院老司| 国产精品久久一区二区三区| 在线看片中文字幕| 91久久精品一区二区三区| 日韩视频 中文字幕| 日韩在线观看一区二区| 自拍偷拍亚洲在线| 国产精品69久久久久孕妇欧美| 亚洲成人av资源| 九一免费在线观看| 久久91精品久久久久久秒播| 2019中文字幕在线免费观看| 日本熟妇毛耸耸xxxxxx| 在线色欧美三级视频| 色哟哟免费视频| 色呦呦一区二区三区| 亚洲三级在线观看视频| 91黄色免费观看| 国产精品一区二区人妻喷水| 欧美三级日韩三级| 男生裸体视频网站| 亚洲老头老太hd| 野战少妇38p| 精品精品欲导航| 国产亚洲精品久久久久久打不开| 色婷婷av一区| 涩涩网站在线看| 精品美女一区二区三区| 午夜影院黄色片| 色噜噜国产精品视频一区二区| 久久久久无码国产精品| 亚洲 日韩 国产第一| www.久久久久久| 成人黄色免费网站在线观看| 久久久久久久久97| 成人一区二区在线| 欧美精品v日韩精品v韩国精品v| 国产女人18水真多18精品一级做 | 欧美日韩色婷婷| 欧美床上激情在线观看| 成年人视频观看| 激情五月色婷婷| 国产日韩欧美综合在线| 国产在线精品一区二区不卡了 | 色94色欧美sute亚洲线路一ni| 日本免费新一区视频| 91视频免费网址| 日韩欧美视频免费观看| 国产男女猛烈无遮挡| 最新不卡av在线| 色综合天天做天天爱| 精品国产乱码久久久久久牛牛 | 91亚洲一区二区| 在线观看视频在线观看| 日韩av一二区| 男人在线观看视频| 伊人网视频在线| 午夜精品久久久久久久蜜桃| 综合av第一页| 久久久亚洲天堂| 熟妇人妻无乱码中文字幕真矢织江| 午夜精品一区二| 色综合久久天天| 成人免费91在线看| 色18美女社区| 国产性猛交xx乱| 日本中文在线一区| 国产片一区二区| 亚洲精品免费电影| 91精品国产麻豆国产自产在线| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 国产精品6699| 精品无人乱码一区二区三区的优势 | 免费黄色网址在线| 丰满岳乱妇一区二区三区| 成人高清视频在线| 同产精品九九九| 欧美日韩电影一区二区三区| 丰满少妇xoxoxo视频| 一区二区三区精品视频在线| 国产精品网红福利| 亚洲色图第四色| 亚洲av成人精品日韩在线播放| 国产精品伦一区二区三级视频| 欧洲色大大久久| 69视频在线播放| 最新欧美日韩亚洲| 免费一级片视频| 精品系列免费在线观看| 久久丝袜美腿综合| 一本到一区二区三区| 91国产精品电影| 免费黄在线观看| 久久久国产综合精品女国产盗摄| 欧美日韩国产影片| 国产精品v片在线观看不卡| 午夜激情在线观看视频| 国产人妻大战黑人20p| 国产亚洲精品码| 成人国产精品视频| 亚洲毛片在线观看.| 播放灌醉水嫩大学生国内精品| 亚洲免费视频网| 国产亚洲视频在线观看| 99九九精品视频| 99精品视频99| 亚洲色图清纯唯美| 日韩电影免费在线观看中文字幕| 精品国产乱码久久久久久丨区2区| 欧美日韩人妻精品一区在线| 亚洲成人一级片| 国产精品综合在线视频| 欧美疯狂性受xxxxx喷水图片| 99久热re在线精品视频| 日本在线免费观看| 538prom精品视频线放| 国产欧美亚洲精品| 亚洲第一天堂久久| 国产精品1区2区3区| 久久久久国产精品免费| 韩国一区二区电影| 真人bbbbbbbbb毛片| 粉嫩一区二区三区性色av| 精品国产一区二区三区在线观看| 一级少妇精品久久久久久久| 亚洲观看高清完整版在线观看| 艳色歌舞团一区二区三区| 国产欧美日产一区| 国产精品亚洲天堂| 美女视频一区在线观看| 欧美黄色片在线观看| 大桥未久一区二区三区| 日本精品一区二区在线观看| 8x8x8国产精品| 欧美视频在线第一页| 国产绿帽刺激高潮对白| 久久精品亚洲一区二区三区浴池| 久久久久久国产免费| 山东少妇露脸刺激对白在线| 欧美变态口味重另类| 久久精品国产99久久99久久久| 蜜臀av性久久久久av蜜臀妖精| 国产成人高潮免费观看精品| 亚洲欧美综合7777色婷婷| 色综合久久久久| 日韩视频欧美视频| 男人在线观看视频| 亚洲国产精品久久久久| 5月婷婷6月丁香| 亚洲欧洲av一区二区三区久久| gogogo免费高清日本写真| av午夜一区麻豆| 欧美人xxxxx| 亚洲第一视频在线播放| 日韩网站在线看片你懂的| 亚洲五月激情网| 国产欧美日韩三级| 国产成人一区二区三区免费看| 久一区二区三区| 欧美午夜精品在线| 男女啪啪免费观看| 精品一区二区三区免费毛片爱| 日韩精品久久久毛片一区二区| 精品亚洲成a人| 欧美精品亚洲精品| 久久精品盗摄| 黑人巨大精品欧美一区二区小视频| 日韩高清在线观看| 久久午夜a级毛片| 无码人妻一区二区三区一| 欧美性猛交xxxx乱大交| 玖草视频在线观看| 日韩视频免费直播| 久久精品久久精品久久| 97色在线视频观看| 成人午夜又粗又硬又大| 日本www.色| 欧美精品黑人性xxxx| 一区二区美女视频| 日韩av电影免费在线观看| 免费成人在线影院| 粉嫩av一区二区三区免费观看| 国产午夜麻豆影院在线观看| 高清一区二区三区四区五区| 国产精品无码白浆高潮| 国产成人91久久精品| 亚欧洲精品视频| 国产精品久久久久久久午夜| 日韩一级在线视频| 久久精品中文字幕电影| 亚洲男人天堂网址| 亚洲视频小说| 婷婷国产v国产偷v亚洲高清| 特种兵之深入敌后| 亚洲天堂精品在线观看| 中文字幕一区二区在线观看视频| 欧美一级免费观看| 欧美 亚洲 另类 激情 另类 | 国产欧美精品一区二区三区-老狼| 亚洲第一第二区| 日韩国产美国| 亚洲国产精品yw在线观看| 久久99精品久久久久久久久久久久| 国产肉体xxxx裸体784大胆| 高清国语自产拍免费一区二区三区| 日韩欧美一区二区在线| 中文字幕一区二区在线视频| 9久久婷婷国产综合精品性色| 亚洲丁香婷深爱综合| 一级一级黄色片| 潘金莲一级淫片aaaaa免费看| 国产精品理伦片| 中文字幕第24页| 欧美在线免费观看| 日韩高清电影一区| av黄色在线网站| 日韩av在线免费播放| 丰满人妻妇伦又伦精品国产|