-
Notifications
You must be signed in to change notification settings - Fork 5
/
eventlog.rb
123 lines (101 loc) · 2.29 KB
/
eventlog.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
require 'rubygems'
require 'lib/dm-hibernate-adapter.rb'
require 'dm-transactions'
DataMapper.setup(:default, :adapter => "hibernate", :dialect => "H2", :username => "sa", :url => "jdbc:h2:target/eventlog")
class Event
include DataMapper::Resource
property :id, Serial
property :title, String, :required => true, :length => 10
property :date, Date
has n, :people
end
class Person
include DataMapper::Resource
property :id, Serial
property :name, String, :required => true
belongs_to :event
end
if File.exists?("target/eventlog.h2.db")
Event.auto_upgrade!()
Person.auto_upgrade!()
else
Event.auto_migrate!()
Person.auto_migrate!()
end
case ARGV[0]
when /store_update/
# Create event and store it, then it's updated
event = Event.new()
event.title = ARGV[1]
event.date = java.util.Date.new()
event.save()
puts "Stored!"
event.update(:title =>ARGV[2])
puts "Updated!"
when /store_rollback/
# ...almost.. creates event and stores it
Event.transaction do |tx|
event = Event.new()
event.title = ARGV[1]
event.date = Date.today()
event.save()
tx.rollback()
end
when /store_both/
event = Event.new()
event.title = ARGV[1]
event.date = Date.today()
event.save()
ARGV[2].to_i.times do |i|
person = event.people.new( :name => "John##{i}" )
person.save()
end
when /store/
event = Event.new()
event.title = ARGV[1]
event.date = Date.today()
event.save()
when /update/
# Update event and store it
event = Event.get(ARGV[1])
event.title = ARGV[2]
event.save()
puts "Updated!"
when /list/
list = Event.all()
puts "Listing all events #{list.size()} with people:"
list.each do |evt|
puts <<-EOS
Event:
=============
id: #{evt.id}
title: #{evt.title}
date: #{evt.date}
inspect: #{evt.inspect}
EOS
evt.people do |p|
puts <<-EOS
Person:
===========
id: #{p.id}
name: #{p.name}
event: #{p.event}
inspect: #{p.inspect}
EOS
end
end
list = Person.all()
puts "\nListing all people #{list.size()}:"
list.each do |p|
puts <<-EOS
Person:
===========
id: #{p.id}
name: #{p.name}
event: #{p.event}
inspect: #{p.inspect}
EOS
end
else
puts "Usage:\n\tstore <title>\n\tstore_update <title> <title2>\n\tlist"
end