ar-orderable 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec CHANGED
@@ -1,2 +1,2 @@
1
- --colour
2
- --format d
1
+ --colour
2
+ --format d
data/MIT-LICENSE CHANGED
@@ -1,20 +1,20 @@
1
- Copyright (c) 2009 IT House, Gatis Tomsons
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ Copyright (c) 2009 IT House, Gatis Tomsons
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,47 +1,47 @@
1
- ## Activerecord::Orderable
2
-
3
- Rails 3 plugin for simple ordering.
4
-
5
- ### Install
6
-
7
- Insert into your `Gemfile`:
8
-
9
- gem 'ar-orderable'
10
-
11
- then `bundle install`
12
-
13
- ### Setup
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:
18
-
19
- Example migration:
20
-
21
- add_column :categories, :order_nr, :integer
22
- Category.order_unordered # remove this for new table
23
- add_index :categories, :order_nr
24
-
25
- ### Examples
26
-
27
- To reorder items use the `move_to(<integer>)`, `move_up` and `move_down` methods, for example:
28
-
29
- item.move_to 3 # moved to 3rd position
30
- item.move_up # moved to 2rd position
31
- item.move_down # moved to 3d position
32
-
33
- To skip model callbacks and just update order information you can specify `:skip_callbacks => true` option:
34
-
35
- # in your model
36
- acts_as_orderable :skip_callbacks => true
37
-
38
- # or whenever you call one of the ordering methods
39
- item.move_to 3, :skip_callbacks => true
40
- item.move_up :skip_callbacks => true
41
- item.move_down :skip_callbacks => true
42
-
43
- ### Tests
44
-
45
- rspec spec # all examples should be green
46
-
1
+ ## Activerecord::Orderable
2
+
3
+ Rails 3 plugin for simple ordering.
4
+
5
+ ### Install
6
+
7
+ Insert into your `Gemfile`:
8
+
9
+ gem 'ar-orderable'
10
+
11
+ then `bundle install`
12
+
13
+ ### Setup
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:
18
+
19
+ Example migration:
20
+
21
+ add_column :categories, :order_nr, :integer
22
+ Category.order_unordered # remove this for new table
23
+ add_index :categories, :order_nr
24
+
25
+ ### Examples
26
+
27
+ To reorder items use the `move_to(<integer>)`, `move_up` and `move_down` methods, for example:
28
+
29
+ item.move_to 3 # moved to 3rd position
30
+ item.move_up # moved to 2rd position
31
+ item.move_down # moved to 3d position
32
+
33
+ To skip model callbacks and just update order information you can specify `:skip_callbacks => true` option:
34
+
35
+ # in your model
36
+ acts_as_orderable :skip_callbacks => true
37
+
38
+ # or whenever you call one of the ordering methods
39
+ item.move_to 3, :skip_callbacks => true
40
+ item.move_up :skip_callbacks => true
41
+ item.move_down :skip_callbacks => true
42
+
43
+ ### Tests
44
+
45
+ rspec spec # all examples should be green
46
+
47
47
  Copyright (c) 2009 IT House, released under the MIT license
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.2
1
+ 1.0.3
data/ar-orderable.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ar-orderable}
8
- s.version = "1.0.2"
8
+ s.version = "1.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Gatis Tomsons", "IT House"]
12
- s.date = %q{2011-08-10}
11
+ s.authors = [%q{Gatis Tomsons}, %q{IT House}]
12
+ s.date = %q{2011-11-08}
13
13
  s.description = %q{You can order AR records and skip callbacks}
14
14
  s.email = %q{gatis@ithouse.cc}
15
15
  s.extra_rdoc_files = [
@@ -31,9 +31,9 @@ Gem::Specification.new do |s|
31
31
  "spec/spec_helper.rb"
32
32
  ]
