ar-orderable 1.0.5 → 1.0.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eef4d72d4d551698488cc09c1f8c3f61aa18d0d0
4
- data.tar.gz: 081e3058c8877e0c493b5835dd8bb3950df096cb
3
+ metadata.gz: 21bcc3926a7cbcadc327c1f008ca5e8aa95e954a
4
+ data.tar.gz: c0d61f2f0ab04dc166bdb5a01f13a22355624fd2
5
5
  SHA512:
6
- metadata.gz: cc0a587b1a6bf201eadeaed343ef9cc8860aba707a9cf77f050ab3a590a49794e32140cc738c77c34084845221d2c81b24a5518637110c738689b1b7d9e500c7
7
- data.tar.gz: ab8cf47b4a991fe8cf1b04aa9bb736646ec460401598d0c43422ceb594aed5e2682fba899c0c08ca4ca605fe3e5e421dbba247eead3dbb546c62a5a2619e74e8
6
+ metadata.gz: ea2627a7dd7bfe624ccda2af506c4863c9a72b86935c978d180651588cd87613991e4544ac076aab64b5650200cfb9cffce2b4b9fe1417658d04ad6bf09b78f9
7
+ data.tar.gz: 2843f200c252e198d48460e8adff5c4ef0f62dedca02f7273f45be74a81901c320b59f240dbccd3ab7efe1ac152c2fbdc058032a28b9842d1d0850aaeedf5d87
data/README.md CHANGED
@@ -6,19 +6,21 @@ Rails 3 plugin for simple ordering.
6
6
 
7
7
  Insert into your `Gemfile`:
8
8
 
9
- gem 'ar-orderable'
10
-
9
+ gem "ar-orderable"
10
+
11
11
  then `bundle install`
12
12
 
13
13
  ### Setup
14
14
 
15
- 1. Add order field, like "order_nr" as integer
16
- 2. In model add line "acts_as_orderable" and if needed add :column => "my_orderfield_name".
17
- 3. If your table already has some rows of data then use the 'order_unordered' after adding new column:
15
+ 1. Add order field, like `order_nr` as integer
16
+ 2. In model add line `acts_as_orderable` and if needed add options
17
+ - `column: "my_custom_order_field" # default it's order_nr`
18
+ - `scope: :locale # to order in some scope, you can add also as array [:locale, :some_type]`
19
+ 3. If your table already has some rows of data then call the `YourModel.order_unordered` after adding new column.
18
20
 
19
21
  Example migration:
20
22
 
21
- add_column :categories, :order_nr, :integer
23
+ add_column :categories, :order_nr, :integer # change to your column name
22
24
  Category.order_unordered # remove this for new table
23
25
  add_index :categories, :order_nr
24
26
 
@@ -44,4 +46,4 @@ To skip model callbacks and just update order information you can specify `:skip
44
46
 
45
47
  rspec spec # all examples should be green
46
48
 
47
- Copyright (c) 2009 IT House, released under the MIT license
49
+ Copyright (c) 2009 IT House, released under the MIT license
data/ar-orderable.gemspec CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "ar-orderable"
6
- s.version = '1.0.5'
6
+ s.version = '1.0.6'
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["ITHouse (Latvia)", "Gatis Tomsons"]
9
9
  s.email = "support@ithouse.lv"
data/lib/ar-orderable.rb CHANGED
@@ -8,17 +8,18 @@ module ActiveRecord
8
8
  attr_accessor :orderable_scope, :orderable_column, :skip_callbacks_for_orderable
9
9
 
10
10
  # @:column [string] column name
11
+ # @:scope [string] column name to scope by
12
+ # @:scope Array[string] column names to scope by
11
13
  # acts_as_orderable :column => "order_nr"
12
14
  def acts_as_orderable options = {}
13
15
  return unless self.connection.table_exists?(self.table_name)
14
16
  self.orderable_column = (options[:column] || "order_nr").to_s
15
17
  self.skip_callbacks_for_orderable = options[:skip_callbacks]
16
18
  if self.columns_hash.keys.include? self.orderable_column
17
- self.orderable_scope = options[:scope]
19
+ self.orderable_scope = Array(options[:scope])
18
20
  self.before_save :pre_save_ordering
19
21
  self.before_destroy :pre_destroy_ordering
20
22
  self.default_scope { order(self.orderable_column) }
21
- #self.validates_uniqueness_of self.orderable_column, :scope => @orderable_scope
22
23
  include ActiveRecord::Orderable::InstanceMethods
23
24
  else
24
25
  msg = "[IMPORTANT] ActiveRecord::Orderable plugin: class #{self} has missing column '#{self.orderable_column}'"
@@ -34,12 +35,12 @@ module ActiveRecord
34
35
 
35
36
  # updates all unordered items puts them into the end of list
36
37
  def order_unordered
37
- self.reset_column_information # because before this usual 'add_column' is executed and the new column isn't fetched yet
38
+ self.reset_column_information
38
39
  self.group(self.orderable_scope).each do |obj|
39
40
  unordered_conditions = "#{self.orderable_column} IS NULL OR #{self.table_name}.#{self.orderable_column} = 0"
40
41
  ordered_conditions = "#{self.orderable_column} IS NOT NULL AND #{self.table_name}.#{self.orderable_column} != 0"
41
42
  order_nr = obj.all_orderable.order(self.orderable_column).last[self.orderable_column] || 0
42
- obj.all_orderable.where(unordered_conditions).each do |item|
43
+ obj.all_orderable.where(unordered_conditions).find_each do |item|
43
44
  order_nr += 1
44
45
  raw_orderable_update(item.id, order_nr)
45
46
  end
@@ -72,9 +73,14 @@ module ActiveRecord
72
73
  move_to(self[self.class.orderable_column] + 1, options) if self[self.class.orderable_column]
73
74
  end
74
75
 
76
+ # returns all elements in current scope
75
77
  def all_orderable
76
- if self.class.orderable_scope
77
- self.class.where(:"#{self.class.orderable_scope}" => self[self.class.orderable_scope])
78
+ if self.class.orderable_scope.any?
79
+ scope = self.class.orderable_scope.inject({}) do |where, scope_name|
80
+ where[scope_name] = self[scope_name]
81
+ where
82
+ end
83
+ self.class.where(scope)
78
84
  else
79
85
  self.class.scoped
80
86
  end
@@ -97,7 +103,7 @@ module ActiveRecord
97
103
  end
98
104
 
99
105
  return unless self.all_orderable.where("id != ? and #{column_name} = ?", self.id, self[column_name]).count > 0
100
- self.all_orderable.where("#{self.class.table_name}.id != ?",self.id || 0).each do |item|
106
+ self.all_orderable.where("#{self.class.table_name}.id != ?",self.id || 0).find_each do |item|
101
107
  item[column_name] = 0 if item[column_name].nil?
102
108
  if self.id
103
109
  if item[column_name] > (self.send("#{column_name}_was") || 0 )
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar-orderable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - ITHouse (Latvia)
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-06 00:00:00.000000000 Z
12
+ date: 2013-12-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -71,7 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
71
71
  version: '0'
72
72
  requirements: []
73
73
  rubyforge_project:
74
- rubygems_version: 2.0.7
74
+ rubygems_version: 2.0.3
75
75
  signing_key:
76
76
  specification_version: 4
77
77
  summary: You can order AR records and skip callbacks