noodall-core 0.1.2 → 0.1.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.
- data/Gemfile +2 -2
- data/Gemfile.lock +22 -22
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/noodall/node.rb +71 -66
- data/noodall-core.gemspec +4 -4
- data/spec/node_spec.rb +15 -4
- metadata +4 -4
data/Gemfile
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
-
gem 'mongo_mapper', '~> 0.8.
|
4
|
-
gem 'bson_ext', '~> 1.0.9'
|
3
|
+
gem 'mongo_mapper', '~> 0.8.6'
|
5
4
|
gem 'ramdiv-mongo_mapper_acts_as_tree', '~> 0.1.1'
|
6
5
|
gem 'canable', '~> 0.1.1'
|
7
6
|
gem 'ruby-stemmer'
|
@@ -14,5 +13,6 @@ group :development do
|
|
14
13
|
gem "factory_girl", "~> 1.3.2"
|
15
14
|
gem "faker", "~> 0.3.1"
|
16
15
|
gem "rake"
|
16
|
+
gem 'bson_ext', '~> 1.1.0'
|
17
17
|
end
|
18
18
|
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activesupport (3.0.
|
5
|
-
bson (1.
|
6
|
-
bson_ext (1.
|
4
|
+
activesupport (3.0.1)
|
5
|
+
bson (1.1.1)
|
6
|
+
bson_ext (1.1.1)
|
7
7
|
canable (0.1.1)
|
8
8
|
database_cleaner (0.5.2)
|
9
9
|
diff-lcs (1.1.2)
|
@@ -11,7 +11,7 @@ GEM
|
|
11
11
|
faker (0.3.1)
|
12
12
|
gemcutter (0.6.1)
|
13
13
|
git (1.2.5)
|
14
|
-
i18n (0.4.
|
14
|
+
i18n (0.4.2)
|
15
15
|
jeweler (1.4.0)
|
16
16
|
gemcutter (>= 0.1.0)
|
17
17
|
git (>= 1.2.5)
|
@@ -19,27 +19,27 @@ GEM
|
|
19
19
|
jnunemaker-validatable (1.8.4)
|
20
20
|
activesupport (>= 2.3.4)
|
21
21
|
json_pure (1.4.6)
|
22
|
-
mongo (1.
|
23
|
-
bson (>= 1.
|
24
|
-
mongo_mapper (0.8.
|
22
|
+
mongo (1.1.1)
|
23
|
+
bson (>= 1.1.1)
|
24
|
+
mongo_mapper (0.8.6)
|
25
25
|
activesupport (>= 2.3.4)
|
26
26
|
jnunemaker-validatable (~> 1.8.4)
|
27
|
-
plucky (~> 0.3.
|
28
|
-
plucky (0.3.
|
29
|
-
mongo (~> 1.
|
27
|
+
plucky (~> 0.3.6)
|
28
|
+
plucky (0.3.6)
|
29
|
+
mongo (~> 1.1)
|
30
30
|
rake (0.8.7)
|
31
|
-
ramdiv-mongo_mapper_acts_as_tree (0.1.
|
31
|
+
ramdiv-mongo_mapper_acts_as_tree (0.1.2)
|
32
32
|
mongo_mapper (>= 0.6.8)
|
33
|
-
rspec (2.0.
|
34
|
-
rspec-core (
|
35
|
-
rspec-expectations (
|
36
|
-
rspec-mocks (
|
37
|
-
rspec-core (2.0.
|
38
|
-
rspec-expectations (2.0.
|
33
|
+
rspec (2.0.1)
|
34
|
+
rspec-core (~> 2.0.1)
|
35
|
+
rspec-expectations (~> 2.0.1)
|
36
|
+
rspec-mocks (~> 2.0.1)
|
37
|
+
rspec-core (2.0.1)
|
38
|
+
rspec-expectations (2.0.1)
|
39
39
|
diff-lcs (>= 1.1.2)
|
40
|
-
rspec-mocks (2.0.
|
41
|
-
rspec-core (
|
42
|
-
rspec-expectations (
|
40
|
+
rspec-mocks (2.0.1)
|
41
|
+
rspec-core (~> 2.0.1)
|
42
|
+
rspec-expectations (~> 2.0.1)
|
43
43
|
ruby-stemmer (0.8.2)
|
44
44
|
rubyforge (2.0.4)
|
45
45
|
json_pure (>= 1.1.7)
|
@@ -48,14 +48,14 @@ PLATFORMS
|
|
48
48
|
ruby
|
49
49
|
|
50
50
|
DEPENDENCIES
|
51
|
-
bson_ext (~> 1.0
|
51
|
+
bson_ext (~> 1.1.0)
|
52
52
|
canable (~> 0.1.1)
|
53
53
|
database_cleaner (~> 0.5.2)
|
54
54
|
factory_girl (~> 1.3.2)
|
55
55
|
faker (~> 0.3.1)
|
56
56
|
i18n
|
57
57
|
jeweler (~> 1.4.0)
|
58
|
-
mongo_mapper (~> 0.8.
|
58
|
+
mongo_mapper (~> 0.8.6)
|
59
59
|
rake
|
60
60
|
ramdiv-mongo_mapper_acts_as_tree (~> 0.1.1)
|
61
61
|
rspec (~> 2.0.0.beta.22)
|
data/Rakefile
CHANGED
@@ -12,7 +12,7 @@ begin
|
|
12
12
|
gem.homepage = "http://github.com/beef/noodall-core"
|
13
13
|
gem.authors = ["Steve England"]
|
14
14
|
gem.add_dependency('mongo_mapper', '~> 0.8.6')
|
15
|
-
gem.add_dependency('ramdiv-mongo_mapper_acts_as_tree', '0.1.1')
|
15
|
+
gem.add_dependency('ramdiv-mongo_mapper_acts_as_tree', '~> 0.1.1')
|
16
16
|
gem.add_dependency('canable', '0.1.1')
|
17
17
|
gem.add_dependency('ruby-stemmer')
|
18
18
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/lib/noodall/node.rb
CHANGED
@@ -3,15 +3,15 @@ module Noodall
|
|
3
3
|
include MongoMapper::Document
|
4
4
|
include MongoMapper::Acts::Tree
|
5
5
|
include Canable::Ables
|
6
|
-
|
6
|
+
|
7
7
|
plugin MultiParameterAttributes
|
8
8
|
plugin Indexer
|
9
9
|
plugin Search
|
10
10
|
plugin Tagging
|
11
11
|
plugin GlobalUpdateTime
|
12
|
-
|
12
|
+
|
13
13
|
key :title, String, :required => true
|
14
|
-
key :
|
14
|
+
key :name, String
|
15
15
|
key :description, String
|
16
16
|
key :body, String
|
17
17
|
key :position, Integer, :default => nil
|
@@ -22,83 +22,83 @@ module Noodall
|
|
22
22
|
key :destroyable_groups, Array
|
23
23
|
key :publishable_groups, Array
|
24
24
|
key :permalink, Permalink, :required => true, :index => true
|
25
|
-
|
25
|
+
|
26
26
|
timestamps!
|
27
27
|
userstamps!
|
28
|
-
|
28
|
+
|
29
29
|
alias_method :keywords, :tag_list
|
30
30
|
alias_method :keywords=, :tag_list=
|
31
|
-
|
31
|
+
|
32
32
|
attr_accessor :publish, :hide #for publishing
|
33
|
-
|
33
|
+
|
34
34
|
acts_as_tree :order => "position"
|
35
|
-
|
35
|
+
|
36
36
|
searchable_keys :title, :description, :keywords, :body
|
37
|
-
|
37
|
+
|
38
38
|
validates_true_for :template, :message => "cannot be changed as sub content is not allowed in this template", :logic => lambda { children.reject{|c| self._type.constantize.template_classes.include?(c.class)}.empty? }
|
39
|
-
|
39
|
+
|
40
40
|
def published_children
|
41
41
|
self.children.select{|c| c.published? }
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
# Allow parent to be set to none using a string. Allows us to set the parent to nil easily via forms
|
45
45
|
def parent=(var)
|
46
46
|
self[parent_id_field] = nil
|
47
47
|
var == "none" ? super(nil) : super
|
48
48
|
end
|
49
|
-
|
49
|
+
|
50
50
|
def template
|
51
51
|
self.class.name.titleize
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
def template=(template_name)
|
55
55
|
self._type = template_name.gsub(' ','') unless template_name.blank?
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
def published?
|
59
59
|
!published_at.nil? and published_at <= current_time and (published_to.nil? or published_to >= current_time)
|
60
60
|
end
|
61
|
-
|
61
|
+
|
62
62
|
def pending?
|
63
63
|
published_at.nil? or published_at >= current_time
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
def expired?
|
67
67
|
!published_to.nil? and published_to <= current_time
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
def first?
|
71
71
|
position == 0
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
def last?
|
75
75
|
position == self.class.count(:_id => {"$ne" => self._id}, parent_id_field => self[parent_id_field])
|
76
76
|
end
|
77
77
|
def move_lower
|
78
78
|
sibling = self.class.first(:position => {"$gt" => self.position}, parent_id_field => self[parent_id_field], :order => 'position ASC')
|
79
|
-
|
79
|
+
|
80
80
|
tmp = sibling.position
|
81
81
|
sibling.position = self.position
|
82
82
|
self.position = tmp
|
83
|
-
|
83
|
+
|
84
84
|
self.class.collection.update({:_id => self._id}, self.to_mongo)
|
85
85
|
self.class.collection.update({:_id => sibling._id}, sibling.to_mongo)
|
86
|
-
|
86
|
+
|
87
87
|
global_updated!
|
88
88
|
end
|
89
89
|
def move_higher
|
90
90
|
sibling = self.class.first(:position => {"$lt" => self.position}, parent_id_field => self[parent_id_field], :order => 'position DESC')
|
91
|
-
|
91
|
+
|
92
92
|
tmp = sibling.position
|
93
93
|
sibling.position = self.position
|
94
94
|
self.position = tmp
|
95
|
-
|
95
|
+
|
96
96
|
self.class.collection.update({:_id => self._id}, self.to_mongo)
|
97
97
|
self.class.collection.update({:_id => sibling._id}, sibling.to_mongo)
|
98
|
-
|
98
|
+
|
99
99
|
global_updated!
|
100
100
|
end
|
101
|
-
|
101
|
+
|
102
102
|
def run_callbacks(kind, options = {}, &block)
|
103
103
|
self.class.send("#{kind}_callback_chain").run(self, options, &block)
|
104
104
|
self.embedded_associations.each do |association|
|
@@ -110,7 +110,7 @@ module Noodall
|
|
110
110
|
self.send(key.name).run_callbacks(kind, options, &block) unless self.send(key.name).nil?
|
111
111
|
end
|
112
112
|
end
|
113
|
-
|
113
|
+
|
114
114
|
def slots
|
115
115
|
slots = []
|
116
116
|
for slot_type in self.class.possible_slots.map(&:to_s)
|
@@ -120,95 +120,95 @@ module Noodall
|
|
120
120
|
end
|
121
121
|
slots.compact
|
122
122
|
end
|
123
|
-
|
123
|
+
|
124
124
|
## CANS
|
125
125
|
def all_groups
|
126
126
|
updatable_groups | destroyable_groups | publishable_groups
|
127
127
|
end
|
128
|
-
|
128
|
+
|
129
129
|
%w( updatable destroyable publishable ).each do |permission|
|
130
130
|
define_method("#{permission}_by?") do |user|
|
131
131
|
user.admin? or send("#{permission}_groups").empty? or user.groups.any?{ |g| send("#{permission}_groups").include?(g) }
|
132
132
|
end
|
133
|
-
|
133
|
+
|
134
134
|
define_method("#{permission}_groups_list") do
|
135
135
|
send("#{permission}_groups").join(', ')
|
136
136
|
end
|
137
|
-
|
137
|
+
|
138
138
|
define_method("#{permission}_groups_list=") do |groups_string|
|
139
139
|
send("#{permission}_groups=", groups_string.split(',').map{|g| g.blank? ? nil : g.strip }.compact.uniq)
|
140
140
|
end
|
141
141
|
end
|
142
|
-
|
142
|
+
|
143
143
|
def creatable_by?(user)
|
144
144
|
parent.nil? or parent.updatable_by?(user)
|
145
145
|
end
|
146
|
-
|
146
|
+
|
147
147
|
# tree method that allow oprions to be passed
|
148
148
|
def siblings(options = {})
|
149
149
|
self.class.all(options.merge(:_id => {"$ne" => self._id}, parent_id_field => self[parent_id_field], :order => tree_order))
|
150
150
|
end
|
151
|
-
|
151
|
+
|
152
152
|
def self_and_siblings(options = {})
|
153
153
|
self.class.all(options.merge(parent_id_field => self[parent_id_field], :order => tree_order))
|
154
154
|
end
|
155
|
-
|
155
|
+
|
156
156
|
def children(options = {})
|
157
157
|
self.class.all(options.merge(parent_id_field => self._id, :order => tree_order))
|
158
158
|
end
|
159
|
-
|
159
|
+
|
160
160
|
private
|
161
161
|
|
162
162
|
def current_time
|
163
163
|
self.class.current_time
|
164
164
|
end
|
165
|
-
|
165
|
+
|
166
166
|
before_validation :set_permalink
|
167
167
|
def set_permalink
|
168
168
|
self.permalink = Permalink.new(*(ancestors << self).map{ |a| a.title.parameterize }) if permalink.blank? and not title.blank?
|
169
169
|
end
|
170
|
-
|
170
|
+
|
171
171
|
before_save :set_position
|
172
172
|
def set_position
|
173
173
|
write_attribute :position, siblings.size if position.nil?
|
174
174
|
end
|
175
|
-
|
175
|
+
|
176
176
|
before_save :clean_slots
|
177
|
-
|
177
|
+
|
178
178
|
# This method removes any uneeded modules from the object
|
179
179
|
# modules that would otherwise remain hidden
|
180
180
|
# if the objects class was changed
|
181
181
|
def clean_slots
|
182
|
-
|
182
|
+
|
183
183
|
# TODO: spec this
|
184
|
-
|
184
|
+
|
185
185
|
slot_types = self.class.possible_slots.map(&:to_s)
|
186
186
|
# collect all of the slot attributes
|
187
187
|
# (so we don't have to loop through the whole object each time)
|
188
188
|
slots = self.attributes.select{|k,v| k =~ /^(#{slot_types.join('|')})_slot_\d+$/ }
|
189
|
-
|
189
|
+
|
190
190
|
# for each type of slot
|
191
191
|
for slot_type in slot_types
|
192
192
|
# get the number of slots of this type in the (possibly new) class
|
193
193
|
slot_count = self._type.constantize.send("#{slot_type}_slots_count").to_i
|
194
|
-
|
194
|
+
|
195
195
|
# loop through all of the slot attributes for this type
|
196
196
|
slots.select{|k,v| k =~ /^#{slot_type}_slot_\d+$/ }.each do |key, slot|
|
197
|
-
|
197
|
+
|
198
198
|
index = key[/#{slot_type}_slot_(\d+)$/, 1].to_i
|
199
|
-
|
199
|
+
|
200
200
|
logger.debug "Deleting #{key} #{self.send(key).inspect}" if index >= slot_count
|
201
201
|
# set the slot to nil
|
202
202
|
write_attribute(key.to_sym, nil) if index >= slot_count
|
203
203
|
end
|
204
204
|
end
|
205
205
|
end
|
206
|
-
|
206
|
+
|
207
207
|
before_save :set_path
|
208
208
|
def set_path
|
209
209
|
write_attribute :path, parent.path + [parent._id] unless parent.nil?
|
210
210
|
end
|
211
|
-
|
211
|
+
|
212
212
|
before_create :inherit_permisions
|
213
213
|
def inherit_permisions
|
214
214
|
unless parent.nil?
|
@@ -217,7 +217,7 @@ module Noodall
|
|
217
217
|
self.publishable_groups = parent.publishable_groups
|
218
218
|
end
|
219
219
|
end
|
220
|
-
|
220
|
+
|
221
221
|
after_save :order_siblings
|
222
222
|
def order_siblings
|
223
223
|
if position_changed?
|
@@ -230,7 +230,7 @@ module Noodall
|
|
230
230
|
end
|
231
231
|
end
|
232
232
|
end
|
233
|
-
|
233
|
+
|
234
234
|
before_save :set_published
|
235
235
|
def set_published
|
236
236
|
if publish
|
@@ -242,17 +242,22 @@ module Noodall
|
|
242
242
|
write_attribute :published_to, 10.years.from_now
|
243
243
|
end
|
244
244
|
end
|
245
|
-
|
245
|
+
|
246
|
+
before_save :set_name
|
247
|
+
def set_name
|
248
|
+
self.name = self.title if self.name.blank?
|
249
|
+
end
|
250
|
+
|
246
251
|
module ClassMethods
|
247
252
|
@@slots = []
|
248
|
-
|
253
|
+
|
249
254
|
# Set the names of the slots that will be avaiable to fill with components
|
250
255
|
# For each name new methods will be created;
|
251
|
-
#
|
256
|
+
#
|
252
257
|
# <name>_slots(count)
|
253
258
|
# This allow you to set the number of slots available in a template
|
254
259
|
# <name>_slots_count(count)
|
255
|
-
# Reads back the count you set
|
260
|
+
# Reads back the count you set
|
256
261
|
def slots(*args)
|
257
262
|
@@slots = args.map(&:to_sym).uniq
|
258
263
|
|
@@ -281,13 +286,13 @@ module Noodall
|
|
281
286
|
def roots(options = {})
|
282
287
|
self.all(options.merge(parent_id_field => nil, :order => tree_order))
|
283
288
|
end
|
284
|
-
|
289
|
+
|
285
290
|
def find_by_permalink(permalink)
|
286
291
|
node = find_one(:permalink => permalink.to_s, :published_at => { :$lte => current_time })
|
287
292
|
raise MongoMapper::DocumentNotFound if node.nil? or node.expired?
|
288
293
|
node
|
289
294
|
end
|
290
|
-
|
295
|
+
|
291
296
|
def template_classes
|
292
297
|
return @template_classes if @template_classes
|
293
298
|
classes = []
|
@@ -297,11 +302,11 @@ module Noodall
|
|
297
302
|
end
|
298
303
|
@template_classes = classes
|
299
304
|
end
|
300
|
-
|
305
|
+
|
301
306
|
def template_names
|
302
307
|
template_classes.collect{|c| c.name.titleize}.sort
|
303
308
|
end
|
304
|
-
|
309
|
+
|
305
310
|
def all_template_classes
|
306
311
|
templates = []
|
307
312
|
template_classes.each do |template|
|
@@ -310,15 +315,15 @@ module Noodall
|
|
310
315
|
end
|
311
316
|
templates.uniq.collect{ |c| c.name.titleize }.sort
|
312
317
|
end
|
313
|
-
|
318
|
+
|
314
319
|
def sub_templates(*arr)
|
315
320
|
@template_classes = arr
|
316
321
|
end
|
317
|
-
|
322
|
+
|
318
323
|
def root_template!
|
319
324
|
@root_template = true
|
320
325
|
end
|
321
|
-
|
326
|
+
|
322
327
|
def root_template?
|
323
328
|
@root_template
|
324
329
|
end
|
@@ -326,7 +331,7 @@ module Noodall
|
|
326
331
|
def single_collection_inherited?
|
327
332
|
false
|
328
333
|
end
|
329
|
-
|
334
|
+
|
330
335
|
# Returns a list of classes that can have this model as a child
|
331
336
|
def parent_classes
|
332
337
|
classes = []
|
@@ -336,15 +341,15 @@ module Noodall
|
|
336
341
|
end
|
337
342
|
classes
|
338
343
|
end
|
339
|
-
|
340
|
-
# If rails style time zones are unavaiable fallback to standard now
|
344
|
+
|
345
|
+
# If rails style time zones are unavaiable fallback to standard now
|
341
346
|
def current_time
|
342
|
-
Time.zone ? Time.zone.now : Time.now
|
347
|
+
Time.zone ? Time.zone.now : Time.now
|
343
348
|
end
|
344
349
|
end
|
345
350
|
extend ClassMethods
|
346
|
-
|
347
|
-
|
351
|
+
|
352
|
+
|
348
353
|
end
|
349
354
|
|
350
355
|
end
|
data/noodall-core.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{noodall-core}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Steve England"]
|
@@ -60,18 +60,18 @@ Gem::Specification.new do |s|
|
|
60
60
|
|
61
61
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
62
62
|
s.add_runtime_dependency(%q<mongo_mapper>, ["~> 0.8.6"])
|
63
|
-
s.add_runtime_dependency(%q<ramdiv-mongo_mapper_acts_as_tree>, ["
|
63
|
+
s.add_runtime_dependency(%q<ramdiv-mongo_mapper_acts_as_tree>, ["~> 0.1.1"])
|
64
64
|
s.add_runtime_dependency(%q<canable>, ["= 0.1.1"])
|
65
65
|
s.add_runtime_dependency(%q<ruby-stemmer>, [">= 0"])
|
66
66
|
else
|
67
67
|
s.add_dependency(%q<mongo_mapper>, ["~> 0.8.6"])
|
68
|
-
s.add_dependency(%q<ramdiv-mongo_mapper_acts_as_tree>, ["
|
68
|
+
s.add_dependency(%q<ramdiv-mongo_mapper_acts_as_tree>, ["~> 0.1.1"])
|
69
69
|
s.add_dependency(%q<canable>, ["= 0.1.1"])
|
70
70
|
s.add_dependency(%q<ruby-stemmer>, [">= 0"])
|
71
71
|
end
|
72
72
|
else
|
73
73
|
s.add_dependency(%q<mongo_mapper>, ["~> 0.8.6"])
|
74
|
-
s.add_dependency(%q<ramdiv-mongo_mapper_acts_as_tree>, ["
|
74
|
+
s.add_dependency(%q<ramdiv-mongo_mapper_acts_as_tree>, ["~> 0.1.1"])
|
75
75
|
s.add_dependency(%q<canable>, ["= 0.1.1"])
|
76
76
|
s.add_dependency(%q<ruby-stemmer>, [">= 0"])
|
77
77
|
end
|
data/spec/node_spec.rb
CHANGED
@@ -55,7 +55,7 @@ describe Noodall::Node do
|
|
55
55
|
|
56
56
|
@child = Page.create!(:title => "Ickle Kid", :parent => @root)
|
57
57
|
|
58
|
-
@grandchild = Page.create!(:title => "Very Ickle Kid", :parent => @child)
|
58
|
+
@grandchild = Page.create!(:title => "Very Ickle Kid", :parent => @child)
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should create permlink based on tree" do
|
@@ -63,11 +63,11 @@ describe Noodall::Node do
|
|
63
63
|
@grandchild.reload
|
64
64
|
@grandchild.permalink.to_s.should == "root/ickle-kid/very-ickle-kid"
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
it "should be under the correct path once moved" do
|
68
68
|
grand_child_2 = Page.create!(:title => "Ickle Kid", :parent => @child)
|
69
69
|
root_2 = Page.create!(:title => "Root 2")
|
70
|
-
|
70
|
+
|
71
71
|
grand_child_2.parent = root_2
|
72
72
|
grand_child_2.save!
|
73
73
|
|
@@ -82,7 +82,7 @@ describe Noodall::Node do
|
|
82
82
|
@child.save(:validate => false)
|
83
83
|
|
84
84
|
grand_child_2.reload
|
85
|
-
|
85
|
+
|
86
86
|
grand_child_2.path.should_not include(@root.id)
|
87
87
|
grand_child_2.path.should include(root_2.id)
|
88
88
|
end
|
@@ -327,4 +327,15 @@ describe Noodall::Node do
|
|
327
327
|
Page.parent_classes.should_not include(ArticlesList)
|
328
328
|
end
|
329
329
|
|
330
|
+
it "should fall back to title for link name if it is blank" do
|
331
|
+
page = Factory(:page, :title => "My Long Title that is long")
|
332
|
+
|
333
|
+
page.name.should == "My Long Title that is long"
|
334
|
+
|
335
|
+
page.name = "Shorty"
|
336
|
+
page.save
|
337
|
+
|
338
|
+
page.name.should == "Shorty"
|
339
|
+
end
|
340
|
+
|
330
341
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: noodall-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Steve England
|
@@ -41,7 +41,7 @@ dependencies:
|
|
41
41
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
42
42
|
none: false
|
43
43
|
requirements:
|
44
|
-
- -
|
44
|
+
- - ~>
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
hash: 25
|
47
47
|
segments:
|