Erinevus lehekülje "Ruby" redaktsioonide vahel

Allikas: Kuutõrvaja
(Stringitöötlus)
(Oracle andmebaasi kasutamine)
 
(ei näidata 3 kasutaja 21 vahepealset redaktsiooni)
35. 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===
 
===Ruby dokumentatsioon===
80. rida: 107. rida:
  
 
Selle kasutamiseks on vajalik paigaldada pakett rubygems
 
Selle kasutamiseks on vajalik paigaldada pakett rubygems
 +
 +
http://docs.rubygems.org/read/chapter/2 lisalugemist
  
 
===Programmeerimine Rubys===
 
===Programmeerimine Rubys===
99. rida: 128. rida:
  
 
===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
109. 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===
128. rida: 173. rida:
  
 
  $ chmod 0755 skript.rb
 
  $ chmod 0755 skript.rb
 +
 +
või
 +
 +
$ chmod +x skript.rb
  
 
ning käivitada
 
ning käivitada
151. rida: 200. rida:
 
====Massiiv====
 
====Massiiv====
  
Massiiv (ingl. k. list) on järjestatud hulk
+
Massiiv või ka jada (ingl. k. list) on järjestatud hulk
  
 
  massiivinimi = ["yks", "kaks", "kolm"]
 
  massiivinimi = ["yks", "kaks", "kolm"]
166. rida: 215. rida:
 
   puts massiivielement
 
   puts massiivielement
 
  end
 
  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====
193. rida: 270. rida:
 
  print "Enter your name: "
 
  print "Enter your name: "
 
  name = gets
 
  name = gets
 
===Jadatöötlus===
 
 
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
 
  
 
===Stringitöötlus===
 
===Stringitöötlus===
231. rida: 289. rida:
  
 
  "Jimmy" * 5
 
  "Jimmy" * 5
 
Suurima numbri leidmine jadast
 
 
[12, 47, 35].max                                                   
 
=> 47 
 
 
Jada sorteerimiseks
 
 
jadanimi.sort!
 
  
 
'''Random funktsioon'''
 
'''Random funktsioon'''
294. rida: 343. rida:
 
  Argument: ahaa
 
  Argument: ahaa
  
'''failioperatsioonid'''
+
===failioperatsioonid===
  
 
Üldpõhimõte oleks
 
Üldpõhimõte oleks
301. rida: 350. rida:
 
     # do something with io
 
     # do something with io
 
  end
 
  end
 +
 +
Lihtne faili lugemine
 +
 +
print File.read("/comics.txt")
  
 
Avame faili ja loeme sealt infot
 
Avame faili ja loeme sealt infot
388. rida: 441. rida:
 
===PostgreSQL andmebaasi kasutamine===
 
===PostgreSQL andmebaasi kasutamine===
  
PostgreSQL andmebaasi saab Ruby seest kasutada moodili ruby-pg abil.
+
PostgreSQL andmebaasi saab Ruby seest kasutada mooduli ruby-pg abil.
  
 
Gemist installiks tuleb öelda
 
Gemist installiks tuleb öelda
410. rida: 463. rida:
 
  res.clear
 
  res.clear
 
  conn.close
 
  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===
450. rida: 564. rida:
 
  print str + "\n"
 
  print str + "\n"
 
  streamSock.close
 
  streamSock.close
 
===Ruby on Rails===
 
 
Ruby on Rails on veebiarenduse raamistik ehk framework, mis kasutab programmeerimiskeelt Ruby.
 
 
http://kuutorvaja.eenet.ee/wiki/Ruby_on_rails
 
 
http://kuutorvaja.eenet.ee/wiki/Mod_rails
 
 
====Paigaldamine====
 
 
RoR paigaldamiseks sobib öelda Debian operatsioonisüsteemis
 
 
# apt-get install rails
 
 
Railsi gemist paigaldamiseks tuleb esiteks installida arvutiss ruby gems pakett ning seejärel vaadata mis versioon railsist on hetkel kõige viimane. Selleks tuleb anda käsk
 
 
# gem search rails --remote
 
 
Mis tekitab nimekirja railsi aktiivsetest versioonidest mida annab paigadada.
 
Viimane versioon selle teksti kirjutamise hetkel on 2.0.2 nii ,et installime selle andes käsu
 
 
# gem install rails --version 2.0.2
 
 
====Rakenduse tekitamine====
 
 
RoR rakenduse tekitamiseks tuleb
 
 
* tekitada rakendusele vastav kataloogistruktuur
 
 
$ rails -D postgresql contactlist
 
 
* tekitada andmebaas, nt PostgreSQL
 
 
create table contacts (
 
id serial not null,             
 
first_name varchar(100)  not null,
 
last_name  varchar(100)  not null,                   
 
address    varchar(255)  not null,                             
 
city      varchar(100)  not null,                                     
 
state      varchar(2)    not null,                                               
 
country    varchar(100)  not null,
 
phone      varchar(15)  not  null,
 
email      varchar(100) ,
 
CONSTRAINT pk_id PRIMARY KEY (id)
 
);
 
 
ning kohendada baasi ligipääs seadistusfailis
 
 
config/database.yml
 
 
Nt selliselt
 
 
development:
 
  adapter: postgresql
 
  encoding: unicode 
 
  database: contactlist_development
 
  username: contactlist
 
  password: parool
 
  host: 192.168.1.247
 
  port: 5432
 
