mongoose 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +15 -12
- data/changes.txt +12 -0
- data/example/activetable_example.rb +56 -0
- data/example/relation_examples.rb +15 -49
- data/example/simple_examples.rb +22 -43
- data/lib/mongoose.rb +1 -1
- data/lib/mongoose/database.rb +1 -1
- data/lib/mongoose/table.rb +23 -11
- data/test/tc_relations.rb +27 -64
- data/test/tc_table.rb +46 -58
- metadata +3 -2
data/README
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= Mongoose 0.
|
1
|
+
= Mongoose 0.2.0
|
2
2
|
|
3
3
|
A database management system written in Ruby. It has an ActiveRecord-like
|
4
4
|
interface, uses Skiplists for its indexing, and Marshal for its data
|
@@ -11,7 +11,9 @@ serialization. I named it Mongoose, because, like Rudyard Kipling's
|
|
11
11
|
Thanks to Logan Capaldo for letting me steal a lot of the code from KirbyRecord.
|
12
12
|
|
13
13
|
Thanks to Ezra Zygmuntowicz and Fabien Franzen, whose ez_where Rails plugin,
|
14
|
-
provided much of the inspiration for the query language.
|
14
|
+
provided much of the inspiration for the query language. Also, Ezra has
|
15
|
+
graciously taken the time to give me pointers on how to make Mongoose's query
|
16
|
+
language and api better.
|
15
17
|
|
16
18
|
Thanks to everyone who gave me feedback on KirbyBase. I have tried to put all
|
17
19
|
the lessons learned from developing that library to good use here.
|
@@ -56,7 +58,7 @@ db = Mongoose::Database.new
|
|
56
58
|
|
57
59
|
# Create new table. Notice how you specify whether a column is indexed or not.
|
58
60
|
db.create_table(:plane) do |tbl|
|
59
|
-
tbl.add_indexed_column(:
|
61
|
+
tbl.add_indexed_column(:name, :string)
|
60
62
|
tbl.add_column(:country, :string)
|
61
63
|
tbl.add_indexed_column(:speed, :integer)
|
62
64
|
tbl.add_column(:range, :integer)
|
@@ -64,7 +66,7 @@ end
|
|
64
66
|
|
65
67
|
# Add a record.
|
66
68
|
rec = Plane.new
|
67
|
-
rec.
|
69
|
+
rec.name = 'P-51'
|
68
70
|
rec.country = 'USA'
|
69
71
|
rec.speed = 402
|
70
72
|
rec.range = 1205
|
@@ -73,24 +75,25 @@ rec.save
|
|
73
75
|
# Various ways to find a record; should be familiar to ActiveRecord users.
|
74
76
|
Plane.find(1) # Find record with id equal 1.
|
75
77
|
|
76
|
-
Plane.find {
|
78
|
+
Plane.find { speed > 350 } # Find all planes with speed > 350.
|
77
79
|
|
78
80
|
Plane.find # Find all records.
|
79
81
|
|
80
|
-
Plane.find(:first) {
|
82
|
+
Plane.find(:first) { country == 'USA' } # Find first plane from USA.
|
81
83
|
|
82
|
-
Plane.find do
|
83
|
-
|
84
|
-
|
85
|
-
|
84
|
+
Plane.find do # Find all planes from either USA or
|
85
|
+
any do # Great Britain with speed > 400.
|
86
|
+
country == 'USA'
|
87
|
+
country == 'Great Britain'
|
86
88
|
end
|
87
|
-
|
89
|
+
speed > 400
|
88
90
|
end
|
89
91
|
|
90
92
|
# Delete a record.
|
91
93
|
Plane.find(1).destroy
|
92
94
|
|
93
|
-
# Close database.
|
95
|
+
# Close database. This will write the indexes out to disk so they can be
|
96
|
+
# initialized quickly next time.
|
94
97
|
db.close
|
95
98
|
|
96
99
|
== Manifest
|
data/changes.txt
CHANGED
@@ -11,3 +11,15 @@
|
|
11
11
|
memory usage.
|
12
12
|
* Cleaned up the code in SkipList class.
|
13
13
|
* Added more unit tests.
|
14
|
+
|
15
|
+
2006-07-21:: Version 0.2.0
|
16
|
+
* Added Table.create method. Thanks to Ezra Zygmuntowicz for this patch.
|
17
|
+
* Changed unit tests and examples to use Table.create rather than Table.new.
|
18
|
+
* Thanks to Ezra Zygmuntowicz, you no longer have to specify block parameters
|
19
|
+
in your queries, nor prefix all of the column names in queries with those
|
20
|
+
block parameters. This makes the query language so much cleaner. Thanks
|
21
|
+
again, Ezra!
|
22
|
+
* Logan Capaldo provided a patch for the Table.init_column method that
|
23
|
+
eliminated the string eval. Thanks Logan!
|
24
|
+
* Included a new example from Daniel Sheppard that shows how to integrate
|
25
|
+
ActiveRecord validations into Mongoose.
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# This example comes from Daniel Sheppard. Thanks very much Daniel!
|
2
|
+
# It is an early example of how you can integrate ActiveRecord validations
|
3
|
+
# into Mongoose. Expect more on this in the future.
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'mongoose'
|
7
|
+
require 'active_support'
|
8
|
+
require 'active_record/base'
|
9
|
+
require 'active_record/validations'
|
10
|
+
|
11
|
+
|
12
|
+
class Mongoose::ActiveTable < Mongoose::Table
|
13
|
+
RecordNotSaved = ActiveRecord::RecordNotSaved
|
14
|
+
def update_attribute(name, value)
|
15
|
+
send(name.to_s + '=', value)
|
16
|
+
save
|
17
|
+
end
|
18
|
+
def new_record?
|
19
|
+
@id.nil?
|
20
|
+
end
|
21
|
+
def self.human_attribute_name(attribute_key_name) #:nodoc:
|
22
|
+
attribute_key_name.humanize
|
23
|
+
end
|
24
|
+
def save!
|
25
|
+
save || raise(RecordNotSaved)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.init_column(col_name, col_def, col_class)
|
29
|
+
super
|
30
|
+
meth = <<-END_OF_STRING
|
31
|
+
def #{col_name}_before_type_cast
|
32
|
+
#{col_name}
|
33
|
+
end
|
34
|
+
END_OF_STRING
|
35
|
+
self.class_eval(meth)
|
36
|
+
end
|
37
|
+
|
38
|
+
include ActiveRecord::Validations
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
class Monkey < Mongoose::ActiveTable
|
43
|
+
validates_numericality_of :arms
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
Mongoose::Table.db = Mongoose::Database.new
|
48
|
+
unless Mongoose::Table.db.table_exists?('monkey')
|
49
|
+
Mongoose::Table.db.create_table('monkey') do |t|
|
50
|
+
t.add_column 'arms', :integer
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
m = Monkey.new()
|
55
|
+
m.arms = '2a'
|
56
|
+
m.save!
|
@@ -28,11 +28,11 @@ db = Mongoose::Database.new
|
|
28
28
|
|
29
29
|
# Create tables.
|
30
30
|
db.create_table(:pilot) do |tbl|
|
31
|
-
tbl.add_indexed_column(:
|
31
|
+
tbl.add_indexed_column(:name, :string)
|
32
32
|
tbl.add_column(:years_flying, :integer)
|
33
33
|
end
|
34
34
|
db.create_table(:plane) do |tbl|
|
35
|
-
tbl.add_indexed_column(:
|
35
|
+
tbl.add_indexed_column(:name, :string)
|
36
36
|
tbl.add_column(:country, :string)
|
37
37
|
tbl.add_indexed_column(:speed, :integer)
|
38
38
|
tbl.add_column(:range, :integer)
|
@@ -45,57 +45,23 @@ db.create_table(:flight) do |tbl|
|
|
45
45
|
end
|
46
46
|
|
47
47
|
# Create Pilot records.
|
48
|
-
doolittle = Pilot.
|
49
|
-
|
50
|
-
doolittle.years_flying = 15
|
51
|
-
doolittle.save
|
52
|
-
|
53
|
-
amelia = Pilot.new
|
54
|
-
amelia.pilot_name = 'Earhart, Amelia'
|
55
|
-
amelia.years_flying = 10
|
56
|
-
amelia.save
|
48
|
+
doolittle = Pilot.create :name => 'Doolitle, James', :years_flying => 15
|
49
|
+
amelia = Pilot.create :name => 'Earhart, Amelia', :years_flying => 10
|
57
50
|
|
58
51
|
# Create Plane records.
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
rec.range = 1205
|
64
|
-
rec.pilot_id = doolittle.id
|
65
|
-
rec.save
|
66
|
-
|
67
|
-
rec = Plane.new
|
68
|
-
rec.plane_name = 'Spitfire'
|
69
|
-
rec.country = 'Great Britain'
|
70
|
-
rec.speed = 333
|
71
|
-
rec.range = 454
|
72
|
-
rec.pilot_id = amelia.id
|
73
|
-
rec.save
|
52
|
+
Plane.create :name => 'P-51', :country => 'USA', :speed => 402,
|
53
|
+
:range => 1205, :pilot_id => doolittle.id
|
54
|
+
Plane.create :name => 'Spitfire', :country => 'Great Britain', :speed => 333,
|
55
|
+
:range => 454, :pilot_id => amelia.id
|
74
56
|
|
75
57
|
# Create Flight records.
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
rec.pilot_id = amelia.id
|
84
|
-
rec.origin = 'USA'
|
85
|
-
rec.destination = 'France'
|
86
|
-
|
87
|
-
rec.save
|
88
|
-
rec = Flight.new
|
89
|
-
rec.pilot_id = amelia.id
|
90
|
-
rec.origin = 'USA'
|
91
|
-
rec.destination = 'Phillipines'
|
92
|
-
rec.save
|
93
|
-
|
94
|
-
rec = Flight.new
|
95
|
-
rec.pilot_id = amelia.id
|
96
|
-
rec.origin = 'China'
|
97
|
-
rec.destination = 'Unknown'
|
98
|
-
rec.save
|
58
|
+
Flight.create :pilot_id => doolittle.id, :origin => 'Army',
|
59
|
+
:destination => 'Nowhere'
|
60
|
+
Flight.create :pilot_id => amelia.id, :origin => 'USA', :destination => 'France'
|
61
|
+
Flight.create :pilot_id => amelia.id, :origin => 'USA',
|
62
|
+
:destination => 'Phillipines'
|
63
|
+
Flight.create :pilot_id => amelia.id, :origin => 'China',
|
64
|
+
:destination => 'Unknown'
|
99
65
|
|
100
66
|
puts "\n\nFind Jimmy Doolittle"
|
101
67
|
rec = Pilot.find(1)
|
data/example/simple_examples.rb
CHANGED
@@ -22,48 +22,27 @@ db = Mongoose::Database.new
|
|
22
22
|
# Create new table. Notice how you specify whether a column is indexed or not.
|
23
23
|
unless ARGV[0] == 'keep-data'
|
24
24
|
db.create_table(:plane) do |tbl|
|
25
|
-
tbl.add_indexed_column(:
|
25
|
+
tbl.add_indexed_column(:name, :string)
|
26
26
|
tbl.add_column(:country, :string)
|
27
27
|
tbl.add_indexed_column(:speed, :integer)
|
28
28
|
tbl.add_column(:range, :integer)
|
29
29
|
end
|
30
30
|
|
31
31
|
# Add records.
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
rec.save
|
38
|
-
|
39
|
-
rec2 = Plane.new
|
40
|
-
rec2.plane_name = 'Spitfire'
|
41
|
-
rec2.country = 'Great Britain'
|
42
|
-
rec2.speed = 333
|
43
|
-
rec2.range = 454
|
44
|
-
rec2.save
|
45
|
-
|
46
|
-
rec3 = Plane.new
|
47
|
-
rec3.plane_name = 'ME-109'
|
48
|
-
rec3.country = 'Germany'
|
49
|
-
rec3.speed = 354
|
50
|
-
rec3.range = 501
|
51
|
-
rec3.save
|
52
|
-
|
53
|
-
rec4 = Plane.new
|
54
|
-
rec4.plane_name = 'P-39'
|
55
|
-
rec4.country = 'USA'
|
56
|
-
rec4.range = 701
|
32
|
+
Plane.create :name => 'P-51', :country => 'USA', :speed => 402, :range => 1205
|
33
|
+
Plane.create :name => 'Spitfire', :country => 'Great Britain', :speed => 333,
|
34
|
+
:range => 454
|
35
|
+
Plane.create :name => 'ME-109', :country => 'Germany', :speed => 354,
|
36
|
+
:range => 501
|
57
37
|
|
58
38
|
# Forgot value for speed, which is a required field.
|
59
39
|
begin
|
60
|
-
|
40
|
+
Plane.create :name => 'P-39', :country => 'USA', :range => 701
|
61
41
|
rescue RuntimeError => e
|
62
42
|
puts e
|
63
43
|
end
|
64
44
|
|
65
|
-
|
66
|
-
rec4.save
|
45
|
+
Plane.create :name => 'P-39', :country => 'USA', :range => 701, :speed => 339
|
67
46
|
end
|
68
47
|
|
69
48
|
puts "\n\nFind P-51 record by ID"
|
@@ -77,40 +56,40 @@ if p_51
|
|
77
56
|
end
|
78
57
|
|
79
58
|
puts "\n\nFind all records with speed greater than 350 mph"
|
80
|
-
result = Plane.find {
|
59
|
+
result = Plane.find { speed > 350 }
|
81
60
|
p result
|
82
61
|
|
83
62
|
puts "\n\nFind all US planes with speed greater than 300 mph"
|
84
|
-
result = Plane.find {
|
63
|
+
result = Plane.find { country == 'USA' and speed > 300 }
|
85
64
|
p result
|
86
65
|
|
87
66
|
puts "\n\nFind all British planes with speed greater than 300 mph"
|
88
|
-
result = Plane.find do
|
89
|
-
|
67
|
+
result = Plane.find do
|
68
|
+
country == 'Great Britain' and speed > 300
|
90
69
|
end
|
91
70
|
p result
|
92
71
|
|
93
72
|
puts "\n\nFind all Allied planes"
|
94
|
-
result = Plane.find do
|
95
|
-
|
96
|
-
|
97
|
-
|
73
|
+
result = Plane.find do
|
74
|
+
any do
|
75
|
+
country == 'USA'
|
76
|
+
country == 'Great Britain'
|
98
77
|
end
|
99
78
|
end
|
100
79
|
p result
|
101
80
|
|
102
81
|
puts "\n\nFind all Allied planes with speed greater than 400 mph"
|
103
|
-
result = Plane.find do
|
104
|
-
|
105
|
-
|
106
|
-
|
82
|
+
result = Plane.find do
|
83
|
+
any do
|
84
|
+
country == 'USA'
|
85
|
+
country == 'Great Britain'
|
107
86
|
end
|
108
|
-
|
87
|
+
speed > 400
|
109
88
|
end
|
110
89
|
p result
|
111
90
|
|
112
91
|
# Delete Spitfire record.
|
113
|
-
spitfire = Plane.find(:first) {
|
92
|
+
spitfire = Plane.find(:first) { name == 'Spitfire' }
|
114
93
|
|
115
94
|
spitfire.destroy if spitfire
|
116
95
|
|
data/lib/mongoose.rb
CHANGED
data/lib/mongoose/database.rb
CHANGED
@@ -46,7 +46,7 @@ class Database
|
|
46
46
|
tbl_header[:deleted_recs_counter] = 0
|
47
47
|
tbl_header[:columns] = []
|
48
48
|
tbl_header[:columns] << { :name => :id, :data_type => :integer,
|
49
|
-
|
49
|
+
:class => IDColumn.to_s }
|
50
50
|
|
51
51
|
File.open(File.join(@path, table_name.to_s + TBL_HDR_EXT), 'w') do |f|
|
52
52
|
YAML.dump(tbl_header, f)
|
data/lib/mongoose/table.rb
CHANGED
@@ -72,8 +72,8 @@ class Table
|
|
72
72
|
|
73
73
|
define_method(kind.to_sym) do
|
74
74
|
klass = Object.const_get(class_name)
|
75
|
-
|
76
|
-
|
75
|
+
parent_id = @id
|
76
|
+
Collection.new(self, klass.find { send(col) == parent_id })
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
@@ -87,7 +87,8 @@ class Table
|
|
87
87
|
|
88
88
|
define_method(kind.to_sym) do
|
89
89
|
klass = Object.const_get(class_name)
|
90
|
-
|
90
|
+
parent_id = @id
|
91
|
+
klass.find(:first) { send(col) == parent_id }
|
91
92
|
end
|
92
93
|
end
|
93
94
|
|
@@ -160,12 +161,11 @@ class Table
|
|
160
161
|
|
161
162
|
self.columns << col
|
162
163
|
|
163
|
-
|
164
|
-
|
165
|
-
|
164
|
+
(class << self; self; end).class_eval do
|
165
|
+
define_method(col_name) do
|
166
|
+
self.columns.detect { |c| c.name == col_name.to_sym }
|
167
|
+
end
|
166
168
|
end
|
167
|
-
END_OF_STRING
|
168
|
-
self.class_eval(meth)
|
169
169
|
|
170
170
|
self.class_eval do
|
171
171
|
attr_accessor col_name
|
@@ -219,10 +219,22 @@ class Table
|
|
219
219
|
self.add_column(col_name, col_def, SkipListIndexColumn)
|
220
220
|
end
|
221
221
|
|
222
|
+
#-----------------------------------------------------------------------------
|
223
|
+
# Table.create
|
224
|
+
#-----------------------------------------------------------------------------
|
225
|
+
def self.create(options={})
|
226
|
+
rec = new
|
227
|
+
options.each do |k,v|
|
228
|
+
rec.send("#{k}=", v) if self.column_names.include? k
|
229
|
+
end
|
230
|
+
rec.save
|
231
|
+
rec
|
232
|
+
end
|
233
|
+
|
222
234
|
#-----------------------------------------------------------------------------
|
223
235
|
# Table.find
|
224
236
|
#-----------------------------------------------------------------------------
|
225
|
-
def self.find(*args)
|
237
|
+
def self.find(*args, &block)
|
226
238
|
# If searching for just one id or a group of ids...
|
227
239
|
if args[0].is_a?(Integer)
|
228
240
|
if args.size == 1
|
@@ -233,7 +245,7 @@ class Table
|
|
233
245
|
else
|
234
246
|
result = []
|
235
247
|
# If passed a query block...
|
236
|
-
if
|
248
|
+
if block
|
237
249
|
self.query.clear
|
238
250
|
query_start = true
|
239
251
|
sub_q = false
|
@@ -241,7 +253,7 @@ class Table
|
|
241
253
|
sub_q_result = []
|
242
254
|
|
243
255
|
# Grab the query block
|
244
|
-
|
256
|
+
instance_eval(&block)
|
245
257
|
|
246
258
|
# Step through the query block...
|
247
259
|
self.query.each_with_index do |q,i|
|
data/test/tc_relations.rb
CHANGED
@@ -26,12 +26,12 @@ class TestRelations < Test::Unit::TestCase
|
|
26
26
|
@db = Mongoose::Database.new(:path => Dir.tmpdir)
|
27
27
|
|
28
28
|
@db.create_table(:pilot) do |tbl|
|
29
|
-
tbl.add_indexed_column(:
|
29
|
+
tbl.add_indexed_column(:name, :string)
|
30
30
|
tbl.add_column(:years_flying, :integer)
|
31
31
|
end
|
32
32
|
|
33
33
|
@db.create_table(:plane) do |tbl|
|
34
|
-
tbl.add_indexed_column(:
|
34
|
+
tbl.add_indexed_column(:name, :string)
|
35
35
|
tbl.add_column(:country, :string)
|
36
36
|
tbl.add_indexed_column(:speed, :integer)
|
37
37
|
tbl.add_column(:range, :integer)
|
@@ -44,55 +44,22 @@ class TestRelations < Test::Unit::TestCase
|
|
44
44
|
tbl.add_column(:pilot_id, :integer)
|
45
45
|
end
|
46
46
|
|
47
|
-
@doolittle = Pilot.
|
48
|
-
@
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
@
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
rec.save
|
64
|
-
|
65
|
-
rec = Plane.new
|
66
|
-
rec.plane_name = 'Spitfire'
|
67
|
-
rec.country = 'Great Britain'
|
68
|
-
rec.speed = 333
|
69
|
-
rec.range = 454
|
70
|
-
rec.pilot_id = @amelia.id
|
71
|
-
rec.save
|
72
|
-
|
73
|
-
rec = Flight.new
|
74
|
-
rec.pilot_id = @doolittle.id
|
75
|
-
rec.origin = 'Army'
|
76
|
-
rec.destination = 'Nowhere'
|
77
|
-
rec.save
|
78
|
-
|
79
|
-
rec = Flight.new
|
80
|
-
rec.pilot_id = @amelia.id
|
81
|
-
rec.origin = 'USA'
|
82
|
-
rec.destination = 'France'
|
83
|
-
|
84
|
-
rec.save
|
85
|
-
rec = Flight.new
|
86
|
-
rec.pilot_id = @amelia.id
|
87
|
-
rec.origin = 'USA'
|
88
|
-
rec.destination = 'Phillipines'
|
89
|
-
rec.save
|
90
|
-
|
91
|
-
rec = Flight.new
|
92
|
-
rec.pilot_id = @amelia.id
|
93
|
-
rec.origin = 'China'
|
94
|
-
rec.destination = 'Unknown'
|
95
|
-
rec.save
|
47
|
+
@doolittle = Pilot.create :name => 'Doolittle, James', :years_flying => 15
|
48
|
+
@amelia = Pilot.create :name => 'Earhart, Amelia', :years_flying => 10
|
49
|
+
|
50
|
+
Plane.create :name => 'P-51', :country => 'USA', :speed => 402,
|
51
|
+
:range => 1205, :pilot_id => @doolittle.id
|
52
|
+
Plane.create :name => 'Spitfire', :country => 'Great Britain',
|
53
|
+
:speed => 333, :range => 454, :pilot_id => @amelia.id
|
54
|
+
|
55
|
+
Flight.create :pilot_id => @doolittle.id, :origin => 'Army',
|
56
|
+
:destination => 'Nowhere'
|
57
|
+
Flight.create :pilot_id => @amelia.id, :origin => 'USA',
|
58
|
+
:destination => 'France'
|
59
|
+
Flight.create :pilot_id => @amelia.id, :origin => 'USA',
|
60
|
+
:destination => 'Phillipines'
|
61
|
+
Flight.create :pilot_id => @amelia.id, :origin => 'China',
|
62
|
+
:destination => 'Unknown'
|
96
63
|
end
|
97
64
|
|
98
65
|
def teardown
|
@@ -103,7 +70,7 @@ class TestRelations < Test::Unit::TestCase
|
|
103
70
|
end
|
104
71
|
|
105
72
|
def test_has_one
|
106
|
-
assert_equal('P-51', @doolittle.plane.
|
73
|
+
assert_equal('P-51', @doolittle.plane.name)
|
107
74
|
end
|
108
75
|
|
109
76
|
def test_has_many_001
|
@@ -112,28 +79,24 @@ class TestRelations < Test::Unit::TestCase
|
|
112
79
|
end
|
113
80
|
|
114
81
|
def test_has_many_002
|
115
|
-
rec = Flight.
|
116
|
-
|
117
|
-
rec.origin = 'Tuscon'
|
118
|
-
rec.destination = 'Phoenix'
|
82
|
+
rec = Flight.create :pilot_id => @amelia.id, :origin => 'Tuscon',
|
83
|
+
:destination => 'Phoenix'
|
119
84
|
@amelia.flights << rec
|
120
85
|
|
121
86
|
assert(@amelia.flights.any? {|f| f.origin == 'Tuscon'})
|
122
87
|
end
|
123
88
|
|
124
89
|
def test_belongs_to_001
|
125
|
-
assert_equal('Earhart, Amelia', Plane.find(2).pilot.
|
126
|
-
assert_equal('Doolittle, James', Flight.find(1).pilot.
|
90
|
+
assert_equal('Earhart, Amelia', Plane.find(2).pilot.name)
|
91
|
+
assert_equal('Doolittle, James', Flight.find(1).pilot.name)
|
127
92
|
end
|
128
93
|
|
129
94
|
def test_belongs_to_002
|
130
|
-
red_baron = Pilot.
|
131
|
-
|
132
|
-
red_baron.years_flying = 50
|
133
|
-
spitfire = Plane.find(:first) {|plane| plane.plane_name == 'Spitfire'}
|
95
|
+
red_baron = Pilot.create :name => 'Baron, The Red', :years_flying => 50
|
96
|
+
spitfire = Plane.find(:first) { name == 'Spitfire'}
|
134
97
|
spitfire.pilot = red_baron
|
135
98
|
|
136
|
-
assert('Baron, The Red', spitfire.pilot.
|
137
|
-
assert_equal('Spitfire', red_baron.plane.
|
99
|
+
assert('Baron, The Red', spitfire.pilot.name)
|
100
|
+
assert_equal('Spitfire', red_baron.plane.name)
|
138
101
|
end
|
139
102
|
end
|
data/test/tc_table.rb
CHANGED
@@ -22,33 +22,14 @@ class TestTable < Test::Unit::TestCase
|
|
22
22
|
tbl.add_column(:range, :integer)
|
23
23
|
end
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
rec.name = 'Spitfire'
|
34
|
-
rec.country = 'Great Britain'
|
35
|
-
rec.speed = 333
|
36
|
-
rec.range = 454
|
37
|
-
rec.save
|
38
|
-
|
39
|
-
rec = Plane.new
|
40
|
-
rec.name = 'ME-109'
|
41
|
-
rec.country = 'Germany'
|
42
|
-
rec.speed = 351
|
43
|
-
rec.range = 501
|
44
|
-
rec.save
|
45
|
-
|
46
|
-
rec = Plane.new
|
47
|
-
rec.name = 'P-38'
|
48
|
-
rec.country = 'USA'
|
49
|
-
rec.speed = 401
|
50
|
-
rec.range = 999
|
51
|
-
rec.save
|
25
|
+
Plane.create :name => 'P-51', :country => 'USA', :speed => 402,
|
26
|
+
:range => 1205
|
27
|
+
Plane.create :name => 'Spitfire', :country => 'Great Britain',
|
28
|
+
:speed => 333, :range => 454
|
29
|
+
Plane.create :name => 'ME-109', :country => 'Germany', :speed => 351,
|
30
|
+
:range => 501
|
31
|
+
Plane.create :name => 'P-38', :country => 'USA', :speed => 401,
|
32
|
+
:range => 999
|
52
33
|
end
|
53
34
|
|
54
35
|
def teardown
|
@@ -64,14 +45,21 @@ class TestTable < Test::Unit::TestCase
|
|
64
45
|
end
|
65
46
|
|
66
47
|
def test_add_record
|
67
|
-
rec = Plane.
|
48
|
+
rec = Plane.new
|
49
|
+
rec.name = 'Zero'
|
50
|
+
rec.country = 'Japan'
|
51
|
+
rec.speed = 377
|
52
|
+
rec.range = 888
|
53
|
+
rec.save
|
68
54
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
assert_equal(
|
73
|
-
assert_equal(
|
74
|
-
assert_equal(
|
55
|
+
rec2 = Plane.find(rec.id)
|
56
|
+
|
57
|
+
assert(rec2.is_a?(Plane))
|
58
|
+
assert_equal(rec.id, rec2.id)
|
59
|
+
assert_equal('Zero', rec2.name)
|
60
|
+
assert_equal('Japan', rec2.country)
|
61
|
+
assert_equal(377, rec2.speed)
|
62
|
+
assert_equal(888, rec2.range)
|
75
63
|
end
|
76
64
|
|
77
65
|
def test_update_record_001
|
@@ -95,7 +83,7 @@ class TestTable < Test::Unit::TestCase
|
|
95
83
|
end
|
96
84
|
|
97
85
|
def find_001
|
98
|
-
rec = Plane.find(:first) {
|
86
|
+
rec = Plane.find(:first) { name == 'P-51' }
|
99
87
|
|
100
88
|
assert(rec.is_a?(Plane))
|
101
89
|
assert_equal(rec.name, 'P-51')
|
@@ -111,7 +99,7 @@ class TestTable < Test::Unit::TestCase
|
|
111
99
|
end
|
112
100
|
|
113
101
|
def find_002
|
114
|
-
recs = Plane.find {
|
102
|
+
recs = Plane.find { name == 'P-51' }
|
115
103
|
|
116
104
|
assert_equal(recs.size, 1)
|
117
105
|
assert(recs.first.is_a?(Plane))
|
@@ -134,30 +122,30 @@ class TestTable < Test::Unit::TestCase
|
|
134
122
|
end
|
135
123
|
|
136
124
|
def find_003
|
137
|
-
recs = Plane.find do
|
138
|
-
|
139
|
-
|
140
|
-
|
125
|
+
recs = Plane.find do
|
126
|
+
any do
|
127
|
+
country == 'USA'
|
128
|
+
country == 'Great Britain'
|
141
129
|
end
|
142
130
|
end
|
143
131
|
assert_equal(recs.size, 3)
|
144
132
|
|
145
|
-
recs = Plane.find do
|
146
|
-
|
147
|
-
|
148
|
-
|
133
|
+
recs = Plane.find do
|
134
|
+
any do
|
135
|
+
country == 'USA'
|
136
|
+
country == 'Great Britain'
|
149
137
|
end
|
150
|
-
|
138
|
+
speed > 400
|
151
139
|
end
|
152
140
|
assert_equal(recs.size, 2)
|
153
141
|
|
154
|
-
recs = Plane.find do
|
155
|
-
|
156
|
-
|
157
|
-
|
142
|
+
recs = Plane.find do
|
143
|
+
any do
|
144
|
+
country == 'USA'
|
145
|
+
country == 'Great Britain'
|
158
146
|
end
|
159
|
-
|
160
|
-
|
147
|
+
speed > 400
|
148
|
+
range > 1000
|
161
149
|
end
|
162
150
|
assert_equal(recs.size, 1)
|
163
151
|
assert_equal(recs.first.name, 'P-51')
|
@@ -173,23 +161,23 @@ class TestTable < Test::Unit::TestCase
|
|
173
161
|
end
|
174
162
|
|
175
163
|
def find_004
|
176
|
-
recs = Plane.find {
|
164
|
+
recs = Plane.find { name.one_of('P-51', 'ME-109') }
|
177
165
|
assert_equal(recs.size, 2)
|
178
166
|
|
179
|
-
recs = Plane.find {
|
167
|
+
recs = Plane.find { country.one_of('USA', 'Germany') }
|
180
168
|
assert_equal(recs.size, 3)
|
181
169
|
|
182
|
-
recs = Plane.find {
|
170
|
+
recs = Plane.find { speed.between(351, 400) }
|
183
171
|
assert_equal(0, recs.size)
|
184
172
|
|
185
|
-
recs = Plane.find {
|
173
|
+
recs = Plane.find { speed.between(351, 400, true) }
|
186
174
|
assert_equal(1, recs.size)
|
187
175
|
assert_equal('ME-109', recs.first.name)
|
188
176
|
|
189
|
-
recs = Plane.find {
|
177
|
+
recs = Plane.find { range.between(450, 501) }
|
190
178
|
assert_equal(1, recs.size)
|
191
179
|
|
192
|
-
recs = Plane.find {
|
180
|
+
recs = Plane.find { range.between(450, 501, false, true) }
|
193
181
|
assert_equal(2, recs.size)
|
194
182
|
end
|
195
183
|
|
@@ -203,7 +191,7 @@ class TestTable < Test::Unit::TestCase
|
|
203
191
|
end
|
204
192
|
|
205
193
|
def test_destroy
|
206
|
-
rec = Plane.find(:first) {
|
194
|
+
rec = Plane.find(:first) { name == 'P-51' }
|
207
195
|
rec.destroy
|
208
196
|
|
209
197
|
recs = Plane.find
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: mongoose
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2006-07-
|
6
|
+
version: 0.2.0
|
7
|
+
date: 2006-07-21 00:00:00 -04:00
|
8
8
|
summary: Mongoose is a pure_ruby database management system.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- test/tc_relations.rb
|
45
45
|
- example/relation_examples.rb
|
46
46
|
- example/simple_examples.rb
|
47
|
+
- example/activetable_example.rb
|
47
48
|
test_files:
|
48
49
|
- test/ts_mongoose.rb
|
49
50
|
rdoc_options: []
|