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.
@@ -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
- @field = Field.find(params[:id])
66
- @field.move_higher
67
- redirect_to :back, notice: t(:field_success_moved, name: @field.name)
68
- end
64
+ def move_up; move_to :up end
65
+
66
+ def move_down; move_to :down end
67
+
68
+ private
69
69
 
70
- def move_down
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 @parent.template.child_id.nil? and !@parent.template.leaf?
23
- @template = @parent.template.descendants.first.id
24
- else
25
- @template = @parent.template.child_id
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
- if params[:all].nil?
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 :action => "error_404", :layout => false
33
+ render action: 'error_404', layout: false
40
34
  return
41
35
  end
42
36
 
43
- if @page.url != @page.link and !@page.link.empty?
44
- redirect_to @page.link
45
- end
37
+ redirect_to @page.link if @page.redirect?
46
38
 
47
- instance_variable_set('@'+@page.template.code_name.to_s, @page)
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 :template => "html_templates/#{@page.template.code_name}" }
44
+ format.html { render template: "html_templates/#{_code_name}" }
51
45
  format.json {
52
- _template = render_to_string :partial => "json_templates/#{@page.template.code_name}.json.erb", :layout => false, :locals => {@page.template.code_name.to_sym => @page, :page => @page}
53
- _js = render_to_string :partial => "js_partials/#{@page.template.code_name}.js"
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 :json => @page, :self_and_ancestors => @page.self_and_ancestors.map{|a| a.id}, :template => _template.gsub(/\n/, '\\\\n'), :js => _js
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
- @template = @page.template.id
102
+ @template_id = @page.template.id
107
103
 
108
- @multipart = @page.template.fields.map{|f| f.type_value == "image"}.include?(true) ? true : false
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 :action => "new"
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.template.fields.each do |field|
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.template.fields.each do |field|
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 :action => "edit"
129
+ render action: :edit
158
130
  end
159
131
  end
160
132
 
161
133
  def destroy
162
134
  @page = Page.find(params[:id])
163
- title = @page.name
135
+ _name = @page.name
164
136
  @page.destroy
165
- redirect_to pages_url, notice: t(:page_success_removed, name: @page.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
- redirect_to :back
176
- end
142
+ def move_down; move_to :down end
143
+
144
+ private
177
145
 
178
- def move_down
146
+ def move_to(to)
179
147
  from = Page.find(params[:id])
180
- rs = from.right_sibling
181
- if not rs.nil? and from.move_possible?(rs)
182
- from.move_right
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
- redirect_to :back
58
- end
52
+ def move_down; move_to :down end
53
+
54
+ private
59
55
 
60
- def move_down
56
+ def move_to(to)
61
57
  from = Template.find(params[:id])
62
- rs = from.right_sibling
63
- if not rs.nil? and from.move_possible?(rs)
64
- from.move_right
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 => @template)
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
@@ -25,5 +25,7 @@ Gem::Specification.new do |s|
25
25
  s.add_dependency 'haml-rails'
26
26
  s.add_dependency 'acts_as_list'
27
27
 
28
+
28
29
  s.add_development_dependency 'rspec-rails'
30
+ s.add_development_dependency 'capybara'
29
31
  end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+ require 'capybara/rspec'
5
+
6
+ module ConstructorPages
7
+ describe 'Page Controller', type: :feature do
8
+ it 'should be valid' do
9
+ visit '/'
10
+ end
11
+ end
12
+ end
@@ -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.2
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.2
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.2
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