51.2.2.1. Struktura databáze

Databáze obsahuje jen jednu tabulku s názvem Person. Tato má následující pole

Id
identifikační číslo člověka, PIN
FirstName
křestní jméno
LastName
příjmení
Email
elektronická poštovní adresa

Příklad 51.14. SQL skript vytvářející tabulku Person

--*- coding:utf-8; -*-
-- $Id: create-tables.sql,v 1.2 2002/07/09 13:26:00 radek Exp $
-- Vytvo�en� tabulek se v�emi n�le�itostmi.
-- Copyright (C) 2002 Radek Hnilica
-- All rights reserved.


-- Tabulka Person
-- DROP TABLE Person;	     -- Odstran�n� tabulky p�ed novou definic�
CREATE TABLE Person (
	Id		INTEGER PRIMARY KEY,
	FirstName	VARCHAR(30),
	LastName	VARCHAR(30),
	Email		VARCHAR(40)
);

	      

Příklad 51.15. SQL skript pro vytvoření databáze app1

#!/bin/sh
# -*- coding:utf-8; -*-
# $Id: recreate-database,v 1.3 2002/09/23 20:49:08 radek Exp $
# $Source: /home/radek/cvs/ruby-book/example/net/webrick/app1/recreate-database,v $
# Vytvoření (znovuvytvoření) tabulek
# Copyright (C) 2002 Radek Hnilica
# All rights reserved.

DBNAME=sqldb

# Odstranění původní databáze
rm $DBNAME

# Vytvoření databáze a tabulek
sqlite $DBNAME <create-tables.sql

# Import dat
sqlite $DBNAME <import-data.sql

Zapouzdření řádku v tabulce do objektu

Příklad 51.16. Třída Person

class Person
end

Příklad 51.17. Webový server httpd.rb

#!/usr/bin/env ruby
# -*- coding:utf-8; -*-
# $Id: httpd.rb,v 1.2 2002/09/15 07:21:55 radek Exp $
# Ruční spouštění aplikačního serveru
# Copyright (C) 2002 Radek Hnilica
# All rights reserved.

$:.unshift('/home/radek/lib/ruby')
require 'webrick'
require 'PersonServlet'

# Vytvoření serveru
server =  WEBrick::HTTPServer.new(
    :Port =>    3002
    #:Logger => WEBrick::Log::new($stderr, WEBrick::Log::DEBUG)
)

# Registrace servletů
server.mount("/person", PersonServlet)

# Register shutdown code
trap('INT') do
    server.shutdown
end

server.start			# Let the server serviceing

Příklad 51.18. Webový server httpd-in.rb spouštěný přes inetd

#!/usr/bin/env /home/radek/bin/ruby
# -*- coding:utf-8 -*-
# $Id: httpd-in.rb,v 1.1 2002/09/23 20:49:07 radek Exp $
# $Source: /home/radek/cvs/ruby-book/example/net/webrick/app1/httpd-in.rb,v $
# Server spouštěný z inetd
# Copyright (C) 2002 Radek Hnilica

# Insert following line in /etc/inetd.conf
# 3001 stream tcp nowait radek \
# /home/radek/document/book/language/ruby-book/example/\
# net/webrick/app1/httpd-in.rb

APPROOT="/home/radek/document/book/language/ruby-book/example/net/webrick/app1"

$:.unshift('/home/radek/lib/ruby')
$:.unshift(APPROOT)

log = open("#{APPROOT}/http.log", "a")
STDERR.reopen(log)		# do not send stderr to client.

require 'webrick'
require 'getopts'
require 'PersonServlet'

getopts nil, 'r:'

sock = TCPSocket.for_fd(0)	# create TCPSocket from fd.
port = sock.addr[1]

server = WEBrick::HTTPServer.new(
    :DoNotListen    => true,
    :Port           => port,
    :Logger         => WEBrick::Log::new($stderr, WEBrick::Log::DEBUG),
    :DocumentRoot   => $OPT_r || "/var/www"
)

# Registrace servletů
server.mount("/person", PersonServlet)

# Spuštění serveru
server.run(sock)

Příklad 51.19. Servlet PersonServlet.rb

#!/usr/bin/env ruby
# -*- coding:utf-8; -*-
# $Id: PersonServlet.rb,v 1.2 2002/09/23 20:49:07 radek Exp $
# Servlet Person
# Copyright (C) 2002 Radek Hnilica
# All rights reserved.

require 'webrick'

# ?show=all       - zobrazi seznam všech osob
# ?show=one&id=9  - zobrazí kartu jedné osoby

class PersonServlet < WEBrick::HTTPServlet::AbstractServlet
    #require_path_info false

    def page_header
	<<EOT
<HTML>
  <HEAD>
  </HEAD>
  <BODY>
EOT
    end

    def page_footer
	<<EOT
  </BODY>
</HTML>
EOT
    end

    def do_GET(req, res)
        # Společná nastavení
        res['Content-Type'] = "text/html; charset=iso-8859-2"

        # Podle parametru se rozhodneme kterou stranku zobrazime
        if req.query['show'] == "all"
            res.body << "#{show_all_page(req)}"
	elsif req.query['show'] == "one"
	    res.body << "#{show_one_page(req)}"
        else
            res.body << <<EOT
<HTML>
  <HEAD>
  </HEAD>
  <BODY>
    ERROR
  </BODY>
</HTML>
EOT
        end
    end

    def show_all_page(req)
	<<EOT
#{page_header()}
<H1>Show All</H1>
#{page_footer}
EOT
    end

    def show_one_page(req)
	<<EOT
#{page_header()}
<H1>Show One</H1>
#{page_footer}
EOT
    end
end

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 .