paulcarey-relaxdb 0.2.8 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/spec/spec_models.rb CHANGED
@@ -1,151 +1,196 @@
1
- #
2
- # RSpec loads this file multiple times, thus breaking invocations like Document.has_one_rels
3
- # The following clause ensures the tests pass, but perhaps Document should raise a warning
4
- # if it's loaded more than once...
5
- #
6
- unless @spec_models_loaded
7
-
8
- class Atom < RelaxDB::Document
9
- end
1
+ class Atom < RelaxDB::Document
2
+ end
10
3
 
11
- class Initiative < RelaxDB::Document
12
- property :x
13
- attr_reader :foo
14
- def initialize(data)
15
- data[:_id] = data[:x]
16
- super data
17
- @foo = :bar
18
- end
4
+ class Initiative < RelaxDB::Document
5
+ property :x
6
+ attr_reader :foo
7
+ def initialize(data)
8
+ data[:_id] = data[:x]
9
+ super data
10
+ @foo = :bar
19
11
  end
12
+ end
20
13
 
21
- class Primitives < RelaxDB::Document
22
-
23
- property :str
24
- property :num
25
- property :true_bool
26
- property :false_bool
27
- property :created_at
28
- property :empty
14
+ class Primitives < RelaxDB::Document
15
+
16
+ property :str
17
+ property :num
18
+ property :true_bool
19
+ property :false_bool
20
+ property :created_at
21
+ property :empty
29
22
 
30
- end
23
+ view_by :num
31
24
 
32
- class BespokeReader < RelaxDB::Document
33
- property :val
34
- def val; @val + 5; end
35
- end
25
+ end
36
26
 
37
- class BespokeWriter < RelaxDB::Document
38
- property :val
39
- def val=(v); @val = v - 10; end
40
- end
27
+ class PrimitivesChild < Primitives
28
+ end
41
29
 
42
- class Letter < RelaxDB::Document
43
-
44
- property :letter
45
- property :number
46
-
47
- end
30
+ class BespokeReader < RelaxDB::Document
31
+ property :val
32
+ def val; @val + 5; end
33
+ end
48
34
 
49
- class Invite < RelaxDB::Document
50
-
51
- property :message
52
-
53
- belongs_to :sender
54
- belongs_to :recipient
55
-
56
- end
35
+ class BespokeWriter < RelaxDB::Document
36
+ property :val
37
+ def val=(v); @val = v - 10; end
38
+ end
57
39
 
58
- class Item < RelaxDB::Document
59
-
60
- property :name
61
- belongs_to :user
62
-
63
- end
40
+ class Invite < RelaxDB::Document
64
41
 
65
- class User < RelaxDB::Document
66
-
67
- property :name, :default => "u"
68
- property :age
69
-
70
- has_many :items, :class => "Item"
71
-
72
- has_many :invites_received, :class => "Invite", :known_as => :recipient
73
- has_many :invites_sent, :class => "Invite", :known_as => :sender
74
-
75
- end
42
+ property :message
76
43
 
77
- class Post < RelaxDB::Document
44
+ belongs_to :sender
45
+ belongs_to :recipient
78
46
 
79
- property :subject
80
- property :content
81
- property :created_at
82
- property :viewed_at
47
+ end
48
+
49
+ class Item < RelaxDB::Document
50
+
51
+ property :name
52
+ belongs_to :user
83
53
 
84
- end
54
+ view_by :user_id
85
55
 
86
- class Rating < RelaxDB::Document
56
+ end
87
57
 
88
- property :stars, :default => 5
89
- belongs_to :photo
58
+ class User < RelaxDB::Document
90
59
 
91
- end
60
+ property :name, :default => "u"
61
+ property :age
92
62
 
93
- class Photo < RelaxDB::Document
94
-
95
- property :name
96
-
97
- has_one :rating
98
-
99
- references_many :tags, :class => "Tag", :known_as => :photos
63
+ has_many :items, :class => "Item"
64
+
65
+ has_many :invites_received, :class => "Invite", :known_as => :recipient
66
+ has_many :invites_sent, :class => "Invite", :known_as => :sender
100
67
 
101
- has_many :taggings, :class => "Tagging"
68
+ view_by :name, :age
102
69
 
103
- end
70
+ end
104
71
 
