constructor-pages 0.8.4 → 0.8.5
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.
- checksums.yaml +4 -4
- data/app/controllers/constructor_pages/pages_controller.rb +17 -8
- data/app/models/constructor_pages/page.rb +5 -3
- data/app/models/constructor_pages/template.rb +1 -1
- data/app/views/constructor_pages/fields/types/_image.haml +1 -1
- data/app/views/constructor_pages/pages/_form.haml +4 -0
- data/db/migrate/13_add_in_url_to_pages.rb +17 -0
- data/spec/factories.rb +5 -0
- data/spec/features/constructor_pages/pages_spec.rb +53 -0
- data/spec/models/constructor_pages/page_spec.rb +45 -3
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad8ecd535c634c2ca60ef07a528827309da354dc
|
4
|
+
data.tar.gz: a40b0e874c6deb4d0bfd4534429bd43a97484131
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d3018fa5da4f6ea3c4dec6e68f9e8868fa6da55c572487fca2d934d6869dc577df6701dd6285695bc730847aeabee27d1d62e18134f00093214d6f202c2866b
|
7
|
+
data.tar.gz: d926d66001f42d933ddb6f016d1ac57b1edda1514fb9908e9050eaef3051659a440d59114def71bdaf6083a812bbd9e8589388db92c4a793756281953038d45e
|
@@ -10,7 +10,7 @@ module ConstructorPages
|
|
10
10
|
|
11
11
|
def index
|
12
12
|
@pages = Page.includes(:template).load
|
13
|
-
@pages_cache = Digest::MD5.hexdigest(@pages.map{|p| [p.name, p.
|
13
|
+
@pages_cache = Digest::MD5.hexdigest(@pages.map{|p| [p.name, p.full_url, p.in_url, p.lft, p.template_id]}.join)
|
14
14
|
@template_exists = Template.count != 0
|
15
15
|
flash[:notice] = 'Create at least one template' unless @template_exists
|
16
16
|
end
|
@@ -21,7 +21,7 @@ module ConstructorPages
|
|
21
21
|
|
22
22
|
def new_child
|
23
23
|
@page, @parent_id = Page.new, params[:id]
|
24
|
-
@template_id = Page.find(@parent_id).try(:template).child.id
|
24
|
+
@template_id = Page.find(@parent_id).try(:template).try(:child).try(:id)
|
25
25
|
end
|
26
26
|
|
27
27
|
def show
|
@@ -30,17 +30,19 @@ module ConstructorPages
|
|
30
30
|
redirect_to @page.link if @page.redirect?
|
31
31
|
_code_name = @page.template.code_name
|
32
32
|
instance_variable_set('@'+_code_name, @page)
|
33
|
-
|
33
|
+
_code_name = _code_name.pluralize
|
34
34
|
respond_to do |format|
|
35
|
-
format.html { render "
|
36
|
-
format.json { render "
|
37
|
-
format.xml { render "
|
35
|
+
format.html { render "#{_code_name}/show" }
|
36
|
+
format.json { render "#{_code_name}/show.json", layout: false rescue render json: @page }
|
37
|
+
format.xml { render "#{_code_name}/show.xml", layout: false rescue render xml: @page }
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
def edit
|
42
42
|
@page = Page.find(params[:id])
|
43
43
|
@parent_id, @template_id = @page.parent.try(:id), @page.template.id
|
44
|
+
_code_name = @page.template.code_name.pluralize
|
45
|
+
render "#{_code_name}/edit" rescue render :edit
|
44
46
|
end
|
45
47
|
|
46
48
|
def create
|
@@ -50,7 +52,13 @@ module ConstructorPages
|
|
50
52
|
@page.touch_branch
|
51
53
|
redirect_to pages_path, notice: t(:page_success_added, name: @page.name)
|
52
54
|
else
|
53
|
-
|
55
|
+
if @page.template_id
|
56
|
+
_template = Template.find(@page.template_id)
|
57
|
+
_code_name = _template.code_name.pluralize if _template
|
58
|
+
render "#{_code_name}/new" rescue render :new
|
59
|
+
else
|
60
|
+
render :new
|
61
|
+
end
|
54
62
|
end
|
55
63
|
end
|
56
64
|
|
@@ -68,7 +76,7 @@ module ConstructorPages
|
|
68
76
|
|
69
77
|
redirect_to pages_path, notice: t(:page_success_updated, name: @page.name)
|
70
78
|
else
|
71
|
-
render :edit
|
79
|
+
render "#{@page.template.code_name.pluralize}/new" rescue render :edit
|
72
80
|
end
|
73
81
|
end
|
74
82
|
|
@@ -95,6 +103,7 @@ module ConstructorPages
|
|
95
103
|
:in_nav,
|
96
104
|
:in_map,
|
97
105
|
:in_menu,
|
106
|
+
:in_url,
|
98
107
|
:link
|
99
108
|
)
|
100
109
|
end
|
@@ -34,7 +34,7 @@ module ConstructorPages
|
|
34
34
|
# @param parent_id integer
|
35
35
|
# @param url should looks like <tt>'hello-world-page'</tt> without leading slash
|
36
36
|
def full_url_generate(parent_id, url = '')
|
37
|
-
'/' + Page.find(parent_id).self_and_ancestors.map
|
37
|
+
'/' + Page.find(parent_id).self_and_ancestors.map{|p| p.url if p.in_url}.append(url).compact.join('/')
|
38
38
|
end
|
39
39
|
|
40
40
|
# Check code_name for field and template.
|
@@ -157,6 +157,8 @@ module ConstructorPages
|
|
157
157
|
|
158
158
|
alias_method :find_pages_in_branch, :find_page_in_branch
|
159
159
|
|
160
|
+
def in_breadcrumbs; in_nav end
|
161
|
+
|
160
162
|
def published?; active? end
|
161
163
|
|
162
164
|
# Return true if there is a file upload field in page
|
@@ -199,7 +201,7 @@ module ConstructorPages
|
|
199
201
|
|
200
202
|
# if url has been changed by manually or url is empty
|
201
203
|
def friendly_url
|
202
|
-
self.url = ((auto_url || url.empty?) ? transliterate(name, '') : url)
|
204
|
+
self.url = ((auto_url || url.empty?) ? parameterize(transliterate(name, '')) : url)
|
203
205
|
end
|
204
206
|
|
205
207
|
# Page is not valid if there is no template
|
@@ -215,7 +217,7 @@ module ConstructorPages
|
|
215
217
|
|
216
218
|
# Reload all descendants
|
217
219
|
def descendants_update
|
218
|
-
descendants.map(&:save) if self.full_url_changed?
|
220
|
+
descendants.map(&:save) if self.full_url_changed? or self.in_url_changed?
|
219
221
|
end
|
220
222
|
end
|
221
223
|
end
|
@@ -23,7 +23,7 @@ module ConstructorPages
|
|
23
23
|
|
24
24
|
# Return child corresponding child_id or children first
|
25
25
|
def child
|
26
|
-
child_id ?
|
26
|
+
child_id ? Template.find(child_id) : children.first if !leaf?
|
27
27
|
end
|
28
28
|
|
29
29
|
# Convert name to accusative
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class AddInUrlToPages < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column 'constructor_pages_pages', :in_url, :boolean, default: true
|
4
|
+
|
5
|
+
ConstructorPages::Page.reset_column_information
|
6
|
+
|
7
|
+
ConstructorPages::Page.all.each do |p|
|
8
|
+
p.in_url = true
|
9
|
+
p.save
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.down
|
15
|
+
remove_column 'constructor_pages_pages', :in_url
|
16
|
+
end
|
17
|
+
end
|
data/spec/factories.rb
ADDED
@@ -173,6 +173,13 @@ module ConstructorPages
|
|
173
173
|
page.should have_select 'Template', selected: '-- Child'
|
174
174
|
end
|
175
175
|
|
176
|
+
it 'should edit with page view if no view found' do
|
177
|
+
_template = Template.create name: 'Hello', code_name: 'hello'
|
178
|
+
_page = Page.create name: 'Hello', template: _template
|
179
|
+
visit pages.new_child_page_path(_page)
|
180
|
+
page.should_not have_content 'This page show new with template'
|
181
|
+
end
|
182
|
+
|
176
183
|
it 'should has published checkbox' do
|
177
184
|
visit pages.new_page_path
|
178
185
|
page.should have_checked_field 'Active'
|
@@ -225,6 +232,18 @@ module ConstructorPages
|
|
225
232
|
end
|
226
233
|
end
|
227
234
|
|
235
|
+
it 'should edit with template view' do
|
236
|
+
visit pages.edit_page_path(@page)
|
237
|
+
page.should have_content 'This page show edit with template'
|
238
|
+
end
|
239
|
+
|
240
|
+
it 'should edit with page view if no view found' do
|
241
|
+
_template = Template.create name: 'Hello', code_name: 'hello'
|
242
|
+
_page = Page.create name: 'Hello', template: _template
|
243
|
+
visit pages.edit_page_path(_page)
|
244
|
+
page.should_not have_content 'This page show edit with template'
|
245
|
+
end
|
246
|
+
|
228
247
|
it 'should has delete link' do
|
229
248
|
visit pages.edit_page_path(@page)
|
230
249
|
page.should have_link 'Delete'
|
@@ -246,6 +265,40 @@ module ConstructorPages
|
|
246
265
|
@page.description.should == 'Zanussi conditioners Voronezh'
|
247
266
|
page.should have_text 'updated successfully'
|
248
267
|
end
|
268
|
+
|
269
|
+
describe 'renegerate descendants' do
|
270
|
+
before :each do
|
271
|
+
_template = Template.create name: 'Another page', code_name: 'another_page'
|
272
|
+
_page_first = Page.create name: 'First', template: _template
|
273
|
+
_page_second = Page.create name: 'Second', parent_id: _page_first.id, template: _template
|
274
|
+
_page_third = Page.create name: 'Third', parent_id: _page_second.id, template: _template
|
275
|
+
|
276
|
+
visit pages.pages_path
|
277
|
+
page.should have_link('First', '/first')
|
278
|
+
page.should have_link('Second', '/first/second')
|
279
|
+
page.should have_link('Third', '/first/second/third')
|
280
|
+
|
281
|
+
visit pages.edit_page_path(_page_first)
|
282
|
+
end
|
283
|
+
|
284
|
+
it 'should regenerate full_url of descendants without url if full_url or in_url changed' do
|
285
|
+
check 'Url', false
|
286
|
+
click_button 'Update Page'
|
287
|
+
|
288
|
+
page.should have_link('First', '/first')
|
289
|
+
page.should have_link('Second', '/second')
|
290
|
+
page.should have_link('Third', '/second/third')
|
291
|
+
end
|
292
|
+
|
293
|
+
it 'should regenerate full_url of descendants with url if full_url or in_url changed' do
|
294
|
+
check 'Url', true
|
295
|
+
click_button 'Update Page'
|
296
|
+
|
297
|
+
page.should have_link('First', '/first')
|
298
|
+
page.should have_link('Second', '/first/second')
|
299
|
+
page.should have_link('Third', '/first/second/third')
|
300
|
+
end
|
301
|
+
end
|
249
302
|
end
|
250
303
|
|
251
304
|
describe 'Delete page' do
|
@@ -21,8 +21,7 @@ module ConstructorPages
|
|
21
21
|
|
22
22
|
it 'should create type_fields after' do
|
23
23
|
field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
|
24
|
-
page = Page.create
|
25
|
-
|
24
|
+
page = Page.create(name: 'New page', template: @template)
|
26
25
|
field.get_value_for(page).should == ''
|
27
26
|
end
|
28
27
|
end
|
@@ -160,7 +159,6 @@ module ConstructorPages
|
|
160
159
|
end
|
161
160
|
end
|
162
161
|
|
163
|
-
|
164
162
|
context 'INSTANCE METHODS' do
|
165
163
|
context 'Getting and setting field value' do
|
166
164
|
before :each do
|
@@ -368,6 +366,39 @@ module ConstructorPages
|
|
368
366
|
page.save
|
369
367
|
page.url.should == 'another-world'
|
370
368
|
end
|
369
|
+
|
370
|
+
it 'should doesn\'t parameterize' do
|
371
|
+
page = Page.create name: 'Hello', url: 'hello_world_How_Are/You', auto_url: false
|
372
|
+
page.url.should == 'hello_world_How_Are/You'
|
373
|
+
end
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
describe '#in_menu' do
|
378
|
+
it 'should be true by default' do
|
379
|
+
page = Page.create name: 'Hello'
|
380
|
+
page.in_menu.should be_true
|
381
|
+
end
|
382
|
+
end
|
383
|
+
|
384
|
+
describe '#in_nav' do
|
385
|
+
it 'should be true by default' do
|
386
|
+
page = Page.create name: 'Hello'
|
387
|
+
page.in_nav.should be_true
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
describe '#in_map' do
|
392
|
+
it 'should be true by default' do
|
393
|
+
page = Page.create name: 'Hello'
|
394
|
+
page.in_map.should be_true
|
395
|
+
end
|
396
|
+
end
|
397
|
+
|
398
|
+
describe '#in_url' do
|
399
|
+
it 'should be true by default' do
|
400
|
+
page = Page.create name: 'Hello'
|
401
|
+
page.in_url.should be_true
|
371
402
|
end
|
372
403
|
end
|
373
404
|
|
@@ -414,6 +445,17 @@ module ConstructorPages
|
|
414
445
|
page.full_url.should == '/page'
|
415
446
|
end
|
416
447
|
end
|
448
|
+
|
449
|
+
context 'if page in_url false' do
|
450
|
+
it 'should generate without url' do
|
451
|
+
page = Page.create name: 'Hello world'
|
452
|
+
second_page = Page.create name: 'Sub page', url: 'my-world', auto_url: false, parent_id: page.id, in_url: false
|
453
|
+
third_page = Page.create name: 'Third page', url: 'third', auto_url: false, parent_id: second_page.id
|
454
|
+
page.full_url.should == '/hello-world'
|
455
|
+
second_page.full_url.should == '/hello-world/my-world'
|
456
|
+
third_page.full_url.should == '/hello-world/third'
|
457
|
+
end
|
458
|
+
end
|
417
459
|
end
|
418
460
|
|
419
461
|
describe 'method_missing' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: constructor-pages
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Zotov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: constructor-core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.8.
|
19
|
+
version: 0.8.5
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.8.
|
26
|
+
version: 0.8.5
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: dragonfly
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -187,6 +187,7 @@ files:
|
|
187
187
|
- db/migrate/10_create_html_types.rb
|
188
188
|
- db/migrate/11_create_image_types.rb
|
189
189
|
- db/migrate/12_add_default_template.rb
|
190
|
+
- db/migrate/13_add_in_url_to_pages.rb
|
190
191
|
- db/migrate/1_create_pages.rb
|
191
192
|
- db/migrate/2_create_templates.rb
|
192
193
|
- db/migrate/3_create_fields.rb
|
@@ -198,6 +199,7 @@ files:
|
|
198
199
|
- db/migrate/9_create_date_types.rb
|
199
200
|
- lib/constructor-pages.rb
|
200
201
|
- lib/constructor_pages/engine.rb
|
202
|
+
- spec/factories.rb
|
201
203
|
- spec/features/constructor_pages/fields_spec.rb
|
202
204
|
- spec/features/constructor_pages/pages_spec.rb
|
203
205
|
- spec/features/constructor_pages/templates_spec.rb
|
@@ -237,6 +239,7 @@ signing_key:
|
|
237
239
|
specification_version: 4
|
238
240
|
summary: Pages for Constructor CMS
|
239
241
|
test_files:
|
242
|
+
- spec/factories.rb
|
240
243
|
- spec/features/constructor_pages/fields_spec.rb
|
241
244
|
- spec/features/constructor_pages/pages_spec.rb
|
242
245
|
- spec/features/constructor_pages/templates_spec.rb
|