acts_as_ordered_tree 0.0.7 → 1.0.3

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.
@@ -0,0 +1,23 @@
1
+ ActiveRecord::Schema.define(:version => 0) do
2
+ create_table :categories, :force => true do |t|
3
+ t.column :name, :string
4
+ t.column :parent_id, :integer
5
+ t.column :position, :integer
6
+ t.column :depth, :integer
7
+ t.column :categories_count, :integer
8
+ end
9
+
10
+ create_table :renamed_columns, :force => true do |t|
11
+ t.column :name, :string
12
+ t.column :mother_id, :integer
13
+ t.column :red, :integer
14
+ t.column :pitch, :integer
15
+ end
16
+
17
+ create_table :scoped, :force => true do |t|
18
+ t.column :scope_type, :string
19
+ t.column :name, :string
20
+ t.column :parent_id, :integer
21
+ t.column :position, :integer
22
+ end
23
+ end
@@ -0,0 +1,46 @@
1
+ test_dir = File.dirname(__FILE__)
2
+
3
+ require "rubygems"
4
+ require "bundler/setup"
5
+
6
+ require "rspec"
7
+ require "rspec-expectations"
8
+
9
+ begin
10
+ require "simplecov"
11
+ SimpleCov.start
12
+ rescue LoadError
13
+ #ignore
14
+ end
15
+
16
+ require "active_model"
17
+ require "active_record"
18
+ require "action_controller"
19
+ require "factory_girl"
20
+
21
+ require "acts_as_ordered_tree"
22
+ require "logger"
23
+
24
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
25
+ ActiveRecord::Base.logger = Logger.new(ENV['DEBUG'] ? $stderr : '/dev/null')
26
+ ActiveRecord::Migration.verbose = false
27
+ load(File.join(test_dir, "db", "schema.rb"))
28
+
29
+ require "rspec/rails"
30
+ require "shoulda-matchers"
31
+ require "support/models"
32
+ require "support/factories"
33
+ require "support/matchers"
34
+
35
+ RSpec.configure do |config|
36
+ config.include FactoryGirl::Syntax::Methods
37
+ config.use_transactional_fixtures = true
38
+
39
+ config.around :each do |example|
40
+ ActiveRecord::Base.transaction do
41
+ example.run
42
+
43
+ raise ActiveRecord::Rollback
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,14 @@
1
+ FactoryGirl.define do
2
+ factory :default do
3
+ sequence(:name) { |n| "category #{n}" }
4
+ end
5
+
6
+ factory :default_with_counter_cache do
7
+ sequence(:name) { |n| "category #{n}" }
8
+ end
9
+
10
+ factory :scoped do
11
+ sequence(:scope_type) { |n| "type_#{n}" }
12
+ sequence(:name) { |n| "category #{n}" }
13
+ end
14
+ end
@@ -0,0 +1,132 @@
1
+ module RSpec::Matchers
2
+
3
+ # it { should fire_callback(:around_move).when_calling(:save) }
4
+ # it { should fire_callback(:after_move).when_calling(:move_to_left_of, lft_id) }
5
+ # it { should fire_callback(:around_move).owhen_callingn(:save).at_least(1).time }
6
+ # it { should fire_callback(:around_move).when_calling(:save).at_most(2).times }
7
+ # it { should fire_callback(:around_move).when_calling(:save).exactly(2).times }
8
+ # it { should fire_callback(:around_move).when_calling(:save).once }
9
+ # it { should fire_callback(:around_move).when_calling(:save).twice }
10
+ def fire_callback(name)
11
+ FireCallbackMatcher.new(name)
12
+ end
13
+
14
+ # example { expect(record1, record2, record3).to be_sorted }
15
+ def be_sorted
16
+ OrderMatcher.new
17
+ end
18
+
19
+ class FireCallbackMatcher
20
+ attr_reader :failure_message, :negative_failure_message
21
+
22
+ def initialize(callback_name)
23
+ @callback = callback_name
24
+ @method = :save
25
+ @args = []
26
+
27
+ @limit_min = 1
28
+ @limit_max = nil
29
+ end
30
+
31
+ def when_calling(method, *args)
32
+ @method = method
33
+ @args = args
34
+ self
35
+ end
36
+
37
+ def times
38
+ self
39
+ end
40
+ alias time times
41
+
42
+ def at_least(times)
43
+ @limit_min = times == :once ? 1 : times
44
+ self
45
+ end
46
+
47
+ def at_most(times)
48
+ @limit_max = times == :once ? 1 : times
49
+ self
50
+ end
51
+
52
+ def exactly(times)
53
+ at_least(times).at_most(times)
54
+ self
55
+ end
56
+
57
+ def once
58
+ exactly(1)
59
+ end
60
+
61
+ def twice
62
+ exactly(2)
63
+ end
64
+
65
+ def description
66
+ "fire callback #@callback when #@method is called"
67
+ end
68
+
69
+ def matches?(subject)
70
+ @subject = subject
71
+
72
+ raise 'Method required' unless @method
73
+
74
+ with_temporary_callback do |ivar|
75
+ @subject.send(@method, *@args)
76
+
77
+ @received = @subject.instance_variable_get ivar
78
+
79
+ (@limit_min..@limit_max || 1000).include?(@received)
80
+ end
81
+ end
82
+
83
+ def failure_message_for_should
84
+ "expected #{@subject.inspect} to fire callback :#@callback when #@method is called (#@limit_min..#@limit_max) times, #@received times fired"
85
+ end
86
+
87
+ def failure_message_for_should_not
88
+ "expected #{@subject.inspect} not to fire callback :#@callback when #@method is called (#@limit_min..#@limit_max) times, #@received times fired"
89
+ end
90
+
91
+ private
92
+ def with_temporary_callback
93
+ kind, name = @callback.to_s.split('_')
94
+
95
+ method_name = :"__temporary_callback_#{object_id}"
96
+
97
+ @subject.class.class_eval <<-CODE
98
+ def #{method_name}
99
+ @#{method_name} ||= 0
100
+ @#{method_name} += 1
101
+ yield if block_given?
102
+ end
103
+ #{kind}_#{name} :#{method_name}
104
+ CODE
105
+
106
+ result = yield :"@#{method_name}"
107
+
108
+ @subject.class.class_eval <<-CODE
109
+ skip_callback :#{name}, :#{kind}, :#{method_name}
110
+ undef_method :#{method_name}
111
+ CODE
112
+
113
+ result
114
+ end
115
+ end
116
+
117
+ class OrderMatcher
118
+ def matches?(*records)
119
+ @records = Array.wrap(records).flatten
120
+
121
+ @records.sort_by { |record| record[record.position_column] } == @records
122
+ end
123
+
124
+ def failure_message_for_should
125
+ "expected #{@records.inspect} to be ordered by position, but they are not"
126
+ end
127
+
128
+ def failure_message_for_should_not
129
+ "expected #{@records.inspect} not to be ordered by position, but they are"
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,23 @@
1
+ class Default < ActiveRecord::Base
2
+ self.table_name = "categories"
3
+
4
+ acts_as_ordered_tree
5
+ end
6
+
7
+ class RenamedColumns < ActiveRecord::Base
8
+ acts_as_ordered_tree :parent_column => :mother_id,
9
+ :position_column => :red,
10
+ :depth_column => :pitch
11
+ end
12
+
13
+ class DefaultWithCounterCache < ActiveRecord::Base
14
+ self.table_name = "categories"
15
+
16
+ acts_as_ordered_tree :counter_cache => :categories_count
17
+ end
18
+
19
+ class Scoped < ActiveRecord::Base
20
+ self.table_name = "scoped"
21
+
22
+ acts_as_ordered_tree :scope => :scope_type
23
+ end
metadata CHANGED
@@ -1,126 +1,188 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_ordered_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Alexei Mikhailov
9
+ - Vladimir Kuznetsov
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2012-02-15 00:00:00.000000000Z
13
+ date: 2012-08-16 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
- name: activesupport
16
- requirement: &19980600 !ruby/object:Gem::Requirement
16
+ name: activerecord
17
+ requirement: !ruby/object:Gem::Requirement
17
18
  none: false
