couchbase-model-relationship 0.1.11 → 0.1.12.jm

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -29,7 +29,7 @@ module Couchbase
29
29
  # FIXME Need to handle cases where there's no id, or we fail or
30
30
  # w/e
31
31
  def id_prefix
32
- name.underscore
32
+ @_id_prefix ||= name.underscore
33
33
  end
34
34
 
35
35
  def next_prefixed_id
@@ -219,10 +219,13 @@ module Couchbase
219
219
 
220
220
  def raw_new(id, results)
221
221
  obj, flags, cas = results
222
- obj = {:raw => obj} unless obj.is_a?(Hash)
223
- new({:id => id, :meta => {'flags' => flags, 'cas' => cas}}.merge(obj)).tap do |instance|
224
- instance.send :clean!
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
@@ -1,7 +1,7 @@
1
1
  module Couchbase
2
2
  class Model
3
3
  module Relationship
4
- VERSION = "0.1.11"
4
+ VERSION = "0.1.12.jm"
5
5
  end
6
6
  end
7
7
  end
@@ -53,4 +53,6 @@ describe Couchbase::Model::DeepCopier do
53
53
  source.should_not eq(copy)
54
54
  copy.should eq({key: []})
55
55
  end
56
+
57
+
56
58
  end
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
@@ -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.11
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-02-06 00:00:00.000000000 Z
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: '0'
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