constructor-cms 0.6.3 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a97f1d55b58b4fd535f25fccedfd0dd780cdc5ad
4
- data.tar.gz: adaa2a35ddf79beca36421a524192444debc0678
3
+ metadata.gz: 022e7812dfa74494097fba1ab00b54dee5c175c7
4
+ data.tar.gz: 301e5215f6a22164105e95d8d2b9039b7222595b
5
5
  SHA512:
6
- metadata.gz: 5306bd8fe6a68938793996e676e78d5e3e8ed2aaef33b73393fded4fa63e6a11a8bf34d3f62006bb51a2d4eb8c3666abc2d6c169d92845d0bb994d9eb1161c27
7
- data.tar.gz: 24e265f31b60b8e503cc942b4132a167d448b53f79ca98c9a37c27798ce3cfb002bc43ab009dba22e8e32c1c8201a1ec8d4a55906a2a15b78565f675ca1cf339
6
+ metadata.gz: c1afc9d110882f7e27d319d8949365f3132f092442ce1d882c57f1b613829f02cd674a75c434ba5c71bf184984309aaec18726859f874486cfbbb70a8a0f21c0
7
+ data.tar.gz: b959c494f45c7c837fec8dae249464151b1559af23025df3778e06493b5315670123cadab991375244b8c3511005b0da03d1e82c2a18094708c3ab8231ec5fd6
@@ -1,3 +1,3 @@
1
1
  module ConstructorCore
2
- VERSION = '0.6.3'
2
+ VERSION = '0.6.4'
3
3
  end
@@ -1,5 +1,11 @@
1
+ # encoding: utf-8
2
+
1
3
  module ConstructorPages
2
- module MoveHelper
4
+ class ApplicationController < ConstructorCore::ApplicationController
5
+ def self.movable(what)
6
+ %w{up down}.each {|m| define_method "move_#{m}" do move_to what, params[:id], m.to_sym end}
7
+ end
8
+
3
9
  def move_to(what, id, to)
4
10
  from = ('constructor_pages/'+what.to_s).classify.constantize.find(id)
5
11
  to_sibling = to == :up ? from.left_sibling : from.right_sibling
@@ -11,4 +17,4 @@ module ConstructorPages
11
17
  redirect_to :back
12
18
  end
13
19
  end
14
- end
20
+ end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module ConstructorPages
4
- class FieldsController < ConstructorCore::ApplicationController
4
+ class FieldsController < ApplicationController
5
5
  def new
6
6
  @field = Field.new
7
7
  @field.template = Template.find(params[:template_id])
@@ -1,17 +1,17 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module ConstructorPages
4
- class PagesController < ConstructorCore::ApplicationController
5
- include MoveHelper
4
+ class PagesController < ApplicationController
5
+ movable :page
6
6
 
7
- before_filter {@roots = Page.roots}
7
+ before_filter {@roots, @template_exists = Page.roots, Template.count > 0}
8
8
 
9
9
  def index
10
- @template_exists = Template.count > 0
11
10
  flash.notice = 'Create at least one template' unless @template_exists
12
11
  end
13
12
 
14
13
  def new
14
+ redirect_to pages_path and return unless @template_exists
15
15
  @page, @template_id, @multipart = Page.new, Template.first.id, false
16
16
 
17
17
  if params[:page] and (@page.parent = Page.find(params[:page]))
@@ -128,8 +128,6 @@ module ConstructorPages
128
128
  redirect_to pages_url, notice: t(:page_success_removed, name: _name)
129
129
  end
130
130
 
131
- %w{up down}.each {|m| define_method "move_#{m}" do move_to :page, params[:id], m.to_sym end}
132
-
133
131
  private
134
132
 
135
133
  def page_params
@@ -1,10 +1,11 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module ConstructorPages
4
- class TemplatesController < ConstructorCore::ApplicationController
5
- include MoveHelper
4
+ class TemplatesController < ApplicationController
6
5
  include TreeviewHelper
7
6
 
7
+ movable :template
8
+
8
9
  before_filter {@roots = Template.roots}
9
10
 
10
11
  def new
@@ -37,12 +38,15 @@ module ConstructorPages
37
38
 
38
39
  def destroy
39
40
  @template = Template.find(params[:id])
