couchbase-model-relationship 0.1.11 → 0.1.12.jm
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/couchbase-model-relationship.gemspec +2 -2
- data/lib/couchbase/model/dirty.rb +13 -1
- data/lib/couchbase/model/id_prefix.rb +1 -1
- data/lib/couchbase/model/relationship/parent.rb +6 -3
- data/lib/couchbase/model/relationship/version.rb +1 -1
- data/spec/deep_copier_spec.rb +2 -0
- data/spec/dirty_spec.rb +16 -0
- data/spec/id_prefix_spec.rb +15 -0
- metadata +7 -13
@@ -20,8 +20,8 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency 'activemodel', '~> 3'
|
22
22
|
spec.add_dependency 'activesupport', '~> 3'
|
23
|
-
spec.add_dependency 'couchbase', '~> 1'
|
24
|
-
spec.add_dependency 'couchbase-model', '~> 0.5.3'
|
23
|
+
spec.add_dependency 'jmoses-couchbase', '~> 1'
|
24
|
+
spec.add_dependency 'jmoses-couchbase-model', '~> 0.5.3'
|
25
25
|
spec.add_dependency 'json', '~> 1.8.0'
|
26
26
|
# FIXME Remove when couchbase is > 1.3.1
|
27
27
|
spec.add_dependency 'multi_json', '1.7.5'
|
@@ -11,6 +11,7 @@ module Couchbase
|
|
11
11
|
|
12
12
|
alias_method_chain :save, :dirty
|
13
13
|
alias_method_chain :create, :dirty
|
14
|
+
alias_method_chain :update_attributes, :dirty
|
14
15
|
|
15
16
|
attribute_method_prefix :previous_
|
16
17
|
|
@@ -26,10 +27,11 @@ module Couchbase
|
|
26
27
|
Array(results).each {|instance| instance.send :clean! }
|
27
28
|
end
|
28
29
|
end
|
30
|
+
|
29
31
|
end
|
30
32
|
|
31
33
|
def write_attribute(name, value)
|
32
|
-
send "#{name}_will_change!" unless send(name) == value
|
34
|
+
send "#{name}_will_change!" unless @_ignore_dirty || send(name) == value
|
33
35
|
|
34
36
|
@_attributes[name] = value
|
35
37
|
end
|
@@ -45,6 +47,16 @@ module Couchbase
|
|
45
47
|
self
|
46
48
|
end
|
47
49
|
|
50
|
+
def update_attributes_with_dirty(attrs)
|
51
|
+
begin
|
52
|
+
@_ignore_dirty = attrs.delete(:_ignore_dirty)
|
53
|
+
|
54
|
+
update_attributes_without_dirty(attrs)
|
55
|
+
ensure
|
56
|
+
@_ignore_dirty = false
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
48
60
|
def save_with_dirty(options = {})
|
49
61
|
save_without_dirty(options).tap do |value|
|
50
62
|
capture_previous_changes if value
|
@@ -219,10 +219,13 @@ module Couchbase
|
|
219
219
|
|
220
220
|
def raw_new(id, results)
|
221
221
|
obj, flags, cas = results
|
222
|
-
|
223
|
-
|
224
|
-
|
222
|
+
if obj.is_a?(Hash)
|
223
|
+
obj.merge!(:_ignore_dirty => true)
|
224
|
+
else
|
225
|
+
obj = {:raw => obj}
|
225
226
|
end
|
227
|
+
|
228
|
+
new({:id => id, :meta => {'flags' => flags, 'cas' => cas}}.merge(obj))
|
226
229
|
end
|
227
230
|
end
|
228
231
|
end
|
data/spec/deep_copier_spec.rb
CHANGED
data/spec/dirty_spec.rb
CHANGED
@@ -8,6 +8,22 @@ end
|
|
8
8
|
describe "Dirty" do
|
9
9
|
subject { DirtyTest.new }
|
10
10
|
|
11
|
+
describe "#update_attributes" do
|
12
|
+
it "doesn't mark dirty if ignoring" do
|
13
|
+
subject.update_attributes :_ignore_dirty => true, :name => 'abc'
|
14
|
+
|
15
|
+
subject.name.should eq('abc')
|
16
|
+
subject.should_not be_name_changed
|
17
|
+
end
|
18
|
+
|
19
|
+
it "marks dirty if not ignoring" do
|
20
|
+
subject.update_attributes :name => 'abc'
|
21
|
+
|
22
|
+
subject.name.should eq('abc')
|
23
|
+
subject.should be_name_changed
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
11
27
|
it "should mark the fields as dirty" do
|
12
28
|
subject.name = 'abc'
|
13
29
|
subject.should be_name_changed
|
data/spec/id_prefix_spec.rb
CHANGED
@@ -16,6 +16,21 @@ describe "IdPrefix" do
|
|
16
16
|
subject.class.id_prefix.should eq("id_prefix_test")
|
17
17
|
end
|
18
18
|
|
19
|
+
it "caches the prefix" do
|
20
|
+
subject.class.instance_variable_set(:@_id_prefix, nil)
|
21
|
+
subject.class.id_prefix
|
22
|
+
subject.class.instance_variable_get(:@_id_prefix).should eq('id_prefix_test')
|
23
|
+
end
|
24
|
+
|
25
|
+
it "reads from the prefix cache" do
|
26
|
+
subject.class.instance_variable_set(:@_id_prefix, 'abc')
|
27
|
+
String.any_instance.expects(:underscore).never
|
28
|
+
subject.class.id_prefix.should eq('abc')
|
29
|
+
|
30
|
+
# Resetting
|
31
|
+
subject.class.instance_variable_set(:@_id_prefix, nil)
|
32
|
+
end
|
33
|
+
|
19
34
|
it "prefixes an id properly" do
|
20
35
|
subject.class.prefixed_id(123).should eq("id_prefix_test:123")
|
21
36
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: couchbase-model-relationship
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.12.jm
|
5
|
+
prerelease: 7
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jon Moses
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-04-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '3'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name: couchbase
|
47
|
+
name: jmoses-couchbase
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
@@ -60,7 +60,7 @@ dependencies:
|
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '1'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name: couchbase-model
|
63
|
+
name: jmoses-couchbase-model
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
@@ -216,18 +216,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
216
216
|
- - ! '>='
|
217
217
|
- !ruby/object:Gem::Version
|
218
218
|
version: '0'
|
219
|
-
segments:
|
220
|
-
- 0
|
221
|
-
hash: 977357591952759392
|
222
219
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
223
220
|
none: false
|
224
221
|
requirements:
|
225
|
-
- - ! '
|
222
|
+
- - ! '>'
|
226
223
|
- !ruby/object:Gem::Version
|
227
|
-
version:
|
228
|
-
segments:
|
229
|
-
- 0
|
230
|
-
hash: 977357591952759392
|
224
|
+
version: 1.3.1
|
231
225
|
requirements: []
|
232
226
|
rubyforge_project:
|
233
227
|
rubygems_version: 1.8.24
|