Ruby

от ILuxWiki

Направо към: навигация, търсене

Съдържание

RVM - що е то?

Ruby Version Manager - позволява ползването на различни версии на ruby. Реших да го ползвам за да изтествам как се справя ruby 1.9.2 с един проект писан на Rails 3.0.10 и ruby 1.8.7. От сондиране на мненията в интернет установих че е добре да се ползва 1.9.2 за production. Това е и причината да инсталирам тази версия в работната си машина. RVM ще ми помогне да си запазя основната версия на ruby(1.8.7) и временно да премина към 1.9.2.

  • Инсталация на RVM
 bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
  • Инсталация на ruby 1.9.2 с rvm
 rvm install 1.9.2 -C --enable-shared,--with-readline-dir=/usr/local
  • Преминаване към 1.9.2
 rvm 1.9.2 --default
  • Използване на system ruby версията
 rvm system
  • какво се ползва в момента
 rvm use


Всичко трябва да се проверява

 † ~> ruby -v
 ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin10]
 † ~> rvm 1.9.2 --default
 † ~> ruby -v
 ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0]

Фрагменти

Работа със времеви стойности

  • unixtime to Time
 Time.at(1161200857)
  • string to Time
 require 'time'
 Time.parse('2007-01-31 12:22:26')

UTF-8 чуднотеки

Това коментарче, трябва да се постави в началото на script-а, който ползва utf-8 символи:

 # encoding: UTF-8

Скриптове

Twitter API

 gem install twitter
 #!/usr/bin/env ruby
 require 'rubygems'
 require 'twitter'
 
 httpauth = Twitter::HTTPAuth.new('username', 'password')
 base = Twitter::Base.new(httpauth)
 base.update('Heeeeyyyyooo from the Twitter Gem')


използване на Net::SSH

 gem install echoe
 gem install net-ssh
 #!/usr/bin/env ruby
 require 'rubygems'
 require 'net/ssh'
 
 HOST = '192.168.1.1'
 USER = 'username'
 PASS = 'password'

 Net::SSH.start( HOST, USER, :password => PASS ) do|ssh|
   result = ssh.exec!('ls')
   puts result
 end

Генериране на таблица за Wiki

 
  #!/usr/bin/env ruby
  
  CENTER       = 32
  
  def header(titles)
    b_row      = '!'
    e_row      = "\n|-"
    b_row + (titles.map{ |e| e.center(CENTER)}).join('||') + e_row
  end
  
  def lines(net, f, t)
    b_row      = "|"
    e_row      = "\n|-"
    out        = []
    f.upto(t) { |e|
      ip       = net + e.to_s
      cmd      = "host %s" % [ ip ]
      hostname = `#{cmd}`.split(/ /)[4].chomp.chop!
      row      = [ "[[#{hostname}]]", "#{ip}", "", "[http://incubus.interbild.net/munin/interbild.net/#{hostname}.html munin]" ]
      out << b_row + (row.map{ |e| e.center(CENTER)}).join('||') + e_row
    }
    out
  end
  
  ##
  ## main
  ## 
  net          = '94.190.192.'
  
  table_start  = '{| border="1" class="prettytable, sortable"'
  table_end    = '|}'
  
  titles       = [ 'Име', 'IP', 'Предназначение', 'Връзки' ]
  
  puts table_start
  puts header(titles)
  puts lines(net, 1, 63)
  puts table_end
  

Генериране на DHCP списък за staff hardware

 #!/usr/bin/env ruby
 
 data =<<__EOF__
 17.	 notebook	 CPU: Core Duo 1.83 GHz, RAM: 1024 MB, HDD: 160GB	 00:1B:24:F1:70:FD	 00:17:C4:15:97:BD	 Windows XP SP3 AVG	 Търговски офис	 Нина Жекова	 BENQ S32B
 18.	 notebook	 CPU: Core Duo 1.86 GHz, RAM: 2048 MB, HDD: 250GB		 00:15:AF:D1:2A:34	 Windows XP SP3 NOD32 3.0	 Търговски офис	 Нина Андреева	
 __EOF__
 
 data = data.split(/\n/)
 users = Array.new
 i = 10
 data.each { |e| 
 	l = e.split(/\t/)
 	users <<	{:name => l[7].strip, :mac => l[4].strip, :ip => "10.210.1.#{i}"}
 	i += 1
 	# .each { |l|
 	#		i += 1; 
 	#		puts "#{i} - #{l}" 
 	#		users << {:name => l}
 	# }
 }
 require 'pp'
 users.each { |e|
 	# puts e.keys
 	data = <<__EOF__
 	host #{e[:name].strip.gsub(/\s+/,'_')} {
 					hardware ethernet #{e[:mac]};
 					option host-name "#{e[:name]}";
 					fixed-address #{e[:ip]};
 	}
 __EOF__
 	puts data
 }