...
 
 
====Mudeli tekitamine====
 
 
$ ruby script/generate model Contact
 
 
* Veenduda, et mudelit saab Rails konsoolilt kasutada
 
 
$ ruby script/console
 
Loading development environment (Rails 2.1.0)
 
>> my_contact = Contact.new
 
=> #<Contact id: nil, first_name: nil, last_name: nil, \
 
  address: nil, city: nil, state: nil, country: nil, phone: nil, email: nil>
 
 
>> my_contact.first_name = 'Priit'
 
=> "Priit"
 
>> my_contact.last_name = 'Kask'
 
=> "Kask"
 
>> my_contact.address = 'Loomaaia tee 1'
 
=> "Loomaaia tee 1"
 
>> my_contact.city = 'Tartu'           
 
=> "Tartu"
 
>> my_contact.state = 'TR'
 
=> "Tartu"
 
>> my_contact.country = 'Eesti'
 
=> "Eesti"
 
>> my_contact.phone = '54331' 
 
=> "54331"
 
>> my_contact.email = 'priit@loomaaed.tartu.ee'
 
=> "priit@loomaaed.tartu.ee"
 
 
>> my_contact.save
 
=> true
 
 
>> result = Contact.find(:first)
 
=> #<Contact id: 3, first_name: "Priit", last_name: "Kask", address: "Loomaaia tee 1", \
 
  city: "Tartu", state: "TR", country: "Eesti", phone: "54331", email: "priit@loomaaed.tartu.ee">
 
 
>> puts result.first_name
 
Priit
 
=> nil
 
 
Lisaks annab kinnitust õnnestumisest, kui PostgreSQL andmebaasi vastavasse tabelisse on toimunud sissekanne.
 
 
 
====Rakenduse startimine====
 
 
seejärel stardime arenduseks vajaliku webrick serveri
 
 
# cd contactlist
 
# script/server -d -p 3000
 
=> Booting WEBrick...
 
=> Rails application started on http://0.0.0.0:3000
 
[2008-01-08 18:27:50] INFO  WEBrick 1.3.1
 
[2008-01-08 18:27:50] INFO  ruby 1.8.6 (2007-09-24) [i386-freebsd7]
 
 
võti -p 3000 stardib veebiserveri pordile 3000
 
ning -d paneb tööle taustal, kasutades debumiseks on soovitatav see ärajätta
 
 
Nb! kui muudate database.yml faili tuleb veebiserverit taaskäivitada
 
 
nüüd peaksime enda projekti nägema aadressil http://www.nimi.ee:3000
 
 
[[Pilt:Railsiveb.jpg]]
 
 
====Kontrolleri tekitamine====
 
 
Kontrolleri tekitamiseks sobib öelda
 
 
$ ruby script/generate controller Contact
 
 
Railsis on mudelid (model) ja controllerid (controller ) See kõik asub siis stiilis aadress/kontroller. Näiteks www.nimi.ee kuhu lõime hetk tagasi kontrolleri nimega katsetus. Kohe peale loomist oli www.nimi.ee/katsetus kättesaadav. Models on kasutusel kui sql andmete hoidjad, meil on kasutuses mudel nimega test. Raisi controlleri failis defineeritakse asju, mida sinna www.nimi.ee/test/? kohta panna äsjaloodud kontrolleril on seal näiteks index, aee on avaleht. Lisame näiteks indexile väikese teksti:
 
 
avame faili test/app/controllers/katsetus_controller kus asub class KatsetusControllerning tekitame sinna järgneva sisu
 
 
class KatsetusController < ApplicationController
 
 
  def index
 
    render :text => "Hello world"
 
  end
 
 
end
 
 
ja liikudes urlile http://www.nimi.ee:8000/katsetus
 
 
peaksime nägema kirja "Hello world"
 
 
===Railsi logid===
 
 
Logid võivad railsil kasvada päris suureks seetõttu oleks mõistlik need roteerima panna
 
 
näiteks sobiks logrotate jaoks selline blokk
 
 
/www/projekt/rails/log/production.log {
 
    daily
 
    rotate 14
 
    size 5M
 
    compress
 
    create 640
 
    missingok
 
    # vaja ka teha railsile restart, kui see kasutuses Apache passenger moodulina siis näiteks selliselt
 
    touch /www/projektinimi/rails/tmp/restart.txt
 
  }
 
  
 
===Kasulikud lisamaterjalid===
 
===Kasulikud lisamaterjalid===
625. rida: 575. rida:
 
* http://wiki.rubyonrails.org/
 
* http://wiki.rubyonrails.org/
 
* http://www.humblelittlerubybook.com/
 
* http://www.humblelittlerubybook.com/
* [[Python]]
 
 
* http://lipsiadmin.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://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