40
- name = @template.name
41
- @template.destroy
42
- redirect_to templates_url, notice: t(:template_success_removed, name: name)
43
- end
44
41
 
45
- %w{up down}.each {|m| define_method "move_#{m}" do move_to :template, params[:id], m.to_sym end}
42
+ if @template.pages.count == 0
43
+ name = @template.name
44
+ @template.destroy
45
+ redirect_to templates_url, notice: t(:template_success_removed, name: name)
46
+ else
47
+ redirect_to :back, alert: t(:template_error_delete_pages)
48
+ end
49
+ end
46
50
 
47
51
  private
48
52
 
@@ -23,7 +23,7 @@ module ConstructorPages
23
23
  # Adding has_many for all field types
24
24
  TYPES.each do |t|
25
25
  class_eval %{
26
- has_many :#{t}_types, class_name: 'Types::#{t.titleize}Type'
26
+ has_many :#{t}_types, dependent: :destroy, class_name: 'Types::#{t.titleize}Type'
27
27
  }
28
28
  end
29
29
 
@@ -42,10 +42,7 @@ module ConstructorPages
42
42
  # field and template code_name should be uniqueness for page methods
43
43
  def self.check_code_name(code_name)
44
44
  [code_name, code_name.pluralize, code_name.singularize].each do |name|
45
- # TODO: replace Page.first
46
- if Page.first.respond_to?(name)
47
- return false
48
- end
45
+ return false if Page.instance_methods.include?(name.to_sym)
49
46
  end
50
47
 
51
48
  true
@@ -16,8 +16,8 @@ module ConstructorPages
16
16
 
17
17
  default_scope -> { order :lft }
18
18
 
19
- has_many :pages
20
- has_many :fields
19
+ has_many :pages, dependent: :destroy
20
+ has_many :fields, dependent: :destroy
21
21
 
22
22
  acts_as_nested_set
23
23
 
@@ -1,9 +1,10 @@
1
1
  = form_for @page, html: {multipart: @multipart} do |f|
2
2
  - if @page.errors.any?
3
- .alert.alert-error.fade.in.span12
4
- = link_to '×', '#', class: 'close', 'data-dismiss' => 'alert'
5
- - @page.errors.full_messages.each do |m|
6
- = m
3
+ .row-fluid
4
+ .alert.alert-error.fade.in.span12
5
+ = link_to '×', '#', class: 'close', 'data-dismiss' => 'alert'
6
+ - @page.errors.full_messages.each do |m|
7
+ = m
7
8
 
8
9
  .form-horizontal
9
10
  .control-group
@@ -1,9 +1,10 @@
1
1
  = form_for @template do |f|
2
2
  - if @template.errors.any?
3
- .alert.alert-error.fade.in.span12
4
- = link_to '×', '#', class: 'close', 'data-dismiss' => 'alert'
5
- - @template.errors.full_messages.each do |m|
6
- = m
3
+ .row-fluid
4
+ .alert.alert-error.fade.in.span12
5
+ = link_to '×', '#', class: 'close', 'data-dismiss' => 'alert'
6
+ - @template.errors.full_messages.each do |m|
7
+ = m
7
8
 
8
9
  .form-horizontal
9
10
  .control-group
@@ -15,12 +16,12 @@
15
16
  .controls= f.text_field :code_name, class: 'span4'
16
17
 
17
18
  .control-group
18
- = f.label :parent, class: 'control-label'
19
+ = f.label :parent_id, class: 'control-label'
19
20
  .controls
20
21
  = f.select :parent_id, options_for_select(for_select(@roots), selected: @template.parent_id), disabled: @template.self_and_descendants.map(&:id), include_blank: t(:no)
21
22
 
22
23
  .control-group
23
- = f.label :child, class: 'control-label'
24
+ = f.label :child_id, class: 'control-label'
24
25
  .controls
25
26
  = f.select :child_id, options_for_select(for_select(@roots), selected: @template.child_id), include_blank: t(:no)
26
27
 
@@ -17,4 +17,8 @@
17
17
  = link_to edit_template_path(template), class: 'btn btn-primary btn-mini' do
18
18
  %i.icon-pencil
19
19
  =t :edit
