peace_love 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.
- data/VERSION +1 -1
- data/examples/eg.helper.rb +9 -0
- data/examples/loading.eg.rb +13 -4
- data/lib/peace_love/collection.rb +6 -2
- data/lib/peace_love/cursor.rb +1 -1
- data/lib/peace_love/document.rb +30 -3
- data/peace_love.gemspec +2 -2
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/examples/eg.helper.rb
CHANGED
data/examples/loading.eg.rb
CHANGED
@@ -2,9 +2,6 @@ require 'eg.helper'
|
|
2
2
|
require 'angry_hash'
|
3
3
|
require 'peace_love'
|
4
4
|
|
5
|
-
eg.setup do
|
6
|
-
PeaceLove.db = $db
|
7
|
-
end
|
8
5
|
|
9
6
|
module Kind
|
10
7
|
def claws; "dainty" end
|
@@ -25,6 +22,12 @@ module Bear
|
|
25
22
|
end
|
26
23
|
end
|
27
24
|
|
25
|
+
eg.setup do
|
26
|
+
PeaceLove.db = $db
|
27
|
+
PeaceLove['bears'].mixin = nil
|
28
|
+
end
|
29
|
+
|
30
|
+
|
28
31
|
eg 'loading doc' do
|
29
32
|
$db['bears'].remove()
|
30
33
|
$db['bears'].insert(:name => 'yogi', :liver => 'pure', :kind => {:fictional => true, :cartoon => true})
|
@@ -49,6 +52,8 @@ eg 'wrapping the cursor' do
|
|
49
52
|
$db['bears'].remove()
|
50
53
|
$db['bears'].insert(:name => 'yogi' , :liver => 'pure', :kind => {:fictional => true, :cartoon => true})
|
51
54
|
$db['bears'].insert(:name => 'humphrey', :liver => 'cihrrotic', :kind => {:fictional => true, :cartoon => false})
|
55
|
+
|
56
|
+
PeaceLove['bears'].mixin = Bear
|
52
57
|
|
53
58
|
i = 0
|
54
59
|
PeaceLove['bears'].find.each {|b|
|
@@ -69,9 +74,9 @@ eg 'sub collection' do
|
|
69
74
|
{:name => 'mrs. yogi', :liver => 'donated'}, {:name => 'yogi paw', :liver => 'jaundiced'}
|
70
75
|
])
|
71
76
|
|
77
|
+
PeaceLove['bears'].mixin = Bear
|
72
78
|
yogi = PeaceLove['bears'].find_one(:name => 'yogi')
|
73
79
|
|
74
|
-
Show(yogi.lovers)
|
75
80
|
Assert(yogi.lovers[0].liver == 'DONATED')
|
76
81
|
Assert(yogi.lovers[1].liver == 'JAUNDICED')
|
77
82
|
end
|
@@ -87,3 +92,7 @@ eg 'saving object' do
|
|
87
92
|
id = PeaceLove['bears'].insert( h )
|
88
93
|
PeaceLove['bears'].find_one(id)
|
89
94
|
end
|
95
|
+
|
96
|
+
eg 'id accessor' do
|
97
|
+
Assert(Bear.build(:id => 'abc').id == 'abc')
|
98
|
+
end
|
@@ -23,6 +23,8 @@ module PeaceLove
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
# TODO find_and_modify
|
27
|
+
|
26
28
|
def __wrap_cursor(cursor)
|
27
29
|
PeaceLove::Cursor.new(cursor,self)
|
28
30
|
end
|
@@ -31,12 +33,14 @@ module PeaceLove
|
|
31
33
|
return nil unless hash.respond_to?(:to_hash)
|
32
34
|
|
33
35
|
hash = __extend( AngryHash[ hash ] )
|
34
|
-
hash.extend mixin if mixin
|
35
36
|
hash
|
36
37
|
end
|
37
38
|
|
38
39
|
def __extend(hash)
|
39
|
-
|
40
|
+
if mixin
|
41
|
+
hash.extend mixin
|
42
|
+
hash.__source_collection = self if hash.respond_to?(:__source_collection=)
|
43
|
+
end
|
40
44
|
hash
|
41
45
|
end
|
42
46
|
|
data/lib/peace_love/cursor.rb
CHANGED
@@ -23,7 +23,7 @@ module PeaceLove
|
|
23
23
|
|
24
24
|
(Mongo::Cursor.instance_methods - self.instance_methods).each do |name|
|
25
25
|
next if name[-1] == ?=
|
26
|
-
class_eval "def #{name}(*args,&block); @
|
26
|
+
class_eval "def #{name}(*args,&block); @cursor.#{name}(*args,&block) end" unless method_defined?(name)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
data/lib/peace_love/document.rb
CHANGED
@@ -31,13 +31,18 @@ module PeaceLove
|
|
31
31
|
mixin_registry[target_class][field.to_s] = [:array, mod, options]
|
32
32
|
end
|
33
33
|
|
34
|
+
def extend_doc(doc,mod,parent_obj)
|
35
|
+
doc.extend mod
|
36
|
+
doc.__parent_doc = parent_obj if doc.respond_to?(:__parent_doc=)
|
37
|
+
doc
|
38
|
+
end
|
39
|
+
|
34
40
|
def mixin_to(parent_obj,field,obj)
|
35
41
|
# XXX - what does having multiple extensions really mean here?
|
36
42
|
extensions = object_extensions[parent_obj.__id__]
|
37
43
|
|
38
44
|
mixins = mixin_registry.values_at(*extensions).map {|m| m[field.to_s]}.compact
|
39
45
|
|
40
|
-
|
41
46
|
mixins.each {|(kind,mod,options)|
|
42
47
|
if options.key?(:default) && obj.nil?
|
43
48
|
obj = options[:default]
|
@@ -47,10 +52,12 @@ module PeaceLove
|
|
47
52
|
|
48
53
|
case kind
|
49
54
|
when :single
|
50
|
-
obj
|
55
|
+
extend_doc(obj,mod,parent_obj)
|
51
56
|
when :array
|
52
57
|
# XXX - this is ok for now... we really need to typecheck, perhaps wrap in a smart-array
|
53
|
-
|
58
|
+
|
59
|
+
|
60
|
+
obj.map! {|elt| extend_doc elt, mod, parent_obj}
|
54
61
|
end
|
55
62
|
}
|
56
63
|
|
@@ -62,6 +69,26 @@ module PeaceLove
|
|
62
69
|
Doc.mixin_to(self,key,super)
|
63
70
|
end
|
64
71
|
|
72
|
+
def id
|
73
|
+
self['id']
|
74
|
+
end
|
75
|
+
|
76
|
+
def __source_collection=(col)
|
77
|
+
@source_collection = col
|
78
|
+
end
|
79
|
+
def __parent_doc(doc)
|
80
|
+
self.__source_collection = doc.__source_collection if doc.respond_to?(:__source_collection)
|
81
|
+
@parent_doc = doc
|
82
|
+
end
|
83
|
+
|
84
|
+
def __parent_doc
|
85
|
+
@parent_doc
|
86
|
+
end
|
87
|
+
|
88
|
+
def __source_collection
|
89
|
+
@source_collection
|
90
|
+
end
|
91
|
+
|
65
92
|
module ClassMethods
|
66
93
|
def sub_document(field,mod,options={})
|
67
94
|
Doc.register_mixin(self,field,mod,options)
|
data/peace_love.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{peace_love}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Lachie Cox"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-07-14}
|
13
13
|
s.description = %q{A simple mixin layer for enhancing hashes retrieved from MongoDB. It eschews the normal 'mapping' compulsion of mongo libraries.}
|
14
14
|
s.email = %q{lachie@smartbomb.com.au}
|
15
15
|
s.files = [
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 3
|
9
|
+
version: 0.0.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Lachie Cox
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-07-14 00:00:00 +10:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|