mongoid_embedded_helper 0.1.1 → 0.1.2

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -46,39 +46,52 @@ module Mongoid::Extensions::Array
46
46
  def adjust!(attrs = {})
47
47
  attrs.each_pair do |key, value|
48
48
  self.each do |doc|
49
- doc.adjust_attribs!(attrs)
49
+ doc.adjust!(attrs)
50
50
  end
51
51
  end
52
52
  self
53
53
  end
54
54
  end
55
55
  end
56
+
57
+ module Mongoid
58
+ class Criteria
59
+ def adjust!(attrs = {})
60
+ to_a.adjust!(attrs)
61
+ end
62
+ end
63
+ end
56
64
 
57
65
  module Mongoid::Document
58
- def adjust_attribs!(attrs = {})
66
+ def present? key
67
+ respond_to? key
68
+ end
69
+
70
+ def adjust!(attrs = {})
59
71
  run_callbacks(:before_update)
60
72
  (attrs || {}).each_pair do |key, value|
61
- next if !value.integer?
62
-
73
+ next if !value.integer? # only add integer values
74
+ next if !present? key # only add to properties already present!
75
+
63
76
  if set_allowed?(key)
64
- current_val = @attributes[key.to_s]
77
+ current_val = @attributes[key.to_s] || 0
65
78
 
66
79
  if current_val.integer?
67
80
  @attributes[key.to_s] = current_val + value
68
81
  end
69
82
 
70
83
  elsif write_allowed?(key)
71
- current_val = send("#{key}")
84
+ current_val = send("#{key}") || 0
72
85
 
73
86
  if current_val.integer?
74
87
  send("#{key}=", current_val + value)
75
88
  end
76
89
  end
77
- identify if id.blank?
78
- notify
79
- run_callbacks(:after_update)
80
- self
81
90
  end
91
+ identify if id.blank?
92
+ notify
93
+ run_callbacks(:after_update)
94
+ self
82
95
  end
83
96
  end
84
97
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoid_embedded_helper}
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kristian Mandrup"]
@@ -9,6 +9,14 @@ class Person
9
9
  embeds_many :lists
10
10
  end
11
11
 
12
+ class PosPerson
13
+ include Mongoid::Document
14
+ include Mongoid::EmbeddedHelper
15
+ field :pos, :type => Integer
16
+ field :name, :type => String
17
+ embeds_many :lists
18
+ end
19
+
12
20
 
13
21
  class List
14
22
  include Mongoid::Document
@@ -35,6 +43,7 @@ describe 'Mongoid Embedded Helper' do
35
43
 
36
44
  before :each do
37
45
  @person = Person.create! :name => 'Kristian'
46
+ @pos_person = PosPerson.create! :name => 'Kristian'
38
47
  # person.lists = []
39
48
  list = List.new :pos => 1, :name => 'My list'
40
49
  (1..3).each do |counter|
@@ -67,10 +76,35 @@ describe 'Mongoid Embedded Helper' do
67
76
  result = @person.lists[0].items[0].in_collection.where(:number.gt => 1).to_a
68
77
  result.size.should == 2
69
78
  end
79
+ end
80
+
81
+ describe '#adjust!' do
82
+ context 'on an array' do
83
+ it "should add 1 to all positions greater than 1" do
84
+ result = @person.lists[0].items.where(:pos.gt => 1).to_a.adjust!(:pos => 1)
85
+ result.map(&:pos).should == [3, 4]
86
+ end
87
+ end
88
+
89
+ context 'on a criteria' do
90
+ it "should add 1 to all positions greater than 1" do
91
+ result = @person.lists[0].items.where(:pos.gt => 1).adjust!(:pos => 1)
92
+ result.map(&:pos).should == [3, 4]
93
+ end
94
+ end
95
+
96
+ context 'on a document with a pos' do
97
+ it "should add 1 to the position" do
98
+ result = @pos_person.adjust!(:pos => 1)
99
+ result.pos.should == 1
100
+ end
101
+ end
70
102
 
71
- it "should add 1 to all positions greater than 1" do
72
- result = @person.lists[0].items.where(:pos.gt => 1).to_a.adjust!(:pos => 1)
73
- result.map(&:pos).should == [3, 4]
103
+ context 'on a document without a pos field' do
104
+ it "should NOT add 1 to the position" do
105
+ result = @person.adjust!(:pos => 1)
106
+ lambda {result.pos}.should raise_error
107
+ end
74
108
  end
75
109
  end
76
110
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 1
9
- version: 0.1.1
8
+ - 2
9
+ version: 0.1.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Kristian Mandrup