og 0.29.0 → 0.30.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ProjectInfo +17 -28
- data/README +6 -6
- data/doc/AUTHORS +6 -0
- data/doc/RELEASES +36 -0
- data/lib/glue/hierarchical.rb +3 -4
- data/lib/glue/optimistic_locking.rb +1 -1
- data/lib/glue/orderable.rb +3 -3
- data/lib/glue/taggable.rb +29 -26
- data/lib/glue/timestamped.rb +3 -4
- data/lib/og.rb +21 -9
- data/lib/og/entity.rb +44 -2
- data/lib/og/manager.rb +9 -6
- data/lib/og/markers.rb +9 -1
- data/lib/og/relation.rb +9 -5
- data/lib/og/relation/joins_many.rb +2 -2
- data/lib/og/store/alpha/memory.rb +8 -8
- data/lib/og/store/alpha/sqlserver.rb +3 -3
- data/lib/og/store/kirby.rb +422 -279
- data/lib/og/store/mysql.rb +33 -24
- data/lib/og/store/psql.rb +28 -18
- data/lib/og/store/sql.rb +99 -33
- data/lib/og/store/sqlite.rb +13 -7
- data/lib/og/store/sqlite2.rb +14 -4
- data/test/og/CONFIG.rb +2 -2
- data/test/og/store/tc_sti.rb +41 -0
- data/test/og/tc_aggregations_calculations.rb +8 -2
- data/test/og/tc_cacheable.rb +6 -2
- data/test/og/tc_camel_case_join.rb +51 -0
- data/test/og/tc_ez.rb +30 -1
- data/test/og/tc_join.rb +73 -6
- data/test/og/tc_multi_validations.rb +1 -1
- metadata +53 -53
- data/Rakefile +0 -220
data/lib/og/store/sqlite.rb
CHANGED
@@ -192,17 +192,17 @@ private
|
|
192
192
|
Logger.debug "Table '#{klass::OGTABLE}' already exists" if $DBG
|
193
193
|
|
194
194
|
actual_fields = Set.new(list_fields(klass::OGTABLE))
|
195
|
-
defined_fields = Set.new(klass.
|
195
|
+
defined_fields = Set.new(fields_for_class(klass).map { |f| f[0, f.index(' ')] } )
|
196
196
|
|
197
197
|
unless defined_fields == actual_fields
|
198
|
-
Logger.debug "Field mismatch in '#{klass::OGTABLE}'. Attempting to correct..."
|
198
|
+
Logger.debug "Field mismatch in '#{klass::OGTABLE}'. Attempting to correct..." if $DBG
|
199
199
|
|
200
200
|
fields_to_add = defined_fields - actual_fields
|
201
201
|
fields_to_delete = actual_fields - defined_fields
|
202
202
|
|
203
203
|
fields_to_add.each do |field|
|
204
204
|
if @options[:evolve_schema] == true
|
205
|
-
Logger.debug "Adding field '#{field}' to '#{klass::OGTABLE}'"
|
205
|
+
Logger.debug "Adding field '#{field}' to '#{klass::OGTABLE}'" if $DBG
|
206
206
|
sql = "ALTER TABLE #{klass::OGTABLE} ADD COLUMN #{property_to_field(klass, klass.properties[field.to_sym])}"
|
207
207
|
@conn.query(sql)
|
208
208
|
@conn.query("VACUUM #{klass::OGTABLE}")
|
@@ -252,7 +252,7 @@ private
|
|
252
252
|
create_join_table_sql(info).each do |sql|
|
253
253
|
@conn.query(sql).close
|
254
254
|
end
|
255
|
-
Logger.debug "Created jointable '#{info[:table]}'."
|
255
|
+
Logger.debug "Created jointable '#{info[:table]}'." if $DBG
|
256
256
|
rescue Object => ex
|
257
257
|
# gmosx: any idea how to better test this?
|
258
258
|
if ex.to_s =~ /table .* already exists/i
|
@@ -271,8 +271,14 @@ private
|
|
271
271
|
|
272
272
|
fields = res.columns
|
273
273
|
|
274
|
+
# Check if the field should be ignored.
|
275
|
+
ignore = klass.ann[:self][:ignore_field] || klass.ann[:self][:ignore_fields] || klass.ann[:self][:ignore_columns]
|
276
|
+
|
274
277
|
res.fields.size.times do |i|
|
275
|
-
|
278
|
+
field_name = fields[i].to_sym
|
279
|
+
unless (ignore and ignore.include?(field_name))
|
280
|
+
map[field_name] = i
|
281
|
+
end
|
276
282
|
end
|
277
283
|
|
278
284
|
return map
|
@@ -294,10 +300,10 @@ private
|
|
294
300
|
|
295
301
|
klass.class_eval %{
|
296
302
|
def og_insert(store)
|
297
|
-
#{
|
303
|
+
#{::Aspects.gen_advice_code(:og_insert, klass.advices, :pre) if klass.respond_to?(:advices)}
|
298
304
|
store.query("#{sql}").close
|
299
305
|
@#{pk} = store.last_insert_rowid
|
300
|
-
#{
|
306
|
+
#{::Aspects.gen_advice_code(:og_insert, klass.advices, :post) if klass.respond_to?(:advices)}
|
301
307
|
end
|
302
308
|
}
|
303
309
|
end
|
data/lib/og/store/sqlite2.rb
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
#--
|
2
|
+
# TODO: extend from sqlite.rb to avoid code duplication.
|
3
|
+
#++
|
4
|
+
|
1
5
|
begin
|
2
6
|
require 'sqlite'
|
3
7
|
rescue Object => ex
|
@@ -166,7 +170,7 @@ private
|
|
166
170
|
create_join_table_sql(info).each do |sql|
|
167
171
|
@conn.query(sql).close
|
168
172
|
end
|
169
|
-
Logger.debug "Created jointable '#{info[:table]}'."
|
173
|
+
Logger.debug "Created jointable '#{info[:table]}'." if $DBG
|
170
174
|
rescue Object => ex
|
171
175
|
# gmosx: any idea how to better test this?
|
172
176
|
if ex.to_s =~ /table .* already exists/i
|
@@ -185,8 +189,14 @@ private
|
|
185
189
|
|
186
190
|
fields = res.columns
|
187
191
|
|
192
|
+
# Check if the field should be ignored.
|
193
|
+
ignore = klass.ann[:self][:ignore_field] || klass.ann[:self][:ignore_fields] || klass.ann[:self][:ignore_columns]
|
194
|
+
|
188
195
|
res.fields.size.times do |i|
|
189
|
-
|
196
|
+
field_name = fields[i].to_sym
|
197
|
+
unless (ignore and ignore.include?(field_name))
|
198
|
+
map[field_name] = i
|
199
|
+
end
|
190
200
|
end
|
191
201
|
|
192
202
|
return map
|
@@ -208,10 +218,10 @@ private
|
|
208
218
|
|
209
219
|
klass.class_eval %{
|
210
220
|
def og_insert(store)
|
211
|
-
#{
|
221
|
+
#{::Aspects.gen_advice_code(:og_insert, klass.advices, :pre) if klass.respond_to?(:advices)}
|
212
222
|
store.query("#{sql}").close
|
213
223
|
@#{pk} = store.last_insert_rowid
|
214
|
-
#{
|
224
|
+
#{::Aspects.gen_advice_code(:og_insert, klass.advices, :post) if klass.respond_to?(:advices)}
|
215
225
|
end
|
216
226
|
}
|
217
227
|
end
|
data/test/og/CONFIG.rb
CHANGED
@@ -82,10 +82,10 @@ require 'og'
|
|
82
82
|
|
83
83
|
Logger.set(Logger.new(StringIO.new)) unless $DBG
|
84
84
|
|
85
|
-
Og.thread_safe = false
|
86
|
-
|
87
85
|
$og1 ||= Og.setup(@og_config1)
|
88
86
|
$og2 ||= Og.setup(@og_config2)
|
89
87
|
|
88
|
+
Og.thread_safe = false if Og.thread_safe
|
89
|
+
|
90
90
|
# * Tom Sawyer <transfire@gmail.com>
|
91
91
|
# * George Moschovitis <gm@navel.gr>
|
data/test/og/store/tc_sti.rb
CHANGED
@@ -17,6 +17,8 @@ class TC_Sti < Test::Unit::TestCase
|
|
17
17
|
property :three
|
18
18
|
end
|
19
19
|
|
20
|
+
$og1.manage_classes(StiParent, StiChild)
|
21
|
+
|
20
22
|
def setup
|
21
23
|
@store = Og::SqlStore.new(nil)
|
22
24
|
end
|
@@ -51,3 +53,42 @@ class TC_Sti < Test::Unit::TestCase
|
|
51
53
|
assert(field_names.member?(:ogtype.to_s), msg)
|
52
54
|
end
|
53
55
|
end
|
56
|
+
|
57
|
+
class TC_Sti_OgType < Test::Unit::TestCase
|
58
|
+
class Human
|
59
|
+
property :name
|
60
|
+
|
61
|
+
schema_inheritance
|
62
|
+
|
63
|
+
def initialize(name)
|
64
|
+
@name = name
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
class Parent < Human
|
69
|
+
property :job
|
70
|
+
end
|
71
|
+
|
72
|
+
class Child < Human
|
73
|
+
property :toys
|
74
|
+
end
|
75
|
+
|
76
|
+
$og1.manage_classes(Human, Parent, Child)
|
77
|
+
|
78
|
+
def setup
|
79
|
+
Parent.create('mom')
|
80
|
+
Parent.create('dad')
|
81
|
+
Child.create('son')
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_sti_all
|
85
|
+
all = Human.all
|
86
|
+
assert_equal(3, all.size)
|
87
|
+
parents = all.select {|h| h.class == Parent }
|
88
|
+
children = all.select {|h| h.class == Child }
|
89
|
+
assert_equal(2, parents.size)
|
90
|
+
assert_equal(1, children.size)
|
91
|
+
assert_equal(%w[dad mom], parents.sort {|x,y| x.name <=> y.name}.map {|p| p.name } )
|
92
|
+
assert_equal(%w[son], children.map {|c| c.name } )
|
93
|
+
end
|
94
|
+
end
|
@@ -5,6 +5,7 @@ require 'facets'
|
|
5
5
|
|
6
6
|
require 'test/unit'
|
7
7
|
require 'og'
|
8
|
+
require 'glue/timestamped'
|
8
9
|
|
9
10
|
class TC_OgAggrCalc < Test::Unit::TestCase # :nodoc: all
|
10
11
|
include Og
|
@@ -12,6 +13,7 @@ class TC_OgAggrCalc < Test::Unit::TestCase # :nodoc: all
|
|
12
13
|
class User
|
13
14
|
property :section, String
|
14
15
|
property :age, Fixnum
|
16
|
+
is Glue::Timestamped
|
15
17
|
|
16
18
|
def initialize(section, age)
|
17
19
|
@section = section
|
@@ -27,7 +29,7 @@ class TC_OgAggrCalc < Test::Unit::TestCase # :nodoc: all
|
|
27
29
|
User.create('d', 34)
|
28
30
|
User.create('d', 33)
|
29
31
|
User.create('c', 27)
|
30
|
-
User.create('c', 31)
|
32
|
+
last = User.create('c', 31)
|
31
33
|
|
32
34
|
assert_equal 6, User.count
|
33
35
|
assert_equal 12, User.minimum(:age)
|
@@ -38,7 +40,11 @@ class TC_OgAggrCalc < Test::Unit::TestCase # :nodoc: all
|
|
38
40
|
|
39
41
|
sums = User.sum(:age, :group => :section)
|
40
42
|
assert_equal 3, sums.size
|
41
|
-
|
43
|
+
assert(sums.include?(28))
|
44
|
+
assert(sums.include?(58))
|
45
|
+
assert(sums.include?(67))
|
46
|
+
assert_equal(last.create_time.to_s, User.max(:create_time).to_s)
|
47
|
+
assert_instance_of(Time, User.max(:create_time))
|
42
48
|
end
|
43
49
|
|
44
50
|
end
|
data/test/og/tc_cacheable.rb
CHANGED
@@ -75,6 +75,7 @@ class TC_FileCacheable < Test::Unit::TestCase # :nodoc: all
|
|
75
75
|
|
76
76
|
property :name, String
|
77
77
|
property :age, Fixnum
|
78
|
+
property :permissions, Array
|
78
79
|
end
|
79
80
|
|
80
81
|
$og1.manage_classes(User)
|
@@ -104,7 +105,9 @@ class TC_FileCacheable < Test::Unit::TestCase # :nodoc: all
|
|
104
105
|
User.create_with :name => 'Stella'
|
105
106
|
|
106
107
|
u = User[1]
|
107
|
-
|
108
|
+
u.permissions = %w[1 2 3]
|
109
|
+
u.save
|
110
|
+
|
108
111
|
assert_equal 'George', u.name, msg
|
109
112
|
|
110
113
|
# Comes from the cache.
|
@@ -122,6 +125,7 @@ class TC_FileCacheable < Test::Unit::TestCase # :nodoc: all
|
|
122
125
|
u = User[1]
|
123
126
|
|
124
127
|
assert_equal u.name, @og.cache.get(u.og_cache_key).name, msg
|
128
|
+
assert_equal %w[1 2 3], @og.cache.get(u.og_cache_key).permissions, msg
|
125
129
|
|
126
130
|
u.delete
|
127
131
|
User.delete(2)
|
@@ -155,7 +159,7 @@ begin
|
|
155
159
|
def test_all
|
156
160
|
Caches.each do |cache_class|
|
157
161
|
# @og.cache = DrbCache.new(:address => Og.cache_address, :port => Og.cache_port)
|
158
|
-
@og.cache = cache_class.new
|
162
|
+
@og.cache = cache_class.new(self.class, 60)
|
159
163
|
|
160
164
|
msg = "Failed for cache type: #{cache_class}"
|
161
165
|
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'CONFIG.rb')
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'facets'
|
5
|
+
require 'test/unit'
|
6
|
+
require 'og'
|
7
|
+
|
8
|
+
class TC_CamelCase < Test::Unit::TestCase # :nodoc: all
|
9
|
+
include Og
|
10
|
+
|
11
|
+
class CategoryCamelCase
|
12
|
+
property :title, String
|
13
|
+
def initialize(title)
|
14
|
+
@title = title
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class ArticleCamelCase
|
19
|
+
property :title, String
|
20
|
+
joins_many CategoryCamelCase, :through => ArticleToCategory
|
21
|
+
|
22
|
+
def initialize(title)
|
23
|
+
@title = title
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class ArticleToCategory
|
28
|
+
property :rate, Float
|
29
|
+
property :hits, Fixnum
|
30
|
+
has_one ArticleCamelCase
|
31
|
+
has_one CategoryCamelCase
|
32
|
+
end
|
33
|
+
|
34
|
+
def setup
|
35
|
+
$og1.manage_classes(CategoryCamelCase, ArticleCamelCase, ArticleToCategory)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_all
|
39
|
+
c1 = CategoryCamelCase.create('tech')
|
40
|
+
c2 = CategoryCamelCase.create('funny')
|
41
|
+
a = ArticleCamelCase.create('a1')
|
42
|
+
a.category_camel_cases.push(c1, :hits =>3, :rate => 2.3)
|
43
|
+
a.category_camel_cases.push(c2, :rate => 1.2)
|
44
|
+
join = a.category_camel_case_join_data(c1)
|
45
|
+
assert_equal 2.3, join.rate
|
46
|
+
assert_equal 3, join.hits
|
47
|
+
join = a.category_camel_case_join_data(c2)
|
48
|
+
assert_equal 1.2, join.rate
|
49
|
+
assert_equal nil, join.hits
|
50
|
+
end
|
51
|
+
end
|
data/test/og/tc_ez.rb
CHANGED
@@ -28,6 +28,35 @@ class TC_ResolveOptions < Test::Unit::TestCase # :nodoc: all
|
|
28
28
|
end
|
29
29
|
|
30
30
|
assert_equal 2, users.size
|
31
|
+
|
32
|
+
users = User.find { |user| user.age === [14, 23] }
|
33
|
+
|
34
|
+
assert_equal 2, users.size
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class TC_EZ_STI < Test::Unit::TestCase # :nodoc: all
|
39
|
+
class Person
|
40
|
+
property :name, String
|
41
|
+
property :kids, Integer
|
42
|
+
schema_inheritance
|
43
|
+
end
|
44
|
+
|
45
|
+
class Musician < Person
|
46
|
+
property :instruments, Array
|
47
|
+
end
|
48
|
+
|
49
|
+
class Plumber < Person
|
50
|
+
property :tools, Array
|
51
|
+
end
|
52
|
+
|
53
|
+
$og1.manage_classes(Person, Musician, Plumber)
|
54
|
+
|
55
|
+
def test_op_triple_equals # ===
|
56
|
+
results = nil
|
57
|
+
assert_nothing_raised do
|
58
|
+
results = Musician.find {|m| m.kids === [3,4,5]}
|
59
|
+
end
|
60
|
+
assert(results.empty?)
|
31
61
|
end
|
32
|
-
|
33
62
|
end
|
data/test/og/tc_join.rb
CHANGED
@@ -13,6 +13,9 @@ class TC_Join < Test::Unit::TestCase # :nodoc: all
|
|
13
13
|
|
14
14
|
class Category
|
15
15
|
property :title, String
|
16
|
+
joins_many Article
|
17
|
+
joins_many :third_join, Article, :table => :ogj_article_category_third
|
18
|
+
joins_many :fourth_join, Article, :table => :ogj_article_category_fourth
|
16
19
|
|
17
20
|
def initialize(title)
|
18
21
|
@title = title
|
@@ -22,7 +25,11 @@ class TC_Join < Test::Unit::TestCase # :nodoc: all
|
|
22
25
|
class Article
|
23
26
|
property :title, String
|
24
27
|
|
25
|
-
joins_many Category, :through => ArticleToCategory
|
28
|
+
joins_many :first_join, Category, :through => ArticleToCategory
|
29
|
+
joins_many :second_join, Category, :through => ArticleToCategory
|
30
|
+
joins_many :third_join, Category, :table => :ogj_article_category_third
|
31
|
+
joins_many :fourth_join, Category, :table => :ogj_article_category_fourth
|
32
|
+
joins_many Category
|
26
33
|
|
27
34
|
def initialize(title)
|
28
35
|
@title = title
|
@@ -44,18 +51,78 @@ class TC_Join < Test::Unit::TestCase # :nodoc: all
|
|
44
51
|
def test_all
|
45
52
|
c1 = Category.create('tech')
|
46
53
|
c2 = Category.create('funny')
|
54
|
+
c3 = Category.create('finance')
|
47
55
|
|
48
56
|
a = Article.create('a1')
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
57
|
+
a2 = Article.create('a2')
|
58
|
+
a3 = Article.create('a2')
|
59
|
+
|
60
|
+
# Put the categories into seperate relations
|
61
|
+
|
62
|
+
a.first_join.push(c1, :hits =>3, :rate => 2.3)
|
63
|
+
a.second_join.push(c2, :rate => 1.2)
|
64
|
+
a.third_join << c1
|
65
|
+
a.fourth_join << c2
|
66
|
+
a2.third_join << c1
|
67
|
+
a3.fourth_join << c1
|
68
|
+
|
69
|
+
a.categories << c3
|
70
|
+
|
71
|
+
# ++ Join Through Tests
|
72
|
+
|
73
|
+
# Test that each relationship appears where it should
|
74
|
+
|
75
|
+
join = a.first_join_join_data(c1)
|
53
76
|
assert_equal 2.3, join.rate
|
54
77
|
assert_equal 3, join.hits
|
55
78
|
|
56
|
-
join = a.
|
79
|
+
join = a.second_join_join_data(c2)
|
57
80
|
assert_equal 1.2, join.rate
|
58
81
|
assert_equal nil, join.hits
|
82
|
+
|
83
|
+
# This feature should be available but I cannot think
|
84
|
+
# of the best way to implement it right now.
|
85
|
+
|
86
|
+
# Test that each relationship does not appears where
|
87
|
+
# it should not.
|
88
|
+
|
89
|
+
# join = a.second_join_join_data(c1)
|
90
|
+
# assert_nil(join)
|
91
|
+
|
92
|
+
# join = a.first_join_join_data(c2)
|
93
|
+
# assert_nil(join)
|
94
|
+
|
95
|
+
# join = a.first_join_join_data(c3)
|
96
|
+
# assert_nil(join)
|
97
|
+
|
98
|
+
# -- Join Through Tests
|
99
|
+
|
100
|
+
# ++ Tripple join table tests
|
101
|
+
|
102
|
+
# Test each relationship appears where it should
|
103
|
+
|
104
|
+
assert(a.third_join.include?(c1), "c1 does not appear in third join relationship")
|
105
|
+
assert(a.fourth_join.include?(c2), "c2 does not appear in fourth join relationship")
|
106
|
+
assert(a.categories.include?(c3), "c3 does not appear in categories (un-named) join relationship")
|
107
|
+
|
108
|
+
# Tests the same thing backwards
|
109
|
+
|
110
|
+
assert(c3.articles.include?(a), "article does not appear in c3 (reverse join broken)")
|
111
|
+
assert(c1.third_join.include?(a2), "a2 does not appear in c1.third_join (reverse join broken)")
|
112
|
+
assert(c1.fourth_join.include?(a3), "a3 does not appear in c1.fourth_join (reverse join broken)")
|
113
|
+
assert(!c1.third_join.include?(a3), "a3 appears in c1.third_join (reverse join broken)")
|
114
|
+
|
115
|
+
# Test that each relationship does not appears where
|
116
|
+
# it should not.
|
117
|
+
|
118
|
+
assert(!a.third_join.include?(c2), "c2 appears in third join relationship")
|
119
|
+
assert(!a.third_join.include?(c3), "c3 appears in third join relationship")
|
120
|
+
assert(!a.fourth_join.include?(c1), "c1 appears in fourth join relationship")
|
121
|
+
assert(!a.fourth_join.include?(c3), "c3 appears in fourth join relationship")
|
122
|
+
assert(!a.categories.include?(c1), "c1 appears in categories (un-named) join relationship")
|
123
|
+
assert(!a.categories.include?(c2), "c2 appears in categories (un-named) join relationship")
|
124
|
+
|
125
|
+
# -- Tripple join table tests
|
59
126
|
end
|
60
127
|
|
61
128
|
end
|
@@ -10,7 +10,7 @@ require 'og/validation'
|
|
10
10
|
class TC_MultiValidation < Test::Unit::TestCase # :nodoc: all
|
11
11
|
|
12
12
|
def test_all
|
13
|
-
file = File.join(File.
|
13
|
+
file = File.join(File.dirname(__FILE__), 'multi_validations_model.rb')
|
14
14
|
load file
|
15
15
|
assert_equal 2, TC_MultiValidation::User.validations.size
|
16
16
|
load file
|
metadata
CHANGED
@@ -3,13 +3,13 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: og
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2006-
|
6
|
+
version: 0.30.0
|
7
|
+
date: 2006-05-05 00:00:00 +03:00
|
8
8
|
summary: State of the art object-relational mapping system.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
11
11
|
email: gm@navel.gr
|
12
|
-
homepage: http://www.
|
12
|
+
homepage: http://www.nitroproject.org
|
13
13
|
rubyforge_project: nitro
|
14
14
|
description:
|
15
15
|
autorequire:
|
@@ -22,115 +22,115 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 0.0.0
|
24
24
|
version:
|
25
|
-
platform:
|
25
|
+
platform:
|
26
26
|
signing_key:
|
27
27
|
cert_chain:
|
28
28
|
authors:
|
29
29
|
- George Moschovitis
|
30
30
|
files:
|
31
|
+
- ProjectInfo
|
32
|
+
- INSTALL
|
33
|
+
- README
|
31
34
|
- doc
|
32
35
|
- examples
|
33
36
|
- lib
|
34
37
|
- test
|
35
|
-
- ProjectInfo
|
36
|
-
- Rakefile
|
37
|
-
- README
|
38
38
|
- setup.rb
|
39
|
-
- INSTALL
|
40
|
-
- doc/tutorial.txt
|
41
|
-
- doc/config.txt
|
42
|
-
- doc/RELEASES
|
43
|
-
- doc/LICENSE
|
44
39
|
- doc/CHANGELOG.1
|
45
40
|
- doc/AUTHORS
|
46
|
-
-
|
41
|
+
- doc/tutorial.txt
|
42
|
+
- doc/LICENSE
|
43
|
+
- doc/RELEASES
|
44
|
+
- doc/config.txt
|
47
45
|
- examples/README
|
46
|
+
- examples/run.rb
|
48
47
|
- examples/mysql_to_psql.rb
|
49
48
|
- lib/og
|
50
49
|
- lib/glue
|
51
50
|
- lib/og.rb
|
52
51
|
- lib/og/ez
|
52
|
+
- lib/og/collection.rb
|
53
|
+
- lib/og/entity.rb
|
54
|
+
- lib/og/errors.rb
|
55
|
+
- lib/og/evolution.rb
|
56
|
+
- lib/og/manager.rb
|
53
57
|
- lib/og/relation
|
54
58
|
- lib/og/store
|
59
|
+
- lib/og/relation.rb
|
55
60
|
- lib/og/test
|
61
|
+
- lib/og/store.rb
|
56
62
|
- lib/og/vendor
|
57
|
-
- lib/og/validation.rb
|
58
|
-
- lib/og/types.rb
|
59
63
|
- lib/og/test.rb
|
60
|
-
- lib/og/
|
61
|
-
- lib/og/relation.rb
|
62
|
-
- lib/og/manager.rb
|
63
|
-
- lib/og/evolution.rb
|
64
|
-
- lib/og/errors.rb
|
65
|
-
- lib/og/entity.rb
|
66
|
-
- lib/og/collection.rb
|
64
|
+
- lib/og/types.rb
|
67
65
|
- lib/og/markers.rb
|
66
|
+
- lib/og/validation.rb
|
68
67
|
- lib/og/ez/condition.rb
|
69
68
|
- lib/og/ez/clause.rb
|
69
|
+
- lib/og/relation/all.rb
|
70
70
|
- lib/og/relation/many_to_many.rb
|
71
|
-
- lib/og/relation/refers_to.rb
|
72
|
-
- lib/og/relation/joins_many.rb
|
73
|
-
- lib/og/relation/has_one.rb
|
74
|
-
- lib/og/relation/has_many.rb
|
75
71
|
- lib/og/relation/belongs_to.rb
|
76
|
-
- lib/og/relation/
|
72
|
+
- lib/og/relation/has_many.rb
|
73
|
+
- lib/og/relation/has_one.rb
|
74
|
+
- lib/og/relation/joins_many.rb
|
75
|
+
- lib/og/relation/refers_to.rb
|
77
76
|
- lib/og/store/alpha
|
78
|
-
- lib/og/store/sqlite.rb
|
79
|
-
- lib/og/store/sql.rb
|
80
|
-
- lib/og/store/psql.rb
|
81
|
-
- lib/og/store/mysql.rb
|
82
77
|
- lib/og/store/kirby.rb
|
78
|
+
- lib/og/store/mysql.rb
|
79
|
+
- lib/og/store/psql.rb
|
80
|
+
- lib/og/store/sql.rb
|
81
|
+
- lib/og/store/sqlite.rb
|
83
82
|
- lib/og/store/sqlite2.rb
|
84
83
|
- lib/og/store/alpha/sqlserver.rb
|
85
|
-
- lib/og/store/alpha/memory.rb
|
86
84
|
- lib/og/store/alpha/filesys.rb
|
87
|
-
- lib/og/
|
85
|
+
- lib/og/store/alpha/memory.rb
|
88
86
|
- lib/og/test/assertions.rb
|
87
|
+
- lib/og/test/testcase.rb
|
89
88
|
- lib/og/vendor/mysql.rb
|
90
89
|
- lib/og/vendor/README
|
91
|
-
- lib/glue/taggable.rb
|
92
|
-
- lib/glue/tree.rb
|
93
90
|
- lib/glue/hierarchical.rb
|
94
|
-
- lib/glue/timestamped.rb
|
95
|
-
- lib/glue/revisable.rb
|
96
91
|
- lib/glue/orderable.rb
|
97
92
|
- lib/glue/optimistic_locking.rb
|
93
|
+
- lib/glue/revisable.rb
|
94
|
+
- lib/glue/taggable.rb
|
95
|
+
- lib/glue/timestamped.rb
|
96
|
+
- lib/glue/tree.rb
|
98
97
|
- lib/glue/searchable.rb
|
99
98
|
- lib/glue/cacheable.rb
|
100
99
|
- test/og
|
101
100
|
- test/glue
|
102
101
|
- test/og/mixin
|
102
|
+
- test/og/CONFIG.rb
|
103
103
|
- test/og/store
|
104
104
|
- test/og/tc_delete_all.rb
|
105
|
-
- test/og/
|
106
|
-
- test/og/
|
107
|
-
- test/og/
|
108
|
-
- test/og/tc_reverse.rb
|
109
|
-
- test/og/tc_relation.rb
|
105
|
+
- test/og/tc_inheritance.rb
|
106
|
+
- test/og/tc_join.rb
|
107
|
+
- test/og/tc_multiple.rb
|
110
108
|
- test/og/tc_override.rb
|
111
109
|
- test/og/tc_polymorphic.rb
|
112
|
-
- test/og/
|
113
|
-
- test/og/
|
114
|
-
- test/og/
|
115
|
-
- test/og/
|
116
|
-
- test/og/
|
110
|
+
- test/og/tc_relation.rb
|
111
|
+
- test/og/tc_reverse.rb
|
112
|
+
- test/og/tc_select.rb
|
113
|
+
- test/og/tc_store.rb
|
114
|
+
- test/og/tc_types.rb
|
117
115
|
- test/og/tc_finder.rb
|
116
|
+
- test/og/tc_scoped.rb
|
118
117
|
- test/og/tc_validation.rb
|
119
118
|
- test/og/tc_accumulator.rb
|
120
119
|
- test/og/tc_inheritance2.rb
|
121
120
|
- test/og/tc_validation2.rb
|
122
|
-
- test/og/tc_validation_loop.rb
|
123
|
-
- test/og/tc_cacheable.rb
|
124
121
|
- test/og/tc_multi_validations.rb
|
122
|
+
- test/og/tc_cacheable.rb
|
123
|
+
- test/og/tc_validation_loop.rb
|
125
124
|
- test/og/tc_resolve.rb
|
126
125
|
- test/og/multi_validations_model.rb
|
127
126
|
- test/og/tc_ez.rb
|
128
127
|
- test/og/tc_aggregations_calculations.rb
|
129
|
-
- test/og/
|
130
|
-
- test/og/mixin/tc_taggable.rb
|
131
|
-
- test/og/mixin/tc_orderable.rb
|
128
|
+
- test/og/tc_camel_case_join.rb
|
132
129
|
- test/og/mixin/tc_hierarchical.rb
|
130
|
+
- test/og/mixin/tc_orderable.rb
|
133
131
|
- test/og/mixin/tc_optimistic_locking.rb
|
132
|
+
- test/og/mixin/tc_taggable.rb
|
133
|
+
- test/og/mixin/tc_timestamped.rb
|
134
134
|
- test/og/store/tc_filesys.rb
|
135
135
|
- test/og/store/tc_kirby.rb
|
136
136
|
- test/og/store/tc_sti.rb
|
@@ -155,5 +155,5 @@ dependencies:
|
|
155
155
|
requirements:
|
156
156
|
- - "="
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version: 0.
|
158
|
+
version: 0.30.0
|
159
159
|
version:
|