resort 0.2.1 → 0.2.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.
@@ -1,4 +1,4 @@
1
1
  module Resort
2
2
  # Resort's version number
3
- VERSION = "0.2.1"
3
+ VERSION = "0.2.2"
4
4
  end
data/lib/resort.rb CHANGED
@@ -93,7 +93,7 @@ module Resort
93
93
  elements = {}
94
94
 
95
95
  scoped.each do |element|
96
- if element.first?
96
+ if ordered_elements.empty? && element.first?
97
97
  ordered_elements << element
98
98
  else
99
99
  elements[element.id] = element
@@ -149,17 +149,17 @@ module Resort
149
149
 
150
150
  # Puts the object in the first position of the list.
151
151
  def prepend
152
- return if first?
153
-
154
- if _siblings.count > 0
155
- self.class.transaction do
156
- self.lock!
152
+ self.class.transaction do
153
+ self.lock!
154
+ return if first?
155
+ if _siblings.count > 0
157
156
  delete_from_list
158
- _siblings.where(:first => true).first.append_to(self)
157
+ old_first = self.class.first_in_order
158
+ self.update_attribute(:next_id, old_first.id)
159
+ old_first.update_attribute(:first, false)
159
160
  end
161
+ self.update_attribute(:first, true)
160
162
  end
161
-
162
- self.update_attribute(:first, true)
163
163
  end
164
164
 
165
165
  # Puts the object in the last position of the list.
@@ -172,10 +172,9 @@ module Resort
172
172
 
173
173
  # Puts the object right after another object in the list.
174
174
  def append_to(another)
175
- return if another.next_id == id
176
-
177
175
  self.class.transaction do
178
176
  self.lock!
177
+ return if another.next_id == id
179
178
  another.lock!
180
179
  delete_from_list
181
180
  self.update_attribute(:next_id, another.next_id) if self.next_id or (another && another.next_id)
@@ -207,7 +206,10 @@ module Resort
207
206
  end
208
207
 
209
208
  def last!
210
- _siblings.last_in_order.update_attribute(:next_id, self.id)
209
+ self.class.transaction do
210
+ self.lock!
211
+ _siblings.last_in_order.update_attribute(:next_id, self.id)
212
+ end
211
213
  end
212
214
 
213
215
  def _siblings
data/spec/resort_spec.rb CHANGED
@@ -168,6 +168,25 @@ module Resort
168
168
 
169
169
  first.next_id.should eq(last.id)
170
170
  end
171
+
172
+ it 'prepends the last element' do
173
+ one_list = List.create(:name => 'My list')
174
+ ListItem.create(:name => "First", :list => one_list)
175
+ ListItem.create(:name => "Second", :list => one_list)
176
+ third = ListItem.create(:name => "Third", :list => one_list)
177
+
178
+ third.prepend
179
+ first = ListItem.where(:name => "First", :list_id => one_list).first
180
+ second = ListItem.where(:name => "Second", :list_id => one_list).first
181
+ third = ListItem.where(:name => "Third", :list_id => one_list).first
182
+
183
+ first.should_not be_first
184
+ second.should_not be_first
185
+ third.should be_first
186
+ third.next.name.should == 'First'
187
+ first.next.name.should == 'Second'
188
+ second.next.should be_nil
189
+ end
171
190
  end
172
191
  after do
173
192
  List.destroy_all
@@ -269,6 +288,17 @@ module Resort
269
288
  article3.previous.should be_nil
270
289
  article3.next.name.should == '1'
271
290
  end
291
+
292
+ it "prepends the last element" do
293
+ @article4.prepend
294
+
295
+ article4 = Article.find_by_name('4')
296
+
297
+ article4.should be_first
298
+ article4.previous.should be_nil
299
+ article4.next.name.should == '1'
300
+ end
301
+
272
302
  context 'when the article is already first' do
273
303
  it 'does nothing' do
274
304
  @article1.prepend
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: resort
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.1
5
+ version: 0.2.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Oriol Gual
@@ -12,8 +12,7 @@ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
14
 
15
- date: 2011-04-13 00:00:00 +02:00
16
- default_executable:
15
+ date: 2011-04-13 00:00:00 Z
17
16
  dependencies:
18
17
  - !ruby/object:Gem::Dependency
19
18
  name: activerecord
@@ -106,7 +105,6 @@ files:
106
105
  - spec/generators/migration_spec.rb
107
106
  - spec/resort_spec.rb
108
107
  - spec/spec_helper.rb
109
- has_rdoc: true
110
108
  homepage: http://codegram.github.com/resort
111
109
  licenses: []
112
110
 
@@ -130,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
128
  requirements: []
131
129
 
132
130
  rubyforge_project: resort
133
- rubygems_version: 1.5.2
131
+ rubygems_version: 1.7.1
134
132
  signing_key:
135
133
  specification_version: 3
136
134
  summary: Positionless model sorting for Rails 3.