couch_view 0.0.2 → 0.0.3
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.
@@ -86,7 +86,17 @@ Feature: CouchView::Config
|
|
86
86
|
"reduce" => "_count"
|
87
87
|
}
|
88
88
|
}
|
89
|
+
|
89
90
|
|
91
|
+
Conditions are additive; the more you call conditions, the more conditions get added to it. If you attempt to add the same condition twice, it will silently ignore the second attempt:
|
92
|
+
|
93
|
+
config = CouchView::Config.new Article
|
94
|
+
config.conditions Published
|
95
|
+
config.conditions #==> [Published]
|
96
|
+
condig.conditions Visible
|
97
|
+
config.conditions #==> [Published, Visible]
|
98
|
+
config.conditions Published
|
99
|
+
config.conditions #==> [Published, Visible]
|
90
100
|
|
91
101
|
@db
|
92
102
|
Scenario: Generating a name based on the properties passed in to map over
|
@@ -224,7 +234,7 @@ Feature: CouchView::Config
|
|
224
234
|
"""
|
225
235
|
|
226
236
|
|
227
|
-
@db
|
237
|
+
@db
|
228
238
|
Scenario: Creating conditions by passing a block to the map
|
229
239
|
|
230
240
|
Given the following model:
|
@@ -347,7 +357,7 @@ Feature: CouchView::Config
|
|
347
357
|
"""
|
348
358
|
|
349
359
|
|
350
|
-
@db
|
360
|
+
@db
|
351
361
|
Scenario: Giving your view a custom base name
|
352
362
|
|
353
363
|
Given the following model:
|
@@ -394,3 +404,46 @@ Feature: CouchView::Config
|
|
394
404
|
"""
|
395
405
|
@config.view_names.sort.should == ["funny", "funny_published", "funny_published_visible", "funny_visible"]
|
396
406
|
"""
|
407
|
+
|
408
|
+
|
409
|
+
@db @focus
|
410
|
+
Scenario: Adding the same condition multiple times to a config will result in the condition only being added once
|
411
|
+
|
412
|
+
Given the following model:
|
413
|
+
"""
|
414
|
+
class Article < CouchRest::Model::Base
|
415
|
+
include CouchView
|
416
|
+
end
|
417
|
+
"""
|
418
|
+
|
419
|
+
And the following conditions:
|
420
|
+
"""
|
421
|
+
module Published
|
422
|
+
def conditions
|
423
|
+
"#{super} && doc.published == true"
|
424
|
+
end
|
425
|
+
end
|
426
|
+
|
427
|
+
module Visible
|
428
|
+
def conditions
|
429
|
+
"#{super} && doc.visible == true"
|
430
|
+
end
|
431
|
+
end
|
432
|
+
"""
|
433
|
+
|
434
|
+
When I create a CouchView::Config for my Article model:
|
435
|
+
"""
|
436
|
+
@config = CouchView::Config.new Article
|
437
|
+
"""
|
438
|
+
|
439
|
+
Then adding the same condition multiple times will result in the condition only being added once:
|
440
|
+
"""
|
441
|
+
@config.conditions Published
|
442
|
+
@config.conditions.should == [Published]
|
443
|
+
@config.conditions Visible
|
444
|
+
@config.conditions.should == [Published, Visible]
|
445
|
+
@config.conditions Published
|
446
|
+
@config.conditions.should == [Published, Visible]
|
447
|
+
@config.conditions Visible
|
448
|
+
@config.conditions.should == [Published, Visible]
|
449
|
+
"""
|
data/features/couch_view.feature
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
+
@db
|
1
2
|
Feature: CouchView
|
2
3
|
As a programmer
|
3
4
|
I want a `CouchView` mixin for my `CouchRest::Model::Base` models
|
4
5
|
So that I can define maps and reduces on my model
|
5
6
|
|
6
7
|
|
7
|
-
@db
|
8
8
|
Scenario: Define a map over a property
|
9
9
|
Given the following model definition:
|
10
10
|
"""
|
@@ -38,7 +38,6 @@ Feature: CouchView
|
|
38
38
|
"""
|
39
39
|
|
40
40
|
|
41
|
-
@db @focus
|
42
41
|
Scenario: Define a map on your model with conditions
|
43
42
|
Given the following conditions:
|
44
43
|
"""
|
@@ -94,7 +93,6 @@ Feature: CouchView
|
|
94
93
|
"""
|
95
94
|
|
96
95
|
|
97
|
-
@db
|
98
96
|
Scenario: Define a map on your model with the `map` class method
|
99
97
|
Given the following map definition:
|
100
98
|
"""
|
@@ -123,7 +121,6 @@ Feature: CouchView
|
|
123
121
|
"""
|
124
122
|
|
125
123
|
|
126
|
-
@db
|
127
124
|
Scenario: Retrieve a map proxy
|
128
125
|
|
129
126
|
Given the following map definition:
|
@@ -162,7 +159,6 @@ Feature: CouchView
|
|
162
159
|
"""
|
163
160
|
|
164
161
|
|
165
|
-
@db
|
166
162
|
Scenario: Generate a reduce proxy for counting the number of results in your query
|
167
163
|
|
168
164
|
Given the following map definition:
|
@@ -200,7 +196,7 @@ Feature: CouchView
|
|
200
196
|
@proxy.class.should be(CouchView::Count::Proxy)
|
201
197
|
"""
|
202
198
|
|
203
|
-
|
199
|
+
|
204
200
|
Scenario: Counting the number of rows in a reduce query
|
205
201
|
|
206
202
|
Given the following map definition:
|
@@ -228,7 +224,7 @@ Feature: CouchView
|
|
228
224
|
Article.count_by_id!.should == 4
|
229
225
|
"""
|
230
226
|
|
231
|
-
|
227
|
+
|
232
228
|
Scenario: Query a map on your model
|
233
229
|
|
234
230
|
Given the following map definition:
|
@@ -263,7 +259,6 @@ Feature: CouchView
|
|
263
259
|
"""
|
264
260
|
|
265
261
|
|
266
|
-
@db
|
267
262
|
Scenario: Defining a custom "reduce" on your view
|
268
263
|
|
269
264
|
Given a Article model:
|
@@ -306,7 +301,7 @@ Feature: CouchView
|
|
306
301
|
Article.reduce_by_label!['rows'].first['value'].should == -1
|
307
302
|
"""
|
308
303
|
|
309
|
-
|
304
|
+
|
310
305
|
Scenario: Giving your view a custom name
|
311
306
|
|
312
307
|
Given the following model:
|
@@ -357,3 +352,63 @@ Feature: CouchView
|
|
357
352
|
"""
|
358
353
|
Article.count_over_label!.should == 2
|
359
354
|
"""
|
355
|
+
|
356
|
+
|
357
|
+
@focus
|
358
|
+
Scenario: Chaining together multiple conditions by defining a map multiple times
|
359
|
+
|
360
|
+
Given the following model:
|
361
|
+
"""
|
362
|
+
class Article < CouchRest::Model::Base
|
363
|
+
include CouchView
|
364
|
+
end
|
365
|
+
"""
|
366
|
+
|
367
|
+
And the following conditions:
|
368
|
+
"""
|
369
|
+
module Published
|
370
|
+
def conditions
|
371
|
+
"#{super} && doc.published == true"
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
module Visible
|
376
|
+
def conditions
|
377
|
+
"#{super} && doc.visible == true"
|
378
|
+
end
|
379
|
+
end
|
380
|
+
"""
|
381
|
+
|
382
|
+
When I define a map over labels that includes a published condition:
|
383
|
+
"""
|
384
|
+
Article.map :label do
|
385
|
+
conditions Published
|
386
|
+
end
|
387
|
+
"""
|
388
|
+
|
389
|
+
Then Article should respond to "by_by_label_published":
|
390
|
+
"""
|
391
|
+
proc { Article.by_by_label_published }.should_not raise_exception
|
392
|
+
"""
|
393
|
+
|
394
|
+
When I update the map over label definition with a visible condition:
|
395
|
+
"""
|
396
|
+
Article.map :label do
|
397
|
+
conditions Visible
|
398
|
+
end
|
399
|
+
"""
|
400
|
+
|
401
|
+
Then Article should respond to "by_by_label_published":
|
402
|
+
"""
|
403
|
+
proc { Article.by_by_label_published }.should_not raise_exception
|
404
|
+
"""
|
405
|
+
|
406
|
+
Then Article should respond to "by_by_label_visible":
|
407
|
+
"""
|
408
|
+
proc { Article.by_by_label_visible }.should_not raise_exception
|
409
|
+
"""
|
410
|
+
|
411
|
+
Then Article should respond to "by_by_label_published_visible":
|
412
|
+
"""
|
413
|
+
proc { Article.by_by_label_published_visible }.should_not raise_exception
|
414
|
+
"""
|
@@ -85,3 +85,15 @@ end
|
|
85
85
|
Then /^".*" should return.*:$/ do |code|
|
86
86
|
eval code
|
87
87
|
end
|
88
|
+
|
89
|
+
When /^I define a map over labels that includes a published condition:$/ do |code|
|
90
|
+
eval code
|
91
|
+
end
|
92
|
+
|
93
|
+
Then /^Article should respond to ".*":$/ do |code|
|
94
|
+
eval code
|
95
|
+
end
|
96
|
+
|
97
|
+
When /^I update the map over label definition with a visible condition:$/ do |code|
|
98
|
+
eval code
|
99
|
+
end
|
data/lib/couch_view/config.rb
CHANGED
@@ -12,12 +12,19 @@ module CouchView
|
|
12
12
|
view_config = CouchView::Config.new self
|
13
13
|
view_config.instance_eval &block
|
14
14
|
view_config.base_view_name name if name
|
15
|
+
base_view_name = view_config.base_view_name
|
16
|
+
|
17
|
+
if view_configs[base_view_name]
|
18
|
+
view_config.conditions *view_configs[base_view_name].conditions
|
19
|
+
view_configs[base_view_name] = view_config
|
20
|
+
else
|
21
|
+
view_configs[base_view_name] = view_config
|
22
|
+
end
|
23
|
+
|
15
24
|
view_config.views.each do |view_name, view|
|
16
25
|
view_by view_name, :map => view[:map], :reduce => view[:reduce]
|
17
26
|
end
|
18
27
|
|
19
|
-
base_view_name = view_config.base_view_name
|
20
|
-
|
21
28
|
instance_eval <<-METHODS
|
22
29
|
def map_#{base_view_name}!
|
23
30
|
generate_view_proxy_for("#{base_view_name}").get!
|
@@ -57,5 +64,9 @@ module CouchView
|
|
57
64
|
def generate_view_proxy_for(view)
|
58
65
|
CouchView::Proxy.new self, "by_#{view}".to_sym
|
59
66
|
end
|
67
|
+
|
68
|
+
def view_configs
|
69
|
+
@view_configs ||= {}
|
70
|
+
end
|
60
71
|
end
|
61
72
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: couch_view
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matt Parker
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-08-
|
18
|
+
date: 2011-08-18 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: couchrest
|