constructor-pages 0.5.2 → 0.5.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/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
|