acts_as_list_mongoid 0.2.2 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/.DS_Store ADDED
Binary file
data/Gemfile CHANGED
@@ -1,4 +1,13 @@
1
1
  source :rubygems
2
2
 
3
- gem 'mongoid', '>= 2.0.0.beta.14'
3
+ gem 'mongoid', '>= 2.0.1'
4
4
  gem "mongoid_embedded_helper", '>= 0.2.5'
5
+
6
+ group :development do
7
+ gem "shoulda", ">= 0"
8
+ gem "cutter", ">= 0"
9
+ gem "rspec", ">= 2.5"
10
+ gem "bundler", "~> 1.0.10"
11
+ gem "jeweler", "~> 1.6.4"
12
+ gem "rcov", ">= 0"
13
+ end
data/Rakefile CHANGED
@@ -1,9 +1,19 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
2
12
  require 'rake'
3
13
 
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
7
17
  gem.name = "acts_as_list_mongoid"
8
18
  gem.summary = %Q{acts_as_list for Mongoid}
9
19
  gem.description = %Q{Make your Mongoid model acts as a list. This acts_as extension provides the capabilities for sorting and reordering a number of objects in a list.
@@ -11,12 +21,36 @@ begin
11
21
  gem.email = "kmandrup@gmail.com"
12
22
  gem.homepage = "http://github.com/rails/acts_as_list"
13
23
  gem.authors = ["Kristian Mandrup"]
14
- gem.add_dependency "mongoid", ">= 2.0.0.beta.14"
15
- gem.add_dependency "mongoid_embedded_helper", ">= 0.2.5"
16
- # gem.add_development_dependency "yard"
17
- end
18
- Jeweler::GemcutterTasks.new
19
- rescue LoadError
20
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ require 'rcov/rcovtask'
36
+ Rcov::RcovTask.new do |test|
37
+ test.libs << 'test'
38
+ test.pattern = 'test/**/test_*.rb'
39
+ test.verbose = true
40
+ test.rcov_opts << '--exclude "gems/*"'
21
41
  end
22
42
 
43
+ task :default => :test
44
+
45
+ require 'rake/rdoctask'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "acts_as_list_mongoid #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
54
+
55
+
56
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.2.4
@@ -1,68 +1,77 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{acts_as_list_mongoid}
8
- s.version = "0.2.2"
7
+ s.name = "acts_as_list_mongoid"
8
+ s.version = "0.2.4"
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"]
12
- s.date = %q{2010-11-27}
13
- s.description = %q{Make your Mongoid model acts as a list. This acts_as extension provides the capabilities for sorting and reordering a number of objects in a list.
14
- The instances that take part in the list should have a +position+ field of type Integer.}
15
- s.email = %q{kmandrup@gmail.com}
12
+ s.date = "2011-09-30"
13
+ s.description = "Make your Mongoid model acts as a list. This acts_as extension provides the capabilities for sorting and reordering a number of objects in a list.\n The instances that take part in the list should have a +position+ field of type Integer."
14
+ s.email = "kmandrup@gmail.com"
16
15
  s.extra_rdoc_files = [
17
16
  "README.markdown"
18
17
  ]
19
18
  s.files = [
20
19
  ".DS_Store",
21
- ".gitignore",
22
- ".rspec",
23
- "Gemfile",
24
- "README.markdown",
25
- "Rakefile",
26
- "VERSION",
27
- "acts_as_list_mongoid.gemspec",
28
- "example/example.rb",
29
- "init.rb",
30
- "lib/.DS_Store",
31
- "lib/acts_as_list_mongoid.rb",
32
- "lib/init.rb",
33
- "lib/mongoid/acts_as_list.rb",
34
- "model/embedded_item.rb",
35
- "model/referenced_category.rb",
36
- "spec/.rspec",
37
- "spec/acts_as_list/embedded_item_spec.rb",
38
- "spec/acts_as_list/referenced_category_spec.rb",
39
- "spec/spec_helper.rb"
40
- ]
41
- s.homepage = %q{http://github.com/rails/acts_as_list}
42
- s.rdoc_options = ["--charset=UTF-8"]
43
- s.require_paths = ["lib"]
44
- s.rubygems_version = %q{1.3.7}
45
- s.summary = %q{acts_as_list for Mongoid}
46
- s.test_files = [
20
+ ".rspec",
21
+ "Gemfile",
22
+ "README.markdown",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "acts_as_list_mongoid.gemspec",
26
+ "example/example.rb",
27
+ "init.rb",
28
+ "lib/.DS_Store",
29
+ "lib/acts_as_list_mongoid.rb",
30
+ "lib/init.rb",
31
+ "lib/mongoid/acts_as_list.rb",
32
+ "model/embedded_item.rb",
33
+ "model/referenced_category.rb",
34
+ "spec/.rspec",
47
35
  "spec/acts_as_list/embedded_item_spec.rb",
48
- "spec/acts_as_list/referenced_category_spec.rb",
49
- "spec/spec_helper.rb"
36
+ "spec/acts_as_list/referenced_category_spec.rb",
37
+ "spec/spec_helper.rb"
50
38
  ]
39
+ s.homepage = "http://github.com/rails/acts_as_list"
40
+ s.require_paths = ["lib"]
41
+ s.rubygems_version = "1.8.10"
42
+ s.summary = "acts_as_list for Mongoid"
51
43
 
52
44
  if s.respond_to? :specification_version then
53
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
54
45
  s.specification_version = 3
55
46
 
56
47
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
57
- s.add_runtime_dependency(%q<mongoid>, [">= 2.0.0.beta.14"])
48
+ s.add_runtime_dependency(%q<mongoid>, [">= 2.0.1"])
58
49
  s.add_runtime_dependency(%q<mongoid_embedded_helper>, [">= 0.2.5"])
50
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
51
+ s.add_development_dependency(%q<cutter>, [">= 0"])
52
+ s.add_development_dependency(%q<rspec>, [">= 2.5"])
53
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.10"])
54
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
55
+ s.add_development_dependency(%q<rcov>, [">= 0"])
59
56
  else
60
- s.add_dependency(%q<mongoid>, [">= 2.0.0.beta.14"])
57
+ s.add_dependency(%q<mongoid>, [">= 2.0.1"])
61
58
  s.add_dependency(%q<mongoid_embedded_helper>, [">= 0.2.5"])
59
+ s.add_dependency(%q<shoulda>, [">= 0"])
60
+ s.add_dependency(%q<cutter>, [">= 0"])
61
+ s.add_dependency(%q<rspec>, [">= 2.5"])
62
+ s.add_dependency(%q<bundler>, ["~> 1.0.10"])
63
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
64
+ s.add_dependency(%q<rcov>, [">= 0"])
62
65
  end
63
66
  else
64
- s.add_dependency(%q<mongoid>, [">= 2.0.0.beta.14"])
67
+ s.add_dependency(%q<mongoid>, [">= 2.0.1"])
65
68
  s.add_dependency(%q<mongoid_embedded_helper>, [">= 0.2.5"])
69
+ s.add_dependency(%q<shoulda>, [">= 0"])
70
+ s.add_dependency(%q<cutter>, [">= 0"])
71
+ s.add_dependency(%q<rspec>, [">= 2.5"])
72
+ s.add_dependency(%q<bundler>, ["~> 1.0.10"])
73
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
74
+ s.add_dependency(%q<rcov>, [">= 0"])
66
75
  end
67
76
  end
68
77
 
data/lib/.DS_Store ADDED
Binary file
@@ -1,2 +1,8 @@
1
1
  require "mongoid"
2
- require 'mongoid/acts_as_list'
2
+ require 'mongoid/acts_as_list'
3
+
4
+ class Module
5
+ def act_as_list
6
+ self.send :include, ActsAsList::Mongoid
7
+ end
8
+ end
@@ -1,59 +1,56 @@
1
- require "mongoid"
1
+ require "mongoid"
2
2
  require 'mongoid_embedded_helper'
3
3
  require 'mongoid_adjust'
4
4
 
5
5
  module ActsAsList
6
- module Mongoid
7
- class << self
8
- attr_accessor :default_position_column
6
+ module Mongoid
7
+ class << self
8
+ attr_accessor :default_position_column
9
9
  end
10
-
11
- def self.included(klass)
12
- klass.extend InitializerMethods
13
- key = self.default_position_column || :position
14
- klass.field key, :type => Integer
15
- klass.acts_as_list :column => key.to_s
16
- end
17
10
 
18
- module InitializerMethods
19
- def acts_as_list(options = {})
20
- configuration = { :column => 'position' }
21
- configuration.update(options) if options.is_a?(Hash)
22
- configuration[:scope] = "#{configuration[:scope]}_id".intern if configuration[:scope].is_a?(Symbol) && configuration[:scope].to_s !~ /_id$/
11
+ def self.included(klass)
12
+ klass.extend InitializerMethods
13
+ key = self.default_position_column || :position
14
+ klass.field key, :type => Integer
15
+ klass.acts_as_list :column => key.to_s
16
+ end
23
17
 
24
- # write_inheritable_attribute :acts_as_list_options, configuration
25
- # class_inheritable_reader :acts_as_list_options
18
+ module InitializerMethods
19
+ def acts_as_list(options = {})
20
+ configuration = { :column => 'position' }
21
+ configuration.update(options) if options.is_a?(Hash)
22
+ configuration[:scope] = "#{configuration[:scope]}_id".intern if configuration[:scope].is_a?(Symbol) && configuration[:scope].to_s !~ /_id$/
26
23
 
27
24
  define_method :position_column do
28
25
  configuration[:column].to_s
29
26
  end
30
27
 
31
28
  if !configuration[:scope]
32
- define_method :scope_condition do
33
- {position_key.ne => nil}
34
- end
29
+ define_method :scope_condition do
30
+ {position_key.ne => nil}
31
+ end
35
32
  elsif configuration[:scope].is_a?(Symbol)
36
- define_method :scope_condition do
37
- { "#{configuration[:scope].to_s}" => "\#{#{configuration[:scope].to_s}}".to_i }.symbolize_keys!
38
- end
39
- else
40
- raise ArgumentError, "acts_as_list must either take a valid scope option or be in an embedded document and use the parent document as scope"
41
- end
42
-
43
- include ::Mongoid::EmbeddedHelper
44
- include InstanceMethods
45
- include Fields
46
- include Triggers
47
- extend Fields
48
- extend ClassMethods
49
- end
50
- end
51
-
33
+ define_method :scope_condition do
34
+ {configuration[:scope] => self[configuration[:scope]]}
35
+ end
36
+ else
37
+ raise ArgumentError, "acts_as_list must either take a valid scope option or be in an embedded document and use the parent document as scope"
38
+ end
39
+
40
+ include ::Mongoid::EmbeddedHelper
41
+ include InstanceMethods
42
+ include Fields
43
+ include Triggers
44
+ extend Fields
45
+ extend ClassMethods
46
+ end
47
+ end
48
+
52
49
  module ClassMethods
53
50
  def in_scope
54
51
  where(scope_condition)
55
- end
56
-
52
+ end
53
+
57
54
  def move_commands symbol
58
55
  case symbol
59
56
  when :symbol
@@ -65,15 +62,15 @@ module ActsAsList
65
62
  end
66
63
  end
67
64
  end
68
-
69
- module InstanceMethods
65
+
66
+ module InstanceMethods
70
67
  def move command
71
68
  if command.kind_of? Symbol
72
69
  case command
73
70
  when :highest, :top
74
71
  move_to_top
75
72
  when :lowest, :bottom
76
- move_to_bottom
73
+ move_to_bottom
77
74
  when :up, :higher
78
75
  move_higher
79
76
  when :down, :lower
@@ -81,11 +78,11 @@ module ActsAsList
81
78
  else
82
79
  raise ArgumentError, "unknown move command '#{command}', try one of #{self.class.move_commands_available}"
83
80
  end
84
- elsif command.kind_of? Hash
81
+ elsif command.kind_of? Hash
85
82
  other = command.values.first
86
83
  cmd = command.keys.first
87
84
  case cmd
88
- when :to
85
+ when :to
89
86
  move_to(other)
90
87
  when :above
91
88
  move_above(other)
@@ -96,10 +93,10 @@ module ActsAsList
96
93
  end
97
94
  else
98
95
  raise ArgumentError, "move command takes either a Symbol or Hash as an argument, not a #{command.class}"
99
- end
96
+ end
100
97
  end
101
-
102
-
98
+
99
+
103
100
  def order_by_position conditions, extras = []
104
101
  sub_collection = in_collection.where(conditions)
105
102
  sub_collection = if embedded?
@@ -108,11 +105,11 @@ module ActsAsList
108
105
  sub_collection.order_by(position_key.to_sym.asc)
109
106
  end
110
107
 
111
- if !extras.empty?
108
+ if !extras.empty?
112
109
  sub_collection = if embedded?
113
- sub_collection.sort do |x,y|
110
+ sub_collection.sort do |x,y|
114
111
  if x.my_position == y.my_position
115
- x.created_at <=> y.created_at
112
+ x.created_at <=> y.created_at
116
113
  else
117
114
  x.my_position <=> y.my_position
118
115
  end
@@ -121,21 +118,21 @@ module ActsAsList
121
118
  sub_collection.order_by(extras)
122
119
  end
123
120
  end
124
-
121
+
125
122
  sub_collection
126
123
  end
127
124
 
128
125
  # conditions, { position_column => 1 }
129
- def do_decrement( conditions, options)
126
+ def do_decrement( conditions, options)
130
127
  in_collection.where(conditions).adjust! position_key => -1
131
128
  end
132
129
 
133
- def do_increment( conditions, options)
130
+ def do_increment( conditions, options)
134
131
  in_collection.where(conditions).adjust! position_key => 1
135
132
  end
136
-
133
+
137
134
  def less_than_me
138
- { position_key.lt => my_position.to_i}
135
+ { position_key.lt => my_position.to_i}
139
136
  end
140
137
 
141
138
  def greater_than_me
@@ -146,7 +143,7 @@ module ActsAsList
146
143
  insert_in_list_at(position)
147
144
  end
148
145
 
149
- def move_to(position = 1)
146
+ def move_to(position = 1)
150
147
  insert_in_list_at(position)
151
148
  end
152
149
 
@@ -155,23 +152,23 @@ module ActsAsList
155
152
  move_to(new_pos)
156
153
  end
157
154
 
158
- def move_above(object)
155
+ def move_above(object)
159
156
  new_pos = ( self == object ) ? self.my_position : ((object.my_position > self.my_position) ? object.my_position - 1 : object.my_position)
160
157
  move_to(new_pos)
161
158
  end
162
159
 
163
- # Insert the item at the given position (defaults to the top position of 1).
160
+ # Insert the item at the given position (defaults to the top position of 1).
164
161
  def insert_in_list_at(position = 1)
165
162
  insert_at_position(position)
166
163
  end
167
164
 
168
165
  # Swap positions with the next lower item, if one exists.
169
- def move_lower
170
- low_item = lower_item
166
+ def move_lower
167
+ low_item = lower_item
171
168
  return unless low_item
172
169
 
173
- low_item.decrement_position
174
- increment_position
170
+ low_item.decrement_position
171
+ increment_position
175
172
  end
176
173
 
177
174
  # Swap positions with the next higher item, if one exists.
@@ -205,25 +202,25 @@ module ActsAsList
205
202
  def remove_from_list
206
203
  if in_list?
207
204
  decrement_positions_on_lower_items
208
- set_my_position nil
205
+ set_my_position nil
209
206
  end
210
207
  end
211
208
 
212
209
  # Increase the position of this item without adjusting the rest of the list.
213
210
  def increment_position
214
211
  return unless in_list?
215
- # in_collection.where(:pos => my_position).
216
- adjust!(position_key => 1)
217
- save!
212
+ # in_collection.where(:pos => my_position).
213
+ adjust!(position_key => 1)
214
+ save!
218
215
  end
219
216
 
220
217
  # Decrease the position of this item without adjusting the rest of the list.
221
218
  def decrement_position
222
219
  return unless in_list?
223
-
224
- # in_collection.where(:pos => my_position).
220
+
221
+ # in_collection.where(:pos => my_position).
225
222
  adjust!(position_key => -1)
226
- save!
223
+ save!
227
224
  end
228
225
 
229
226
  # Return +true+ if this object is the first in the list.
@@ -234,25 +231,23 @@ module ActsAsList
234
231
 
235
232
  # Return +true+ if this object is the last in the list.
236
233
  def last?
237
- return false unless in_list?
234
+ return false unless in_list?
238
235
  bottom_pos = bottom_position_in_list
239
236
  my_position == bottom_pos
240
237
  end
241
238
 
242
239
  # Return the next higher item in the list.
243
240
  def higher_item
244
- return nil unless in_list?
245
- conditions = scope_condition.merge!( less_than_me )
246
-
241
+ return nil unless in_list?
242
+ conditions = scope_condition.merge!( less_than_me )
247
243
  order_by_position(conditions).last
248
244
  end
249
245
 
250
246
  # Return the next lower item in the list.
251
247
  def lower_item
252
248
  return nil unless in_list?
253
-
254
- conditions = scope_condition.merge!( greater_than_me )
255
-
249
+
250
+ conditions = scope_condition.merge!( greater_than_me )
256
251
  order_by_position(conditions).first
257
252
  end
258
253
 
@@ -261,33 +256,32 @@ module ActsAsList
261
256
  !my_position.nil?
262
257
  end
263
258
 
264
- # sorts all items in the list
265
- # if two items have same position, the one created more recently goes first
266
- def sort
267
- conditions = scope_condition
268
-
259
+ # sorts all items in the list
260
+ # if two items have same position, the one created more recently goes first
261
+ def sort
262
+ conditions = scope_condition
269
263
  list_items = order_by_position(conditions, :created_at.desc).to_a
270
-
271
- list_items.each_with_index do |list_item, index|
272
- list_item.set_my_position index + 1
273
- end
274
- end
275
-
276
- private
277
-
264
+
265
+ list_items.each_with_index do |list_item, index|
266
+ list_item.set_my_position index + 1
267
+ end
268
+ end
269
+
270
+ private
271
+
278
272
  def add_to_list_top
279
273
  increment_positions_on_all_items
280
274
  end
281
275
 
282
- def add_to_list_bottom
276
+ def add_to_list_bottom
283
277
  bottom_pos = bottom_position_in_list.to_i
284
278
  set_my_position(bottom_pos + 1)
285
279
  end
286
280
 
287
281
  # Overwrite this method to define the scope of the list changes
288
282
  def scope_condition
289
- {}
290
- end
283
+ {}
284
+ end
291
285
 
292
286
  # Returns the bottom position number in the list.
293
287
  # bottom_position_in_list # => 2
@@ -298,38 +292,38 @@ module ActsAsList
298
292
 
299
293
  # Returns the bottom item
300
294
  def bottom_item(except = nil)
301
- conditions = scope_condition
295
+ conditions = scope_condition
302
296
  if except
303
297
  conditions.merge!( { position_key.ne => except.my_position } )
304
298
  end
305
299
 
306
- order_by_position(conditions).last
300
+ order_by_position(conditions).last
307
301
  end
308
302
 
309
303
  # Forces item to assume the bottom position in the list.
310
304
  def assume_bottom_position
311
- pos = bottom_position_in_list(self).to_i + 1
312
- set_my_position(pos)
305
+ pos = bottom_position_in_list(self).to_i + 1
306
+ set_my_position(pos)
313
307
  end
314
308
 
315
309
  # Forces item to assume the top position in the list.
316
310
  def assume_top_position
317
- set_my_position(1)
311
+ set_my_position(1)
318
312
  end
319
313
 
320
314
  # This has the effect of moving all the higher items up one.
321
315
  def decrement_positions_on_higher_items(position)
322
- conditions = scope_condition
323
- conditions.merge!( { position_key.lt => position } )
316
+ conditions = scope_condition
317
+ conditions.merge!( { position_key.lt => position } )
324
318
 
325
- decrease_all! in_collection.where(conditions)
319
+ decrease_all! in_collection.where(conditions)
326
320
  end
327
321
 
328
322
  # This has the effect of moving all the lower items up one.
329
323
  def decrement_positions_on_lower_items(max_pos = nil)
330
324
  return unless in_list?
331
- conditions = scope_condition
332
- conditions.merge!( greater_than_me )
325
+ conditions = scope_condition
326
+ conditions.merge!( greater_than_me )
333
327
  conditions.merge!({ position_key.lt => max_pos} ) if max_pos
334
328
 
335
329
  decrease_all! in_collection.where(conditions)
@@ -338,8 +332,8 @@ module ActsAsList
338
332
  # This has the effect of moving all the higher items down one.
339
333
  def increment_positions_on_higher_items(min_pos = nil)
340
334
  return unless in_list?
341
- conditions = scope_condition
342
- conditions.merge!( less_than_me )
335
+ conditions = scope_condition
336
+ conditions.merge!( less_than_me )
343
337
  conditions.merge!({ position_key.gt => min_pos} ) if min_pos
344
338
 
345
339
  increase_all! in_collection.where(conditions)
@@ -349,90 +343,85 @@ module ActsAsList
349
343
  collection.adjust!(position_key => number).each{|doc| doc.save}
350
344
  end
351
345
 
352
- def increase_all! collection
346
+ def increase_all! collection
353
347
  adjust_all! collection, 1
354
348
  end
355
349
 
356
- def decrease_all! collection
350
+ def decrease_all! collection
357
351
  adjust_all! collection, -1
358
352
  end
359
-
353
+
360
354
  # This has the effect of moving all the lower items down one.
361
355
  def increment_positions_on_lower_items(position)
362
- conditions = scope_condition
363
- conditions.merge!( { position_key.gte => position } )
356
+ conditions = scope_condition
357
+ conditions.merge!( { position_key.gte => position } )
364
358
 
365
- increase_all! in_collection.where(conditions)
359
+ increase_all! in_collection.where(conditions)
366
360
  end
367
361
 
368
362
  # Increments position (<tt>position_column</tt>) of all items in the list.
369
363
  def increment_positions_on_all_items
370
- conditions = scope_condition
371
-
372
- increase_all! in_collection.where(conditions)
364
+ conditions = scope_condition
365
+ increase_all! in_collection.where(conditions)
373
366
  end
374
367
 
375
368
  def insert_at_position(position)
376
369
  position = [position, 1].max
377
370
  remove_from_list
378
371
  increment_positions_on_lower_items(position)
379
- set_my_position(position)
372
+ set_my_position(position)
380
373
  end
381
374
  end
382
375
 
383
376
  module Triggers
384
- def after_parentize
377
+ def after_parentize
385
378
  # should register on root element to be called when root is saved first time!?
386
- end
379
+ end
387
380
 
388
381
  def init_list_item!
389
382
  self['created_at'] = Time.now
390
- self['updated_at'] = Time.now
383
+ self['updated_at'] = Time.now
391
384
  add_to_list_bottom unless in_list?
392
- end
385
+ end
393
386
 
394
387
  end
395
-
388
+
396
389
  module Fields
397
- def my_position
390
+ def my_position
398
391
  self[position_column]
399
392
  end
400
393
 
401
394
  def set_my_position new_position
402
- if new_position != my_position
403
- self[position_column] = new_position
395
+ if new_position != my_position
396
+ self.update_attributes position_column => new_position
404
397
  save!
405
398
  end
406
399
  end
407
400
 
408
- def [](field_name)
409
- self.send field_name
410
- end
401
+ def [](field_name)
402
+ self.send field_name
403
+ end
411
404
 
412
- def []=(key, value)
413
- if set_allowed?(key)
414
- @attributes[key.to_s] = value
415
- else
416
- self.send("#{key}=", value)
417
- end
418
- save!
419
- end
405
+ def []=(key, value)
406
+ @attributes[key.to_s] = value
407
+ save!
408
+ end
420
409
 
421
- def ==(other)
422
- return true if other.equal?(self)
423
- return true if other.instance_of?(self.class) and other.respond_to?('_id') and other._id == self._id
424
- false
425
- end
410
+ def ==(other)
411
+ return true if other.equal?(self)
412
+ return true if other.instance_of?(self.class) and other.respond_to?('_id') and other._id == self._id
413
+ false
414
+ end
426
415
 
427
416
  def position_key
428
- position_column.to_sym
417
+ position_column.to_sym
429
418
  end
430
- end
431
- end
419
+ end
420
+ end
432
421
  end
433
422
 
434
- class Array
423
+ class Array
435
424
  def init_list!
436
425
  each {|i| i.init_list_item! }
437
426
  end
438
- end
427
+ end