20
- = t(:template).downcase
20
+ = t(:template).downcase
21
+
22
+ = link_to template_path(template), method: :delete, class: 'btn btn-danger btn-mini pull-right', data: {confirm: t(:are_you_sure?)} do
23
+ %i.icon-remove
24
+ =t :delete
@@ -49,4 +49,14 @@ en:
49
49
 
50
50
  template_success_added: 'Template «%{name}» added successfully.'
51
51
  template_success_updated: 'Template «%{name}» updated successfully.'
52
- template_success_removed: 'Template «%{name}» removed successfully.'
52
+ template_success_removed: 'Template «%{name}» removed successfully.'
53
+
54
+ template_error_delete_pages: 'Delete pages with this template before'
55
+
56
+ activerecord:
57
+ errors:
58
+ models:
59
+ constructor_pages/template:
60
+ attributes:
61
+ base:
62
+ code_name_already_in_use: 'Code name has already been taken'
@@ -11,7 +11,7 @@ ru:
11
11
 
12
12
  menu: 'Меню'
13
13
  breadcrumbs: 'Хлебные крошки'
14
-
14
+ code_name_already_in_use: 'Такое кодовое имя уже используется'
15
15
  template: 'Шаблон'
16
16
  new_template: 'Создать шаблон'
17
17
  edit_template: 'Редактирование шаблона'
@@ -49,6 +49,8 @@ ru:
49
49
  template_success_updated: 'Шаблон «%{name}» успешно обновлен.'
50
50
  template_success_removed: 'Шаблон «%{name}» успешно удален.'
51
51
 
52
+ template_error_delete_pages: 'Удалите страницы с данным шаблоном'
53
+
52
54
  activerecord:
53
55
  attributes:
54
56
  constructor_pages/field:
@@ -60,6 +62,7 @@ ru:
60
62
  code_name: "Кодовое имя"
61
63
  parent: "Родительский"
62
64
  child: "Дочерний"
65
+
63
66
  constructor_pages/page:
64
67
  active: "Вкл./Выкл."
65
68
  image: "Изображение"
@@ -86,4 +89,8 @@ ru:
86
89
  title:
87
90
  blank: "не может быть пустым"
88
91
  url:
89
- blank: "не может быть пустой"
92
+ blank: "не может быть пустой"
93
+ constructor_pages/template:
94
+ attributes:
95
+ base:
96
+ code_name_already_in_use: 'Такое кодовое имя уже используется'
@@ -5,18 +5,21 @@ require 'spec_helper'
5
5
  module ConstructorPages
6
6
  describe 'Pages Controller' do
7
7
  before :all do
8
+ ConstructorCore::User.delete_all
8
9
  @user = ConstructorCore::User.create email: 'ivanzotov@gmail.com', password: '123qweASD'
9
- @template = Template.create name: 'Page', code_name: 'page'
10
10
  end
11
11
 
12
12
  before :each do
13
13
  Page.delete_all
14
14
  Field.delete_all
15
+ Template.delete_all
15
16
 
16
17
  Field::TYPES.each do |t|
17
18
  "constructor_pages/types/#{t}_type".classify.constantize.delete_all
18
19
  end
19
20
 
21
+ @template = Template.create name: 'Page', code_name: 'page'
22
+
20
23
  login_as @user
21
24
  end
22
25
 
@@ -72,7 +75,7 @@ module ConstructorPages
72
75
  page.should have_link 'Delete', pages.page_path(_page)
73
76
  end
74
77
 
75
- it 'should has Add child' do
78
+ it 'should has Add child if child exists' do
76
79
  _template = Template.create name: 'Child', code_name: 'child_page', parent: @template
77
80
  _page = Page.create name: 'Zanussi', template: @template
78
81
  visit pages.pages_path
@@ -81,46 +84,64 @@ module ConstructorPages
81
84
  end
82
85
 
83
86
  describe 'Moving' do
84
- it 'should move up' do
87
+ it 'should move page' do
85
88
  _page_first = Page.create name: 'First'
86
89
  _page_second = Page.create name: 'Second'
87
90
  _page_third = Page.create name: 'Third'
88
91
 