105
- class Tag < RelaxDB::Document
106
-
107
- property :name
108
- references_many :photos, :class => "Photo", :known_as => :tags
72
+ class Post < RelaxDB::Document
73
+
74
+ property :subject
75
+ property :content
76
+ property :created_at
77
+ property :viewed_at
109
78
 
110
- has_many :taggings, :class => "Tagging"
79
+ view_by :content
80
+ view_by :subject
81
+ view_by :viewed_at
82
+
83
+ end
84
+
85
+ class Rating < RelaxDB::Document
86
+
87
+ property :stars, :default => 5
88
+ belongs_to :photo
111
89
 
112
- end
90
+ view_by :stars
113
91
 
114
- class Tagging < RelaxDB::Document
92
+ end
115
93
 
116
- belongs_to :photo
117
- belongs_to :tag
118
- property :relevance
94
+ class Photo < RelaxDB::Document
119
95
 
120
- end
96
+ property :name
121
97
 
122
- class MultiWordClass < RelaxDB::Document
123
- has_one :multi_word_child
124
- has_many :multi_word_children, :class => "MultiWordChild"
125
- end
98
+ has_one :rating
126
99
 
127
- class MultiWordChild < RelaxDB::Document
128
- belongs_to :multi_word_class
129
- end
100
+ references_many :tags, :class => "Tag", :known_as => :photos
130
101
 
131
- class TwitterUser < RelaxDB::Document
132
-
133
- property :name
134
- references_many :followers, :class => "User", :known_as => :leaders
135
- references_many :leaders, :class => "User", :known_as => :followers
136
-
137
- end
102
+ has_many :taggings, :class => "Tagging"
138
103
 
139
- class Dysfunctional < RelaxDB::Document
140
- has_one :failure
141
- has_many :failures, :class => "Failure"
142
- end
104
+ end
143
105
 
144
- class Failure < RelaxDB::Document
145
- property :pathological, :validator => lambda { false }
146
- belongs_to :dysfunctional
147
- end
106
+ class Tag < RelaxDB::Document
107
+
108
+ property :name
109
+ references_many :photos, :class => "Photo", :known_as => :tags
110
+
111
+ has_many :taggings, :class => "Tagging"
112
+
113
+ end
114
+
115
+ class Tagging < RelaxDB::Document
116
+
117
+ belongs_to :photo
118
+ belongs_to :tag
119
+ property :relevance
120
+
121
+ end
122
+
123
+ class MultiWordClass < RelaxDB::Document
124
+ has_one :multi_word_child
125
+ has_many :multi_word_children, :class => "MultiWordChild"
126
+ end
127
+
128
+ class MultiWordChild < RelaxDB::Document
129
+ belongs_to :multi_word_class
130
+ end
131
+
132
+ class TwitterUser < RelaxDB::Document
133
+
134
+ property :name
135
+ references_many :followers, :class => "User", :known_as => :leaders
136
+ references_many :leaders, :class => "User", :known_as => :followers
148
137
 
149
- @spec_models_loaded = true
138
+ end
139
+
140
+ class Dysfunctional < RelaxDB::Document
141
+ has_one :failure
142
+ has_many :failures, :class => "Failure"
143
+ end
144
+
145
+ class Failure < RelaxDB::Document
146
+ property :pathological, :validator => lambda { false }
147
+ belongs_to :dysfunctional
148
+ end
149
+
150
+ class Letter < RelaxDB::Document
151
+ property :letter
152
+ property :number
153
+ view_by :letter, :number
154
+ view_by :number
155
+ end
156
+
157
+ class Ancestor < RelaxDB::Document
158
+
159
+ property :x
160
+ property :y, :default => true,
161
+ :validator => lambda { |y| y },
162
+ :validation_msg => "Uh oh"
163
+
164
+ references :user
165
+ property :user_name,
166
+ :derived => [:user, lambda { |p, o| o.user.name } ]
167
+
168
+ view_by :x
169
+ end
150
170
 
