acts_as_positioned 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6d3bc41882a5401fb9cba86783a4ec62e0a51028
4
- data.tar.gz: 7dd0ca43f2a54ccc6697f58f892734f781f8e104
3
+ metadata.gz: 819a27e3d8d9285287dbe10dfb2185d3e0a1efee
4
+ data.tar.gz: 5516a75100c59844cf19a52ac92b3164a029d981
5
5
  SHA512:
6
- metadata.gz: 2a41117d8ce0709ddf8c10448880b75357f9699dde310ae4a40bcf5116d8ff18203bd7d1044d7eb5d8f4ad2b04e75461ea91eec1eebbb5654ec09ea68f79a7f2
7
- data.tar.gz: fd3424c2a28730f35e77bd08eaf4b5c7fca883e52e941eba8fe74734b53b54817ee7246fbe2bdc0407850dbc83864ba59010a2cfa6e2478cfb622f6296bcc1e9
6
+ metadata.gz: a1e97ab6a6a4983ca04fb6c8afe53f3411f3a270c5d299fc0bb13ed5a6be3e8d0118dcbfa0d8cacf871cef6451c556f3038dc73b7823f3162cc943741b2e3331
7
+ data.tar.gz: 0247be198970593479b415940b1c3f1af3beb05b6699805b5437d5540f8ad3f6cf6609b3276cc5318cd4a16dd0d13dd1a8e16b65e90917ef4f5cf7cfcbec8f63
@@ -30,17 +30,22 @@ module ActsAsPositioned
30
30
 
31
31
  private
32
32
 
33
+ def aap_execute_query(column, scope, downwards)
34
+ quoted_column = scope.connection.quote_column_name(column)
35
+ scope.update_all("#{quoted_column} = #{quoted_column} #{downwards ? '+' : '-'} 1")
36
+ end
37
+
33
38
  def aap_insert_position(column, scope_columns)
34
- scope = aap_scope(column, scope_columns)
35
- scope.where(scope.arel_table[column].gteq(send(column))).update_all("#{column} = #{column} + 1")
39
+ scope = aap_scope(column, scope_columns, false)
40
+ aap_execute_query(column, scope.where(scope.arel_table[column].gteq(send(column))), true)
36
41
  end
37
42
 
38
43
  def aap_remove_position(column, scope_columns)
39
44
  scope = aap_scope(column, scope_columns, true)
40
- scope.where(scope.arel_table[column].gt(send("#{column}_was"))).update_all("#{column} = #{column} - 1")
45
+ aap_execute_query(column, scope.where(scope.arel_table[column].gt(send("#{column}_was"))), false)
41
46
  end
42
47
 
43
- def aap_scope(column, scope_columns, use_old_values = false)
48
+ def aap_scope(column, scope_columns, use_old_values)
44
49
  # When using the old values, make sure to overwrite the attribute values with the old values.
45
50
  attrs = use_old_values ? attributes.merge(changed_attributes) : attributes
46
51
  self.class.base_class.where(attrs.slice(*scope_columns)).where.not(column => nil)
@@ -48,12 +53,11 @@ module ActsAsPositioned
48
53
 
49
54
  def aap_switch_positions(column, scope_columns)
50
55
  old_value, new_value = changes[column]
51
- from, to, sign = old_value < new_value ? [old_value + 1, new_value, '-'] : [new_value, old_value - 1, '+']
56
+ from = [old_value + 1, new_value].min
57
+ to = [old_value - 1, new_value].max
52
58
 
53
- scope = aap_scope(column, scope_columns)
54
- statement = "#{column} = #{column} #{sign} 1"
55
- statement = ", #{locking_column} = #{locking_column} + 1" if scope.locking_enabled?
56
- scope.where(column => from.eql?(to) ? from : from..to).update_all(statement)
59
+ aap_execute_query(column, aap_scope(column, scope_columns, false).where(column => from.eql?(to) ? from : from..to),
60
+ old_value > new_value)
57
61
  end
58
62
 
59
63
  def aap_update_position(column, scope_columns)
@@ -79,7 +83,7 @@ module ActsAsPositioned
79
83
  def aap_validate_position(column, scope_columns)
80
84
  return if errors[column].present? || (changes.keys & ([column] + scope_columns)).empty?
81
85
 
82
- scope = aap_scope(column, scope_columns)
86
+ scope = aap_scope(column, scope_columns, false)
83
87
  options = { attributes: column, allow_nil: true, greater_than_or_equal_to: 0, only_integer: true,
84
88
  less_than_or_equal_to: scope.where.not(scope.primary_key => id).count }
85
89
  ActiveModel::Validations::NumericalityValidator.new(options).validate(self)
data/test/test.sqlite3 CHANGED
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_positioned
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Walter Horstman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-02 00:00:00.000000000 Z
11
+ date: 2017-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord