Ruby

Radek Hnilica

Toto dílo smíte užívat dle podmínek licence CC BY-NC-SA.

pubdate: 2010-12-17

Přehled revizí
Revize 0.02002-09-29
První publikovaná, pracovní, verze.
Revize 0.x2002-10-18
Pracovní verze.
Revize 0.12002-12-09
Pracovní výtisk.
Revize 0.22003-10-10
Pracovní výtisk.
Revize 0.32008-03-05
Po dlouhé době oficiální revize. Pracuji především na kapitole Ruby on Rails, a zanedbávám kapitoly věnované samotnému Ruby.
Revize 0.42009-06-24
Po obnově.
Revize 0.52010-03-18
Zavedeno do Git serveru.
Revize 0.62010-10-07
Změna licence na Creative Commons BY-NC-SA.

Abstrakt

Tato „kniha“ je v jistém ohledu mým pracovním sešitem o Ruby. Pokud mám čas, zapisuji sem poznatky které jsem získal při práci s Ruby a Ruby on Rails. Nejsem profesionální „písmák“, a tak to místy připomíná haldu starého harampádí ve které jak doufám se sem tam zablýskne perla.

Tento dokument je k dispozici v několika různých formátech. Jako vícestránkový HTML dokument, postscriptový či PDF soubor formátovaný na velikost papíru A4. Pokud některý z těchto formátů nenaleznete, nebo bude neaktuální dejte mi vědět, připravím jej pro vás.

Aktuální verze knihy je vystavena na www.hnilica.cz, www2.hnilica.cz a na penguin.cz/~radek. Některé z těchto webů nemusí být dosažitelné.

Pokud budu mít možnost vystavit tento dokument i jinde, rád tak učiním.

Počet stran v Postscriptové a PDF verzi: 488 .

Příšerně žluťoučký kůň úpěl ďábelské ódy.

Hleď, toť přízračný kůň v mátožné póze šíleně úpí.


Věnování tag dedication/title

Rozmyslet si komu tuto knihu věnuji a dopsat věnování.

BLOCKQUOTE

Obsah

