Erinevus lehekülje "Ruby" redaktsioonide vahel

Allikas: Kuutõrvaja
(Ruby paigaldamine)
(Oracle andmebaasi kasutamine)
 
(ei näidata 3 kasutaja 82 vahepealset redaktsiooni)
18. rida: 18. rida:
 
* 1.9.0 - võimalik lisaks paigaldada  
 
* 1.9.0 - võimalik lisaks paigaldada  
  
Ruby v. 1.8.7 paigaldmiseks sobib öelda (tegelik paketinimi on ruby1.8)
+
Ruby v. 1.8.7 paigaldmiseks sobib Debianis öelda (tegelik paketinimi on ruby1.8)
  
 
  # apt-get install ruby
 
  # apt-get install ruby
 +
 +
või FreeBSD puhul
 +
 +
# cd /usr/ports/lang/ruby18
 +
# make install clean
 +
 +
Lisaks paigaldatakse pakett libruby1.8, mis sisaldab Ruby kasutamiseks vajalikke teeke, teegid kopeeritakse kataloogi
 +
 +
/usr/lib/ruby/1.8
  
 
Paigaldatud Ruby versiooni küsimiseks sobib öelda
 
Paigaldatud Ruby versiooni küsimiseks sobib öelda
26. rida: 35. rida:
 
  $ ruby -v
 
  $ ruby -v
 
  ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
 
  ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
 +
 +
===Ruby paigaldamine RVMi abil===
 +
 +
RVM on lühend mis tähendab Ruby Version Manager. RVM võimaldab käigupealt ja kergelt paigaldada, hallata ja vahetada Ruby versiooni olles seega asendamatu töömees arendajatele, kes testivad enda rakenduste tööd erinevate versioonidega. RVMi kasutamise üheks eelduseks on see, et süsteemi on paigaldatud curl.
 +
 +
RVMi paigalduseks tuleb anda käsk:
 +
 +
# bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
 +
 +
Misjärel tehakse kogu RVMi paigaldusprotsess automaatselt ära.
 +
RVMi kasutamiseks, näiteks Ruby 1.8 paigaldamiseks tuleb trükkida käsk:
 +
 +
# rvm install 1.8.7
 +
 +
Misjärel RVM paigaldab ja kompileerib Ruby koos kõikide sõltuvuste ja vajalike failidega, kaasaarvatud RubyGemsiga.
 +
 +
Peale versiooni paigaldust tuleb süsteemile öelda, et võtame uue versiooni kasutusele käsuga:
 +
 +
# rvm use 1.8.7
 +
 +
Sedamoodi võib otse "lennult" vahetada Ruby versiooni näiteks 1.8 ja 1.9 vahel. Nüüd võime paigaldada süsteemi ka teise versiooni:
 +
 +
# rvm install 1.9.2
 +
 +
Ning lülituda use võtme abil ümber hoopis sellele.
 +
 +
Rohkem infot leiab kodulehelt: http://beginrescueend.com/
 +
 +
===Ruby dokumentatsioon===
 +
 +
FreeBSDs paigaldatakse dokumentatsioon vaikimisi koos Rubyga. Debianis tuleb selle kasutamiseks paigaldada pakett ri
 +
 +
# apt-get install ri
 +
 +
ning nt Resolv teegi kohta info küsimiseks öelda
 +
 +
$ ri Resolv
 +
---------------------------------------------------------- Class: Resolv
 +
    Resolv is a thread-aware DNS resolver library written in Ruby.
 +
    Resolv can handle multiple DNS requests concurrently without
 +
    blocking. The ruby interpreter.
 +
 +
    See also resolv-replace.rb to replace the libc resolver with #
 +
    Resolv.
 +
 +
    Resolv can look up various DNS resources using the DNS module
 +
    directly.
 +
 +
    Examples:
 +
 +
      p Resolv.getaddress "www.ruby-lang.org"
 +
      p Resolv.getname "210.251.121.214"
 +
 +
===RubyGems===
 +
 +
RubyGems on Ruby sisemine moodulite halduse süsteem. Gems süsteemi kasutamise kohta näeb näiteid öeldes
 +
 +
# gem help examples
 +
 +
Paigaldatud tarkvara nimekirja näeb
 +
 +
# gem list --local
 +
 +
Tarkvara paigaldamiseks sobib öelda nt
 +
 +
# gem install paketinimi
 +
 +
Tarkvara saab otsida öeldes
 +
 +
# gem search marksona --remote
 +
 +
Selle kasutamiseks on vajalik paigaldada pakett rubygems
 +
 +