18
19
  requirements:
19
- - - ~>
20
+ - - ! '>='
20
21
  - !ruby/object:Gem::Version
21
- version: '3'
22
+ version: 3.0.0
22
23
  type: :runtime
23
24
  prerelease: false
24
- version_requirements: *19980600
25
- - !ruby/object:Gem::Dependency
26
- name: activerecord
27
- requirement: &19980040 !ruby/object:Gem::Requirement
25
+ version_requirements: !ruby/object:Gem::Requirement
28
26
  none: false
29
27
  requirements:
30
- - - ~>
28
+ - - ! '>='
31
29
  - !ruby/object:Gem::Version
32
- version: '3'
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: *19980040
30
+ version: 3.0.0
36
31
  - !ruby/object:Gem::Dependency
37
- name: acts_as_tree
38
- requirement: &19979360 !ruby/object:Gem::Requirement
32
+ name: bundler
33
+ requirement: !ruby/object:Gem::Requirement
39
34
  none: false
40
35
  requirements:
41
- - - ~>
36
+ - - ! '>='
42
37
  - !ruby/object:Gem::Version
43
- version: '0.1'
44
- type: :runtime
38
+ version: '1.0'
39
+ type: :development
45
40
  prerelease: false
46
- version_requirements: *19979360
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '1.0'
47
47
  - !ruby/object:Gem::Dependency
48
- name: acts_as_list
49
- requirement: &19978620 !ruby/object:Gem::Requirement
48
+ name: rails
49
+ requirement: !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
- - - ~>
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
- version: '0.1'
55
- type: :runtime
54
+ version: 3.0.0
55
+ type: :development
56
56
  prerelease: false
57
- version_requirements: *19978620
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: 3.0.0
58
63
  - !ruby/object:Gem::Dependency