89
- # test
90
- _page_first.lft.should == 1
91
- _page_first.rgt.should == 2
92
+ _page_first.left_sibling.should be_nil
93
+ _page_first.right_sibling.should == _page_second
94
+
95
+ _page_second.left_sibling.should == _page_first
96
+ _page_second.right_sibling.should == _page_third
97
+
98
+ _page_third.left_sibling.should == _page_second
99
+ _page_third.right_sibling.should be_nil
100
+
101
+ visit pages.pages_path
102
+ find("a[href='#{pages.page_move_down_path(_page_first.id)}']").click
92
103
 
93
- _page_second.lft.should == 3
94
- _page_second.rgt.should == 4
104
+ _page_first.reload
105
+ _page_first.left_sibling.should == _page_second
106
+ _page_first.right_sibling.should == _page_third
95
107
 
96
- _page_third.lft.should == 5
97
- _page_third.rgt.should == 6
108
+ _page_second.reload
109
+ _page_second.left_sibling.should be_nil
110
+ _page_second.right_sibling.should == _page_first
98
111
 
112
+ _page_third.reload
113
+ _page_third.left_sibling.should == _page_first
114
+ _page_third.right_sibling.should be_nil
99
115
 
100
- # test
116
+ find("a[href='#{pages.page_move_up_path(_page_third.id)}']").click
101
117
 
102
- _page_first.left_sibling.should be_nil
103
- _page_first.right_sibling.should == _page_second
118
+ _page_first.reload
119
+ _page_first.left_sibling.should == _page_third
120
+ _page_first.right_sibling.should be_nil
104
121
 
105
- _page_second.left_sibling.should == _page_first
122
+ _page_second.reload
123
+ _page_second.left_sibling.should be_nil
106
124
  _page_second.right_sibling.should == _page_third
107
125
 
126
+ _page_third.reload
108
127
  _page_third.left_sibling.should == _page_second
109
- _page_third.right_sibling.should be_nil
128
+ _page_third.right_sibling.should == _page_first
110
129
  end
111
130
  end
112
131
 
113
132
  describe 'New page' do
114
- it 'should be accessed by new_page_path if logged in' do
115
- visit pages.new_page_path
116
- current_path.should == pages.new_page_path
117
- status_code.should == 200
118
- end
133
+ describe 'Access' do
134
+ it 'should be accessed by new_page_path if logged in' do
135
+ visit pages.new_page_path
136
+ current_path.should == pages.new_page_path
137
+ status_code.should == 200
138
+ end
119
139
 
120
- it 'should not be accessed by new_page_path if not logged in' do
121
- logout
122
- visit pages.new_page_path
123
- current_path.should == '/'
140
+ it 'should not be accessed by new_page_path if not logged in' do
141
+ logout
142
+ visit pages.new_page_path
143
+ current_path.should == '/'
144
+ end
124
145
  end
125
146
 
126
147
  it 'should has child template of parent page' do
@@ -142,7 +163,7 @@ module ConstructorPages
142
163
  page.should have_field 'Name'
143
164
  end
144
165
 
145
- it 'should has not delete link' do
166
+ it 'should has no delete link' do
146
167
  visit pages.new_page_path
147
168
  page.should_not have_link 'Delete'
148
169
  end
@@ -156,13 +177,20 @@ module ConstructorPages
156
177
  visit pages.new_page_path
157
178
  fill_in 'Name', with: 'Hello world'
158
179
  Page.count.should == 0
159
- page.click_button 'Create Page'
180
+ click_button 'Create Page'
160
181
  Page.count.should == 1
161
182
  _page = Page.first
162
183
  _page.name.should == 'Hello world'
163
184
  _page.url.should == 'hello-world'
164
185
  current_path.should == pages.pages_path
165
186
  end
187
+
188
+ it 'should redirect to back if no template exists' do
189
+ Template.delete_all
190
+ visit pages.new_page_path
191
+ current_path.should == pages.pages_path
192
+ page.should have_text 'Create at least one template'
193
+ end
166
194
  end
167
195
 
168
196
  describe 'Edit page' do
@@ -170,15 +198,17 @@ module ConstructorPages
170
198
  @page = Page.create name: 'Hello world'
171
199
  end
172
200
 
173
- it 'should be accessed by edit_page_path if logged in' do
174
- visit pages.edit_page_path(@page)
175
- status_code.should == 200
176
- end
201
+ describe 'Access' do
202
+ it 'should be accessed by edit_page_path if logged in' do
203
+ visit pages.edit_page_path(@page)
204
+ status_code.should == 200
205
+ end
177
206
 