Předmluva
1. Historie
2. Struktura knihy, členění na části
3. Zdroje (Resources)
4. Konvence použité při psaní tohoto dokumentu
5. Nazapracované texty a části
1. Úvod
1.1. Co je Ruby
1.2. Srovnání s ostatními jazyky
1.3. Principy
1.4. Citáty
2. Ruby
2.1. Řízení běhu (toku) programu
2.2. Jazykové konstrukce
2.3. Datové typy
2.4. Metody objektu
2.5. Spouštíme Ruby
2.6. FIXME: vymyslet název
I. Tutoriál
3. Začínáme
4. Seznámení s jazykem
4.1. Začínáme
4.2. Klíčová slova a identifikátory
4.3. Komentáře a vložená dokumentace
4.4. Proměnné
4.5. Konstanty
4.6. Metody
4.7. Operátory
4.8. Regulární výrazy
4.9. Cykly
4.10. while / until
4.11. while / until
4.12. Cyklus for ... in
4.13. Výjimky
4.14. Výjimky
4.15. Bloky
4.16. Iterátory
4.17. Objekty a třídy
4.18. Pokračování (continuation)
4.19. Makra
4.20. Moduly
5. Datové typy
5.1. Čísla
5.2. Řetězce a znaky
5.3. Datum a čas
6. Řízení běhu programu
6.1. Jednoduché větvení if
6.2. unless
6.3. if a unless jako modifikátory
6.4. Vícenásobné větvení case
6.5. Vrácené hodnoty
7. Datové struktury
7.1. Pole
7.2. Enumerable
7.3. Asociativní pole (hash)
7.4. Kontrola a zjišťování typů
7.5. StrongTyping
8. Parametry příkazové řádky a jejich analýza
8.1. OptionParser
8.2. CommandLine::OptionParser
8.3. Nezpracované poznámky
9. Ruby a čeština
10. Konfigurace programu
11. Kostra aplikace
11.1. Hoe
11.2. Rubigen
12. Práce se soubory
13. Úprava a formátování kódu
II. Nástroje
14. Komentování a dokumentace kódu
14.1. RD
14.2. rdtool
14.3. RDoc
14.4. YARD
15. Interaktivní dokumentace
15.1. ri
16. RubyGems
16.1. Instalace
16.2. Instalace v uživatelském prostoru
16.3. Instalace v lokálním prostoru
16.4. Příkazy
16.5. Postupy
16.6. Bundler
17. Ruby Version Manager
18. Rake
18.1. Instalace, konfigurace
18.2. Poznámky
18.3. Ukázky konfigurací
19. Distribuce aplikací
19.1. RubyScript2Exe
19.2. Crate
19.3. Exerb
19.4. OCRA
20. Amalgalite
21. Skrývání a zamlžování kódu
21.1. Ruby Encoder
22. Continuous Integration
22.1. CruiseControl.rb
III. Knihovny, technologie, postupy
23. Démoni
23.1. simple-daemon
23.2. Backdrop
23.3. Daemons
23.4. Daemonize
23.5. daemon-spawn
23.6. Servolux
24. Message Queue
24.1. Starling
25. Deníky a logování
25.1. Logging
26. Síťové programování
26.1. UDP komunikace
26.2. HTTP/HTTPS
27. Různé
27.1. Ladění
28. EventMachine
28.1. Obsluha spojení
28.2. Časovače
28.3. Ukázky použití
28.4. Vybrané moduly, třídy a metody EventMachine
29. Přehled jazyka
29.1. Konfigurace aktuálně spuštěného programu ruby
30. Operátory
30.1. Unární operátor *
31. Objekty a třídy
31.1. Viditelnost metod
31.2. Supertřída Class
31.3. Třída Object
32. Vlákna
32.1. Nezpracovaný materiál
33. Jazyk Ruby
33.1. Přehled
33.2. Getting Ruby
33.3. Spouštíme ruby
33.4. Creating Ruby programs
33.5. Ruby basics
33.6. Ruby language
33.7. Modules
34. Fronta zpráv (Message Queue)
35. Extrémní programování
35.1. Testování
35.2. RubyUnit
35.3. Přechod z RubyUnit na Test::Unit
35.4. TestUnit
35.5. ZenTest
35.6. Cucumber
35.7. Vanity
35.8. ABingo
IV. Knihovny
36. Programy
36.1. DbTalk
37. Šifrování a hesla
37.1. HTAuth (apr1)
38. Databáze
38.1. Ruby/DBI
38.2. DBI tutoriál
38.3. Mnemonic
38.4. ruby-ldap
38.5. MySQL
38.6. SQLite
39. Síťování
39.1. Různé
39.2. Sokety Sockets
39.3. TCP server
39.4. NTP
39.5. Poštovní protokol POP3
39.6. SMTP
39.7. WWW, http — klient
39.8. dRuby — Distributed Ruby
39.9. rinda
39.10. Wiki
Seznam použíté literatury pro kapitolu.
40. Grafická rozhraní, GUI
40.1. wxRuby
40.2. Ruby Gnome2
40.3. FXRuby
40.4. Shoes
40.5. JTTui
40.6. Ostatní grafická prostředí
41. Knihovny neuvedené jinde
41.1. Narf
41.2. BigFloat
41.3. Priority queue
41.4. Nokogiri
V. Programování Webových aplikací
42. eRuby
42.1. Instalace a sprovoznění
42.2. Použití eruby
42.3. Mod Ruby a eRuby
42.4. Přehled objektů a metod
42.5. Nezpracované podklady
43. Camping
44. Rack
45. Sinatra
45.1. git-wiki
46. REST
46.1. POST
46.2. GET
46.3. PUT
46.4. DELETE
46.5. Komunikace s REST serverem pomocí curl
47. Ruby on Rails
47.1. Instalace Ruby on Rails
47.2. Vytvoření kostry aplikace
47.3. Databázové stroje
47.4. Web server
47.5. Konfigurace aplikace
47.6. Ladění aplikace
47.7. Databáze
47.8. Adresářová struktura a rake
47.9. Struktura aplikace
47.10. Migrace / Migrations
47.11. Active Record
47.12. Řadič (Controller)
47.13. Pohled (View)
47.14. Kostra formuláře (Scaffold)
47.15. Formuláře
47.16. Layout
47.17. Routing
47.18. Extrémní programování v Rails (XP)
47.19. CIA — Continuous Integration Automater
47.20. Správa verzí
47.21. Použití Subversion
47.22. Nasazení (Deployment)
47.23. Rozpoznání uživatele a kontrola jeho práv (Authentication and Authorization)
47.24. REST design
47.25. Rake a Rails
47.26. Poznámky
47.27. Nezatříděné poznámky
47.28. Řešené problémy
47.29. Plugins
47.30. Recepty
48. Rails 3
48.1. Active Record Queries in Rails 3
49. Nitro
50. Ramaze
51. Web Frameworks
51.1. mod_ruby — spolupráce Ruby a Apache
51.2. Používáme WEBrick
51.3. eRuby
51.4. Borges
51.5. Borges 0.2.x
51.6. IOWA - Interpreted Objects for Web Applications
51.7. CGIKit
51.8. Nora
51.9. Ostatní WWW servery
52. Ostatní nástroje a prostředí pro webové aplikace
52.1. Wee
53. Generování statických stránek
53.1. nanoc
53.2. WebGen
54. Nasazení aplikace (deployment)
54.1. Heroku
VI. Teorie a technologie programování
55. What The Ruby Craftsman Can Learn From The Smalltalk Master
55.1. Naming is Crucial
55.2. Cognitive Scalability
55.3. Reduce Code to the Essence
55.4. Shortcut Constructor Method
56. Principy návrhu (Design Principes)
56.1. DRY
56.2. Coupling & Cohesion
56.3. Connascence
57. Refaktorizace
57.1. Vůně a zápachy (Smells)
57.2. Refaktorizační postupy
58. Metaprogramování
58.1. Anonymní třídy
58.2. Singleton
59. Návrhové vzory
59.1. Ukázkový vzor
59.2. Creational Design Patterns
59.3. Structural Patterns
59.4. Behavorial Design Patterns
59.5. Vzory ve vývoji
59.6. Concurrent programming
59.7. Ostatní
VII. Různé
60. Joyau
60.1. Kousky kódu
60.2. Nástroje
60.3. Popis modulů a metod
61. Emacs
61.1. Ruby a Emacs
61.2. Ruby on Rails a Emacs
61.3. ECB minor mode
61.4. Formátování Ruby kódu
62. Jednoduché příklady
62.1. Slovník necitlivý na velikost písmen Case Insensitive Hash
62.2. FIFO
62.3. Jak použít unixovou fifo
62.4. Method ancestors for class Method — reflection
62.5. Idiomy
62.6. Technologie
62.7. Unikód
62.8. Funkcionální styl programování
62.9. Ruby a Forth
62.10. Lisp
62.11. Jednořádkové skripty
62.12. Nezpracované ukázky z IRC
VIII. Reference
I. File
Bleee — účel bb
II. Třídy
File — Standardní knohovna pro práci se soubory a adresáři.
Bleee — účel bb
IX. Přílohy
A. Sprovozňujeme ruby
A.1. Jak získat ruby
A.2. Instalace z binární distribuce
A.3. Překlad ze zdrojových kódů
A.4. Jak získat ruby
A.5. Jak nainstalovat Ruby
A.6. Verze Ruby
A.7. Programy (Software)
A.8. Spuštíme ruby
A.9. Proměnné prostředí
B. Jazyk Ruby
B.1. Jazykové konstrukce
B.2. Zabudované a speciální proměnné a konstanty
C. Popis některých tříd a modulů
C.1. UDPSocket
C.2. Socket
C.3. IPSocket
C.4. TCPSocket
C.5. File
C.6. FileUtils
III. Třídy
Bleee — účel bb
D. Přehled lidí jenž se kolem Ruby vyskytovali či vyskytují
Example Glossary
Bibliografie