59
64
  name: rspec
60
- requirement: &19977860 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
61
66
  none: false
62
67
  requirements:
63
68
  - - ! '>='
64
69
  - !ruby/object:Gem::Version
65
- version: '0'
70
+ version: '2.11'
66
71
  type: :development
67
72
  prerelease: false
68
- version_requirements: *19977860
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '2.11'
69
79
  - !ruby/object:Gem::Dependency
70
- name: simplecov
71
- requirement: &19977100 !ruby/object:Gem::Requirement
80
+ name: rspec-rails
81
+ requirement: !ruby/object:Gem::Requirement
72
82
  none: false
73
83
  requirements:
74
84
  - - ! '>='
75
85
  - !ruby/object:Gem::Version
76
- version: '0'
86
+ version: '2.11'
77
87
  type: :development
78
88
  prerelease: false
79
- version_requirements: *19977100
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '2.11'
80
95
  - !ruby/object:Gem::Dependency
81
- name: sqlite3
82
- requirement: &19976120 !ruby/object:Gem::Requirement
96
+ name: shoulda-matchers
97
+ requirement: !ruby/object:Gem::Requirement
83
98
  none: false
84
99
  requirements:
85
100
  - - ! '>='
86
101
  - !ruby/object:Gem::Version
87
- version: '0'
102
+ version: 1.2.0
88
103
  type: :development
89
104
  prerelease: false
90
- version_requirements: *19976120
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: 1.2.0
91
111
  - !ruby/object:Gem::Dependency
92
- name: bundler
93
- requirement: &19945820 !ruby/object:Gem::Requirement
112
+ name: factory_girl
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - <
117
+ - !ruby/object:Gem::Version
118
+ version: '3'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - <
125
+ - !ruby/object:Gem::Version
126
+ version: '3'
127
+ - !ruby/object:Gem::Dependency
128
+ name: factory_girl_rails
129
+ requirement: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - <
133
+ - !ruby/object:Gem::Version
134
+ version: '3'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - <
141
+ - !ruby/object:Gem::Version
142
+ version: '3'
143
+ - !ruby/object:Gem::Dependency
144
+ name: appraisal
145
+ requirement: !ruby/object:Gem::Requirement
94
146
  none: false
95
147
  requirements:
96
148
  - - ! '>='
97
149
  - !ruby/object:Gem::Version
98
- version: '0'
150
+ version: 0.4.0
99
151
  type: :development
100
152
  prerelease: false
101
- version_requirements: *19945820
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: 0.4.0
102
159
  description:
103
160
  email:
104
161
  - amikhailov83@gmail.com
162
+ - kv86@mail.ru
105
163
  executables: []
106
164
  extensions: []
107
165
  extra_rdoc_files: []
108
166
  files:
109
167
  - .gitignore
168
+ - .rspec
169
+ - Appraisals
110
170
  - Gemfile
111
171
  - README.md
112
172
  - Rakefile
113
173
  - acts_as_ordered_tree.gemspec
114
- - init.rb
115
174
  - lib/acts_as_ordered_tree.rb
116
- - lib/acts_as_ordered_tree/iterator.rb
117
- - lib/acts_as_ordered_tree/list.rb
118
- - lib/acts_as_ordered_tree/tree.rb
175
+ - lib/acts_as_ordered_tree/class_methods.rb
176
+ - lib/acts_as_ordered_tree/fake_scope.rb
177
+ - lib/acts_as_ordered_tree/instance_methods.rb
178
+ - lib/acts_as_ordered_tree/validators.rb
119
179
  - lib/acts_as_ordered_tree/version.rb
120
180
  - spec/acts_as_ordered_tree_spec.rb
121
- - spec/database.yml
122
- - spec/iterator_spec.rb
123
- - spec/test_helper.rb
181
+ - spec/db/schema.rb
182
+ - spec/spec_helper.rb
183
+ - spec/support/factories.rb
184
+ - spec/support/matchers.rb
185
+ - spec/support/models.rb
124
186
  homepage: https://github.com/take-five/acts_as_ordered_tree
125
187
  licenses: []
126
188
  post_install_message:
@@ -133,17 +195,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
195
  - - ! '>='
134
196
  - !ruby/object:Gem::Version
135
197
  version: '0'
198
+ segments:
199
+ - 0
200
+ hash: -720580582503752285
136
201
  required_rubygems_version: !ruby/object:Gem::Requirement
137
202
  none: false
138
203
  requirements:
139
204
  - - ! '>='
140
205
  - !ruby/object:Gem::Version
141
206
  version: '0'
207
+ segments:
208
+ - 0
209
+ hash: -720580582503752285
142
210
  requirements: []
143
211
  rubyforge_project: acts_as_ordered_tree
144
- rubygems_version: 1.8.10
212
+ rubygems_version: 1.8.24
145
213
  signing_key:
146
214
  specification_version: 3
147
215
  summary: ActiveRecord extension for sorted adjacency lists support
148
216
  test_files: []
149
- has_rdoc: