medea 0.4.0 → 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/medea/jasonobject.rb +39 -7
- data/lib/medea/{list_properties.rb → meta_properties.rb} +8 -3
- data/lib/medea/version.rb +1 -1
- data/lib/medea.rb +1 -1
- data/spec/jason_object_spec.rb +29 -0
- metadata +4 -4
data/lib/medea/jasonobject.rb
CHANGED
@@ -15,7 +15,7 @@ module Medea
|
|
15
15
|
inheritable_attributes :owned
|
16
16
|
@owned = false
|
17
17
|
|
18
|
-
include
|
18
|
+
include JasonObjectMetaProperties
|
19
19
|
|
20
20
|
#end meta
|
21
21
|
|
@@ -113,13 +113,31 @@ module Medea
|
|
113
113
|
end
|
114
114
|
#end "flexihash" access
|
115
115
|
|
116
|
-
def
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
116
|
+
def sanitize hash
|
117
|
+
#remove the keys in hash that aren't allowed
|
118
|
+
forbidden_keys = ["jason_key",
|
119
|
+
"jason_state",
|
120
|
+
"jason_parent",
|
121
|
+
"jason_parent_key",
|
122
|
+
"jason_parent_list"]
|
123
|
+
hash.delete_if { |k,v| forbidden_keys.include? k }
|
124
|
+
result = {}
|
125
|
+
hash.each { |k, v| result[k.to_s] = v }
|
126
|
+
result
|
127
|
+
end
|
128
|
+
|
129
|
+
def initialize initialiser = nil, mode = :eager
|
130
|
+
if initialiser
|
131
|
+
if initialiser.is_a? Hash
|
132
|
+
@__jason_state = :new
|
133
|
+
@__jason_data = sanitize initialiser
|
121
134
|
else
|
122
|
-
@
|
135
|
+
@__id = initialiser
|
136
|
+
if mode == :eager
|
137
|
+
load
|
138
|
+
else
|
139
|
+
@__jason_state = :ghost
|
140
|
+
end
|
123
141
|
end
|
124
142
|
else
|
125
143
|
@__jason_state = :new
|
@@ -179,8 +197,22 @@ module Medea
|
|
179
197
|
|
180
198
|
#object persistence methods
|
181
199
|
|
200
|
+
def update_attributes attributes
|
201
|
+
@__jason_data = sanitize attributes
|
202
|
+
save
|
203
|
+
end
|
204
|
+
|
182
205
|
#POSTs the current values of this object back to JasonDB
|
183
206
|
#on successful post, sets state to STALE and updates eTag
|
207
|
+
def save
|
208
|
+
return false if @__jason_state == :stale or @__jason_state == :ghost
|
209
|
+
begin
|
210
|
+
save!
|
211
|
+
return true
|
212
|
+
rescue
|
213
|
+
return false
|
214
|
+
end
|
215
|
+
end
|
184
216
|
def save!
|
185
217
|
#no changes? no save!
|
186
218
|
return if @__jason_state == :stale or @__jason_state == :ghost
|
@@ -1,9 +1,9 @@
|
|
1
|
-
module
|
1
|
+
module JasonObjectMetaProperties
|
2
2
|
def self.included(base)
|
3
|
-
base.extend(
|
3
|
+
base.extend(MetaProperties)
|
4
4
|
end
|
5
5
|
|
6
|
-
module
|
6
|
+
module MetaProperties
|
7
7
|
def create_member_list list_name, list_class, list_type
|
8
8
|
list = {}
|
9
9
|
list = self.send(:class_variable_get, :@@lists) if self.class_variable_defined? :@@lists
|
@@ -27,5 +27,10 @@ module JasonObjectListProperties
|
|
27
27
|
#list_type.class_variable_set :@@owner, self
|
28
28
|
list_class.owned = true
|
29
29
|
end
|
30
|
+
|
31
|
+
def key_field field_name
|
32
|
+
#this field must be present to save, and it must be unique
|
33
|
+
self.send(:class_variable_set, :@@key_field, field_name)
|
34
|
+
end
|
30
35
|
end
|
31
36
|
end
|
data/lib/medea/version.rb
CHANGED
data/lib/medea.rb
CHANGED
@@ -4,7 +4,7 @@ module Medea
|
|
4
4
|
require 'medea/version'
|
5
5
|
require 'medea/inheritable_attributes'
|
6
6
|
require 'medea/active_model_methods'
|
7
|
-
require 'medea/
|
7
|
+
require 'medea/meta_properties'
|
8
8
|
require 'medea/jasonobject'
|
9
9
|
require 'medea/jasondeferredquery'
|
10
10
|
require 'medea/jasonlistproperty'
|
data/spec/jason_object_spec.rb
CHANGED
@@ -52,4 +52,33 @@ describe "JasonObject" do
|
|
52
52
|
usr.should_not eq(u)
|
53
53
|
end
|
54
54
|
end
|
55
|
+
|
56
|
+
it "should be initialisable with a hash" do
|
57
|
+
@user = User.new({:name => "Jimmy", :age => 31})
|
58
|
+
@user.name.should eq("Jimmy")
|
59
|
+
@user.age.should eq(31)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should be updateable with update_attributes" do
|
63
|
+
|
64
|
+
field_hash = {:name => "Robert",
|
65
|
+
:age => 25}
|
66
|
+
@user.name = "Fred"
|
67
|
+
@user.age = 20
|
68
|
+
|
69
|
+
@user.stub(:save).and_return true
|
70
|
+
@user.should_receive :save
|
71
|
+
(@user.update_attributes field_hash).should eq(true)
|
72
|
+
|
73
|
+
@user.name.should eq(field_hash[:name])
|
74
|
+
@user.age.should eq(field_hash[:age])
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should pass the result of save back through update_attributes" do
|
78
|
+
@user.stub(:save).and_return true
|
79
|
+
(@user.update_attributes({})).should eq(true)
|
80
|
+
|
81
|
+
@user.stub(:save).and_return false
|
82
|
+
(@user.update_attributes({})).should eq(false)
|
83
|
+
end
|
55
84
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 5
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.5.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Michael Jensen
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-18 00:00:00 +11:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -92,7 +92,7 @@ files:
|
|
92
92
|
- lib/medea/jasondeferredquery.rb
|
93
93
|
- lib/medea/jasonlistproperty.rb
|
94
94
|
- lib/medea/jasonobject.rb
|
95
|
-
- lib/medea/
|
95
|
+
- lib/medea/meta_properties.rb
|
96
96
|
- lib/medea/version.rb
|
97
97
|
- medea.gemspec
|
98
98
|
- spec/jason_object_spec.rb
|