og 0.29.0 → 0.30.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.
- 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:
|