og 0.24.0 → 0.25.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.
Files changed (51) hide show
  1. data/ProjectInfo +2 -5
  2. data/README +2 -0
  3. data/doc/AUTHORS +4 -1
  4. data/doc/RELEASES +53 -0
  5. data/examples/run.rb +2 -2
  6. data/lib/{og/mixin → glue}/hierarchical.rb +19 -19
  7. data/lib/{og/mixin → glue}/optimistic_locking.rb +1 -1
  8. data/lib/glue/orderable.rb +235 -0
  9. data/lib/glue/revisable.rb +2 -0
  10. data/lib/glue/taggable.rb +176 -0
  11. data/lib/{og/mixin/taggable.rb → glue/taggable_old.rb} +6 -0
  12. data/lib/glue/timestamped.rb +37 -0
  13. data/lib/{og/mixin → glue}/tree.rb +3 -8
  14. data/lib/og.rb +21 -20
  15. data/lib/og/collection.rb +15 -1
  16. data/lib/og/entity.rb +256 -114
  17. data/lib/og/manager.rb +60 -27
  18. data/lib/og/{mixin/schema_inheritance_base.rb → markers.rb} +5 -2
  19. data/lib/og/relation.rb +70 -74
  20. data/lib/og/relation/belongs_to.rb +5 -3
  21. data/lib/og/relation/has_many.rb +1 -0
  22. data/lib/og/relation/joins_many.rb +5 -4
  23. data/lib/og/store.rb +25 -46
  24. data/lib/og/store/alpha/filesys.rb +1 -1
  25. data/lib/og/store/alpha/kirby.rb +30 -30
  26. data/lib/og/store/alpha/memory.rb +49 -49
  27. data/lib/og/store/alpha/sqlserver.rb +7 -7
  28. data/lib/og/store/kirby.rb +38 -38
  29. data/lib/og/store/mysql.rb +43 -43
  30. data/lib/og/store/psql.rb +222 -53
  31. data/lib/og/store/sql.rb +165 -105
  32. data/lib/og/store/sqlite.rb +29 -25
  33. data/lib/og/validation.rb +24 -14
  34. data/lib/{vendor → og/vendor}/README +0 -0
  35. data/lib/{vendor → og/vendor}/kbserver.rb +1 -1
  36. data/lib/{vendor → og/vendor}/kirbybase.rb +230 -79
  37. data/lib/{vendor → og/vendor}/mysql.rb +0 -0
  38. data/lib/{vendor → og/vendor}/mysql411.rb +0 -0
  39. data/test/og/mixin/tc_hierarchical.rb +1 -1
  40. data/test/og/mixin/tc_optimistic_locking.rb +1 -1
  41. data/test/og/mixin/tc_orderable.rb +1 -1
  42. data/test/og/mixin/tc_taggable.rb +2 -2
  43. data/test/og/mixin/tc_timestamped.rb +2 -2
  44. data/test/og/tc_finder.rb +33 -0
  45. data/test/og/tc_inheritance.rb +2 -2
  46. data/test/og/tc_scoped.rb +45 -0
  47. data/test/og/tc_store.rb +1 -7
  48. metadata +21 -18
  49. data/lib/og/mixin/orderable.rb +0 -174
  50. data/lib/og/mixin/revisable.rb +0 -0
  51. data/lib/og/mixin/timestamped.rb +0 -24
File without changes
File without changes
@@ -4,7 +4,7 @@ require 'test/unit'
4
4
  require 'ostruct'
5
5
 
6
6
  require 'og'
7
- require 'og/mixin/hierarchical'
7
+ require 'glue/hierarchical'
8
8
 
9
9
  $og = Og.setup(
10
10
  :store => 'mysql',
@@ -3,7 +3,7 @@ require File.join(File.dirname(__FILE__), '..', 'CONFIG.rb')
3
3
  require 'test/unit'
4
4
 
5
5
  require 'og'
6
- require 'og/mixin/optimistic_locking'
6
+ require 'glue/optimistic_locking'
7
7
 
8
8
  $og = Og.setup(
9
9
  :store => 'psql',
@@ -4,7 +4,7 @@ require 'test/unit'
4
4
  require 'ostruct'
5
5
 
6
6
  require 'og'
7
- require 'og/mixin/orderable'
7
+ require 'glue/orderable'
8
8
 
9
9
  class Playlist
10
10
  prop :name, String
@@ -4,11 +4,11 @@ require 'test/unit'
4
4
  require 'ostruct'
5
5
 
6
6
  require 'og'
7
- require 'og/mixin/taggable'
7
+ require 'glue/taggable'
8
8
 
9
9
  class Article
10
10
  property :title, :body, String
11
- include Og::Taggable
11
+ is Taggable
12
12
 
13
13
  def initialize(title = nil)
14
14
  @title = title
@@ -4,7 +4,7 @@ require 'test/unit'
4
4
  require 'ostruct'
5
5
 
6
6
  require 'og'
7
- require 'og/mixin/timestamped'
7
+ require 'glue/timestamped'
8
8
 
9
9
  $og = Og.setup(
10
10
  :store => 'psql',
@@ -17,7 +17,7 @@ $og = Og.setup(
17
17
  class TestCaseOgTimestamped < Test::Unit::TestCase # :nodoc: all
18
18
 
19
19
  class Article
20
- include Og::Timestamped
20
+ is Timestamped
21
21
  property :body, String
22
22
 
23
23
  def initialize(body = nil)
@@ -0,0 +1,33 @@
1
+ require File.join(File.dirname(__FILE__), 'CONFIG.rb')
2
+
3
+ $DBG = true
4
+
5
+ require 'test/unit'
6
+
7
+ require 'og'
8
+
9
+ class TC_OgFinder < Test::Unit::TestCase # :nodoc: all
10
+
11
+ class User
12
+ property :name, String
13
+ property :age, Fixnum
14
+ end
15
+
16
+ def setup
17
+ @og = Og.setup($og_config)
18
+ end
19
+
20
+ def test_all
21
+ User.find_by_name('tml')
22
+ User.find_by_name_and_age('tml', 3)
23
+ User.find_all_by_name_and_age('tml', 3)
24
+ User.find_all_by_name_and_age('tml', 3, :name_op => 'LIKE', :age_op => '>', :limit => 4)
25
+
26
+ User.find_or_create_by_name_and_age('tml', 3)
27
+ User.find_or_create_by_name_and_age('stella', 5)
28
+ User.find_or_create_by_name_and_age('tml', 3)
29
+
30
+ assert_equal 2, User.all.size
31
+ end
32
+
33
+ end
@@ -56,11 +56,11 @@ class TC_OgInheritance < Test::Unit::TestCase # :nodoc: all
56
56
  assert_equal Document, Photo.superclass
57
57
  assert_equal [Photo, Article], Document.descendents
58
58
 
59
- assert Document.ann.this.schema_inheritance
59
+ assert Document.ann.self.schema_inheritance
60
60
 
61
61
  # propagate schema_inheritance flag.
62
62
 
63
- assert Photo.ann.this.schema_inheritance
63
+ assert Photo.ann.self.schema_inheritance
64
64
 
65
65
  # subclasses reuse the same table.
66
66
 
@@ -0,0 +1,45 @@
1
+ require File.join(File.dirname(__FILE__), 'CONFIG.rb')
2
+
3
+ $DBG = true
4
+
5
+ require 'test/unit'
6
+
7
+ require 'og'
8
+
9
+ class TC_OgScoped < Test::Unit::TestCase # :nodoc: all
10
+
11
+ class User
12
+ property :name, String
13
+ has_many :articles
14
+
15
+ def initialize(name = nil)
16
+ @name = name
17
+ end
18
+ end
19
+
20
+ class Article
21
+ property :hits, Fixnum
22
+ belongs_to :user
23
+
24
+ def initialize(hits = nil)
25
+ @hits = hits
26
+ end
27
+ end
28
+
29
+ def setup
30
+ @og = Og.setup($og_config)
31
+ end
32
+
33
+ def test_all
34
+ u = User.create('tml')
35
+ a1 = Article.create(10)
36
+ a2 = Article.create(20)
37
+ u.articles << a1
38
+ u.articles << a2
39
+
40
+ assert_equal 2, u.articles.size
41
+ assert_equal 1, u.articles.find(:condition => 'hits > 15').size
42
+ assert_equal 20, u.articles.find(:condition => 'hits > 15').first.hits
43
+ end
44
+
45
+ end
@@ -236,11 +236,6 @@ class TCOgStore < Test::Unit::TestCase # :nodoc: all
236
236
 
237
237
  assert_equal 'gmosx', a4.owner.name
238
238
 
239
- # generated finders
240
-
241
- assert User.respond_to?(:find_by_name)
242
- assert Comment.respond_to?(:find_by_body)
243
-
244
239
  u = User.find_by_name('gmosx')
245
240
  assert_equal 'gmosx', u.name
246
241
 
@@ -263,14 +258,13 @@ class TCOgStore < Test::Unit::TestCase # :nodoc: all
263
258
 
264
259
  assert_equal 2, a.categories.size
265
260
 
266
- a = Article.find_by_body('Hello').first
261
+ a = Article.find_by_body('Hello')
267
262
  assert_equal 2, a.categories.size
268
263
  assert_equal 'News', a.categories[0].title
269
264
 
270
265
  c = Category.find_by_title('News')
271
266
  assert_equal 1, c.articles.size
272
267
 
273
-
274
268
  # bug: extended class and many_to_many.
275
269
 
276
270
  na = NewArticle.create('Bug')
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.10
3
3
  specification_version: 1
4
4
  name: og
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.24.0
7
- date: 2005-10-28
6
+ version: 0.25.0
7
+ date: 2005-11-17
8
8
  summary: State of the art object-relational mapping system.
9
9
  require_paths:
10
10
  - lib
@@ -51,15 +51,23 @@ files:
51
51
  - examples/mysql_to_psql.rb
52
52
  - examples/README
53
53
  - examples/run.rb
54
+ - lib/glue
54
55
  - lib/og
55
56
  - lib/og.rb
56
- - lib/vendor
57
+ - lib/glue/hierarchical.rb
58
+ - lib/glue/optimistic_locking.rb
59
+ - lib/glue/orderable.rb
60
+ - lib/glue/revisable.rb
61
+ - lib/glue/taggable.rb
62
+ - lib/glue/taggable_old.rb
63
+ - lib/glue/timestamped.rb
64
+ - lib/glue/tree.rb
57
65
  - lib/og/collection.rb
58
66
  - lib/og/entity.rb
59
67
  - lib/og/errors.rb
60
68
  - lib/og/evolution.rb
61
69
  - lib/og/manager.rb
62
- - lib/og/mixin
70
+ - lib/og/markers.rb
63
71
  - lib/og/relation
64
72
  - lib/og/relation.rb
65
73
  - lib/og/store
@@ -68,14 +76,7 @@ files:
68
76
  - lib/og/test.rb
69
77
  - lib/og/types.rb
70
78
  - lib/og/validation.rb
71
- - lib/og/mixin/hierarchical.rb
72
- - lib/og/mixin/optimistic_locking.rb
73
- - lib/og/mixin/orderable.rb
74
- - lib/og/mixin/revisable.rb
75
- - lib/og/mixin/schema_inheritance_base.rb
76
- - lib/og/mixin/taggable.rb
77
- - lib/og/mixin/timestamped.rb
78
- - lib/og/mixin/tree.rb
79
+ - lib/og/vendor
79
80
  - lib/og/relation/all.rb
80
81
  - lib/og/relation/belongs_to.rb
81
82
  - lib/og/relation/has_many.rb
@@ -95,16 +96,17 @@ files:
95
96
  - lib/og/store/alpha/sqlserver.rb
96
97
  - lib/og/test/assertions.rb
97
98
  - lib/og/test/testcase.rb
98
- - lib/vendor/kbserver.rb
99
- - lib/vendor/kirbybase.rb
100
- - lib/vendor/mysql.rb
101
- - lib/vendor/mysql411.rb
102
- - lib/vendor/README
99
+ - lib/og/vendor/kbserver.rb
100
+ - lib/og/vendor/kirbybase.rb
101
+ - lib/og/vendor/mysql.rb
102
+ - lib/og/vendor/mysql411.rb
103
+ - lib/og/vendor/README
103
104
  - test/og
104
105
  - test/og/CONFIG.rb
105
106
  - test/og/mixin
106
107
  - test/og/store
107
108
  - test/og/tc_delete_all.rb
109
+ - test/og/tc_finder.rb
108
110
  - test/og/tc_inheritance.rb
109
111
  - test/og/tc_join.rb
110
112
  - test/og/tc_multiple.rb
@@ -112,6 +114,7 @@ files:
112
114
  - test/og/tc_polymorphic.rb
113
115
  - test/og/tc_relation.rb
114
116
  - test/og/tc_reverse.rb
117
+ - test/og/tc_scoped.rb
115
118
  - test/og/tc_select.rb
116
119
  - test/og/tc_store.rb
117
120
  - test/og/tc_types.rb
@@ -136,5 +139,5 @@ dependencies:
136
139
  -
137
140
  - "="
138
141
  - !ruby/object:Gem::Version
139
- version: 0.24.0
142
+ version: 0.25.0
140
143
  version:
@@ -1,174 +0,0 @@
1
- require 'mega/dynamod'
2
-
3
- module Og
4
-
5
- # Attach list/ordering methods to the enchanted class.
6
-
7
- module Orderable
8
-
9
- def self.append_dynamic_features(base, options)
10
- o = {
11
- :position => 'position',
12
- :type => Fixnum,
13
- }
14
- o.update(options) if options
15
-
16
- if o[:scope].is_a?(Symbol) && o[:scope].to_s !~ /_oid$/
17
- o[:scope] = "#{o[:scope]}_oid".intern
18
- end
19
-
20
- position = o[:position]
21
- scope = o[:scope]
22
-
23
- if scope
24
- if scope.is_a?(Symbol)
25
- scope = %{(#{scope} ? "#{scope} = \#{@#{scope}}" : "#{scope} IS NULL")}
26
- end
27
-
28
- cond = ':condition => ' + scope
29
- cond_and = ':condition => ' + scope + ' + " AND " +'
30
- else
31
- cond = ':condition => nil'
32
- cond_and = ':condition => '
33
- end
34
-
35
- code = %{
36
- property :#{position}, #{o[:type]}
37
-
38
- pre "add_to_bottom", :on => :og_insert
39
- pre "decrement_position_of_lower_items", :on => :og_delete
40
-
41
- def move_higher
42
- if higher = higher_item
43
- #{base}.transaction do
44
- higher.increment_position
45
- decrement_position
46
- end
47
- end
48
- end
49
-
50
- def move_lower
51
- if lower = lower_item
52
- #{base}.transaction do
53
- lower.decrement_position
54
- increment_position
55
- end
56
- end
57
- end
58
-
59
- def move_to_top
60
- #{base}.transaction do
61
- increment_position_of_higher_items
62
- set_top_position
63
- end
64
- end
65
-
66
- def move_to_bottom
67
- #{base}.transaction do
68
- decrement_position_of_lower_items
69
- set_bottom_position
70
- end
71
- end
72
-
73
- def move_to(dest_position)
74
- return if @#{position} == dest_position
75
-
76
- #{base}.transaction do
77
- if @#{position} < dest_position
78
- #{base}.update("#{position}=(#{position} - 1)", #{cond_and}"#{position} > \#\{@#{position}\} AND #{position} <= \#\{dest_position\}")
79
- else
80
- #{base}.update("#{position}=(#{position} + 1)", #{cond_and}"#{position} >= \#\{dest_position\} AND #{position} < \#\{@#{position}\} ")
81
- end
82
- @#{position} = dest_position
83
- update_property(:#{position})
84
- end
85
-
86
- self
87
- end
88
-
89
- def add_to_top
90
- increment_position_of_all_items
91
- end
92
-
93
- def add_to_bottom
94
- @#{position} = bottom_position + 1
95
- end
96
-
97
- def add_to
98
- end
99
-
100
- def higher_item
101
- #{base}.one(#{cond_and}"#{position}=\#\{@#{position} - 1\}")
102
- end
103
- alias_method :previous_item, :higher_item
104
-
105
- def lower_item
106
- #{base}.one(#{cond_and}"#{position}=\#\{@#{position} + 1\}")
107
- end
108
- alias_method :next_item, :lower_item
109
-
110
- def top_item
111
- end
112
- alias_method :first_item, :top_item
113
-
114
- def bottom_item
115
- #{base}.one(#{cond}, :order => "#{position} DESC", :limit => 1)
116
- end
117
- alias_method :last_item, :last_item
118
-
119
- def top?
120
- @#{position} == 1
121
- end
122
- alias_method :first?, :top?
123
-
124
- def bottom?
125
- @#{position} == bottom_position
126
- end
127
- alias_method :last?, :bottom?
128
-
129
- def increment_position
130
- @#{position} += 1
131
- update_property(:#{position})
132
- end
133
-
134
- def decrement_position
135
- @#{position} -= 1
136
- update_property(:#{position})
137
- end
138
-
139
- def bottom_position
140
- item = bottom_item
141
- item ? item.#{position} : 0
142
- end
143
-
144
- def set_top_position
145
- @#{position} = 1
146
- update_property(:#{position})
147
- end
148
-
149
- def set_bottom_position
150
- @#{position} = bottom_position + 1
151
- update_property(:#{position})
152
- end
153
-
154
- def increment_position_of_higher_items
155
- #{base}.update("#{position}=(#{position} + 1)", #{cond_and}"#{position} < \#\{@#{position}\}")
156
- end
157
-
158
- def increment_position_of_all_items
159
- #{base}.update("#{position}=(#{position} + 1)", #{cond})
160
- end
161
-
162
- def decrement_position_of_lower_items
163
- #{base}.update("#{position}=(#{position} - 1)", #{cond_and}"#{position} > \#\{@#{position}\}")
164
- end
165
- }
166
-
167
- base.module_eval(code)
168
- end
169
-
170
- end
171
-
172
- end
173
-
174
- # * George Moschovitis <gm@navel.gr>