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.
@@ -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