ar-orderable 1.0.5 → 1.0.6

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: 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