178
- it 'should not be accessed by edit_page_path if not logged in' do
179
- logout
180
- visit pages.edit_page_path(@page)
181
- current_path.should == '/'
207
+ it 'should not be accessed by edit_page_path if not logged in' do
208
+ logout
209
+ visit pages.edit_page_path(@page)
210
+ current_path.should == '/'
211
+ end
182
212
  end
183
213
 
184
214
  it 'should has delete link' do
@@ -0,0 +1,263 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module ConstructorPages
6
+ describe 'Templates Controller' do
7
+ before :all do
8
+ ConstructorCore::User.delete_all
9
+ @user = ConstructorCore::User.create email: 'ivanzotov@gmail.com', password: '123qweASD'
10
+ end
11
+
12
+ before :each do
13
+ Page.delete_all
14
+ Field.delete_all
15
+ Template.delete_all
16
+
17
+ Field::TYPES.each do |t|
18
+ "constructor_pages/types/#{t}_type".classify.constantize.delete_all
19
+ end
20
+
21
+ login_as @user
22
+ end
23
+
24
+ describe 'Index' do
25
+ describe 'Access' do
26
+ it 'should be accessed by pages.templates_path if logged in' do
27
+ visit pages.templates_path
28
+ current_path.should == pages.templates_path
29
+ status_code.should == 200
30
+ end
31
+
32
+ it 'should not be accessed by pages.templates_path if not logged in' do
33
+ logout
34
+ visit pages.templates_path
35
+ current_path.should == '/'
36
+ end
37
+ end
38
+
39
+ it 'should has new template link' do
40
+ visit pages.templates_path
41
+ page.should have_link 'New template', pages.new_template_path
42
+ end
43
+
44
+ it 'should has list of templates' do
45
+ Template.create name: 'Page', code_name: 'page'
46
+ visit pages.templates_path
47
+ page.should have_selector 'ul li'
48
+ page.should have_text 'Page'
49
+ end
50
+
51
+ it 'should has edit_template link' do
52
+ _template = Template.create name: 'Page', code_name: 'page'
53
+ visit pages.templates_path
54
+ page.should have_link 'Edit template', pages.edit_template_path(_template)
55
+ end
56
+
57
+ it 'should has delete_page link' do
58
+ _template = Template.create name: 'Page', code_name: 'page'
59
+ visit pages.templates_path
60
+ page.should have_link 'Delete', pages.template_path(_template)
61
+ end
62
+ end
63
+
64
+ describe 'Moving' do
65
+ it 'should move template' do
66
+ _template_first = Template.create name: 'First', code_name: 'first'
67
+ _template_second = Template.create name: 'Second', code_name: 'second'
68
+ _template_third = Template.create name: 'Third', code_name: 'third'
69
+
70
+ _template_first.left_sibling.should be_nil
71
+ _template_first.right_sibling.should == _template_second
72
+
73
+ _template_second.left_sibling.should == _template_first
74
+ _template_second.right_sibling.should == _template_third
75
+
76
+ _template_third.left_sibling.should == _template_second
77
+ _template_third.right_sibling.should be_nil
78
+
79
+ visit pages.templates_path
80
+
81
+ find("a[href='#{pages.template_move_down_path(_template_first.id)}']").click
82
+
83
+ _template_first.reload
84
+ _template_first.left_sibling.should == _template_second
85
+ _template_first.right_sibling.should == _template_third
86
+
87
+ _template_second.reload
88
+ _template_second.left_sibling.should be_nil
89
+ _template_second.right_sibling.should == _template_first
90
+
91
+ _template_third.reload
92
+ _template_third.left_sibling.should == _template_first
93
+ _template_third.right_sibling.should be_nil
94
+
95
+ find("a[href='#{pages.template_move_up_path(_template_third.id)}']").click
96
+
97
+ _template_first.reload
98
+ _template_first.left_sibling.should == _template_third
99
+ _template_first.right_sibling.should be_nil
100
+
101
+ _template_second.reload
102
+ _template_second.left_sibling.should be_nil
103
+ _template_second.right_sibling.should == _template_third
104
+
105
+ _template_third.reload
106
+ _template_third.left_sibling.should == _template_second
107
+ _template_third.right_sibling.should == _template_first
108
+ end
109
+ end
110
+
111
+ describe 'New template' do
112
+ describe 'Access' do
113
+ it 'should be accessed by new_template_path if logged in' do
114
+ visit pages.new_template_path
115
+ current_path.should == pages.new_template_path
116
+ status_code.should == 200
117
+ end
118
+
119
+ it 'should not be accessed by new_template_path if not logged in' do
120
+ logout
121
+ visit pages.new_template_path
122
+ current_path.should == '/'
123
+ end
124
+ end
125
+
126
+ it 'should has name field' do
127
+ visit pages.new_template_path
128
+ page.should have_field 'Name'
129
+ end
130
+
131
+ it 'should has code_name field' do
132
+ visit pages.new_template_path
133
+ page.should have_field 'Code name'
134
+ end
135
+
136
+ it 'should has parent and child selects' do
137
+ visit pages.new_template_path
138
+ page.should have_select 'Parent'
139
+ page.should have_select 'Child'
140
+ end
141
+
142
+ it 'should not has link new field' do
143
+ visit pages.new_template_path
144
+ page.should_not have_link 'New field'
145
+ end
146
+
147
+ it 'should not has delete link' do
148
+ visit pages.new_template_path
149
+ page.should_not have_link 'Delete template'
150
+ end
151
+
152
+ it 'should has Create Template button' do
153
+ visit pages.new_template_path
154
+ page.should have_button 'Create Template'
155
+ end
156
+
157
+ it 'should create new template' do
158
+ visit pages.new_template_path
159
+ fill_in 'Name', with: 'Brand'
160
+ fill_in 'Code name', with: 'brand'
161
+ Template.count.should == 0
162
+ click_button 'Create Template'
163
+ current_path.should == pages.templates_path
164
+ Template.count.should == 1
165
+ _template = Template.first
166
+ _template.name.should == 'Brand'
167
+ _template.code_name.should == 'brand'
168
+ end
169
+
170
+ it 'should validate uniqueness of code name' do
171
+ Template.create name: 'Brand', code_name: 'brand'
172
+ visit pages.new_template_path
173
+ fill_in 'Name', with: 'Brand'
174
+ fill_in 'Code name', with: 'brand'
175
+ click_button 'Create Template'
176
+ current_path.should == pages.templates_path
177
+ page.should have_text 'Code name has already been taken'
178
+ end
179
+
180
+ it 'should validate uniqueness of code name with Page' do
181
+ visit pages.new_template_path
182
+ fill_in 'Name', with: 'Brand'
183
+ fill_in 'Code name', with: 'get_field_value'
184
+ Template.count.should == 0
185
+ click_button 'Create Template'
186
+ Template.count.should == 0
187
+ page.should have_text 'Code name has already been taken'
188
+ end
189
+ end
190
+
191
+ describe 'Edit template' do
192
+ before :each do
193
+ @template = Template.create name: 'Page', code_name: 'page'
194
+ end
195
+
196
+ describe 'Access' do
197
+ it 'should be accessed by edit_template_path if logged in' do
198
+ visit pages.edit_template_path(@template)
199
+ status_code.should == 200
200
+ end
201
+
202
+ it 'should not be accessed by edit_template_path if not logged in' do
203
+ logout
204
+ visit pages.edit_template_path(@template)
205
+ current_path.should == '/'
206
+ end
207
+ end
208
+
209
+ it 'should has delete link' do
210
+ visit pages.edit_template_path(@template)
211
+ page.should have_link 'Delete template'
212
+ end
213
+
214
+ it 'should has new field link' do
215
+ visit pages.edit_template_path(@template)
216
+ page.should have_link 'New field', pages.new_field_path(@template)
217
+ end
218
+
219
+ it 'should has update template button' do
220
+ visit pages.edit_template_path(@template)
221
+ page.should have_button 'Update Template'
222
+ end
223
+
224
+ it 'should edit template' do
225
+ visit pages.edit_template_path(@template)
226
+ fill_in 'Name', with: 'New brand'
227
+ fill_in 'Code name', with: 'new_brand'
228
+ click_button 'Update Template'
229
+ @template.reload
230
+ @template.name.should == 'New brand'
231
+ @template.code_name.should == 'new_brand'
232
+ end
233
+ end
234
+
235
+ describe 'Delete template' do
236
+ it 'should delete from templates index' do
237
+ Template.create name: 'Page', code_name: 'page'
238
+ visit pages.templates_path
239
+ Template.count.should == 1
240
+ click_link 'Delete'
241
+ Template.count.should == 0
242
+ end
243
+
244
+ it 'should delete from template' do
245
+ _template = Template.create name: 'Page', code_name: 'page'
246
+ visit pages.edit_template_path(_template)
247
+ Template.count.should == 1
248
+ click_link 'Delete'
249
+ Template.count.should == 0
250
+ end
251
+
252
+ it 'should not delete if there are any pages' do
253
+ _template = Template.create name: 'Page', code_name: 'page'
254
+ Page.create name: 'Home page', template: _template
255
+ visit pages.edit_template_path(_template)
256
+ Template.count.should == 1
257
+ click_link 'Delete'
258
+ Template.count.should == 1
259
+ page.should have_text 'Delete pages with this template before'
260
+ end
261
+ end
262
+ end
263
+ end
@@ -113,14 +113,11 @@ module ConstructorPages
113
113
  end
