iotaz 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: []