acts_as_nested_interval 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 81cfddc984871f10b119eb476a7e8a36a8f7ab33
4
+ data.tar.gz: 0a9723da4673631ba6b4fcd1e78fa2b0948c2b8a
5
+ SHA512:
6
+ metadata.gz: 433a11bb304a05b91948bb0f141fd48bd0d4015fb44f2475002f56d4a1effa4e8d7508f4b979eabddd674f859c9fd40ee8c4ac0fd386153b59522380bebb9914
7
+ data.tar.gz: 6c9a2a6025120e23f451228eedba0b7b72008d759409b433bbb822d21d7d3490fd275c99afd4f1aee643e626e8c228112697352eb5b6605458cf624604eab653
data/README.md CHANGED
@@ -7,8 +7,7 @@ You can find all descendants or all ancestors with just one select query.
7
7
  You can insert and delete records without
8
8
  a full table update (compared to nested set, where at insert, half the table is updated on average).
9
9
 
10
- Nested sets/intervals are good if you need to sort in preorder at DB-level.
11
- If you don't need that give a look to https://github.com/stefankroes/ancestry ,
10
+ Make sure you really need this, otherwise give a look to https://github.com/stefankroes/ancestry ,
12
11
  that implements a simpler encoding model (variant of materialized path).
13
12
 
14
13
  If your database supports recursive queryes (`WITH RECURSIVE`) or specific custom extensions
@@ -111,7 +111,9 @@ module ActsAsNestedInterval
111
111
  end
112
112
  end
113
113
 
114
+ # Rewrite method
114
115
  def update_nested_interval_move
116
+ return if self.class.readonly_attributes.include?(nested_interval_foreign_key.to_sym) # Fix issue #9
115
117
  begin
116
118
  db_self = self.class.find(id)
117
119
  db_parent = self.class.find(read_attribute(nested_interval_foreign_key))
@@ -176,14 +178,22 @@ module ActsAsNestedInterval
176
178
 
177
179
  # Returns depth by counting ancestors up to 0 / 1.
178
180
  def depth
179
- n = 0
180
- p, q = lftp, lftq
181
- while p != 0
182
- x = p.inverse(q)
183
- p, q = (x * p - 1) / q, x
184
- n += 1
181
+ if new_record?
182
+ if parent_id.nil?
183
+ return 0
184
+ else
185
+ return parent.depth + 1
186
+ end
187
+ else
188
+ n = 0
189
+ p, q = lftp, lftq
190
+ while p != 0
191
+ x = p.inverse(q)
192
+ p, q = (x * p - 1) / q, x
193
+ n += 1
194
+ end
195
+ return n
185
196
  end
186
- n
187
197
  end
188
198
 
189
199
  def lft; 1.0 * lftp / lftq end
@@ -1,3 +1,3 @@
1
1
  module ActsAsNestedInterval
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -39,20 +39,22 @@ module ActsAsNestedInterval
39
39
  dependent: nested_interval_dependent
40
40
  scope :roots, -> { where(nested_interval_foreign_key => nil) }
41
41
 
42
- if columns_hash["rgt"]
43
- scope :preorder, -> { order('rgt DESC, lftp ASC') }
44
- elsif columns_hash["rgtp"] && columns_hash["rgtq"]
45
- scope :preorder, -> { order('1.0 * rgtp / rgtq DESC, lftp ASC') }
46
- else
47
- scope :preorder, -> { order('nested_interval_rgt(lftp, lftq) DESC, lftp ASC') }
48
- end
42
+ if self.table_exists? # Fix problem with migrating without table
43
+ if columns_hash["rgt"]
44
+ scope :preorder, -> { order('rgt DESC, lftp ASC') }
45
+ elsif columns_hash["rgtp"] && columns_hash["rgtq"]
46
+ scope :preorder, -> { order('1.0 * rgtp / rgtq DESC, lftp ASC') }
47
+ else
48
+ scope :preorder, -> { order('nested_interval_rgt(lftp, lftq) DESC, lftp ASC') }
49
+ end
49
50
 