171
+ class Descendant < Ancestor
172
+ end
173
+
174
+ class SubDescendant < Descendant
175
+ end
176
+
177
+ class RichDescendant < Descendant
178
+ property :foo
179
+
180
+ references :ukulele
181
+ property :ukulele_name,
182
+ :derived => [:ukulele, lambda { |p, o| o.user.name } ]
183
+ end
184
+
185
+ module Inh
186
+
187
+ class X < RelaxDB::Document; end
188
+
189
+ class Y < X; end
190
+ class Y1 < Y; end
191
+
192
+ class Z < X; end
193
+ class Z1 < Z; end
194
+ class Z2 < Z; end
195
+
151
196
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paulcarey-relaxdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Carey
@@ -9,11 +9,12 @@ autorequire: relaxdb
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-02 00:00:00 -08:00
12
+ date: 2009-03-31 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: extlib
17
+ type: :runtime
17
18
  version_requirement:
18
19
  version_requirements: !ruby/object:Gem::Requirement
19
20
  requirements:
@@ -23,6 +24,7 @@ dependencies:
23
24
  version:
24
25
  - !ruby/object:Gem::Dependency
25
26
  name: json
27
+ type: :runtime
26
28
  version_requirement:
27
29
  version_requirements: !ruby/object:Gem::Requirement
28
30
  requirements:
@@ -32,6 +34,7 @@ dependencies:
32
34
  version:
33
35
  - !ruby/object:Gem::Dependency
34
36
  name: uuid
37
+ type: :runtime
35
38
  version_requirement:
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
@@ -50,6 +53,7 @@ extra_rdoc_files: []
50
53
  files:
51
54
  - LICENSE
52
55
  - README.textile
56
+ - readme.rb
53
57
  - Rakefile
54
58
  - docs/spec_results.html
55
59
  - lib/relaxdb
@@ -66,7 +70,6 @@ files:
66
70
  - lib/relaxdb/references_many_proxy.rb
67
71
  - lib/relaxdb/relaxdb.rb
68
72
  - lib/relaxdb/server.rb
69
- - lib/relaxdb/sorted_by_view.rb
70
73
  - lib/relaxdb/uuid_generator.rb
71
74
  - lib/relaxdb/validators.rb
72
75
  - lib/relaxdb/view_object.rb
@@ -75,6 +78,7 @@ files:
75
78
  - lib/relaxdb/views.rb
76
79
  - lib/more/grapher.rb
77
80
  - lib/relaxdb.rb
81
+ - lib/more/atomic_bulk_save_support.rb
78
82
  - spec/belongs_to_spec.rb
79
83
  - spec/callbacks_spec.rb
80
84
  - spec/design_doc_spec.rb
@@ -1,65 +0,0 @@
1
- module RelaxDB
2
-
3
- # Represents a CouchDB view, which is implicitly sorted by key
4
- # The view name is determined by sort attributes
5
- class SortedByView
6
-
7
- def initialize(class_name, *atts)
8
- @class_name = class_name
9
- @atts = atts
10
- end
11
-
12
- def map_function
13
- key = @atts.map { |a| "doc.#{a}" }.join(", ")
14
- key = @atts.size > 1 ? key.sub(/^/, "[").sub(/$/, "]") : key
15
-
16
- <<-QUERY
17
- function(doc) {
18
- if(doc.class == "#{@class_name}") {
19
- emit(#{key}, doc);
20
- }
21
- }
22
- QUERY
23
- end
24
-
25
- def reduce_function
26
- <<-QUERY
27
- function(keys, values, rereduce) {
28
- if (rereduce) {
29
- return sum(values);
30
- } else {
31
- return values.length;
32
- }
33
- }
34
- QUERY
35
- end
36
-
37
- def view_name
38
- "all_sorted_by_" << @atts.join("_and_")
39
- end
40
-
41
- def query(query)
42
- # If a view contains both a map and reduce function, CouchDB will by default return
43
- # the result of the reduce function when queried.
44
- # This class automatically creates both map and reduce functions so it can be used by the paginator.
45
- # In normal usage, this class will be used with map functions, hence reduce is explicitly set
46
- # to false if it hasn't already been set.
47
- query.reduce(false) if query.reduce.nil?
48
-
49
- method = query.keys ? :post : :get
50
-
51
- begin
52
- resp = RelaxDB.db.send(method, query.view_path, query.keys)
53
- rescue => e
54
- design_doc = DesignDocument.get(@class_name)
55
- design_doc.add_map_view(view_name, map_function).add_reduce_view(view_name, reduce_function).save
56
- resp = RelaxDB.db.send(method, query.view_path, query.keys)
57
- end
58
-
59
- data = JSON.parse(resp.body)
60
- ViewResult.new(data)
61
- end
62
-
63
- end
64
-
65
- end