33
33
  s.homepage = %q{http://github.com/ithouse/ar-orderable}
34
- s.licenses = ["MIT"]
35
- s.require_paths = ["lib"]
36
- s.rubygems_version = %q{1.6.2}
34
+ s.licenses = [%q{MIT}]
35
+ s.require_paths = [%q{lib}]
36
+ s.rubygems_version = %q{1.8.8}
37
37
  s.summary = %q{Rails 3 plugin for simple ordering.}
38
38
 
39
39
  if s.respond_to? :specification_version then
data/lib/ar-orderable.rb CHANGED
@@ -78,37 +78,41 @@ module ActiveRecord # :nodoc:
78
78
  private
79
79
 
80
80
  def pre_save_ordering
81
- self[self.class.orderable_column] = 0 if self[self.class.orderable_column].nil?
81
+ column_name = self.class.orderable_column
82
+
83
+ self[column_name] = 0 if self[column_name].nil?
82
84
  if self.id
83
- if self[self.class.orderable_column] == 0
84
- self[self.class.orderable_column] = 1
85
+ if self[column_name] == 0
86
+ self[column_name] = 1
85
87
  end
86
- if self[self.class.orderable_column] > self.all_orderable.count
87
- self[self.class.orderable_column] = self[self.class.orderable_column] -1
88
+ if self[column_name] > self.all_orderable.count
89
+ self[column_name] = self[column_name] -1
88
90
  end
89
91
  else
90
- self[self.class.orderable_column] = self.all_orderable.count + 1 if self[self.class.orderable_column] == 0
92
+ self[column_name] = self.all_orderable.count + 1 if self[column_name].to_i == 0
91
93
  end
94
+
95
+ return unless self.all_orderable.where("id != ? and #{column_name} = ?", self.id, self[column_name]).count > 0
92
96
  self.all_orderable.where("#{self.class.table_name}.id != ?",self.id || 0).each do |item|
93
- item[self.class.orderable_column] = 0 if item[self.class.orderable_column].nil?
97
+ item[column_name] = 0 if item[column_name].nil?
94
98
  if self.id
95
- if item[self.class.orderable_column] > (self.send("#{self.class.orderable_column}_was") || 0 )
96
- if item[self.class.orderable_column] <= self[self.class.orderable_column]
97
- item[self.class.orderable_column] -= 1
99
+ if item[column_name] > (self.send("#{column_name}_was") || 0 )
100
+ if item[column_name] <= self[column_name]
101
+ item[column_name] -= 1
98
102
  end
99
103
  else
100
- if item[self.class.orderable_column] >= self[self.class.orderable_column]
101
- item[self.class.orderable_column] += 1
104
+ if item[column_name] >= self[column_name]
105
+ item[column_name] += 1
102
106
  end
103
107
  end
104
108
 
105
- if item[self.class.orderable_column] != item.send("#{self.class.orderable_column}_was")
106
- self.class.raw_orderable_update(item.id, item[self.class.orderable_column])
109
+ if item[column_name] != item.send("#{column_name}_was")
110
+ self.class.raw_orderable_update(item.id, item[column_name])
107
111
  end
108
112
  else
109
- if item[self.class.orderable_column] >= self[self.class.orderable_column]
110
- item[self.class.orderable_column] += 1
111
- self.class.raw_orderable_update(item.id, item[self.class.orderable_column])
113
+ if item[column_name] >= self[column_name]
114
+ item[column_name] += 1
115
+ self.class.raw_orderable_update(item.id, item[column_name])
112
116
  end
113
117
  end
114
118
  end
@@ -1,130 +1,141 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- describe ActiveRecord::Orderable do
4
- it "should order simple categories correctly" do
5
- 5.times{|i| Category.create(:name => "Cat #{i+1}")}
6
- Category.count.should == 5
7
- Category.first.order_nr.should == 1
8
- Category.last.order_nr.should == 5
9
- c = Category.first
10
- c.update_attribute(:order_nr, 4)
11
- Category.find_by_name("Cat 1").order_nr.should == 4
12
- Category.first.name.should == "Cat 2"
13
- c = Category.first
14
- Category.find_by_name("Cat 4").move_to 1
15
- Category.find_by_name("Cat 4").order_nr.should == 1
16
- Category.find(c.id).order_nr.should == 2
17
- end
18
-
19
- it "should order categories correct by scope" do
20
- cat_types = [
21
- CatType.create(:name => "Type 1"),
22
- CatType.create(:name => "Type 2")
23
- ]
24
-
25
- 5.times{|i| Category.create(:name => "Cat #{i+1}", :cat_type => cat_types.first)}
26
- 5.times{|i| Category.create(:name => "Cat #{i+6}", :cat_type => cat_types.last)}
27
-
28
- Category.find_by_name("Cat 9").move_to 1
29
- Category.find_by_name("Cat 9").order_nr.should == 1
30
- Category.find_by_name("Cat 6").order_nr.should == 2
31
- Category.find_by_name("Cat 7").order_nr.should == 3
32
- Category.find_by_name("Cat 8").order_nr.should == 4
33
- Category.find_by_name("Cat 10").order_nr.should == 5
34
-
35
- Category.find_by_name("Cat 7").move_to 5
36
-
37
- Category.find_by_name("Cat 9").order_nr.should == 1
38
- Category.find_by_name("Cat 6").order_nr.should == 2
39
- Category.find_by_name("Cat 8").order_nr.should == 3
40
- Category.find_by_name("Cat 10").order_nr.should == 4
41
- Category.find_by_name("Cat 7").order_nr.should == 5
42
-
43
- Category.find_by_name("Cat 7").move_to 4
44
-
45
- Category.find_by_name("Cat 9").order_nr.should == 1
46
- Category.find_by_name("Cat 6").order_nr.should == 2
47
- Category.find_by_name("Cat 8").order_nr.should == 3
48
- Category.find_by_name("Cat 7").order_nr.should == 4
49
- Category.find_by_name("Cat 10").order_nr.should == 5
50
-
51
- Category.find_by_name("Cat 9").move_to 5
52
-
53
- Category.find_by_name("Cat 6").order_nr.should == 1
54
- Category.find_by_name("Cat 8").order_nr.should == 2
55
- Category.find_by_name("Cat 7").order_nr.should == 3
56
- Category.find_by_name("Cat 10").order_nr.should == 4
57
- Category.find_by_name("Cat 9").order_nr.should == 5
58
-
59
- Category.find_by_name("Cat 10").move_to 2
60
-
61
- Category.find_by_name("Cat 6").order_nr.should == 1
62
- Category.find_by_name("Cat 10").order_nr.should == 2
63
- Category.find_by_name("Cat 8").order_nr.should == 3
64
- Category.find_by_name("Cat 7").order_nr.should == 4
65
- Category.find_by_name("Cat 9").order_nr.should == 5
66
- end
67
-
68
- it "should create unordered list and order it with order_unordered method" do
69
- 1.upto(4){|i| Category.create(:name => "Cat #{i}")}
70
- cat = Category.create(:name => "Cat 0")
71
- Category.update_all("order_nr = NULL")
72
- Category.order_unordered
73
- cat.order_nr.should_not == 1
74
- cat.move_to 1
75
- cat.reload
76
- cat.order_nr.should == 1
77
- Category.find_by_name("Cat 4").order_nr.should == 5
78
- end
79
-
80
- it "should create scoped unordered list and order it with order_unordered method" do
81
- cat_types = [
82
- CatType.create(:name => "Type 1"),
83
- CatType.create(:name => "Type 2")
84
- ]
85
- 5.times{|i| Category.create(:name => "Cat #{i+1}", :cat_type => cat_types.first)}
86
- 5.times{|i| Category.create(:name => "Cat #{i+6}", :cat_type => cat_types.last)}
87
- Category.update_all("order_nr = NULL")
88
- Category.all.map(&:order_nr).should == [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]
89
- Category.order_unordered
90
- Category.all.map(&:order_nr).should == [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
91
- end
92
-
93
- it "should move_up" do
94
- 5.times{|i| Category.create(:name => "Cat #{i+1}")}
95
- c = Category.find_by_name("Cat 2")
96
- c.order_nr.should == 2
97
- c.move_up
98
- c.reload
99
- c.order_nr.should == 1
100
- c.move_up
101
- c.reload
102
- c.order_nr.should == 1
103
- end
104
-
105
- it "should move_down" do
106
- 5.times{|i| Category.create(:name => "Cat #{i+1}")}
107
- c = Category.find_by_name("Cat 2")
108
- c.order_nr.should == 2
109
- c.move_down
110
- c.reload
111
- c.order_nr.should == 3
112
- c.move_to(5)
113
- c.reload
114
- c.order_nr.should == 5
115
- c.move_down
116
- c.reload
117
- c.order_nr.should == 5
118
- end
119
-
120
- it "should skip_callbacks" do
121
- 5.times{|i| Category.create(:name => "Cat #{i+1}")}
122
- c = Category.find_by_name("Cat 2")
123
- c.background_task.should be_nil
124
- c.move_down
125
- c.background_task.should == :done
126
- c.background_task = nil
127
- c.move_up(:skip_callbacks => true)
128
- c.background_task.should be_nil
129
- end
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe ActiveRecord::Orderable do
4
+ it "should order simple categories correctly" do
5
+ 5.times{|i| Category.create(:name => "Cat #{i+1}")}
6
+ Category.count.should == 5
7
+ Category.first.order_nr.should == 1
8
+ Category.last.order_nr.should == 5
9
+ c = Category.first
10
+ c.update_attribute(:order_nr, 4)
11
+ Category.find_by_name("Cat 1").order_nr.should == 4
12
+ Category.first.name.should == "Cat 2"
13
+ c = Category.first
14
+ Category.find_by_name("Cat 4").move_to 1
15
+ Category.find_by_name("Cat 4").order_nr.should == 1
16
+ Category.find(c.id).order_nr.should == 2
17
+ end
18
+
19
+ it "should order categories correct by scope" do
20
+ cat_types = [
21
+ CatType.create(:name => "Type 1"),
22
+ CatType.create(:name => "Type 2")
23
+ ]
24
+
25
+ 5.times{|i| Category.create(:name => "Cat #{i+1}", :cat_type => cat_types.first)}
26
+ 5.times{|i| Category.create(:name => "Cat #{i+6}", :cat_type => cat_types.last)}
27
+
28
+ Category.find_by_name("Cat 9").move_to 1
29
+ Category.find_by_name("Cat 9").order_nr.should == 1
30
+ Category.find_by_name("Cat 6").order_nr.should == 2
31
+ Category.find_by_name("Cat 7").order_nr.should == 3
32
+ Category.find_by_name("Cat 8").order_nr.should == 4
33
+ Category.find_by_name("Cat 10").order_nr.should == 5
34
+
35
+ Category.find_by_name("Cat 7").move_to 5
36
+
37
+ Category.find_by_name("Cat 9").order_nr.should == 1
38
+ Category.find_by_name("Cat 6").order_nr.should == 2
39
+ Category.find_by_name("Cat 8").order_nr.should == 3
40
+ Category.find_by_name("Cat 10").order_nr.should == 4
41
+ Category.find_by_name("Cat 7").order_nr.should == 5
42
+
43
+ Category.find_by_name("Cat 7").move_to 4
44
+
45
+ Category.find_by_name("Cat 9").order_nr.should == 1
46
+ Category.find_by_name("Cat 6").order_nr.should == 2
47
+ Category.find_by_name("Cat 8").order_nr.should == 3
48
+ Category.find_by_name("Cat 7").order_nr.should == 4
49
+ Category.find_by_name("Cat 10").order_nr.should == 5
50
+
51
+ Category.find_by_name("Cat 9").move_to 5
52
+
53
+ Category.find_by_name("Cat 6").order_nr.should == 1
54
+ Category.find_by_name("Cat 8").order_nr.should == 2
55
+ Category.find_by_name("Cat 7").order_nr.should == 3
56
+ Category.find_by_name("Cat 10").order_nr.should == 4
57
+ Category.find_by_name("Cat 9").order_nr.should == 5
58
+
59
+ Category.find_by_name("Cat 10").move_to 2
60
+
61
+ Category.find_by_name("Cat 6").order_nr.should == 1
62
+ Category.find_by_name("Cat 10").order_nr.should == 2
63
+ Category.find_by_name("Cat 8").order_nr.should == 3
64
+ Category.find_by_name("Cat 7").order_nr.should == 4
65
+ Category.find_by_name("Cat 9").order_nr.should == 5
66
+ end
67
+
68
+ it "should create unordered list and order it with order_unordered method" do
69
+ 1.upto(4){|i| Category.create(:name => "Cat #{i}")}
70
+ cat = Category.create(:name => "Cat 0")
71
+ Category.update_all("order_nr = NULL")
72
+ Category.order_unordered
73
+ cat.order_nr.should_not == 1
74
+ cat.move_to 1
75
+ cat.reload
76
+ cat.order_nr.should == 1
77
+ Category.find_by_name("Cat 4").order_nr.should == 5
78
+ end
79
+
80
+ it "should create scoped unordered list and order it with order_unordered method" do
81
+ cat_types = [
82
+ CatType.create(:name => "Type 1"),
83
+ CatType.create(:name => "Type 2")
84
+ ]
85
+ 5.times{|i| Category.create(:name => "Cat #{i+1}", :cat_type => cat_types.first)}
86
+ 5.times{|i| Category.create(:name => "Cat #{i+6}", :cat_type => cat_types.last)}
87
+ Category.update_all("order_nr = NULL")
88
+ Category.all.map(&:order_nr).should == [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]
89
+ Category.order_unordered
90
+ Category.all.map(&:order_nr).should == [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]
91
+ end
92
+
93
+ it "should move_up" do
94
+ 5.times{|i| Category.create(:name => "Cat #{i+1}")}
95
+ c = Category.find_by_name("Cat 2")
96
+ c.order_nr.should == 2
97
+ c.move_up
98
+ c.reload
99
+ c.order_nr.should == 1
100
+ c.move_up
101
+ c.reload
102
+ c.order_nr.should == 1
103
+ end
104
+
105
+ it "should move_down" do
106
+ 5.times{|i| Category.create(:name => "Cat #{i+1}")}
107
+ c = Category.find_by_name("Cat 2")
108
+ c.order_nr.should == 2
109
+ c.move_down
110
+ c.reload
111
+ c.order_nr.should == 3
112
+ c.move_to(5)
113
+ c.reload
114
+ c.order_nr.should == 5
115
+ c.move_down
116
+ c.reload
117
+ c.order_nr.should == 5
118
+ end
119
+
120
+ it "should skip_callbacks" do
121
+ 5.times{|i| Category.create(:name => "Cat #{i+1}")}
122
+ c = Category.find_by_name("Cat 2")
123
+ c.background_task.should be_nil
124
+ c.move_down
125
+ c.background_task.should == :done
126
+ c.background_task = nil
127
+ c.move_up(:skip_callbacks => true)
128
+ c.background_task.should be_nil
129
+ end
130
+
131
+ it "should not reorder elements after repeated save" do
132
+ 5.times{|i| Category.create(:name => "Cat #{i+1}")}
133
+ Category.first.order_nr.should == 1
134
+ Category.last.order_nr.should == 5
135
+ c = Category.new(:name => "Cat new")
136
+ c.must_resave = true
137
+ c.save
138
+ Category.first.order_nr.should == 1
139
+ Category.last.order_nr.should == 6
140
+ end
130
141
  end
data/spec/spec.opts CHANGED
@@ -1,3 +1,3 @@
1
- --colour
2
- --reverse
1
+ --colour
2
+ --reverse
3
3
  --backtrace
data/spec/spec_helper.rb CHANGED
@@ -1,53 +1,61 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
10
-
11
- require 'rails'
12
- require 'active_record'
13
- require 'rspec'
14
- require 'logger'
15
- require 'ruby-debug'
16
- require 'ar-orderable'
17
- ActiveRecord::Base.logger = Logger.new(File.open("#{File.dirname(__FILE__)}/database.log", 'w+'))
18
- ActiveRecord::Base.establish_connection({ :database => ":memory:", :adapter => 'sqlite3', :timeout => 500 })
19
-
20
- ActiveRecord::Schema.define do
21
- create_table :categories, :force => true do |t|
22
- t.string :name
23
- t.integer :cat_type_id
24
- t.integer :order_nr
25
- end
26
- create_table :cat_types, :force => true do |t|
27
- t.string :name
28
- end
29
- end
30
-
31
- class CatType < ActiveRecord::Base
32
- has_many :categories, :dependent => :destroy
33
- end
34
-
35
- class Category < ActiveRecord::Base
36
- belongs_to :cat_type
37
- acts_as_orderable :scope => :cat_type_id
38
- after_save :do_background_task
39
- attr_accessor :background_task
40
-
41
- private
42
-
43
- def do_background_task
44
- self.background_task = :done
45
- end
46
- end
47
-
48
- RSpec.configure do |config|
49
- config.before(:each) do
50
- Category.destroy_all
51
- CatType.destroy_all
52
- end
53
- end
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+
11
+ require 'rails'
12
+ require 'active_record'
13
+ require 'rspec'
14
+ require 'logger'
15
+ require 'ruby-debug'
16
+ require 'ar-orderable'
17
+ ActiveRecord::Base.logger = Logger.new(File.open("#{File.dirname(__FILE__)}/database.log", 'w+'))
18
+ ActiveRecord::Base.establish_connection({ :database => ":memory:", :adapter => 'sqlite3', :timeout => 500 })
19
+
20
+ ActiveRecord::Schema.define do
21
+ create_table :categories, :force => true do |t|
22
+ t.string :name
23
+ t.integer :cat_type_id
24
+ t.integer :order_nr
25
+ end
26
+ create_table :cat_types, :force => true do |t|
27
+ t.string :name
28
+ end
29
+ end
30
+
31
+ class CatType < ActiveRecord::Base
32
+ has_many :categories, :dependent => :destroy
33
+ end
34
+
35
+ class Category < ActiveRecord::Base
36
+ belongs_to :cat_type
37
+ acts_as_orderable :scope => :cat_type_id
38
+ after_save :do_background_task
39
+ after_save :resave_record
40
+ attr_accessor :background_task, :must_resave
41
+
42
+ private
43
+
44
+ def do_background_task
45
+ self.background_task = :done
46
+ end
47
+
48
+ def resave_record
49
+ if @must_resave
50
+ @must_resave = false
51
+ self.save!
52
+ end
53
+ end
54
+ end
55
+
56
+ RSpec.configure do |config|
57
+ config.before(:each) do
58
+ Category.destroy_all
59
+ CatType.destroy_all
60
+ end
61
+ end
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.2
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,12 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-08-10 00:00:00.000000000 +03:00
14
- default_executable:
13
+ date: 2011-11-08 00:00:00.000000000Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: rails
18
- requirement: &84282840 !ruby/object:Gem::Requirement
17
+ requirement: &17147740 !ruby/object:Gem::Requirement
19
18
  none: false
20
19
  requirements:
21
20
  - - ! '>='
@@ -23,10 +22,10 @@ dependencies:
23
22
  version: 3.0.0
24
23
  type: :runtime
25
24
  prerelease: false
26
- version_requirements: *84282840
25
+ version_requirements: *17147740
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: sqlite3
29
- requirement: &84282600 !ruby/object:Gem::Requirement
28
+ requirement: &17146680 !ruby/object:Gem::Requirement
30
29
  none: false
31
30
  requirements:
32
31
  - - ~>
@@ -34,10 +33,10 @@ dependencies:
34
33
  version: 1.3.4
35
34
  type: :development
36
35
  prerelease: false
37
- version_requirements: *84282600
36
+ version_requirements: *17146680
38
37
  - !ruby/object:Gem::Dependency
39
38
  name: rspec
40
- requirement: &84282360 !ruby/object:Gem::Requirement
39
+ requirement: &17145080 !ruby/object:Gem::Requirement
41
40
  none: false
42
41
  requirements:
43
42
  - - ~>
@@ -45,10 +44,10 @@ dependencies:
45
44
  version: 2.6.0
46
45
  type: :development
47
46
  prerelease: false
48
- version_requirements: *84282360
47
+ version_requirements: *17145080
49
48
  - !ruby/object:Gem::Dependency
50
49
  name: ruby-debug19
51
- requirement: &84282120 !ruby/object:Gem::Requirement
50
+ requirement: &17144280 !ruby/object:Gem::Requirement
52
51
  none: false
53
52
  requirements:
54
53
  - - ~>
@@ -56,10 +55,10 @@ dependencies:
56
55
  version: 0.11.6
57
56
  type: :development
58
57
  prerelease: false
59
- version_requirements: *84282120
58
+ version_requirements: *17144280
60
59
  - !ruby/object:Gem::Dependency
61
60
  name: bundler
62
- requirement: &84281880 !ruby/object:Gem::Requirement
61
+ requirement: &17143240 !ruby/object:Gem::Requirement
63
62
  none: false
64
63
  requirements:
65
64
  - - ~>
@@ -67,10 +66,10 @@ dependencies:
67
66
  version: 1.0.0
68
67
  type: :development
69
68
  prerelease: false
70
- version_requirements: *84281880
69
+ version_requirements: *17143240
71
70
  - !ruby/object:Gem::Dependency
72
71
  name: jeweler
73
- requirement: &84281640 !ruby/object:Gem::Requirement
72
+ requirement: &17142480 !ruby/object:Gem::Requirement
74
73
  none: false
75
74
  requirements:
76
75
  - - ~>
@@ -78,10 +77,10 @@ dependencies:
78
77
  version: 1.6.4
79
78
  type: :development
80
79
  prerelease: false
81
- version_requirements: *84281640
80
+ version_requirements: *17142480
82
81
  - !ruby/object:Gem::Dependency
83
82
  name: rcov
84
- requirement: &84281400 !ruby/object:Gem::Requirement
83
+ requirement: &17141560 !ruby/object:Gem::Requirement
85
84
  none: false
86
85
  requirements:
87
86
  - - ! '>='
@@ -89,7 +88,7 @@ dependencies:
89
88
  version: '0'
90
89
  type: :development
91
90
  prerelease: false
92
- version_requirements: *84281400
91
+ version_requirements: *17141560
93
92
  description: You can order AR records and skip callbacks
94
93
  email: gatis@ithouse.cc
95
94
  executables: []
@@ -110,7 +109,6 @@ files:
110
109
  - spec/ar-orderable_spec.rb
111
110
  - spec/spec.opts
112
111
  - spec/spec_helper.rb
113
- has_rdoc: true
114
112
  homepage: http://github.com/ithouse/ar-orderable
115
113
  licenses:
116
114
  - MIT
@@ -126,7 +124,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
126
124
  version: '0'
127
125
  segments:
128
126
  - 0
129
- hash: -365549233
127
+ hash: -531530570232780643
130
128
  required_rubygems_version: !ruby/object:Gem::Requirement
131
129
  none: false
132
130
  requirements:
@@ -135,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
133
  version: '0'
136
134
  requirements: []
137
135
  rubyforge_project:
138
- rubygems_version: 1.6.2
136
+ rubygems_version: 1.8.8
139
137
  signing_key:
140
138
  specification_version: 3
141
139
  summary: Rails 3 plugin for simple ordering.