iotaz 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'rubygems'
5
+ require_gem 'iotaz'
6
+
7
+ include Iotaz
8
+
9
+ class QueryRowTest < Test::Unit::TestCase
10
+ def test01
11
+ row = QueryRow.new
12
+
13
+ assert(row.size == 0)
14
+ assert(row.columns == [])
15
+ assert(row.values == [])
16
+
17
+ row['one'] = 1
18
+ row['two'] = 2
19
+ row['three'] = 3
20
+
21
+ assert(row.size == 3)
22
+ assert(row.exists?('three'))
23
+ assert(row.exists?('four') == false)
24
+ assert(row.columns.size == 3)
25
+ assert(row.columns.include?('ONE'))
26
+ assert(row.columns.include?('TWO'))
27
+ assert(row.columns.include?('THREE'))
28
+ assert(row.values.size == 3)
29
+ assert(row.values.include?(1))
30
+ assert(row.values.include?(2))
31
+ assert(row.values.include?(3))
32
+
33
+ columns = values = 0
34
+ row.each do |column, value|
35
+ columns += 1 if ['ONE', 'TWO', 'THREE'].include?(column)
36
+ values +=1 if [1, 2, 3].include?(value)
37
+ end
38
+
39
+ assert(columns == 3)
40
+ assert(values == 3)
41
+ end
42
+ end
data/test/QueryTest.rb ADDED
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'rubygems'
5
+ require_gem 'iotaz'
6
+
7
+ include Iotaz
8
+
9
+ class TestClass
10
+ attr_accessor :id, :value01, :value02, :value03
11
+
12
+ def TestClass.iotaz_meta_data
13
+ IotazMetaData.scan(TestClass)
14
+ end
15
+ end
16
+
17
+ class QueryTest < Test::Unit::TestCase
18
+ def test01
19
+ query = Query.new(TestClass)
20
+
21
+ assert(query.field('id').fetched?)
22
+ assert(query.field('value01').fetched?)
23
+ assert(query.field('value02').fetched?)
24
+ assert(query.field('value03').fetched?)
25
+
26
+ query = Query.new(TestClass, 'id', 'value01', 'value03')
27
+
28
+ assert(query.field('id').fetched?)
29
+ assert(query.field('value01').fetched?)
30
+ assert(query.field('value02').fetched? == false)
31
+ assert(query.field('value03').fetched?)
32
+ end
33
+
34
+ def test02
35
+ query = Query.new(TestClass)
36
+
37
+ sql, values = query.to_sql
38
+ assert(sql == 'select id, value01, value02, value03 from TestClass')
39
+ assert(values == [])
40
+
41
+ query.field('id').equal_to(1000)
42
+ sql, values = query.to_sql
43
+ assert(sql == 'select id, value01, value02, value03 from TestClass '\
44
+ 'where id = ?')
45
+ assert(values == [1000])
46
+
47
+ query.field('value02').in(1, 3, 5, 7, 9)
48
+ sql, values = query.to_sql
49
+ assert(sql == 'select id, value01, value02, value03 from TestClass '\
50
+ 'where id = ? and value02 in (1, 3, 5, 7, 9)')
51
+ assert(values == [1000])
52
+
53
+ query.field('value02').fetched = false
54
+ sql, values = query.to_sql
55
+ assert(sql == 'select id, value01, value03 from TestClass '\
56
+ 'where id = ? and value02 in (1, 3, 5, 7, 9)')
57
+ assert(values == [1000])
58
+ end
59
+ end
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'dbinfo'
5
+ require 'rubygems'
6
+ require_gem 'iotaz'
7
+ require_gem 'fireruby'
8
+
9
+ include Iotaz
10
+
11
+ class SessionTestClass
12
+ include Persistent
13
+
14
+ sequence_attr :id, 'id', true, 'SIMPLE_ID_SQ'
15
+ persistent_attr :text
16
+ date_attr :create_date, 'createdate'
17
+ time_attr :create_time, 'createtime'
18
+ self.table_name = 'Simple'
19
+
20
+ def initialize(text)
21
+ @text = text
22
+ end
23
+
24
+ def ==(object)
25
+ same = false
26
+ if object.instance_of?(SessionTestClass)
27
+ same = (@id == object.id && @text == object.text)
28
+ end
29
+ same
30
+ end
31
+ end
32
+
33
+ class SessionTest < Test::Unit::TestCase
34
+ DB_FILE = './session_test.fdb'
35
+ TABLE_SQL = 'create table Simple(id integer not null primary key, '\
36
+ 'text varchar(100), createdate date not null, createtime '\
37
+ 'time not null)'
38
+ GENERATOR_SQL = 'create generator SIMPLE_ID_SQ'
39
+
40
+ # Set up for testing.
41
+ def setup
42
+ # Check if the database file exists.
43
+ @database = FireRuby::Database.new(DB_FILE)
44
+ if File.exist?(DB_FILE)
45
+ @database.drop(DB_USER_NAME, DB_PASSWORD)
46
+ end
47
+ Database.create(DB_FILE, DB_USER_NAME, DB_PASSWORD, 1024, nil)
48
+
49
+ @database.connect(DB_USER_NAME, DB_PASSWORD) do |cxn|
50
+ cxn.execute_immediate(TABLE_SQL)
51
+ cxn.execute_immediate(GENERATOR_SQL)
52
+ end
53
+
54
+ # Create the database interface.
55
+ configuration = {'iotaz.database' => 'firebird',
56
+ 'iotaz.firebird.user' => DB_USER_NAME,
57
+ 'iotaz.firebird.password' => DB_PASSWORD,
58
+ 'iotaz.firebird.database' => DB_FILE,
59
+ 'iotaz.firebird.connections.min' => 0}
60
+
61
+ factory = DatabaseInterfaceFactory.new(configuration)
62
+ @interface = factory.create
63
+ @terminated = false
64
+ end
65
+
66
+ # Clean up after testing.
67
+ def teardown
68
+ # Shutdown the interface.
69
+ @interface.shutdown
70
+
71
+ # Drop the database.
72
+ if File.exist?(DB_FILE)
73
+ @database.drop(DB_USER_NAME, DB_PASSWORD)
74
+ end
75
+ end
76
+
77
+ # Test constructors and call backs.
78
+ def test01
79
+ session = Session.new(@interface)
80
+ session.terminate
81
+ assert(@terminated == false)
82
+
83
+ session = Session.new(@interface, self)
84
+ session.terminate
85
+ assert(@terminated == true)
86
+ end
87
+
88
+ # Test saving, loading and deleting.
89
+ def test02
90
+ session = Session.new(@interface)
91
+ simple = SessionTestClass.new('Test Text')
92
+
93
+ session.save(simple)
94
+ assert(simple.id != nil)
95
+ assert(simple.create_date != nil)
96
+ assert(simple.create_time != nil)
97
+
98
+ object = session.load(SessionTestClass, simple.id)
99
+ assert(simple == object)
100
+
101
+ id = session.id
102
+ session.delete(simple)
103
+ begin
104
+ session.load(SessionTestClass, id)
105
+ assert(false, 'Loaded a deleted record from the database.')
106
+ rescue Exception
107
+ end
108
+ end
109
+
110
+ # Test the transactional aspect.
111
+ def test03
112
+ session = Session.new(@interface)
113
+ simple = SessionTestClass.new('Test Text')
114
+
115
+ session.start_transaction
116
+ begin
117
+ session.save(simple)
118
+ assert(simple.id != nil)
119
+ assert(simple.create_date == nil)
120
+ assert(simple.create_time == nil)
121
+
122
+ begin
123
+ object = session.load(SessionTestClass, simple.id)
124
+ assert(false, 'Fetched unsaved record from the database.')
125
+ rescue Exception
126
+ end
127
+
128
+ session.commit
129
+ assert(simple.id != nil)
130
+ assert(simple.create_date != nil)
131
+ assert(simple.create_time != nil)
132
+ rescue Exception => error
133
+ session.rollback
134
+ raise error
135
+ end
136
+ end
137
+
138
+ # Test the query execution functionality.
139
+ def test04
140
+ session = Session.new(@interface)
141
+
142
+ session.save(SessionTestClass.new('Record One'))
143
+ session.save(SessionTestClass.new('No. Two'))
144
+ session.save(SessionTestClass.new('Record Three'))
145
+ session.save(SessionTestClass.new('No. Four'))
146
+
147
+ query = Query.new(SessionTestClass)
148
+ query.field('id').between(2, 3)
149
+ rows = session.execute(query)
150
+
151
+ assert(rows.size == 2)
152
+ rows.each do |row|
153
+ assert([2, 3].include?(row['ID']))
154
+ end
155
+ end
156
+
157
+ # Required to be a callback.
158
+ def terminating(session)
159
+ @terminated = true
160
+ end
161
+ end
162
+
data/test/UnitTest.rb ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ActionTest'
4
+ require 'AtomTest'
5
+ require 'AttributeTest'
6
+ require 'DatabaseInterfaceFactoryTest'
7
+ require 'FirebirdInterfaceTest'
8
+ require 'GeneratedAttributeTest'
9
+ require 'IotazErrorTest'
10
+ require 'IotazMetaDataTest'
11
+ require 'ObjectPoolTest'
12
+ require 'PersistentTest'
13
+ require 'QueryFieldTest'
14
+ require 'QueryRowTest'
15
+ require 'QueryTest'
16
+ require 'SessionTest'
17
+ require 'ValueCallbackTest'
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'rubygems'
5
+ require_gem 'iotaz'
6
+
7
+ include Iotaz
8
+
9
+ class CallbackTestClass
10
+ def initialize(id, value)
11
+ @id = id
12
+ @value = value
13
+ end
14
+
15
+ def CallbackTestClass.iotaz_meta_data
16
+ IotazMetaData::scan(CallbackTestClass)
17
+ end
18
+
19
+ attr_accessor :id, :value
20
+ end
21
+
22
+ class ValueCallbackTest < Test::Unit::TestCase
23
+ def setup
24
+ @attribute = Attribute.new('value')
25
+ @objects = []
26
+
27
+ @objects.push(CallbackTestClass.new(1, 1))
28
+ @objects.push(CallbackTestClass.new(2, "Two"))
29
+ @objects.push(CallbackTestClass.new(3, 3.0))
30
+ end
31
+
32
+
33
+ def test01
34
+ v = ValueCallback.new(@objects[0], @attribute.name, "LA LA LA")
35
+
36
+ assert(v.object == @objects[0])
37
+ assert(v.attribute == @attribute.name)
38
+ assert(v.sql == 'LA LA LA')
39
+ assert(v.parameters == [1])
40
+
41
+ v.assign("Changed")
42
+ assert(@objects[0].value == "Changed")
43
+ end
44
+ end
data/test/dbinfo.rb ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ # This file contains details to used for connecting to a database for testing
3
+ # purposes. If your database does not use the default user names and password
4
+ # then edit this file and change them for testing.
5
+
6
+ DB_USER_NAME = 'sysdba'
7
+ DB_PASSWORD = 'masterkey'
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.10
3
+ specification_version: 1
4
+ name: iotaz
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.1.0
7
+ date: 2005-04-08
8
+ summary: Object-relational mapping library.
9
+ require_paths:
10
+ - lib
11
+ email: paw220470@yahoo.ie
12
+ homepage: http://rubyforge.org/projects/iotaz/
13
+ rubyforge_project:
14
+ description: "Iotaz is an object relational mapping library. At the moment the library only
15
+ supports the FireRuby library, providing access to the Firebird open source
16
+ RDBMS, but this might be extended in future."
17
+ autorequire: iotaz
18
+ default_executable:
19
+ bindir: bin
20
+ has_rdoc: true
21
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
22
+ requirements:
23
+ -
24
+ - ">"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.0
27
+ version:
28
+ platform: ruby
29
+ authors:
30
+ - Peter Wood
31
+ files:
32
+ - lib/iotaz
33
+ - lib/iotaz.rb
34
+ - lib/iotaz/DatabaseInterfaceFactory.rb
35
+ - lib/iotaz/FirebirdInterface.rb
36
+ - lib/iotaz/IotazError.rb
37
+ - lib/iotaz/MetaData.rb
38
+ - lib/iotaz/ObjectPool.rb
39
+ - lib/iotaz/Persistent.rb
40
+ - lib/iotaz/Query.rb
41
+ - lib/iotaz/Session.rb
42
+ - lib/iotaz/WorkSet.rb
43
+ - test/ActionTest.rb
44
+ - test/AtomTest.rb
45
+ - test/AttributeTest.rb
46
+ - test/DatabaseInterfaceFactoryTest.rb
47
+ - test/dbinfo.rb
48
+ - test/FirebirdInterfaceTest.rb
49
+ - test/GeneratedAttributeTest.rb
50
+ - test/IotazErrorTest.rb
51
+ - test/IotazMetaDataTest.rb
52
+ - test/ObjectPoolTest.rb
53
+ - test/PersistentTest.rb
54
+ - test/QueryFieldTest.rb
55
+ - test/QueryRowTest.rb
56
+ - test/QueryTest.rb
57
+ - test/SessionTest.rb
58
+ - test/UnitTest.rb
59
+ - test/ValueCallbackTest.rb
60
+ - doc/PERSISTENT
61
+ - doc/README
62
+ - examples/example01.rb
63
+ - examples/example02.rb
64
+ test_files:
65
+ - test/UnitTest.rb
66
+ rdoc_options:
67
+ - "--main"
68
+ - doc/README
69
+ extra_rdoc_files:
70
+ - doc/README
71
+ - doc/PERSISTENT
72
+ executables: []
73
+ extensions: []
74
+ requirements: []
75
+ dependencies: []