http://docs.rubygems.org/read/chapter/2 lisalugemist
  
 
===Programmeerimine Rubys===
 
===Programmeerimine Rubys===
31. rida: 114. rida:
 
Ruby on
 
Ruby on
  
* dynamically typed - st, et nt muutujate väärtustamisel ei pea nende tüüpe kirjeldama
+
* dünaamilise tüübiskeemiga (ingl. k. dynamically typed) keel - programmi käivitamisel ajal (ingl. k. runtime) toimub tüüpide üle otsustamine; st praktiliselt, et nt muutujate väärtustamisel ei pea nende tüüpe kirjeldama
 +
* nõrga tüübiskeemiga (ingl. k. weakly typed) keel - erinevat tüüpi muutujatega saab teha teatud operatsioone, nt liita arv ja sõne
 +
 
 +
Ruby on objekt-orienteeritud keel, st kõik Rubys on objektid, sh numbrid, nt avaldis esitab arvu viis meetodid
 +
 
 +
puts 5.methods
 +
 
 +
ja avaldis esitab arvu viis klassi
 +
 
 +
puts 5.class
 +
 
 +
Kiire interaktiivse ülevaate Rubys programeerimises leiab lingilt http://tryruby.org/
  
 
===Ruby interpretaator===
 
===Ruby interpretaator===
 +
 +
Ruby interpretaator (tõlgendaja) annab kasutajale võimaluse ruby koodi katsetada. Puuduseks on see, et funktsioonide defineerimisel tekkivad apsakad tulevad alles lõpus välja ning nende parandamine on aeganõudev.
  
 
Ruby interpretaatori paigaldamiseks tuleb Debian operatsiooni puhul öelda
 
Ruby interpretaatori paigaldamiseks tuleb Debian operatsiooni puhul öelda
44. rida: 140. rida:
 
  irb(main):001:0> 20.0/8
 
  irb(main):001:0> 20.0/8
 
  => 2.5
 
  => 2.5
 +
 +
või ka
 +
 +
$ irb
 +
irb(main):001:0> require 'date'
 +
=> true
 +
irb(main):002:0> t2na = Date.today
 +
=> #<Date: 4910765/2,0,2299161>
 +
irb(main):003:0> sada_p2eva_hiljem = t2na + 100
 +
=> #<Date: 4910965/2,0,2299161>
 +
irb(main):004:0> t2na.to_s
 +
=> "2010-07-05"
 +
irb(main):005:0> sada_p2eva_hiljem.to_s
 +
=> "2010-10-13"
  
 
===Ruby skript===
 
===Ruby skript===
63. rida: 173. rida:
  
 
  $ chmod 0755 skript.rb
 
  $ chmod 0755 skript.rb
 +
 +
või
 +
 +
$ chmod +x skript.rb
  
 
ning käivitada
 
ning käivitada
68. rida: 182. rida:
 
  $ ./skript.rb
 
  $ ./skript.rb
  
===Konsoolilt sisendi lugemine===
+
===Andmestruktuurid===
 +
 
 +
TODO
 +
 
 +
====Sõne====
 +
 
 +
muutuja = "Tere hommikust!"
 +
 
 +
Sõne osa 'hommikust' poole saab pöörduda selliselt
 +
 
 +
muutuja[5..13]
 +
 
 +
====Arv====
 +
 
 +
muutuja = 5
 +
 
 +
====Massiiv====
 +
 
 +
Massiiv või ka jada (ingl. k. list) on järjestatud hulk
 +
 
 +
massiivinimi = ["yks", "kaks", "kolm"]
 +
 
 +
Massiivi elemendi poole pöördumine toimub selliselt
 +
 
 +
puts massiivinimi[1]
  
print "Enter your name: "
+
Tänu Ruby objekt-orienteeritusele saab kasutades massiivi meetodit each öelda nii
name = gets
 
  
===Jadatöötlus===
+
massiivinimi = ["yks", "kaks", "kolm"]
 +
 +
massiivinimi.each do |massiivielement|
 +
  puts massiivielement
 +
end
  
 
  ary = [1, 2, 3]
 
  ary = [1, 2, 3]
 
  puts ary[0]
 
  puts ary[0]
 +
 +