50
- before_create :create_nested_interval
51
- before_destroy :destroy_nested_interval
52
- before_update :update_nested_interval
53
-
54
- include ActsAsNestedInterval::InstanceMethods
55
- extend ActsAsNestedInterval::ClassMethods
51
+ before_create :create_nested_interval
52
+ before_destroy :destroy_nested_interval
53
+ before_update :update_nested_interval
54
+
55
+ include ActsAsNestedInterval::InstanceMethods
56
+ extend ActsAsNestedInterval::ClassMethods
57
+ end
56
58
  end
57
59
 
58
60
  end
metadata CHANGED
@@ -1,199 +1,189 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_nested_interval
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- prerelease:
4
+ version: 0.1.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Nicolae Claudius
9
8
  - Pythonic
9
+ - Grzegorz Łuszczek
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-06-11 00:00:00.000000000 Z
13
+ date: 2014-04-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
17
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
18
  requirements:
20
- - - ! '>='
19
+ - - ">="
21
20
  - !ruby/object:Gem::Version
22
21
  version: 3.2.1
23
- - - <
22
+ - - "<"
24
23
  - !ruby/object:Gem::Version
25
24
  version: '5'
26
25
  type: :runtime
27
26
  prerelease: false
28
27
  version_requirements: !ruby/object:Gem::Requirement
29
- none: false
30
28
  requirements:
31
- - - ! '>='
29
+ - - ">="
32
30
  - !ruby/object:Gem::Version
33
31
  version: 3.2.1
34
- - - <
32
+ - - "<"
35
33
  - !ruby/object:Gem::Version
36
34
  version: '5'
37
35
  - !ruby/object:Gem::Dependency
38
36
  name: sqlite3
39
37
  requirement: !ruby/object:Gem::Requirement
40
- none: false
41
38
  requirements:
42
- - - ! '>='
39
+ - - ">="
43
40
  - !ruby/object:Gem::Version
44
41
  version: '0'
45
42
  type: :development
46
43
  prerelease: false
47
44
  version_requirements: !ruby/object:Gem::Requirement
48
- none: false
49
45
  requirements:
50
- - - ! '>='
46
+ - - ">="
51
47
  - !ruby/object:Gem::Version
52
48
  version: '0'
53
49
  - !ruby/object:Gem::Dependency
54
50
  name: mysql2
55
51
  requirement: !ruby/object:Gem::Requirement
56
- none: false
57
52
  requirements:
58
- - - ! '>='
53
+ - - ">="
59
54
  - !ruby/object:Gem::Version
60
55
  version: '0'
61
56
  type: :development
62
57
  prerelease: false
63
58
  version_requirements: !ruby/object:Gem::Requirement
64
- none: false
65
59
  requirements:
66
- - - ! '>='
60
+ - - ">="
67
61
  - !ruby/object:Gem::Version
68
62
  version: '0'
69
63
  - !ruby/object:Gem::Dependency
70
64
  name: pg
71
65
  requirement: !ruby/object:Gem::Requirement
72
- none: false
73
66
  requirements:
74
- - - ! '>='
67
+ - - ">="
75
68
  - !ruby/object:Gem::Version
76
69
  version: '0'
77
70
  type: :development
78
71
  prerelease: false
79
72
  version_requirements: !ruby/object:Gem::Requirement
80
- none: false
81
73
  requirements:
82
- - - ! '>='
74
+ - - ">="
83
75
  - !ruby/object:Gem::Version
84
76
  version: '0'
85
77
  description: Encode Trees in RDBMS using nested interval method for powerful querying
86
78
  and speedy inserts.
87
79
  email:
88
- - nicolae_claudius@yahoo.com
80
+ - grzegorz@piklus.pl
89
81
  executables: []
90
82
  extensions: []
91
83
  extra_rdoc_files: []
92
84
  files:
85
+ - MIT-LICENSE
86
+ - README.md
87
+ - Rakefile
88
+ - lib/acts_as_nested_interval.rb
93
89
  - lib/acts_as_nested_interval/class_methods.rb
94
- - lib/acts_as_nested_interval/instance_methods.rb
95
90
  - lib/acts_as_nested_interval/core_ext/integer.rb
91
+ - lib/acts_as_nested_interval/instance_methods.rb
96
92
  - lib/acts_as_nested_interval/version.rb
97
- - lib/acts_as_nested_interval.rb
98
93
  - lib/tasks/acts_as_nested_interval_tasks.rake
99
- - MIT-LICENSE
100
- - Rakefile
101
- - README.md
102
- - test/dummy/script/rails
94
+ - test/acts_as_nested_interval_test.rb
95
+ - test/dummy/README.rdoc
96
+ - test/dummy/Rakefile
103
97
  - test/dummy/app/assets/javascripts/application.js
104
98
  - test/dummy/app/assets/stylesheets/application.css
105
- - test/dummy/app/models/region.rb
106
- - test/dummy/app/views/layouts/application.html.erb
107
99
  - test/dummy/app/controllers/application_controller.rb
108
100
  - test/dummy/app/helpers/application_helper.rb
109
- - test/dummy/db/migrate/20120302143528_create_regions.rb
110
- - test/dummy/db/migrate/20121004204252_change_interval_precision.rb
111
- - test/dummy/db/schema.rb
112
- - test/dummy/Rakefile
101
+ - test/dummy/app/models/region.rb
102
+ - test/dummy/app/views/layouts/application.html.erb
113
103
  - test/dummy/config.ru
114
- - test/dummy/test/unit/region_test.rb
115
- - test/dummy/test/fixtures/regions.yml
104
+ - test/dummy/config/application.rb
105
+ - test/dummy/config/boot.rb
116
106
  - test/dummy/config/database.yml
107
+ - test/dummy/config/environment.rb
108
+ - test/dummy/config/environments/development.rb
109
+ - test/dummy/config/environments/production.rb
110
+ - test/dummy/config/environments/test.rb
111
+ - test/dummy/config/initializers/backtrace_silencers.rb
117
112
  - test/dummy/config/initializers/inflections.rb
118
- - test/dummy/config/initializers/session_store.rb
119
113
  - test/dummy/config/initializers/mime_types.rb
120
- - test/dummy/config/initializers/wrap_parameters.rb
121
114
  - test/dummy/config/initializers/secret_token.rb
122
- - test/dummy/config/initializers/backtrace_silencers.rb
123
- - test/dummy/config/boot.rb
115
+ - test/dummy/config/initializers/session_store.rb
116
+ - test/dummy/config/initializers/wrap_parameters.rb
124
117
  - test/dummy/config/locales/en.yml
125
- - test/dummy/config/environments/test.rb
126
- - test/dummy/config/environments/development.rb
127
- - test/dummy/config/environments/production.rb
128
- - test/dummy/config/environment.rb
129
- - test/dummy/config/application.rb
130
118
  - test/dummy/config/routes.rb
131
- - test/dummy/README.rdoc
132
- - test/dummy/public/favicon.ico
119
+ - test/dummy/db/migrate/20120302143528_create_regions.rb
120
+ - test/dummy/db/migrate/20121004204252_change_interval_precision.rb
121
+ - test/dummy/db/schema.rb
122
+ - test/dummy/public/404.html
133
123
  - test/dummy/public/422.html
134
124
  - test/dummy/public/500.html
135
- - test/dummy/public/404.html
125
+ - test/dummy/public/favicon.ico
126
+ - test/dummy/script/rails
127
+ - test/dummy/test/fixtures/regions.yml
128
+ - test/dummy/test/unit/region_test.rb
136
129
  - test/test_helper.rb
137
- - test/acts_as_nested_interval_test.rb
138
- homepage: https://github.com/clyfe/acts_as_nested_interval
130
+ homepage: https://github.com/grzlus/acts_as_nested_interval
139
131
  licenses: []
132
+ metadata: {}
140
133
  post_install_message:
141
134
  rdoc_options: []
142
135
  require_paths:
143
136
  - lib
144
137
  required_ruby_version: !ruby/object:Gem::Requirement
145
- none: false
146
138
  requirements:
147
- - - ! '>='
139
+ - - ">="
148
140
  - !ruby/object:Gem::Version
149
141
  version: '0'
150
142
  required_rubygems_version: !ruby/object:Gem::Requirement
151
- none: false
152
143
  requirements:
153
- - - ! '>='
144
+ - - ">="
154
145
  - !ruby/object:Gem::Version
155
146
  version: '0'
156
147
  requirements: []
157
148
  rubyforge_project:
158
- rubygems_version: 1.8.23
149
+ rubygems_version: 2.2.2
159
150
  signing_key:
160
- specification_version: 3
151
+ specification_version: 4
161
152
  summary: Encode Trees in RDBMS using nested interval method.
162
153
  test_files:
163
- - test/dummy/script/rails
164
- - test/dummy/app/assets/javascripts/application.js
165
- - test/dummy/app/assets/stylesheets/application.css
166
- - test/dummy/app/models/region.rb
167
- - test/dummy/app/views/layouts/application.html.erb
168
- - test/dummy/app/controllers/application_controller.rb
169
- - test/dummy/app/helpers/application_helper.rb
170
- - test/dummy/db/migrate/20120302143528_create_regions.rb
171
- - test/dummy/db/migrate/20121004204252_change_interval_precision.rb
172
- - test/dummy/db/schema.rb
173
- - test/dummy/Rakefile
154
+ - test/test_helper.rb
174
155
  - test/dummy/config.ru
175
- - test/dummy/test/unit/region_test.rb
156
+ - test/dummy/script/rails
176
157
  - test/dummy/test/fixtures/regions.yml
177
- - test/dummy/config/database.yml
178
- - test/dummy/config/initializers/inflections.rb
158
+ - test/dummy/test/unit/region_test.rb
159
+ - test/dummy/config/routes.rb
179
160
  - test/dummy/config/initializers/session_store.rb
180
161
  - test/dummy/config/initializers/mime_types.rb
162
+ - test/dummy/config/initializers/backtrace_silencers.rb
163
+ - test/dummy/config/initializers/inflections.rb
181
164
  - test/dummy/config/initializers/wrap_parameters.rb
182
165
  - test/dummy/config/initializers/secret_token.rb
183
- - test/dummy/config/initializers/backtrace_silencers.rb
166
+ - test/dummy/config/application.rb
167
+ - test/dummy/config/environment.rb
184
168
  - test/dummy/config/boot.rb
185
- - test/dummy/config/locales/en.yml
186
- - test/dummy/config/environments/test.rb
187
- - test/dummy/config/environments/development.rb
188
169
  - test/dummy/config/environments/production.rb
189
- - test/dummy/config/environment.rb
190
- - test/dummy/config/application.rb
191
- - test/dummy/config/routes.rb
192
- - test/dummy/README.rdoc
193
- - test/dummy/public/favicon.ico
194
- - test/dummy/public/422.html
170
+ - test/dummy/config/environments/development.rb
171
+ - test/dummy/config/environments/test.rb
172
+ - test/dummy/config/locales/en.yml
173
+ - test/dummy/config/database.yml
195
174
  - test/dummy/public/500.html
196
175
  - test/dummy/public/404.html
197
- - test/test_helper.rb
176
+ - test/dummy/public/favicon.ico
177
+ - test/dummy/public/422.html
178
+ - test/dummy/db/migrate/20120302143528_create_regions.rb
179
+ - test/dummy/db/migrate/20121004204252_change_interval_precision.rb
180
+ - test/dummy/db/schema.rb
181
+ - test/dummy/README.rdoc
182
+ - test/dummy/Rakefile
183
+ - test/dummy/app/assets/stylesheets/application.css
184
+ - test/dummy/app/assets/javascripts/application.js
185
+ - test/dummy/app/views/layouts/application.html.erb
186
+ - test/dummy/app/helpers/application_helper.rb
187
+ - test/dummy/app/models/region.rb
188
+ - test/dummy/app/controllers/application_controller.rb
198
189
  - test/acts_as_nested_interval_test.rb
199
- has_rdoc: