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.
@@ -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