mongoose 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +136 -0
- data/changes.txt +2 -0
- data/example/relation_examples.rb +117 -0
- data/example/simple_examples.rb +117 -0
- data/lib/mongoose.rb +45 -0
- data/lib/mongoose/column.rb +286 -0
- data/lib/mongoose/database.rb +113 -0
- data/lib/mongoose/linear_search.rb +114 -0
- data/lib/mongoose/skiplist.rb +412 -0
- data/lib/mongoose/table.rb +568 -0
- data/lib/mongoose/util.rb +43 -0
- data/test/tc_database.rb +27 -0
- data/test/tc_table.rb +167 -0
- data/test/ts_mongoose.rb +3 -0
- metadata +59 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
# Credit for these utility methods goes completely to Logan Capaldo.
|
2
|
+
|
3
|
+
module Mongoose
|
4
|
+
|
5
|
+
module Util
|
6
|
+
# converts from things like user_name to things like UserName
|
7
|
+
def self.us_case_to_class_case(name)
|
8
|
+
name.to_s.split(/_/).map do |word|
|
9
|
+
word.capitalize
|
10
|
+
end.join
|
11
|
+
end
|
12
|
+
|
13
|
+
# converts from things like UserName to things like user_name
|
14
|
+
def self.class_case_to_us_case(name)
|
15
|
+
decapitalized = name.to_s.sub(/^./) { |match| match.downcase }
|
16
|
+
decapitalized.gsub(/[A-Z]/) { |match| "_" + match.downcase }
|
17
|
+
end
|
18
|
+
|
19
|
+
# Adds an s
|
20
|
+
def self.pluralize(name)
|
21
|
+
name.to_s + 's'
|
22
|
+
end
|
23
|
+
|
24
|
+
# chops an s
|
25
|
+
def self.singularize(name)
|
26
|
+
if md = name.to_s.match(/^(.+?)s\z/)
|
27
|
+
md[1]
|
28
|
+
else
|
29
|
+
raise RuntimeError, "#{name} is not plural"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.col_name_for_class(name)
|
34
|
+
class_case_to_us_case(name) + "_id"
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.class_name_for_col(name)
|
38
|
+
us_case_to_class_case(name.sub(/_id\z/, ''))
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/test/tc_database.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'tmpdir'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubygems'
|
6
|
+
require_gem 'Mongoose'
|
7
|
+
rescue LoadError
|
8
|
+
require 'mongoose'
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestDatabase < Test::Unit::TestCase
|
12
|
+
def setup
|
13
|
+
@db = Mongoose::Database.new(:path => Dir.tmpdir)
|
14
|
+
end
|
15
|
+
|
16
|
+
def teardown
|
17
|
+
@db.close
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_db_created
|
21
|
+
assert(@db.is_a?(Mongoose::Database))
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_path
|
25
|
+
assert_equal(Dir.tmpdir, @db.path)
|
26
|
+
end
|
27
|
+
end
|
data/test/tc_table.rb
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'tmpdir'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubygems'
|
6
|
+
require_gem 'Mongoose'
|
7
|
+
rescue LoadError
|
8
|
+
require 'mongoose'
|
9
|
+
end
|
10
|
+
|
11
|
+
class Plane < Mongoose::Table
|
12
|
+
end
|
13
|
+
|
14
|
+
class TestTable < Test::Unit::TestCase
|
15
|
+
def setup
|
16
|
+
@db = Mongoose::Database.new(:path => Dir.tmpdir)
|
17
|
+
|
18
|
+
@db.create_table(:plane) do |tbl|
|
19
|
+
tbl.add_indexed_column(:name, :string)
|
20
|
+
tbl.add_column(:country, :string)
|
21
|
+
tbl.add_indexed_column(:speed, :integer)
|
22
|
+
tbl.add_column(:range, :integer)
|
23
|
+
end
|
24
|
+
|
25
|
+
rec = Plane.new
|
26
|
+
rec.name = 'P-51'
|
27
|
+
rec.country = 'USA'
|
28
|
+
rec.speed = 402
|
29
|
+
rec.range = 1205
|
30
|
+
rec.save
|
31
|
+
|
32
|
+
rec = Plane.new
|
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
|
52
|
+
end
|
53
|
+
|
54
|
+
def teardown
|
55
|
+
@db.drop_table(:plane)
|
56
|
+
@db.close
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_table_exists
|
60
|
+
assert(Object.const_defined?('Plane'))
|
61
|
+
assert(File.exists?(File.join(Dir.tmpdir, 'plane.mgh')))
|
62
|
+
assert(File.exists?(File.join(Dir.tmpdir, 'plane.mgt')))
|
63
|
+
assert_equal(5, Plane.columns.size)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_add_record
|
67
|
+
rec = Plane.find(1)
|
68
|
+
|
69
|
+
assert(rec.is_a?(Plane))
|
70
|
+
assert_equal(1, rec.id)
|
71
|
+
assert_equal('P-51', rec.name)
|
72
|
+
assert_equal('USA', rec.country)
|
73
|
+
assert_equal(402, rec.speed)
|
74
|
+
assert_equal(1205, rec.range)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_update_record
|
78
|
+
rec = Plane.find(1)
|
79
|
+
rec.speed = 405
|
80
|
+
rec.save
|
81
|
+
|
82
|
+
rec = Plane.find(1)
|
83
|
+
|
84
|
+
assert_equal(rec.speed, 405)
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_find_001
|
88
|
+
rec = Plane.find(:first) { |plane| plane.name == 'P-51' }
|
89
|
+
|
90
|
+
assert(rec.is_a?(Plane))
|
91
|
+
assert_equal(rec.name, 'P-51')
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_find_002
|
95
|
+
recs = Plane.find { |plane| plane.name == 'P-51' }
|
96
|
+
|
97
|
+
assert_equal(recs.size, 1)
|
98
|
+
assert(recs.first.is_a?(Plane))
|
99
|
+
assert_equal(recs.first.name, 'P-51')
|
100
|
+
|
101
|
+
recs = Plane.find
|
102
|
+
|
103
|
+
assert_equal(recs.size, 4)
|
104
|
+
assert(recs[1].is_a?(Plane))
|
105
|
+
assert_equal(recs[1].name, 'Spitfire')
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_find_003
|
109
|
+
recs = Plane.find do |plane|
|
110
|
+
plane.any do
|
111
|
+
plane.country == 'USA'
|
112
|
+
plane.country == 'Great Britain'
|
113
|
+
end
|
114
|
+
end
|
115
|
+
assert_equal(recs.size, 3)
|
116
|
+
|
117
|
+
recs = Plane.find do |plane|
|
118
|
+
plane.any do
|
119
|
+
plane.country == 'USA'
|
120
|
+
plane.country == 'Great Britain'
|
121
|
+
end
|
122
|
+
plane.speed > 400
|
123
|
+
end
|
124
|
+
assert_equal(recs.size, 2)
|
125
|
+
|
126
|
+
recs = Plane.find do |plane|
|
127
|
+
plane.any do
|
128
|
+
plane.country == 'USA'
|
129
|
+
plane.country == 'Great Britain'
|
130
|
+
end
|
131
|
+
plane.speed > 400
|
132
|
+
plane.range > 1000
|
133
|
+
end
|
134
|
+
assert_equal(recs.size, 1)
|
135
|
+
assert_equal(recs.first.name, 'P-51')
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_find_004
|
139
|
+
recs = Plane.find { |plane| plane.name.one_of('P-51', 'ME-109') }
|
140
|
+
assert_equal(recs.size, 2)
|
141
|
+
|
142
|
+
recs = Plane.find { |plane| plane.country.one_of('USA', 'Germany') }
|
143
|
+
assert_equal(recs.size, 3)
|
144
|
+
|
145
|
+
recs = Plane.find { |plane| plane.speed.between(351, 400) }
|
146
|
+
assert_equal(0, recs.size)
|
147
|
+
|
148
|
+
recs = Plane.find { |plane| plane.speed.between(351, 400, true) }
|
149
|
+
assert_equal(1, recs.size)
|
150
|
+
assert_equal('ME-109', recs.first.name)
|
151
|
+
|
152
|
+
recs = Plane.find { |plane| plane.range.between(450, 501) }
|
153
|
+
assert_equal(1, recs.size)
|
154
|
+
|
155
|
+
recs = Plane.find { |plane| plane.range.between(450, 501, false, true) }
|
156
|
+
assert_equal(2, recs.size)
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_destroy
|
160
|
+
rec = Plane.find(:first) { |plane| plane.name == 'P-51' }
|
161
|
+
rec.destroy
|
162
|
+
|
163
|
+
recs = Plane.find
|
164
|
+
|
165
|
+
assert_equal(recs.size, 3)
|
166
|
+
end
|
167
|
+
end
|
data/test/ts_mongoose.rb
ADDED
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
|
+
specification_version: 1
|
4
|
+
name: mongoose
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.1.0
|
7
|
+
date: 2006-07-19 00:00:00 -04:00
|
8
|
+
summary: Mongoose is a pure_ruby database management system.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: jcribbs@netpromi.com
|
12
|
+
homepage: http://rubyforge.org/projects/mongoose/
|
13
|
+
rubyforge_project: mongoose
|
14
|
+
description: Mongoose is a module that allows you to create and databases. It has an ActiveRecord-like interface, uses Skiplists for its indexing, and uses Marshal to serializeits data.
|
15
|
+
autorequire: mongoose
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: false
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
authors:
|
29
|
+
- Jamey Cribbs
|
30
|
+
files:
|
31
|
+
- lib/mongoose.rb
|
32
|
+
- lib/mongoose
|
33
|
+
- lib/mongoose/database.rb
|
34
|
+
- lib/mongoose/linear_search.rb
|
35
|
+
- lib/mongoose/skiplist.rb
|
36
|
+
- lib/mongoose/table.rb
|
37
|
+
- lib/mongoose/util.rb
|
38
|
+
- lib/mongoose/column.rb
|
39
|
+
- README
|
40
|
+
- changes.txt
|
41
|
+
- test/tc_database.rb
|
42
|
+
- test/tc_table.rb
|
43
|
+
- test/ts_mongoose.rb
|
44
|
+
- example/relation_examples.rb
|
45
|
+
- example/simple_examples.rb
|
46
|
+
test_files:
|
47
|
+
- test/ts_mongoose.rb
|
48
|
+
rdoc_options: []
|
49
|
+
|
50
|
+
extra_rdoc_files: []
|
51
|
+
|
52
|
+
executables: []
|
53
|
+
|
54
|
+
extensions: []
|
55
|
+
|
56
|
+
requirements:
|
57
|
+
- none
|
58
|
+
dependencies: []
|
59
|
+
|