Või keerukam näide
  
 
  cities  = %w[ London
 
  cities  = %w[ London
90. rida: 233. rida:
 
       cities - visited
 
       cities - visited
  
 +
Viimases näites defineeritakse jada kiirmeetodil, kasutades %w tähist, kusjuures jada elemente ei pea jutumärkidesse panema.
 +
 +
Suurima numbri leidmine jadast
 +
 +
[12, 47, 35].max                                                   
 +
=> 47 
 +
 +
Jada sorteerimiseks
 +
 +
jadanimi.sort!
 +
 +
====Sõnastik====
 +
 +
Sõnastik (ingl. k. hash) on key-value paaridest koosnev järjestamata hulk
 +
 +
  sonastik = { 'priit': 167, 'mart': 196 }
 +
 +
Sõnastiku elemendi väärtuse esitamine toimub nii
 +
 +
  print sonastik["print"]
 +
 +
===Meetodid===
 +
 +
Meetodid võimaldavad programmi teksti loogiliselt organiseerida, nt eraldada osa korduvaks kasutamiseks.
 +
 +
def korrutamine(x, y)
 +
  return x * y
 +
end
 +
 +
puts korrutamine(15, 3)
 +
 +
Teatud mõttes võib öelda, et tänu Ruby objekt-orienteeritusele on need asjad mis nö tavaliselt on funktsioonid Rubys meetodid.
 +
 +
===Konsoolilt sisendi lugemine===
 +
 +
print "Enter your name: "
 +
name = gets
  
 
===Stringitöötlus===
 
===Stringitöötlus===
96. rida: 276. rida:
 
  puts herb[0,1]
 
  puts herb[0,1]
 
  puts herb[0..3]
 
  puts herb[0..3]
 +
 +
tulemuseks
 +
 +
p
 +
pars
 +
 +
 +
Mitu märki on stringis ?
 +
"Jimmy".length
 +
 +
Stringi kordus
 +
 +
"Jimmy" * 5
  
 
'''Random funktsioon'''
 
'''Random funktsioon'''
109. rida: 302. rida:
 
Lihtne tsükkel nullist sajani
 
Lihtne tsükkel nullist sajani
  
topelt tsükkel
+
topelt tsükkel mis väljastab number ühtedest koosneva tabeli
  
#!/usr/local/bin/ruby
 
 
   1.upto(10) do |fg|
 
   1.upto(10) do |fg|
 
     1.upto(10) do |bg|
 
     1.upto(10) do |bg|
118. rida: 310. rida:
 
   puts
 
   puts
 
   end
 
   end
 
  
 
===Shelli värvid===
 
===Shelli värvid===
141. rida: 332. rida:
 
   Pathname.new($0).realpath()
 
   Pathname.new($0).realpath()
  
#!/usr/bin/env ruby
+
'''Shellis parameetrina antavad argumendid'''
 +
 
 
  ARGV.each do|a|
 
  ARGV.each do|a|
 
   puts "Argument: #{a}"
 
   puts "Argument: #{a}"
 
  end
 
  end
 +
 +
Kasutamine
  
 
  '''./arg.sh ahaa'''
 
  '''./arg.sh ahaa'''
 
  Argument: ahaa
 
  Argument: ahaa
  
'''failid'''
+
===failioperatsioonid===
 +
 
 +
Üldpõhimõte oleks
  
 
  File.open("file", "r") do |io|
 
  File.open("file", "r") do |io|
 
     # do something with io
 
     # do something with io
 
  end
 
  end
 +
 +
Lihtne faili lugemine
 +
 +
print File.read("/comics.txt")
 +
 +
Avame faili ja loeme sealt infot
  
 
  File.open("/location/of/my/file.txt", "r") do |f|
 
  File.open("/location/of/my/file.txt", "r") do |f|
187. rida: 389. rida:
 
* klass Liitja pärib klassi Arvutaja meetodid, seetõttu on võimalik kasutada arvuta.meelespea'd mida otseselt ei ole kirjeldatud Liitja klassis
 
* klass Liitja pärib klassi Arvutaja meetodid, seetõttu on võimalik kasutada arvuta.meelespea'd mida otseselt ei ole kirjeldatud Liitja klassis
 
* klasside nimesid on oluline alustada suure algustähega
 
* klasside nimesid on oluline alustada suure algustähega
 +
 +
===SMTP===
 +
 +
require 'net/smtp'
 +
 +
msgstr = <<END_OF_MESSAGE
 +
From: Priit Kask <priit@loomaaed.tartu.ee>
 +
To: Mart Kask <mart@loomaaed.tartu.ee>
 +
Subject: kevad saabub, puurid puhtaks
 +
 +
Kirja sisu
 +
END_OF_MESSAGE
 +
 +
smtp = Net::SMTP.start('192.168.1.250', 25, 'loomaaed.tartu.ee')
 +
smtp.send_message msgstr, 'priit@loomaaed.tartu.ee', 'mart@loomaaed.tartu.ee'
 +
smtp.finish
 +
 +
===Mysql andmebaasi kasutamine===
 +
 +
Ühendumine ja query päring
 +
 +
require 'mysql'
 +
 +
mysql = Mysql.init()
 +
mysql.connect('localhost')
 +
 +
results = mysql.query("SELECT now();")
 +
 +
results.each{|row|; puts row;}
 +
 +
mysql.close()
 +
 +
Tabeli kustutamine, tekitamine ja sinna info lisamine
 +
 +
require 'mysql'
 +
 +
mysql = Mysql.init()
 +
mysql.connect('localhost')
 +
mysql.select_db('test')
 +
 +
mysql.query("DROP TABLE IF EXISTS rocks")
 +
 +
mysql.query("CREATE TABLE rocks (id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), rockname CHAR(20) NOT  NULL);")
 +
 +
mysql.query("INSERT INTO rocks (rockname) values('Granite');")
 +
mysql.query("INSERT INTO rocks (rockname) values('Coal');")
 +
mysql.query("INSERT INTO rocks (rockname) values('Quartz');")
 +
 +
mysql.close()
 +
 +
===PostgreSQL andmebaasi kasutamine===
 +
 +
PostgreSQL andmebaasi saab Ruby seest kasutada mooduli ruby-pg abil.
 +
 +
Gemist installiks tuleb öelda
 +
 +
# gem install postgres
 +
 +
Debian Lenny keskkonnas sobib selleks paigaldada pakett
 +
 +
# apt-get install libpgsql-ruby
 +
 +
Skript küsib andmebaasist public.kasutajad tabelist kahte väärtust
 +
 +
require 'pg'
 +
conn = PGconn.connect("192.168.1.247", 5432, '', '', "andmebaasinimi", "kasutajanimi", "parool")
 +
res = conn.exec("SELECT nimi, vanus FROM kasutajad where nimi = 'Priit Kask';")
 +
 +
res.each do |rida|
 +
  puts "Nimi: #{rida['nimi']}, vanus: #{rida['vanus']}"
 +
end
 +
 +
res.clear
 +
conn.close
 +
 +
===Oracle andmebaasi kasutamine===
 +
 +
Oracle andmebaasi saab Ruby seest kasutada mooduli ruby-oci8 abil. Paigaldamise ettevalmistamiseks tuleb
 +
 +
* tekitada nö tavapärasel viisil [[:Oracle_Instant_Client]] /opt/instantclient kataloog ning moodustada seal link
 +
 +
# ln -s libclntsh.so.11.1 libclntsh.so
 +
 +
* paigaldada kompileerimiseks vajalikud paketid
 +
 +
# apt-get install build-essential python-dev libaio-dev
 +
 +
* seadistada keskkonnamuutujad
 +
 +
# export LD_LIBRARY_PATH=/opt/instantclient
 +
# export ORACLE_HOME=/opt/instantclient
 +
# export TNS_ADMIN=/opt/instantclient
 +
 +
Gemist installiks tuleb öelda
 +
 +
# LD_LIBRARY_PATH=/opt/instantclient gem install ruby-oci8
 +
Building native extensions.  This could take a while...
 +
Successfully installed ruby-oci8-2.1.5
 +
1 gem installed
 +
Installing ri documentation for ruby-oci8-2.1.5...
 +
 +
Enclosing class/module 'cOCI8' for module Metadata not known
 +
Installing RDoc documentation for ruby-oci8-2.1.5...
 +
 +
Enclosing class/module 'cOCI8' for module Metadata not known
 +
 +
Tulemuse küsimiseks sobib öelda
 +
 +
# gem list --local
 +
 +
*** LOCAL GEMS ***
 +
 +
ruby-oci8 (2.1.5)
 +
 +
Nt selline skript kirjutab tabelist t1 välja nö tulpade A ja B väärtused arvestades UTF-8 kodeeringut
 +
 +
$ cat skript.rb
 +
require 'rubygems'
 +
ENV['NLS_LANG'] = 'ESTONIAN_ESTONIA.AL32UTF8'
 +
require 'oci8'
 +
conn = OCI8.new('KASUTAJANIMI','PAROOL', 'SIDNIMI')
 +
cursor = conn.exec('select A, B from t1')
 +
while r = cursor.fetch()
 +
puts r.join(',')
 +
end
 +
cursor.close
 +
conn.logoff
 +
 +
Käivitamiseks öelda
 +
 +
$ ruby skript.rb > /tmp/valjund.txt
 +
 +
Kasulikud lisamaterjalid
 +
 +
* http://www.it-wikipedia.com/web/how-to-install-ruby-oci8-on-ubuntu-server.html
  
 
===DNS===
 
===DNS===
197. rida: 534. rida:
 
   puts "www.loomaaed.tartu.ee A kirje: " + addr.to_s
 
   puts "www.loomaaed.tartu.ee A kirje: " + addr.to_s
 
  end
 
  end
 +
 +
===Soketi kasutamine===
 +
 +
====Server====
 +
 +
require "socket"
 +
 +
ajaserver = TCPServer.new('192.168.10.35', 20000)
 +
loop do
 +
  Thread.start(ajaserver.accept) do |s|
 +
    print(s, " on vastuvoetud\n")
 +
    s.write(Time.now)
 +
    print(s, " on teenindatud\n")
 +
    s.close
 +
    end
 +
  end
 +
 +
kus
 +
 +
* kasutatakse socket teeki
 +
* moodustatakse ajaserver nimeline objekt
 +
* käivitatakse loop korduse see uue lõime alustamine sissetuleva ühenduse tekkimsiele
 +
 +
====Klient====
 +
 +
require 'socket'
 +
streamSock = TCPSocket.new( "192.168.10.35", 20000 )
 +
str = streamSock.recv( 100 )
 +
print str + "\n"
 +
streamSock.close
  
 
===Kasulikud lisamaterjalid===
 
===Kasulikud lisamaterjalid===
203. rida: 570. rida:
 
* http://www.elctech.com/articles/ruby-daemons-and-angels ruby ja deemonid
 
* http://www.elctech.com/articles/ruby-daemons-and-angels ruby ja deemonid
 
* http://www.phptoruby.com/ php ja ruby süntaksi teisendused
 
* http://www.phptoruby.com/ php ja ruby süntaksi teisendused
 +
* Learning Ruby (Michael Fitzgerald)
 +
* Ruby Cookbook (Lucas Carlson, Leonard Richardson)
 +
* http://rubyonrails.org/
 +
* http://wiki.rubyonrails.org/
 +
* http://www.humblelittlerubybook.com/
 +
* http://lipsiadmin.com/
 +
* http://www.ioncannon.net/programming/941/using-daemon-kit-and-robustthread-to-build-ruby-daemons/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+ioncannon+%28IONCANNON%29
 +
* http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/93305 nano süntaks värviliseks
 +
* http://totalrecall.wordpress.com/2008/09/12/charming-ruby-with-curses/ ncurses abil kursori liigutamine

Viimane redaktsioon: 28. aprill 2013, kell 18:42

Sissejuhatus

Ruby http://www.ruby-lang.org/ on populaare programmeerimikeel, millele on iseloomulikud sellised asjaolud

  • objekt-orienteeritud keel
  • skriptimskeel

2010 aastal on levinud kaks Ruby versiooni

  • 1.8 - ...
  • 1.9 - ...

Ruby paigaldamine

Debian Lenny paketihalduses on olemas kaks Ruby versiooni

  • 1.8.7 - vaikimisi
  • 1.9.0 - võimalik lisaks paigaldada

Ruby v. 1.8.7 paigaldmiseks sobib Debianis öelda (tegelik paketinimi on ruby1.8)

# apt-get install ruby

või FreeBSD puhul

# cd /usr/ports/lang/ruby18
# make install clean

Lisaks paigaldatakse pakett libruby1.8, mis sisaldab Ruby kasutamiseks vajalikke teeke, teegid kopeeritakse kataloogi

/usr/lib/ruby/1.8

Paigaldatud Ruby versiooni küsimiseks sobib öelda

$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]

Ruby paigaldamine RVMi abil

RVM on lühend mis tähendab Ruby Version Manager. RVM võimaldab käigupealt ja kergelt paigaldada, hallata ja vahetada Ruby versiooni olles seega asendamatu töömees arendajatele, kes testivad enda rakenduste tööd erinevate versioonidega. RVMi kasutamise üheks eelduseks on see, et süsteemi on paigaldatud curl.

RVMi paigalduseks tuleb anda käsk:

# bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

Misjärel tehakse kogu RVMi paigaldusprotsess automaatselt ära. RVMi kasutamiseks, näiteks Ruby 1.8 paigaldamiseks tuleb trükkida käsk:

# rvm install 1.8.7

Misjärel RVM paigaldab ja kompileerib Ruby koos kõikide sõltuvuste ja vajalike failidega, kaasaarvatud RubyGemsiga.

Peale versiooni paigaldust tuleb süsteemile öelda, et võtame uue versiooni kasutusele käsuga:

# rvm use 1.8.7

Sedamoodi võib otse "lennult" vahetada Ruby versiooni näiteks 1.8 ja 1.9 vahel. Nüüd võime paigaldada süsteemi ka teise versiooni:

# rvm install 1.9.2

Ning lülituda use võtme abil ümber hoopis sellele.

Rohkem infot leiab kodulehelt: http://beginrescueend.com/

Ruby dokumentatsioon

FreeBSDs paigaldatakse dokumentatsioon vaikimisi koos Rubyga. Debianis tuleb selle kasutamiseks paigaldada pakett ri

# apt-get install ri

ning nt Resolv teegi kohta info küsimiseks öelda

$ ri Resolv
---------------------------------------------------------- Class: Resolv
    Resolv is a thread-aware DNS resolver library written in Ruby.
    Resolv can handle multiple DNS requests concurrently without
    blocking. The ruby interpreter.

    See also resolv-replace.rb to replace the libc resolver with #
    Resolv.

    Resolv can look up various DNS resources using the DNS module
    directly.

    Examples:

      p Resolv.getaddress "www.ruby-lang.org"
      p Resolv.getname "210.251.121.214"

RubyGems

RubyGems on Ruby sisemine moodulite halduse süsteem. Gems süsteemi kasutamise kohta näeb näiteid öeldes

# gem help examples

Paigaldatud tarkvara nimekirja näeb

# gem list --local

Tarkvara paigaldamiseks sobib öelda nt

# gem install paketinimi

Tarkvara saab otsida öeldes

# gem search marksona --remote

Selle kasutamiseks on vajalik paigaldada pakett rubygems

http://docs.rubygems.org/read/chapter/2 lisalugemist

Programmeerimine Rubys

Ruby on

  • dünaamilise tüübiskeemiga (ingl. k. dynamically typed) keel - programmi käivitamisel ajal (ingl. k. runtime) toimub tüüpide üle otsustamine; st praktiliselt, et nt muutujate väärtustamisel ei pea nende tüüpe kirjeldama
  • nõrga tüübiskeemiga (ingl. k. weakly typed) keel - erinevat tüüpi muutujatega saab teha teatud operatsioone, nt liita arv ja sõne

Ruby on objekt-orienteeritud keel, st kõik Rubys on objektid, sh numbrid, nt avaldis esitab arvu viis meetodid

puts 5.methods

ja avaldis esitab arvu viis klassi

puts 5.class

Kiire interaktiivse ülevaate Rubys programeerimises leiab lingilt http://tryruby.org/

Ruby interpretaator

Ruby interpretaator (tõlgendaja) annab kasutajale võimaluse ruby koodi katsetada. Puuduseks on see, et funktsioonide defineerimisel tekkivad apsakad tulevad alles lõpus välja ning nende parandamine on aeganõudev.

Ruby interpretaatori paigaldamiseks tuleb Debian operatsiooni puhul öelda

# apt-get install irb

Interpretaatorit saab kasutada nt kalkulaatorina

$ irb
irb(main):001:0> 20.0/8
=> 2.5

või ka

$ irb
irb(main):001:0> require 'date'
=> true
irb(main):002:0> t2na = Date.today
=> #<Date: 4910765/2,0,2299161>
irb(main):003:0> sada_p2eva_hiljem = t2na + 100
=> #<Date: 4910965/2,0,2299161>
irb(main):004:0> t2na.to_s
=> "2010-07-05"
irb(main):005:0> sada_p2eva_hiljem.to_s
=> "2010-10-13"

Ruby skript

Ruby skript esineb tekstifaili kujul, nt selline skript kirjutab 'Hello, world'

puts "Hello, world!"

Skripti käivitamiseks sobib öelda

 $ ruby skript.rb

Alternatiiviks on lisada faili algusse rida interpretaatori nimega

#!/usr/bin/ruby
puts "Hello, world!"

ning muuta fail käivitatavaks

$ chmod 0755 skript.rb

või

$ chmod +x skript.rb

ning käivitada

$ ./skript.rb

Andmestruktuurid

TODO

Sõne

muutuja = "Tere hommikust!"

Sõne osa 'hommikust' poole saab pöörduda selliselt

muutuja[5..13]

Arv

muutuja = 5

Massiiv

Massiiv või ka jada (ingl. k. list) on järjestatud hulk

massiivinimi = ["yks", "kaks", "kolm"]

Massiivi elemendi poole pöördumine toimub selliselt

puts massiivinimi[1]

Tänu Ruby objekt-orienteeritusele saab kasutades massiivi meetodit each öelda nii

massiivinimi = ["yks", "kaks", "kolm"]

massiivinimi.each do |massiivielement|
  puts massiivielement
end
ary = [1, 2, 3]
puts ary[0]

Või keerukam näide

cities  = %w[ London
              Oslo
              Paris
              Amsterdam
              Berlin ]
visited = %w[Berlin Oslo]

puts "I still need " +
     "to visit the " +
     "following cities:",
     cities - visited

Viimases näites defineeritakse jada kiirmeetodil, kasutades %w tähist, kusjuures jada elemente ei pea jutumärkidesse panema.

Suurima numbri leidmine jadast

[12, 47, 35].max                                                     
=> 47  

Jada sorteerimiseks

jadanimi.sort!

Sõnastik

Sõnastik (ingl. k. hash) on key-value paaridest koosnev järjestamata hulk

 sonastik = { 'priit': 167, 'mart': 196 }

Sõnastiku elemendi väärtuse esitamine toimub nii

 print sonastik["print"]

Meetodid

Meetodid võimaldavad programmi teksti loogiliselt organiseerida, nt eraldada osa korduvaks kasutamiseks.

def korrutamine(x, y)
  return x * y
end

puts korrutamine(15, 3)

Teatud mõttes võib öelda, et tänu Ruby objekt-orienteeritusele on need asjad mis nö tavaliselt on funktsioonid Rubys meetodid.

Konsoolilt sisendi lugemine

print "Enter your name: "
name = gets

Stringitöötlus

herb = "parsley"
puts herb[0,1]
puts herb[0..3]

tulemuseks

p
pars


Mitu märki on stringis ?

"Jimmy".length

Stringi kordus

"Jimmy" * 5

Random funktsioon

puts rand(10)

saame suvalise numbri 0-10

for num in (0..100)
    print num,"\n"
end

Lihtne tsükkel nullist sajani

topelt tsükkel mis väljastab number ühtedest koosneva tabeli

  1.upto(10) do |fg|
    1.upto(10) do |bg|
      print "1"
    end
  puts
  end

Shelli värvid

puts " \e[32mROHELINE\e[0m"

värvitabel, asjalik-vajalik

[0, 1, 4, 5, 7].each do |attr|
  puts '----------------------------------------------------------------'
  puts "ESC[#{attr};Foreground;Background"
  30.upto(37) do |fg|
    40.upto(47) do |bg|
      print "\033[#{attr};#{fg};#{bg}m #{fg};#{bg}  "
    end
  puts "\033[0m"
  end
end
#!/usr/bin/env ruby
require 'pathname'
 Pathname.new($0).realpath()

Shellis parameetrina antavad argumendid

ARGV.each do|a|
  puts "Argument: #{a}"
end

Kasutamine

./arg.sh ahaa
Argument: ahaa

failioperatsioonid

Üldpõhimõte oleks

File.open("file", "r") do |io|
    # do something with io
end

Lihtne faili lugemine

print File.read("/comics.txt")

Avame faili ja loeme sealt infot

File.open("/location/of/my/file.txt", "r") do |f|
 while ! f.eof do
  line = f.gets
  puts line #Print the line to the screen
 end
end

Klassi kirjeldamine

class Arvutaja
  def meelespea
    puts "Monede tehete tulemus soltub jarjekorrast"
  end
end

class Liitja < Arvutaja
  def liitja
    puts "Liitmine ei soltu jarjekorrast"
  end
end

arvuta = Liitja.new
arvuta.meelespea
arvuta.liitja

kus

  • kirjeldatakse kaks klassi, Arvutaja ja Liitja
  • Liitja.new tekitab uue objekti 'arvuta'
  • arvuti.meelespea ja arvuta.liitja kutsuvad täitmiseks välja klassi meetodid meelespea ning liitja
  • klass Liitja pärib klassi Arvutaja meetodid, seetõttu on võimalik kasutada arvuta.meelespea'd mida otseselt ei ole kirjeldatud Liitja klassis
  • klasside nimesid on oluline alustada suure algustähega

SMTP

require 'net/smtp'

msgstr = <<END_OF_MESSAGE
From: Priit Kask <priit@loomaaed.tartu.ee>
To: Mart Kask <mart@loomaaed.tartu.ee>
Subject: kevad saabub, puurid puhtaks

Kirja sisu
END_OF_MESSAGE

smtp = Net::SMTP.start('192.168.1.250', 25, 'loomaaed.tartu.ee')
smtp.send_message msgstr, 'priit@loomaaed.tartu.ee', 'mart@loomaaed.tartu.ee'
smtp.finish

Mysql andmebaasi kasutamine

Ühendumine ja query päring

require 'mysql'

mysql = Mysql.init()
mysql.connect('localhost')

results = mysql.query("SELECT now();")

results.each{|row|; puts row;}

mysql.close()

Tabeli kustutamine, tekitamine ja sinna info lisamine

require 'mysql'

mysql = Mysql.init()
mysql.connect('localhost')
mysql.select_db('test')

mysql.query("DROP TABLE IF EXISTS rocks")

mysql.query("CREATE TABLE rocks (id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), rockname CHAR(20) NOT  NULL);")

mysql.query("INSERT INTO rocks (rockname) values('Granite');")
mysql.query("INSERT INTO rocks (rockname) values('Coal');")
mysql.query("INSERT INTO rocks (rockname) values('Quartz');")

mysql.close()

PostgreSQL andmebaasi kasutamine

PostgreSQL andmebaasi saab Ruby seest kasutada mooduli ruby-pg abil.

Gemist installiks tuleb öelda

# gem install postgres

Debian Lenny keskkonnas sobib selleks paigaldada pakett

# apt-get install libpgsql-ruby

Skript küsib andmebaasist public.kasutajad tabelist kahte väärtust

require 'pg'
conn = PGconn.connect("192.168.1.247", 5432, , , "andmebaasinimi", "kasutajanimi", "parool")
res = conn.exec("SELECT nimi, vanus FROM kasutajad where nimi = 'Priit Kask';")

res.each do |rida|
  puts "Nimi: #{rida['nimi']}, vanus: #{rida['vanus']}"
end

res.clear
conn.close

Oracle andmebaasi kasutamine

Oracle andmebaasi saab Ruby seest kasutada mooduli ruby-oci8 abil. Paigaldamise ettevalmistamiseks tuleb

  • tekitada nö tavapärasel viisil Oracle_Instant_Client /opt/instantclient kataloog ning moodustada seal link
# ln -s libclntsh.so.11.1 libclntsh.so
  • paigaldada kompileerimiseks vajalikud paketid
# apt-get install build-essential python-dev libaio-dev
  • seadistada keskkonnamuutujad
# export LD_LIBRARY_PATH=/opt/instantclient
# export ORACLE_HOME=/opt/instantclient
# export TNS_ADMIN=/opt/instantclient

Gemist installiks tuleb öelda

# LD_LIBRARY_PATH=/opt/instantclient gem install ruby-oci8
Building native extensions.  This could take a while...
Successfully installed ruby-oci8-2.1.5
1 gem installed
Installing ri documentation for ruby-oci8-2.1.5...

Enclosing class/module 'cOCI8' for module Metadata not known
Installing RDoc documentation for ruby-oci8-2.1.5...

Enclosing class/module 'cOCI8' for module Metadata not known

Tulemuse küsimiseks sobib öelda

# gem list --local

*** LOCAL GEMS ***

ruby-oci8 (2.1.5)

Nt selline skript kirjutab tabelist t1 välja nö tulpade A ja B väärtused arvestades UTF-8 kodeeringut

$ cat skript.rb
require 'rubygems'
ENV['NLS_LANG'] = 'ESTONIAN_ESTONIA.AL32UTF8'
require 'oci8'
conn = OCI8.new('KASUTAJANIMI','PAROOL', 'SIDNIMI')
cursor = conn.exec('select A, B from t1')
while r = cursor.fetch()
puts r.join(',')
end
cursor.close
conn.logoff

Käivitamiseks öelda

$ ruby skript.rb > /tmp/valjund.txt

Kasulikud lisamaterjalid

DNS

Skript esitab domeeninimele vastavad ip aadressid

require 'resolv'

Resolv::DNS.new.each_address("www.loomaaed.tartu.ee") do |addr|
  puts "www.loomaaed.tartu.ee A kirje: " + addr.to_s
end

Soketi kasutamine

Server

require "socket"

ajaserver = TCPServer.new('192.168.10.35', 20000)
loop do
  Thread.start(ajaserver.accept) do |s|
    print(s, " on vastuvoetud\n")
    s.write(Time.now)
    print(s, " on teenindatud\n")
    s.close
   end
 end

kus

  • kasutatakse socket teeki
  • moodustatakse ajaserver nimeline objekt
  • käivitatakse loop korduse see uue lõime alustamine sissetuleva ühenduse tekkimsiele

Klient

require 'socket'
streamSock = TCPSocket.new( "192.168.10.35", 20000 )
str = streamSock.recv( 100 )
print str + "\n"
streamSock.close

Kasulikud lisamaterjalid