Seznam obrázků

40.1. Hello.rbw
56.1. Coupling & Cohesion
56.2. Connascence
56.3. Rules
57.1. Refaktorizační cyklus:
57.2. TDD/BDD mikrporoces

Seznam tabulek

4.1. Volby u regulárních výrazů (options)
5.1. Použití obráceného lomítka pro zápis znaků
16.1. gem příkazy
26.1.
28.1. Přehled API
40.1. Zvláštní předdefinovaná ID
40.2. Font style hints with influence the matcher
40.3. Řezy fontů (Font Slant)
40.4. Kódování znaků (Character Encoding)
46.1. RESTful Web Service HTTP methods
46.2.
47.1. Typy dat v migracích
47.2.
47.3. Příkazy migrací
47.4. příkazy
47.5. RESTFull
47.6. RESTfull Named Routes in Interaction with HTTP Request Methods
47.7. Routy a metody
61.1. Některé klávesové skratky
C.1. class methods
C.2.
C.3.
C.4. class methods
C.5. instance methods

Seznam příkladů

4.1. A
4.2. Example B): Traversing a data structure recursively:
4.3. Example C)
4.4. Example D)
4.5. Předefinování metody new třídy Class
16.1. Ukázka Gemfile souboru
31.1. Předefinování metody new třídy Class
35.1. Příklad použití rubyunit
35.2. Spuštění všech testů v adresáři
35.3. features/manage_my_wishes.feature
35.4. features/setp_definitions/user_steps.rb
35.5. spec/fixjour_builders.rb
37.1. Ukázka získání apr1 hashe hesla, apr1.rb
37.2. Získání apr1 hashe hesla
37.3. Kontrola hesla
38.1. Připojení k databázi PostgreSQL
38.2. Kompilace Rubi/DBI
38.3. list-records.rb
38.4. Příklad použití Ruby-SQLite
38.5. Druhý příklad použití Ruby-SQLite
38.6. Připojení k databázi s použitím DBI
38.7. Ruční řízení transakcí v DBI
38.8. Ruční řízení transakcí v DBI metodou transaction
39.1. Jednoduchý klient
39.2. Ještě jednodušší verze
40.1. Hello program ve wxRuby
40.2. Hello program jinak
40.3. Menu program ve wxRuby
40.4. Menu program jinak
40.5. Program s malým menu a status bar
40.6. Nejjednodušší editor se Scintillou
40.7. Příklad použití JTTui
42.1. Minimální session .rhtml
47.1. apache2.cgi.conf
47.2. fcgid.conf
47.3. apache2.fcgi.conf
47.4. Metoda index
47.5. Pohled app/view/.../index.html.erb
47.6. config/initializers/will_paginate.rb:
47.7. Metoda new v souboru řadiče projects_controller
47.8. projects/new.rhtml
47.9. Metoda create v řadiči projects_controller.rb
47.10. projects_controller.rb
47.11. projects/new.rhtml
47.12. projects/_task_fields.rhtml
47.13. projects/add_task.rjs
47.14. test/unit/model_test.rb:
47.15. Příklad souboru .autotest
47.16. app/views/layouts/application.html.erb:
47.17. app/controllers/listy_controller.rb:
47.18. db/migrate/999_add_credentials:
47.19. app/models/person.rb:
47.20. app/models/person.rb:
47.21. Změny v modelu
47.22. Úpravy v řadiči aplikace
47.23. Heslo se solí v modelu
47.24. Controller Template
47.25. routes.rb pro vnořenou tabulku /notes/:note_id/keywords/:id
47.26. Jednoduchý task v rake
47.27. Více seskupených úloh
47.28. User Model
47.29. authorization_rules.rb
47.30. User Model user.rb
47.31. new_html.erb
47.32. user.rb
47.33. user.rb
47.34. new_html.erb
47.35. user.rb
47.36. environment.rb
51.1. Konfigurace mod_ruby v /etc/apache/httpd.conf
51.2. Jednoduchý daytime server 1
51.3. Jednoduchý daytime server 2
51.4. Jednoduchý HTTP server 1
51.5. Jednoduchý HTTPS server 1
51.6. Jednoduchý HTTP server se servletem
51.7. Jednoduchý HTTP server spouštěný z inetd
51.8. Jednoduchý HTTPS server spouštěný z inetd
51.9. Persistant Servlets
51.10. FirstDiv.rb
51.11. yourapp.rb
51.12. base.erb
51.13. sum.erb
51.14. SQL skript vytvářející tabulku Person
51.15. SQL skript pro vytvoření databáze app1
51.16. Třída Person
51.17. Webový server httpd.rb
51.18. Webový server httpd-in.rb spouštěný přes inetd
51.19. Servlet PersonServlet.rb
51.20. Jednoduchá aplikace
51.21. Stránka pro Apache
51.22. Server aplikace hello1
51.23. Ukázka komponenty
51.24. Použití dříve vytvořené komponenty
51.25. IOWA hello/Main.html
51.26. IOWA hello2/Main.html
51.27. IOWA timelog/Main.html
51.28. IOWA timelog2/Main.html
51.29. iapp_start.rb
59.1. Abstract Factory Pattern
59.2. Abstract Factory Pattern
59.3. Abstract Session Pattern
59.4. Implemetace programového vzoru Borg
59.5. Použití definované třídy Borg
59.6. Třída Mediator
59.7. Třída Colleague
59.8. PersistenObject
A.1. Start irb z programu
A.2. Z dopisu Hiroshi Nakamury: catch.rb
Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .