constructor-pages 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/constructor_pages/fields_controller.rb +7 -7
- data/app/controllers/constructor_pages/pages_controller.rb +39 -72
- data/app/controllers/constructor_pages/templates_controller.rb +9 -12
- data/app/models/constructor_pages/field.rb +25 -0
- data/app/models/constructor_pages/page.rb +5 -0
- data/app/views/constructor_pages/pages/_form.haml +1 -1
- data/constructor-pages.gemspec +2 -0
- data/spec/features/constructor_pages/pages_controller_spec.rb +12 -0
- data/spec/models/constructor_pages/page_model_spec.rb +17 -0
- metadata +21 -3
@@ -61,15 +61,15 @@ module ConstructorPages
|
|
61
61
|
redirect_to edit_template_url(template), notice: t(:field_success_removed, name: name)
|
62
62
|
end
|
63
63
|
|
64
|
-
def move_up
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
64
|
+
def move_up; move_to :up end
|
65
|
+
|
66
|
+
def move_down; move_to :down end
|
67
|
+
|
68
|
+
private
|
69
69
|
|
70
|
-
def
|
70
|
+
def move_to(to)
|
71
71
|
@field = Field.find(params[:id])
|
72
|
-
@field.move_lower
|
72
|
+
to == :up ? @field.move_higher : @field.move_lower
|
73
73
|
redirect_to :back, notice: t(:field_success_moved, name: @field.name)
|
74
74
|
end
|
75
75
|
end
|
@@ -11,52 +11,47 @@ module ConstructorPages
|
|
11
11
|
before_filter :cache, :only => [:create, :update, :destroy, :move_up, :move_down]
|
12
12
|
|
13
13
|
def new
|
14
|
-
@page = Page.new
|
15
|
-
@template = Template.first.id
|
16
|
-
@multipart = false
|
14
|
+
@page, @template_id, @multipart = Page.new, Template.first.id, false
|
17
15
|
|
18
16
|
if params[:page]
|
19
|
-
@parent = Page.find(params[:page])
|
20
|
-
@page.parent_id = @parent.id
|
17
|
+
_parent = @page.parent = Page.find(params[:page])
|
21
18
|
|
22
|
-
if
|
23
|
-
|
24
|
-
|
25
|
-
|
19
|
+
if _parent
|
20
|
+
if _parent.template.child_id.nil? and !_parent.template.leaf?
|
21
|
+
@template_id = _parent.template.children.first.id
|
22
|
+
else
|
23
|
+
@template_id = _parent.template.child_id
|
24
|
+
end
|
26
25
|
end
|
27
26
|
end
|
28
27
|
end
|
29
28
|
|
30
29
|
def show
|
31
|
-
|
32
|
-
@page = Page.first
|
33
|
-
else
|
34
|
-
@request = '/' + params[:all]
|
35
|
-
@page = Page.where(:full_url => @request).first
|
36
|
-
end
|
30
|
+
@page = params[:all].nil? ? Page.first : Page.find_by_full_url('/' + params[:all])
|
37
31
|
|
38
32
|
if @page.nil? or !@page.active
|
39
|
-
render :
|
33
|
+
render action: 'error_404', layout: false
|
40
34
|
return
|
41
35
|
end
|
42
36
|
|
43
|
-
|
44
|
-
redirect_to @page.link
|
45
|
-
end
|
37
|
+
redirect_to @page.link if @page.redirect?
|
46
38
|
|
47
|
-
|
39
|
+
_code_name = @page.template.code_name.to_s
|
40
|
+
|
41
|
+
instance_variable_set('@'+_code_name, @page)
|
48
42
|
|
49
43
|
respond_to do |format|
|
50
|
-
format.html { render :
|
44
|
+
format.html { render template: "html_templates/#{_code_name}" }
|
51
45
|
format.json {
|
52
|
-
_template = render_to_string :
|
53
|
-
_js = render_to_string :
|
46
|
+
_template = render_to_string partial: "json_templates/#{_code_name}.json.erb", layout: false, locals: {_code_name.to_sym => @page, page: @page}
|
47
|
+
_js = render_to_string partial: "js_partials/#{_code_name}.js"
|
54
48
|
|
55
|
-
render :
|
49
|
+
render json: @page, self_and_ancestors: @page.self_and_ancestors.map(&:id), template: _template.gsub(/\n/, '\\\\n'), js: _js
|
56
50
|
}
|
57
51
|
end
|
58
52
|
end
|
59
53
|
|
54
|
+
=begin
|
60
55
|
def search
|
61
56
|
if params[:all].nil?
|
62
57
|
@page = Page.first
|
@@ -99,22 +94,23 @@ module ConstructorPages
|
|
99
94
|
|
100
95
|
render :template => "templates/#{template.code_name}_search"
|
101
96
|
end
|
97
|
+
=end
|
102
98
|
|
103
99
|
def edit
|
104
100
|
@page = Page.find(params[:id])
|
105
101
|
@page.template ||= Template.first
|
106
|
-
@
|
102
|
+
@template_id = @page.template.id
|
107
103
|
|
108
|
-
@multipart = @page.
|
104
|
+
@multipart = @page.fields.map{|f| f.type_value == 'image'}.include?(true) ? true : false
|
109
105
|
end
|
110
106
|
|
111
107
|
def create
|
112
108
|
@page = Page.new params[:page]
|
113
109
|
|
114
110
|
if @page.save
|
115
|
-
redirect_to pages_url, notice: t(:page_success_added, name: @page.name)
|
111
|
+
redirect_to pages.pages_url, notice: t(:page_success_added, name: @page.name)
|
116
112
|
else
|
117
|
-
render :
|
113
|
+
render action: :new
|
118
114
|
end
|
119
115
|
end
|
120
116
|
|
@@ -122,71 +118,42 @@ module ConstructorPages
|
|
122
118
|
@page = Page.find params[:id]
|
123
119
|
|
124
120
|
if @page.template.id != params[:page][:template_id].to_i
|
125
|
-
@page.
|
126
|
-
"constructor_pages/types/#{field.type_value}_type".classify.constantize.destroy_all(
|
127
|
-
:field_id => field.id,
|
128
|
-
:page_id => @page.id)
|
129
|
-
end
|
121
|
+
@page.fields.each {|f| f.remove_values_for @page}
|
130
122
|
end
|
131
123
|
|
132
124
|
if @page.update_attributes params[:page]
|
125
|
+
@page.fields.each {|f| f.update_value(@page, params[:fields])}
|
133
126
|
|
134
|
-
@page.
|
135
|
-
f = "constructor_pages/types/#{field.type_value}_type".classify.constantize.where(
|
136
|
-
:field_id => field.id,
|
137
|
-
:page_id => @page.id).first_or_create
|
138
|
-
|
139
|
-
if params[:fields]
|
140
|
-
f.value = 0 if field.type_value == 'boolean'
|
141
|
-
|
142
|
-
if params[:fields][field.type_value]
|
143
|
-
if field.type_value == "date"
|
144
|
-
value = params[:fields][field.type_value][field.id.to_s]
|
145
|
-
f.value = Date.new(value["date(1i)"].to_i, value["date(2i)"].to_i, value["date(3i)"].to_i).to_s
|
146
|
-
else
|
147
|
-
f.value = params[:fields][field.type_value][field.id.to_s]
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
f.save
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
redirect_to pages_url, notice: t(:page_success_updated, name: @page.name)
|
127
|
+
redirect_to pages.pages_url, notice: t(:page_success_updated, name: @page.name)
|
156
128
|
else
|
157
|
-
render :
|
129
|
+
render action: :edit
|
158
130
|
end
|
159
131
|
end
|
160
132
|
|
161
133
|
def destroy
|
162
134
|
@page = Page.find(params[:id])
|
163
|
-
|
135
|
+
_name = @page.name
|
164
136
|
@page.destroy
|
165
|
-
redirect_to pages_url, notice: t(:page_success_removed, name:
|
137
|
+
redirect_to pages_url, notice: t(:page_success_removed, name: _name)
|
166
138
|
end
|
167
139
|
|
168
|
-
def move_up
|
169
|
-
from = Page.find(params[:id])
|
170
|
-
ls = from.left_sibling
|
171
|
-
if not ls.nil? and from.move_possible?(ls)
|
172
|
-
from.move_left
|
173
|
-
end
|
140
|
+
def move_up; move_to :up end
|
174
141
|
|
175
|
-
|
176
|
-
|
142
|
+
def move_down; move_to :down end
|
143
|
+
|
144
|
+
private
|
177
145
|
|
178
|
-
def
|
146
|
+
def move_to(to)
|
179
147
|
from = Page.find(params[:id])
|
180
|
-
|
181
|
-
|
182
|
-
|
148
|
+
to_sibling = to == :up ? from.left_sibling : from.right_sibling
|
149
|
+
|
150
|
+
if not to_sibling.nil? and from.move_possible?(to_sibling)
|
151
|
+
to == :up ? from.move_left : from.move_right
|
183
152
|
end
|
184
153
|
|
185
154
|
redirect_to :back
|
186
155
|
end
|
187
156
|
|
188
|
-
private
|
189
|
-
|
190
157
|
def cache
|
191
158
|
expire_page :action => :show
|
192
159
|
cache_dir = ActionController::Base.page_cache_directory
|
@@ -47,21 +47,18 @@ module ConstructorPages
|
|
47
47
|
redirect_to templates_url, :notice => "Шаблон «#{name}» успешно удален."
|
48
48
|
end
|
49
49
|
|
50
|
-
def move_up
|
51
|
-
from = Template.find(params[:id])
|
52
|
-
ls = from.left_sibling
|
53
|
-
if not ls.nil? and from.move_possible?(ls)
|
54
|
-
from.move_left
|
55
|
-
end
|
50
|
+
def move_up; move_to :up end
|
56
51
|
|
57
|
-
|
58
|
-
|
52
|
+
def move_down; move_to :down end
|
53
|
+
|
54
|
+
private
|
59
55
|
|
60
|
-
def
|
56
|
+
def move_to(to)
|
61
57
|
from = Template.find(params[:id])
|
62
|
-
|
63
|
-
|
64
|
-
|
58
|
+
to_sibling = to == :up ? from.left_sibling : from.right_sibling
|
59
|
+
|
60
|
+
if not to_sibling.nil? and from.move_possible?(to_sibling)
|
61
|
+
to == :up ? from.move_left : from.move_right
|
65
62
|
end
|
66
63
|
|
67
64
|
redirect_to :back
|
@@ -24,6 +24,31 @@ module ConstructorPages
|
|
24
24
|
acts_as_list scope: :template_id
|
25
25
|
default_scope order: :position
|
26
26
|
|
27
|
+
# return constant of model by type_value
|
28
|
+
def type_model; "constructor_pages/types/#{type_value}_type".classify.constantize end
|
29
|
+
|
30
|
+
# remove all type_fields values for specified page
|
31
|
+
def remove_values_for(page); type_model.destroy_all field_id: id, page_id: page.id end
|
32
|
+
|
33
|
+
def update_value(page, params)
|
34
|
+
_type_value = type_model.where(field_id: id, page_id: page.id).first_or_create
|
35
|
+
|
36
|
+
if params
|
37
|
+
_type_value.value = 0 if type_value == 'boolean'
|
38
|
+
|
39
|
+
if params[type_value]
|
40
|
+
if type_value == 'date'
|
41
|
+
value = params[type_value][id.to_s]
|
42
|
+
_type_value.value = Date.new(value['date(1i)'].to_i, value['date(2i)'].to_i, value['date(3i)'].to_i).to_s
|
43
|
+
else
|
44
|
+
_type_value.value = params[type_value][id.to_s]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
_type_value.save
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
27
52
|
private
|
28
53
|
|
29
54
|
def method_uniqueness
|
@@ -16,6 +16,8 @@ module ConstructorPages
|
|
16
16
|
has_many :html_types, dependent: :destroy, class_name: 'Types::HtmlType'
|
17
17
|
has_many :image_types, dependent: :destroy, class_name: 'Types::ImageType'
|
18
18
|
|
19
|
+
has_many :fields, through: :template
|
20
|
+
|
19
21
|
belongs_to :template
|
20
22
|
|
21
23
|
default_scope order :lft
|
@@ -75,6 +77,9 @@ module ConstructorPages
|
|
75
77
|
end
|
76
78
|
end
|
77
79
|
|
80
|
+
# check if link specified
|
81
|
+
def redirect?; url != link && !link.empty? end
|
82
|
+
|
78
83
|
private
|
79
84
|
|
80
85
|
# if url has been changed by manually or url is empty
|
@@ -50,7 +50,7 @@
|
|
50
50
|
.control-group
|
51
51
|
= f.label :template, :class => 'control-label'
|
52
52
|
.controls
|
53
|
-
= f.select :template_id, options_for_select(templates, :selected => @
|
53
|
+
= f.select :template_id, options_for_select(templates, :selected => @template_id)
|
54
54
|
.control-group
|
55
55
|
= f.label :link, :class => 'control-label'
|
56
56
|
.controls
|
data/constructor-pages.gemspec
CHANGED
@@ -36,6 +36,23 @@ module ConstructorPages
|
|
36
36
|
it 'should return page as json format with fields'
|
37
37
|
end
|
38
38
|
|
39
|
+
describe '#redirect?' do
|
40
|
+
it 'should check if link specified or not' do
|
41
|
+
page = Page.create name: 'Test redirection'
|
42
|
+
page.redirect?.should be_false
|
43
|
+
|
44
|
+
page.link = ''
|
45
|
+
page.save
|
46
|
+
|
47
|
+
page.redirect?.should be_false
|
48
|
+
|
49
|
+
page.link = '/hello-redirect'
|
50
|
+
page.save
|
51
|
+
|
52
|
+
page.redirect?.should be_true
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
39
56
|
describe '#auto_url' do
|
40
57
|
it 'should be true by default' do
|
41
58
|
page = Page.create
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: constructor-pages
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.5.
|
21
|
+
version: 0.5.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - '='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.5.
|
29
|
+
version: 0.5.3
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: dragonfly
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,6 +123,22 @@ dependencies:
|
|
123
123
|
- - ! '>='
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: capybara
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
126
142
|
description: Pages for Constructor CMS
|
127
143
|
email: ivanzotov@gmail.com
|
128
144
|
executables: []
|
@@ -197,6 +213,7 @@ files:
|
|
197
213
|
- lib/constructor-pages.rb
|
198
214
|
- lib/constructor_pages/engine.rb
|
199
215
|
- public/hello.txt
|
216
|
+
- spec/features/constructor_pages/pages_controller_spec.rb
|
200
217
|
- spec/models/constructor_pages/field_model_spec.rb
|
201
218
|
- spec/models/constructor_pages/page_model_spec.rb
|
202
219
|
- spec/models/constructor_pages/template_model_spec.rb
|
@@ -225,6 +242,7 @@ signing_key:
|
|
225
242
|
specification_version: 3
|
226
243
|
summary: Pages for Constructor CMS
|
227
244
|
test_files:
|
245
|
+
- spec/features/constructor_pages/pages_controller_spec.rb
|
228
246
|
- spec/models/constructor_pages/field_model_spec.rb
|
229
247
|
- spec/models/constructor_pages/page_model_spec.rb
|
230
248
|
- spec/models/constructor_pages/template_model_spec.rb
|