peace_love 0.1.1 → 0.1.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/Gemfile +2 -2
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/peace_love/collection.rb +1 -1
- data/lib/peace_love/document.rb +27 -20
- data/lib/peace_love/railtie.rb +6 -2
- data/peace_love.gemspec +5 -5
- metadata +6 -6
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -11,7 +11,7 @@ begin
|
|
11
11
|
gemspec.test_files = []
|
12
12
|
|
13
13
|
gemspec.add_dependency("mongo", ['~>1.0.0'])
|
14
|
-
gemspec.add_dependency("angry_hash", ['
|
14
|
+
gemspec.add_dependency("angry_hash", ['~>0.1.0'])
|
15
15
|
end
|
16
16
|
rescue LoadError
|
17
17
|
puts "Jeweler not available. Install it with: gem install jeweler"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/lib/peace_love/document.rb
CHANGED
@@ -7,24 +7,20 @@ module PeaceLove
|
|
7
7
|
|
8
8
|
base.module_eval do
|
9
9
|
def self.extend_object(obj)
|
10
|
-
Doc.mark_extension(obj,self)
|
11
10
|
super
|
11
|
+
Doc.mark_extension(obj,self)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
def object_extensions
|
18
|
-
@object_extensions ||= {}
|
19
|
-
end
|
20
|
-
|
21
16
|
def mark_extension(doc,mod)
|
22
|
-
#
|
17
|
+
#puts "mark_extension doc=#{doc.class} mod=#{mod}"
|
23
18
|
|
24
|
-
|
19
|
+
# TODO store extension on the doc!
|
20
|
+
if (previous_mod = doc.__peace_love_extension) && previous_mod != mod
|
25
21
|
raise "doc #{doc} has already been extended by a different PeaceLove::Doc (was: #{previous_mod}, now: #{mod})"
|
26
22
|
end
|
27
|
-
|
23
|
+
doc.__peace_love_extension = mod
|
28
24
|
|
29
25
|
setup_extended_doc(doc,mod)
|
30
26
|
end
|
@@ -45,10 +41,10 @@ module PeaceLove
|
|
45
41
|
mixin_registry[target_class][field.to_s] = [:hash, mod, options]
|
46
42
|
end
|
47
43
|
|
48
|
-
def extend_doc(doc,mod,
|
44
|
+
def extend_doc(doc,mod,parent_doc)
|
49
45
|
# puts "extend_doc doc=#{doc.class} mod=#{mod} parent_obj=#{parent_obj.class}"
|
50
46
|
|
51
|
-
if !
|
47
|
+
if !parent_doc.nil? && doc.nil?
|
52
48
|
doc = AngryHash.new
|
53
49
|
end
|
54
50
|
|
@@ -64,7 +60,10 @@ module PeaceLove
|
|
64
60
|
end
|
65
61
|
|
66
62
|
def mixin_to(parent_obj,field,obj)
|
67
|
-
|
63
|
+
# puts "mixin_to field=#{field}"
|
64
|
+
|
65
|
+
extension = parent_obj.__peace_love_extension
|
66
|
+
# puts "found extension=#{extension.inspect}"
|
68
67
|
|
69
68
|
if mixin = mixin_registry[extension][field.to_s]
|
70
69
|
kind,mod,options = *mixin
|
@@ -73,15 +72,15 @@ module PeaceLove
|
|
73
72
|
obj = options[:default]
|
74
73
|
end
|
75
74
|
|
76
|
-
# XXX - what happens when obj is nil
|
77
|
-
|
78
75
|
case kind
|
79
76
|
when :single
|
80
77
|
obj = extend_doc(obj,mod,parent_obj)
|
81
78
|
when :array
|
82
79
|
# XXX - this is ok for now... we really need to typecheck, perhaps wrap in a smart-array
|
80
|
+
obj ||= []
|
83
81
|
obj = obj.map {|elt| extend_doc(elt, mod, parent_obj)}
|
84
82
|
when :hash
|
83
|
+
obj ||= {}
|
85
84
|
obj = obj.inject(AngryHash.new) do |h,(k,elt)|
|
86
85
|
h[k] = extend_doc(elt,mod,parent_obj)
|
87
86
|
h
|
@@ -101,12 +100,12 @@ module PeaceLove
|
|
101
100
|
self['id']
|
102
101
|
end
|
103
102
|
|
104
|
-
def
|
105
|
-
@
|
103
|
+
def __collection=(col)
|
104
|
+
@collection = col
|
106
105
|
end
|
107
106
|
|
108
|
-
def __parent_doc(doc)
|
109
|
-
self.
|
107
|
+
def __parent_doc=(doc)
|
108
|
+
self.__collection = doc.__collection if doc.respond_to?(:__collection)
|
110
109
|
@parent_doc = doc
|
111
110
|
end
|
112
111
|
|
@@ -114,8 +113,16 @@ module PeaceLove
|
|
114
113
|
@parent_doc
|
115
114
|
end
|
116
115
|
|
117
|
-
def
|
118
|
-
@
|
116
|
+
def __collection
|
117
|
+
@collection
|
118
|
+
end
|
119
|
+
|
120
|
+
def __peace_love_extension=(mod)
|
121
|
+
@__peace_love_extension = mod
|
122
|
+
end
|
123
|
+
|
124
|
+
def __peace_love_extension
|
125
|
+
@__peace_love_extension
|
119
126
|
end
|
120
127
|
|
121
128
|
module ClassMethods
|
data/lib/peace_love/railtie.rb
CHANGED
@@ -9,7 +9,11 @@ module Rails #:nodoc:
|
|
9
9
|
config_file = Rails.root + "config/database.yml"
|
10
10
|
if config_file.file?
|
11
11
|
settings = YAML.load( ERB.new(config_file.read).result )[Rails.env]
|
12
|
-
|
12
|
+
if settings
|
13
|
+
::PeaceLove.connect(settings)
|
14
|
+
else
|
15
|
+
raise "Unable to connect to mongo; #{config_file.relative_path_from(Rails.root)} doesn't have an entry for the #{Rails.env} environment."
|
16
|
+
end
|
13
17
|
end
|
14
18
|
end
|
15
19
|
|
@@ -24,7 +28,7 @@ You need to set up a #{cfg_file} looking like\n
|
|
24
28
|
host: localhost
|
25
29
|
|
26
30
|
EOMSG
|
27
|
-
raise( "Unable to connect to mongodb using #{Rails.root+'config/database.yml'}" )
|
31
|
+
raise( "Unable to connect to mongodb using #{Rails.root+'config/database.yml'} env=#{Rails.env}" )
|
28
32
|
end
|
29
33
|
end
|
30
34
|
end
|
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.1.
|
8
|
+
s.version = "0.1.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-08-
|
12
|
+
s.date = %q{2010-08-23}
|
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 = [
|
@@ -40,14 +40,14 @@ Gem::Specification.new do |s|
|
|
40
40
|
|
41
41
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
42
42
|
s.add_runtime_dependency(%q<mongo>, ["~> 1.0.0"])
|
43
|
-
s.add_runtime_dependency(%q<angry_hash>, ["
|
43
|
+
s.add_runtime_dependency(%q<angry_hash>, ["~> 0.1.0"])
|
44
44
|
else
|
45
45
|
s.add_dependency(%q<mongo>, ["~> 1.0.0"])
|
46
|
-
s.add_dependency(%q<angry_hash>, ["
|
46
|
+
s.add_dependency(%q<angry_hash>, ["~> 0.1.0"])
|
47
47
|
end
|
48
48
|
else
|
49
49
|
s.add_dependency(%q<mongo>, ["~> 1.0.0"])
|
50
|
-
s.add_dependency(%q<angry_hash>, ["
|
50
|
+
s.add_dependency(%q<angry_hash>, ["~> 0.1.0"])
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 3
|
9
|
+
version: 0.1.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-08-
|
17
|
+
date: 2010-08-23 00:00:00 +10:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -36,13 +36,13 @@ dependencies:
|
|
36
36
|
prerelease: false
|
37
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ~>
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
segments:
|
42
42
|
- 0
|
43
|
+
- 1
|
43
44
|
- 0
|
44
|
-
|
45
|
-
version: 0.0.5
|
45
|
+
version: 0.1.0
|
46
46
|
type: :runtime
|
47
47
|
version_requirements: *id002
|
48
48
|
description: A simple mixin layer for enhancing hashes retrieved from MongoDB. It eschews the normal 'mapping' compulsion of mongo libraries.
|