On Mon, 5 Jan 2004, Useko Netsumi wrote:
Date: Mon, 05 Jan 2004 19:25:27 -0500
From: Useko Netsumi <
[email protected]>
Reply-To: (e-mail address removed)
Newsgroups: comp.lang.ruby
Subject: Re: Simple Ruby DB apps/programs ...
Carl Youngblood wrote:
Useko Netsumi wrote:
I was wondering if there are some example of small Ruby(1.8.1)
Database Apps/Programs. Preferably using Relational Database such as
MySQL(4 or 5) or Oracle.
I'd love to see some example of storing name(first,last),
address(addr1,addr2,city,zip),phone(home,work,mobile), and a photo image.
It took me a while to write it in PHP but perhaps I can do it in Ruby
more cleanly while learning this great language.
Thanks
/useko
My favorite DBMS for small client apps is sqlite. No other DB comes
close to it in terms of convenience and speed, as long as you're not
running a distributed type of an application with hundreds of clients
accessing the database at once. There is no need for a database server
at all. All necessary code for accessing the database is compiled in,
and databases are just plain old files. And it is ACID-compliant. Check
out this ruby extension for it here:
http://sqlite-ruby.sourceforge.net/
Carl
Thanks to all.
Perhaps y'all can give me some advice. My apps are running a web photo
apps with mutiple tables in the database. I do not store the image in
the DB but just the /image/file/path and other textual information such
as location, date, time, who took the pictures, and comment fields.
User(s) can only browse, search, and list the information for now. And,
I do not expect more than 20 users accessing it at any given time. Will
it work with SQLITE? Or do I need MySQL or more advanced(more expensive)
RDBMS to handle those tasks.
Thanks
/useko
i use pstore for alot of web stuff - it works fine:
~/eg/ruby > cat photo.rb
require 'pstore'
class DB
def initialize path = 'photo.db'
@pstore = PStore.new path
end
def []= name, record
address, phone = record
@pstore.transaction do
@pstore[name] = [address, phone]
end
end
def [] name
@pstore.transaction(read_only = true){ @pstore[name] }
end
def each(&block)
@pstore.transaction do
@pstore.roots.each{|name| block.call(name, @pstore[name])}
end
end
def << record
first,last,addr1,addr2,city,zip,home,work,mobile = record
name = Name[first, last]
address = Address[addr1,addr2,city,zip]
phone = Phone[home,work,mobile]
self[name] = [address, phone]
end
Name = Struct.new "Name", :first, :last
Address = Struct.new "Address", :addr1, :addr2, :city, :zip
Phone = Struct.new "Phone", :home, :work, :mobile
[Name, Address, Phone].each{|c| class << c; alias [] new; end}
end
if $0 == __FILE__
db = DB.new
records = [
%w(john doe foo bar boulder 80304 1 2 3),
%w(jane doe bar foo boulder 80305 3 2 1),
]
records.each{|record| db << record}
john = DB::Name['john', 'doe']
jane = DB::Name['jane', 'doe']
db.each do |name, address, phone|
printf "name: %s\naddress: %s\nphone: %s\n\n",
name.inspect, address.inspect, phone.inspect
end
p db[john]
p db[jane]
end
~/eg/ruby > ruby photo.rb
name: #<struct Struct::Name first="john", last="doe">
address: [#<struct Struct::Address addr1="foo", addr2="bar",