gom-couchdb-adapter 0.4.5 → 0.5.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/lib/gom/storage/couchdb/adapter.rb +1 -1
- data/lib/gom/storage/couchdb/view.rb +1 -0
- data/lib/gom/storage/couchdb/view/builder_for_all.rb +16 -0
- data/lib/gom/storage/couchdb/view/pusher.rb +7 -0
- data/spec/lib/gom/storage/couchdb/view/builder_for_all_spec.rb +22 -0
- data/spec/lib/gom/storage/couchdb/view/pusher_spec.rb +19 -0
- data/spec/storage_configuration.rb +4 -0
- metadata +16 -15
@@ -37,7 +37,7 @@ class GOM::Storage::CouchDB::Adapter < GOM::Storage::Adapter
|
|
37
37
|
|
38
38
|
def collection(name, options = { })
|
39
39
|
view = @design.views[name.to_s]
|
40
|
-
raise ViewNotFoundError, "there
|
40
|
+
raise ViewNotFoundError, "there is no view with the name #{name}" unless view
|
41
41
|
fetcher = GOM::Storage::CouchDB::Collection::Fetcher.new view, revisions, options
|
42
42
|
GOM::Object::Collection.new fetcher, configuration.name
|
43
43
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
|
2
2
|
module GOM::Storage::CouchDB::View
|
3
3
|
|
4
|
+
autoload :BuilderForAll, File.join(File.dirname(__FILE__), "view", "builder_for_all")
|
4
5
|
autoload :BuilderFromClass, File.join(File.dirname(__FILE__), "view", "builder_from_class")
|
5
6
|
autoload :BuilderFromProperty, File.join(File.dirname(__FILE__), "view", "builder_from_property")
|
6
7
|
autoload :Pusher, File.join(File.dirname(__FILE__), "view", "pusher")
|
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
# Builds a javascript map-reduce-view for all objects.
|
3
|
+
class GOM::Storage::CouchDB::View::BuilderForAll
|
4
|
+
|
5
|
+
def initialize(all_view)
|
6
|
+
@all_view = all_view
|
7
|
+
end
|
8
|
+
|
9
|
+
def map_reduce_view
|
10
|
+
GOM::Storage::Configuration::View::MapReduce.new(
|
11
|
+
"function(document) {\n if (document['model_class']) {\n emit(document['_id'], null);\n }\n}",
|
12
|
+
nil
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -33,6 +33,8 @@ class GOM::Storage::CouchDB::View::Pusher
|
|
33
33
|
|
34
34
|
def add_view(name, view)
|
35
35
|
case view.class.to_s
|
36
|
+
when "GOM::Storage::Configuration::View::All"
|
37
|
+
add_view_by_all_view name, view
|
36
38
|
when "GOM::Storage::Configuration::View::Property"
|
37
39
|
add_view_by_property_view name, view
|
38
40
|
when "GOM::Storage::Configuration::View::Class"
|
@@ -42,6 +44,11 @@ class GOM::Storage::CouchDB::View::Pusher
|
|
42
44
|
end
|
43
45
|
end
|
44
46
|
|
47
|
+
def add_view_by_all_view(name, all_view)
|
48
|
+
map_reduce_view = GOM::Storage::CouchDB::View::BuilderForAll.new(all_view).map_reduce_view
|
49
|
+
@design.views << ::CouchDB::Design::View.new(@design, name, map_reduce_view.map, map_reduce_view.reduce)
|
50
|
+
end
|
51
|
+
|
45
52
|
def add_view_by_property_view(name, property_view)
|
46
53
|
map_reduce_view = GOM::Storage::CouchDB::View::BuilderFromProperty.new(property_view).map_reduce_view
|
47
54
|
@design.views << ::CouchDB::Design::View.new(@design, name, map_reduce_view.map, map_reduce_view.reduce)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe GOM::Storage::CouchDB::View::BuilderForAll do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@all_view = mock GOM::Storage::Configuration::View::All
|
7
|
+
|
8
|
+
@builder = described_class.new @class_all
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "map_reduce_view" do
|
12
|
+
|
13
|
+
it "should return a map reduce view that emits all the documents with a model_class attribute" do
|
14
|
+
view = @builder.map_reduce_view
|
15
|
+
view.should be_instance_of(GOM::Storage::Configuration::View::MapReduce)
|
16
|
+
view.map.should == "function(document) {\n if (document['model_class']) {\n emit(document['_id'], null);\n }\n}"
|
17
|
+
view.reduce.should be_nil
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -5,10 +5,12 @@ describe GOM::Storage::CouchDB::View::Pusher do
|
|
5
5
|
before :each do
|
6
6
|
@database = mock CouchDB::Database
|
7
7
|
|
8
|
+
@all_view_configuration = GOM::Storage::Configuration::View::All.new
|
8
9
|
@property_view_configuration = GOM::Storage::Configuration::View::Property.new :filter, :properties
|
9
10
|
@class_view_configuration = GOM::Storage::Configuration::View::Class.new "Object"
|
10
11
|
@map_reduce_view_configuration = GOM::Storage::Configuration::View::MapReduce.new "function(document) { }", "function(key, values) { }"
|
11
12
|
@view_hash = {
|
13
|
+
"test_all_view" => @all_view_configuration,
|
12
14
|
"test_property_view" => @property_view_configuration,
|
13
15
|
"test_class_view" => @class_view_configuration,
|
14
16
|
"test_map_reduce_view" => @map_reduce_view_configuration
|
@@ -23,17 +25,24 @@ describe GOM::Storage::CouchDB::View::Pusher do
|
|
23
25
|
@design = mock CouchDB::Design, :views => mock(CouchDB::Design::ViewsProxy, :<< => nil), :fetch_rev => nil, :save => true
|
24
26
|
CouchDB::Design.stub :new => @design
|
25
27
|
|
28
|
+
@all_view = mock CouchDB::Design::View
|
26
29
|
@property_view = mock CouchDB::Design::View
|
27
30
|
@class_view = mock CouchDB::Design::View
|
28
31
|
@map_reduce_view = mock CouchDB::Design::View
|
29
32
|
CouchDB::Design::View.stub :new do |design, name, map_function, reduce_function|
|
30
33
|
{
|
34
|
+
"test_all_view" => @all_view,
|
31
35
|
"test_property_view" => @property_view,
|
32
36
|
"test_class_view" => @class_view,
|
33
37
|
"test_map_reduce_view" => @map_reduce_view
|
34
38
|
}[name]
|
35
39
|
end
|
36
40
|
|
41
|
+
@all_map_reduce_view = mock GOM::Storage::Configuration::View::MapReduce,
|
42
|
+
:map => "function(document) { }", :reduce => nil
|
43
|
+
@builder_for_all = mock GOM::Storage::CouchDB::View::BuilderForAll, :map_reduce_view => @all_map_reduce_view
|
44
|
+
GOM::Storage::CouchDB::View::BuilderForAll.stub :new => @builder_for_all
|
45
|
+
|
37
46
|
@property_map_reduce_view = mock GOM::Storage::Configuration::View::MapReduce,
|
38
47
|
:map => "function(document) { }", :reduce => nil
|
39
48
|
@builder_from_property = mock GOM::Storage::CouchDB::View::BuilderFromProperty, :map_reduce_view => @property_map_reduce_view
|
@@ -50,6 +59,16 @@ describe GOM::Storage::CouchDB::View::Pusher do
|
|
50
59
|
@pusher.perform
|
51
60
|
end
|
52
61
|
|
62
|
+
it "should initialize the builder with the all view" do
|
63
|
+
GOM::Storage::CouchDB::View::BuilderForAll.should_receive(:new).with(@all_view_configuration).and_return(@builder_for_all)
|
64
|
+
@pusher.perform
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should use the builder to generate a map reduce view for all objects" do
|
68
|
+
@builder_for_all.should_receive(:map_reduce_view).and_return(@all_map_reduce_view)
|
69
|
+
@pusher.perform
|
70
|
+
end
|
71
|
+
|
53
72
|
it "should initialize the builder with the property view" do
|
54
73
|
GOM::Storage::CouchDB::View::BuilderFromProperty.should_receive(:new).with(@property_view_configuration).and_return(@builder_from_property)
|
55
74
|
@pusher.perform
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gom-couchdb-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,34 +9,33 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
13
|
-
default_executable:
|
12
|
+
date: 2011-10-19 00:00:00.000000000Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: gom
|
17
|
-
requirement: &
|
16
|
+
requirement: &11753700 !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
18
|
requirements:
|
20
19
|
- - ! '>='
|
21
20
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.
|
21
|
+
version: 0.5.0
|
23
22
|
type: :runtime
|
24
23
|
prerelease: false
|
25
|
-
version_requirements: *
|
24
|
+
version_requirements: *11753700
|
26
25
|
- !ruby/object:Gem::Dependency
|
27
26
|
name: couchdb
|
28
|
-
requirement: &
|
27
|
+
requirement: &11751840 !ruby/object:Gem::Requirement
|
29
28
|
none: false
|
30
29
|
requirements:
|
31
30
|
- - ! '>='
|
32
31
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.2.
|
32
|
+
version: 0.2.2
|
34
33
|
type: :runtime
|
35
34
|
prerelease: false
|
36
|
-
version_requirements: *
|
35
|
+
version_requirements: *11751840
|
37
36
|
- !ruby/object:Gem::Dependency
|
38
37
|
name: rspec
|
39
|
-
requirement: &
|
38
|
+
requirement: &11750400 !ruby/object:Gem::Requirement
|
40
39
|
none: false
|
41
40
|
requirements:
|
42
41
|
- - ! '>='
|
@@ -44,10 +43,10 @@ dependencies:
|
|
44
43
|
version: '2'
|
45
44
|
type: :development
|
46
45
|
prerelease: false
|
47
|
-
version_requirements: *
|
46
|
+
version_requirements: *11750400
|
48
47
|
- !ruby/object:Gem::Dependency
|
49
48
|
name: reek
|
50
|
-
requirement: &
|
49
|
+
requirement: &11745820 !ruby/object:Gem::Requirement
|
51
50
|
none: false
|
52
51
|
requirements:
|
53
52
|
- - ! '>='
|
@@ -55,7 +54,7 @@ dependencies:
|
|
55
54
|
version: '1.2'
|
56
55
|
type: :development
|
57
56
|
prerelease: false
|
58
|
-
version_requirements: *
|
57
|
+
version_requirements: *11745820
|
59
58
|
description: CouchDB storage adapter for the General Object Mapper. Current versions
|
60
59
|
of CouchDB are supported.
|
61
60
|
email: b.phifty@gmail.com
|
@@ -69,6 +68,7 @@ files:
|
|
69
68
|
- Rakefile
|
70
69
|
- lib/gom/storage/couchdb/view/builder_from_class.rb
|
71
70
|
- lib/gom/storage/couchdb/view/pusher.rb
|
71
|
+
- lib/gom/storage/couchdb/view/builder_for_all.rb
|
72
72
|
- lib/gom/storage/couchdb/view/builder_from_property.rb
|
73
73
|
- lib/gom/storage/couchdb/view.rb
|
74
74
|
- lib/gom/storage/couchdb/collection/fetcher.rb
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- lib/gom/storage.rb
|
85
85
|
- lib/gom/couchdb-adapter.rb
|
86
86
|
- spec/lib/gom/storage/couchdb/view/builder_from_class_spec.rb
|
87
|
+
- spec/lib/gom/storage/couchdb/view/builder_for_all_spec.rb
|
87
88
|
- spec/lib/gom/storage/couchdb/view/builder_from_property_spec.rb
|
88
89
|
- spec/lib/gom/storage/couchdb/view/pusher_spec.rb
|
89
90
|
- spec/lib/gom/storage/couchdb/collection/fetcher_spec.rb
|
@@ -98,7 +99,6 @@ files:
|
|
98
99
|
- spec/acceptance/adapter_spec.rb
|
99
100
|
- spec/acceptance/map_reduce_spec.rb
|
100
101
|
- spec/acceptance/map_spec.rb
|
101
|
-
has_rdoc: true
|
102
102
|
homepage: http://github.com/phifty/gom-couchdb-adapter
|
103
103
|
licenses: []
|
104
104
|
post_install_message:
|
@@ -119,12 +119,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
119
|
version: '0'
|
120
120
|
requirements: []
|
121
121
|
rubyforge_project: gom-couchdb-adapter
|
122
|
-
rubygems_version: 1.
|
122
|
+
rubygems_version: 1.8.10
|
123
123
|
signing_key:
|
124
124
|
specification_version: 3
|
125
125
|
summary: CouchDB storage adapter for the General Object Mapper.
|
126
126
|
test_files:
|
127
127
|
- spec/lib/gom/storage/couchdb/view/builder_from_class_spec.rb
|
128
|
+
- spec/lib/gom/storage/couchdb/view/builder_for_all_spec.rb
|
128
129
|
- spec/lib/gom/storage/couchdb/view/builder_from_property_spec.rb
|
129
130
|
- spec/lib/gom/storage/couchdb/view/pusher_spec.rb
|
130
131
|
- spec/lib/gom/storage/couchdb/collection/fetcher_spec.rb
|