114
114
 
115
115
  it 'should be uniqueness in scope Page' do
116
- Page.create name: 'Page', template: @template
117
116
  _field = Field.create name: 'Content', code_name: 'get_field_value', template: @template, type_value: 'text'
118
117
  _field.should_not be_valid
119
118
  end
120
119
 
121
120
  it 'should be uniqueness in scope Template branch' do
122
- Page.create name: 'Page', template: @template
123
-
124
121
  _template = Template.create name: 'Brand', code_name: 'brand', parent: @template
125
122
  @template.reload
126
123
 
@@ -49,6 +49,14 @@ module ConstructorPages
49
49
  Page.full_url_generate(second_page.id, 'third-page').should == '/first-page/second-page/third-page'
50
50
  end
51
51
  end
52
+
53
+ describe '.check_code_name' do
54
+ it 'should check existing code_name in instance_methods' do
55
+ Page.check_code_name('get_field_value').should be_false
56
+ Page.check_code_name('class').should be_false
57
+ Page.check_code_name('hello_world').should be_true
58
+ end
59
+ end
52
60
  end
53
61
 
54
62
  context 'INSTANCE METHODS' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: constructor-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.6.4
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-06-20 00:00:00.000000000 Z
11
+ date: 2013-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: constructor-core
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.6.3
19
+ version: 0.6.4
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.6.3
26
+ version: 0.6.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: constructor-pages
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.6.3
33
+ version: 0.6.4
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.6.3
40
+ version: 0.6.4
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: sqlite3
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -341,12 +341,12 @@ files:
341
341
  - pages/app/assets/images/constructor_pages/photos.png
342
342
  - pages/app/assets/javascripts/constructor_pages/ajax_pages.js
343
343
  - pages/app/assets/javascripts/constructor_pages/jquery.history.js
344
+ - pages/app/controllers/constructor_pages/application_controller.rb
344
345
  - pages/app/controllers/constructor_pages/fields_controller.rb
345
346
  - pages/app/controllers/constructor_pages/pages_controller.rb
346
347
  - pages/app/controllers/constructor_pages/templates_controller.rb
347
348
  - pages/app/helpers/constructor_pages/code_name_uniq.rb
348
349
  - pages/app/helpers/constructor_pages/fields_helper.rb
349
- - pages/app/helpers/constructor_pages/move_helper.rb
350
350
  - pages/app/helpers/constructor_pages/pages_helper.rb
351
351
  - pages/app/helpers/constructor_pages/templates_helper.rb
352
352
  - pages/app/helpers/constructor_pages/treeview_helper.rb
@@ -406,6 +406,7 @@ files:
406
406
  - pages/lib/constructor_pages/engine.rb
407
407
  - pages/public/hello.txt
408
408
  - pages/spec/features/constructor_pages/pages_controller_spec.rb
409
+ - pages/spec/features/constructor_pages/templates_controller_spec.rb
409
410
  - pages/spec/models/constructor_pages/field_model_spec.rb
410
411
  - pages/spec/models/constructor_pages/page_model_spec.rb
411
412
  - pages/spec/models/constructor_pages/template_model_spec.rb