constructor-pages 0.8.5 → 0.8.6

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: ad8ecd535c634c2ca60ef07a528827309da354dc
4
- data.tar.gz: a40b0e874c6deb4d0bfd4534429bd43a97484131
3
+ metadata.gz: 27f76c8e1756acf621e7a34dae4b7b798feb78f8
4
+ data.tar.gz: 046ce61e61f77fea4d4d79e845cc2532443db873
5
5
  SHA512:
6
- metadata.gz: 4d3018fa5da4f6ea3c4dec6e68f9e8868fa6da55c572487fca2d934d6869dc577df6701dd6285695bc730847aeabee27d1d62e18134f00093214d6f202c2866b
7
- data.tar.gz: d926d66001f42d933ddb6f016d1ac57b1edda1514fb9908e9050eaef3051659a440d59114def71bdaf6083a812bbd9e8589388db92c4a793756281953038d45e
6
+ metadata.gz: 35da98b6fb19281f2805672469f3d3ce5bda0cfaaa36177c8ba54ff777b6e266e6a051e63265fed720786e42dbaf119912ac4a8187c9d9d137e6726dfc39a747
7
+ data.tar.gz: cc53c47824bc38ca8b93dea6595116a9de302faf124be0abb50681e9b4b182b32d467d36732723780d23ae59b0b72159c2ff3e3f70f82212bc1453829e4a30e2
@@ -2,7 +2,7 @@
2
2
 
3
3
  module ConstructorPages
4
4
  class PagesController < ApplicationController
5
- layout 'constructor_core/application_core', except: [:show, :search]
5
+ layout 'constructor_core/application_core', except: [:show]
6
6
 
7
7
  movable :page
8
8
 
@@ -10,7 +10,7 @@ module ConstructorPages
10
10
 
11
11
  def index
12
12
  @pages = Page.includes(:template).load
13
- @pages_cache = Digest::MD5.hexdigest(@pages.map{|p| [p.name, p.full_url, p.in_url, p.lft, p.template_id]}.join)
13
+ @pages_cache = Digest::MD5.hexdigest(@pages.map{|p| [p.name, p.full_url, p.in_url, p.template.lft, p.lft, p.template_id]}.join)
14
14
  @template_exists = Template.count != 0
15
15
  flash[:notice] = 'Create at least one template' unless @template_exists
16
16
  end
@@ -19,22 +19,17 @@ module ConstructorPages
19
19
  @page = Page.new
20
20
  end
21
21
 
22
- def new_child
23
- @page, @parent_id = Page.new, params[:id]
24
- @template_id = Page.find(@parent_id).try(:template).try(:child).try(:id)
25
- end
26
-
27
22
  def show
28
23
  @page = Page.find_by_request_or_first("/#{params[:all]}")
29
24
  error_404 and return unless @page.try(:published?)
30
25
  redirect_to @page.link if @page.redirect?
31
26
  _code_name = @page.template.code_name
32
27
  instance_variable_set('@'+_code_name, @page)
33
- _code_name = _code_name.pluralize
28
+
34
29
  respond_to do |format|
35
- format.html { render "#{_code_name}/show" }
36
- format.json { render "#{_code_name}/show.json", layout: false rescue render json: @page }
37
- format.xml { render "#{_code_name}/show.xml", layout: false rescue render xml: @page }
30
+ format.html { render "#{_code_name.pluralize}/show" rescue render "templates/#{_code_name}"}
31
+ format.json { render "#{_code_name.pluralize}/show.json", layout: false rescue render json: @page }
32
+ format.xml { render "#{_code_name.pluralize}/show.xml", layout: false rescue render xml: @page }
38
33
  end
39
34
  end
40
35
 
@@ -6,10 +6,9 @@ module ConstructorPages
6
6
 
7
7
  movable :template
8
8
 
9
- before_filter -> {@roots = Template.roots}, only: [:new, :edit]
9
+ before_filter -> {@templates = Template.all}, only: [:index, :new, :edit, :update, :create]
10
10
 
11
11
  def index
12
- @templates = Template.all
13
12
  @templates_cache = Digest::MD5.hexdigest(@templates.map{|t| [t.name, t.lft]}.join)
14
13
  end
15
14
 
@@ -17,7 +17,9 @@ module ConstructorPages
17
17
  def for_select(items, full_url = false)
18
18
  result = []
19
19
  items && items.each do |i|
20
- result.push(["#{'--'*i.level} #{i.name}", i.id, ({'data-full_url' => i.full_url} if full_url) ])
20
+ arr = ["#{'--'*i.level} #{i.name}", i.id]
21
+ arr << {'data-full_url' => i.full_url} if full_url
22
+ result.push(arr)
21
23
  end
22
24
  result
23
25
  end
@@ -33,6 +33,9 @@ module ConstructorPages
33
33
  # Create object of type_value by page
34
34
  def create_type_object(page); type_class.create(field_id: id, page_id: page.id) end
35
35
 
36
+ # Find or create type object by page
37
+ def find_or_create_type_object(page); find_type_object(page) || create_type_object(page) end
38
+
36
39
  # Remove all type_fields values for specified page
37
40
  def remove_type_object(page); find_type_object(page).destroy end
38
41
 
@@ -129,7 +129,7 @@ module ConstructorPages
129
129
  def update_fields_values(params, reset_booleans = true)
130
130
  params || return
131
131
 
132
- fields.each {|f| f.find_type_object(self).tap {|t| t || break
132
+ fields.each {|f| f.find_or_create_type_object(self).tap {|t| t || next
133
133
  t.value = 0 if f.type_value == 'boolean' && reset_booleans
134
134
  params[f.code_name.to_sym].tap {|v| v && t.value = v}
135
135
  t.save }}
@@ -23,7 +23,7 @@ module ConstructorPages
23
23
 
24
24
  # Return child corresponding child_id or children first
25
25
  def child
26
- child_id ? Template.find(child_id) : children.first if !leaf?
26
+ Template.find(child_id) if child_id
27
27
  end
28
28
 
29
29
  # Convert name to accusative
@@ -1,7 +1,7 @@
1
- - image = page.get_field_value(field.code_name)
1
+ - image = field.get_value_for(page)
2
2
 
3
3
  - if image
4
4
  = image_tag image.thumb('200x200').url
5
+ %br/
5
6
 
6
- %br/
7
7
  = file_field_tag "fields[#{field.code_name}]", class: 'span6'
@@ -26,12 +26,6 @@
26
26
  =t :edit
27
27
  = page.template.to_accusative
28
28
 
29
- - if page.template.child
30
- = link_to new_child_page_path(page), class: 'btn btn-success btn-mini' do
31
- %i.icon-chevron-down
32
- =t :add
33
- = page.template.child.to_accusative
34
-
35
29
  = link_to page, method: :delete, class: 'btn btn-danger btn-mini pull-right', data: {confirm: t(:are_you_sure?)} do
36
30
  %i.icon-remove
37
31
  =t :delete
@@ -18,12 +18,7 @@
18
18
  .control-group
19
19
  = f.label :parent_id, class: 'control-label'
20
20
  .controls
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)
22
-
23
- .control-group
24
- = f.label :child_id, class: 'control-label'
25
- .controls
26
- = f.select :child_id, options_for_select(for_select(@roots), selected: @template.child_id), include_blank: t(:no)
21
+ = f.select :parent_id, options_for_select(for_select(@templates), selected: @template.parent_id), disabled: @template.self_and_descendants.map(&:id), include_blank: t(:no)
27
22
 
28
23
  - unless @template.new_record?
29
24
  .control-group
@@ -9,6 +9,7 @@ en:
9
9
  help: Help
10
10
  edit: Edit
11
11
  delete: Delete
12
+ url: URL
12
13
 
13
14
  code_name_already_in_use: This code name is already in use.
14
15
  field_success_added: Field «%{name}» added successfully.
@@ -8,6 +8,7 @@ ru:
8
8
  are_you_sure?: Вы уверены?
9
9
  display_in: Отображать в
10
10
  delete: Удалить
11
+ url: "Адрес"
11
12
 
12
13
  menu: Меню
13
14
  breadcrumbs: Хлебные крошки
@@ -74,6 +75,7 @@ ru:
74
75
  in_menu: "Меню"
75
76
  in_nav: "Хлебные крошки"
76
77
  in_map: "Карта сайта"
78
+ in_url: "Адрес"
77
79
  parent: "Родитель"
78
80
  parent_id: "Родительская страница"
79
81
  link: "Ссылка"
data/config/routes.rb CHANGED
@@ -1,9 +1,6 @@
1
1
  ConstructorPages::Engine.routes.draw do
2
2
  scope '/admin' do
3
- resources :pages, except: [:show] do
4
- get :new_child, on: :member
5
- end
6
-
3
+ resources :pages, except: [:show]
7
4
  resources :templates, except: [:show] do
8
5
  resources :fields, except: [:show, :index]
9
6
  end
@@ -17,6 +14,5 @@ ConstructorPages::Engine.routes.draw do
17
14
 
18
15
  root :to => 'pages#show'
19
16
 
20
- get '*all.:format' => 'pages#show'
21
- get '*all' => 'pages#show'
17
+ get '*all(.:format)' => 'pages#show', format: /(html|json|xml)/
22
18
  end
@@ -0,0 +1,9 @@
1
+ class RemoveChildIdFromTemplates < ActiveRecord::Migration
2
+ def self.up
3
+ remove_column 'constructor_pages_templates', :child_id
4
+ end
5
+
6
+ def self.down
7
+ add_column 'constructor_pages_templates', :child_id, :boolean, default: true
8
+ end
9
+ end
@@ -74,19 +74,6 @@ module ConstructorPages
74
74
  visit pages.pages_path
75
75
  page.should have_link 'Delete', pages.page_path(_page)
76
76
  end
77
-
78
- it 'should has Add child if child exists' do
79
- _template = Template.create name: 'Child', code_name: 'child_page', parent: @template
80
- _page = Page.create name: 'Zanussi', template: @template
81
- visit pages.pages_path
82
- page.should have_link 'Add child', pages.new_page_path(_page)
83
- end
84
-
85
- it 'should not has if child not exists' do
86
- _page = Page.create name: 'Zanussi', template: @template
87
- visit pages.pages_path
88
- page.should have_no_link 'Add'
89
- end
90
77
  end
91
78
 
92
79
  describe 'Show' do
@@ -164,22 +151,6 @@ module ConstructorPages
164
151
  end
165
152
  end
166
153
 
167
- it 'should has child template of parent page' do
168
- _template = Template.create name: 'Child', code_name: 'child_page', parent: @template
169
- _page = Page.create name: 'Zanussi', template: @template
170
- visit pages.pages_path
171
- click_link 'Add child'
172
- current_path.should == pages.new_child_page_path(_page)
173
- page.should have_select 'Template', selected: '-- Child'
174
- end
175
-
176
- it 'should edit with page view if no view found' do
177
- _template = Template.create name: 'Hello', code_name: 'hello'
178
- _page = Page.create name: 'Hello', template: _template
179
- visit pages.new_child_page_path(_page)
180
- page.should_not have_content 'This page show new with template'
181
- end
182
-
183
154
  it 'should has published checkbox' do
184
155
  visit pages.new_page_path
185
156
  page.should have_checked_field 'Active'
@@ -266,7 +237,7 @@ module ConstructorPages
266
237
  page.should have_text 'updated successfully'
267
238
  end
268
239
 
269
- describe 'renegerate descendants' do
240
+ describe 'regenerate descendants' do
270
241
  before :each do
271
242
  _template = Template.create name: 'Another page', code_name: 'another_page'
272
243
  _page_first = Page.create name: 'First', template: _template
@@ -282,7 +253,7 @@ module ConstructorPages
282
253
  end
283
254
 
284
255
  it 'should regenerate full_url of descendants without url if full_url or in_url changed' do
285
- check 'Url', false
256
+ uncheck 'URL'
286
257
  click_button 'Update Page'
287
258
 
288
259
  page.should have_link('First', '/first')
@@ -291,7 +262,7 @@ module ConstructorPages
291
262
  end
292
263
 
293
264
  it 'should regenerate full_url of descendants with url if full_url or in_url changed' do
294
- check 'Url', true
265
+ uncheck 'URL'
295
266
  click_button 'Update Page'
296
267
 
297
268
  page.should have_link('First', '/first')
@@ -133,10 +133,9 @@ module ConstructorPages
133
133
  page.should have_field 'Code name'
134
134
  end
135
135
 
136
- it 'should has parent and child selects' do
136
+ it 'should has parent select' do
137
137
  visit pages.new_template_path
138
138
  page.should have_select 'Parent'
139
- page.should have_select 'Child'
140
139
  end
141
140
 
142
141
  it 'should not has link new field' do
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module ConstructorPages
6
+ describe 'Image type field' 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
+ @template = Template.create name: 'Brand', code_name: 'brand'
22
+
23
+ login_as @user
24
+ end
25
+
26
+ it 'should upload image' do
27
+ field = Field.create name: 'Logo', code_name: 'logo', type_value: 'image', template: @template
28
+ _page = Page.create name: 'Zanussi'
29
+
30
+ visit pages.edit_page_path(_page)
31
+ page.should have_content('Logo')
32
+ attach_file('Logo', Rails.root.to_s+'/app/assets/images/upload_image.png')
33
+ click_button 'Update Page'
34
+ _page.reload
35
+ _page.logo.should_not be_nil
36
+ visit pages.edit_page_path(_page)
37
+ save_and_open_page
38
+ page.should have_selector('img[alt="Upload image"]')
39
+ end
40
+ end
41
+ end
@@ -72,6 +72,19 @@ module ConstructorPages
72
72
  end
73
73
  end
74
74
 
75
+ describe '#find_or_create_type_object' do
76
+ it 'should find or create object of type_value by page' do
77
+ field = Field.create name: 'Logo', code_name: 'logo', template: @template, type_value: 'image'
78
+ page = Page.create name: 'Page', template: @template
79
+ image_type = field.find_type_object(page)
80
+ image_type.should be_nil
81
+ image_type = field.find_or_create_type_object(page)
82
+ image_type.should be_an_instance_of(Types::ImageType)
83
+ image_type.page_id.should == page.id
84
+ image_type.field_id.should == field.id
85
+ end
86
+ end
87
+
75
88
  describe '#remove_type_object' do
76
89
  it 'should remote object of type_value by page' do
77
90
  field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
@@ -17,18 +17,5 @@ module ConstructorPages
17
17
  _template = Template.create name: 'Page', code_name: 'get_field_value'
18
18
  _template.valid?.should be_false
19
19
  end
20
-
21
- describe '#child' do
22
- it 'should return child corresponding child_id or children first' do
23
- _brand = Template.create name: 'Brand', code_name: 'brand'
24
- _series = Template.create name: 'Series', code_name: 'series', parent: _brand
25
- _brand.reload
26
-
27
- _brand.child.should == _series
28
- _brand.child_id = _brand.id
29
-
30
- _brand.child.should == _brand
31
- end
32
- end
33
20
  end
34
21
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: constructor-pages
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.5
4
+ version: 0.8.6
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-07-07 00:00:00.000000000 Z
11
+ date: 2013-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: constructor-core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.8.5
19
+ version: 0.8.6
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.8.5
26
+ version: 0.8.6
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: dragonfly
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -173,7 +173,6 @@ files:
173
173
  - app/views/constructor_pages/pages/edit.haml
174
174
  - app/views/constructor_pages/pages/index.haml
175
175
  - app/views/constructor_pages/pages/new.haml
176
- - app/views/constructor_pages/pages/new_child.haml
177
176
  - app/views/constructor_pages/templates/_form.haml
178
177
  - app/views/constructor_pages/templates/edit.haml
179
178
  - app/views/constructor_pages/templates/index.haml
@@ -188,6 +187,7 @@ files:
188
187
  - db/migrate/11_create_image_types.rb
189
188
  - db/migrate/12_add_default_template.rb
190
189
  - db/migrate/13_add_in_url_to_pages.rb
190
+ - db/migrate/14_remove_child_id_from_templates.rb
191
191
  - db/migrate/1_create_pages.rb
192
192
  - db/migrate/2_create_templates.rb
193
193
  - db/migrate/3_create_fields.rb
@@ -203,6 +203,7 @@ files:
203
203
  - spec/features/constructor_pages/fields_spec.rb
204
204
  - spec/features/constructor_pages/pages_spec.rb
205
205
  - spec/features/constructor_pages/templates_spec.rb
206
+ - spec/features/constructor_pages/types/image_type_spec.rb
206
207
  - spec/helpers/constructor_pages/.keep
207
208
  - spec/models/constructor_pages/field_spec.rb
208
209
  - spec/models/constructor_pages/page_spec.rb
@@ -243,6 +244,7 @@ test_files:
243
244
  - spec/features/constructor_pages/fields_spec.rb
244
245
  - spec/features/constructor_pages/pages_spec.rb
245
246
  - spec/features/constructor_pages/templates_spec.rb
247
+ - spec/features/constructor_pages/types/image_type_spec.rb
246
248
  - spec/helpers/constructor_pages/.keep
247
249
  - spec/models/constructor_pages/field_spec.rb
248
250
  - spec/models/constructor_pages/page_spec.rb
@@ -1,5 +0,0 @@
1
- - content_for :page_title do
2
- =t :new_page
3
-
4
- %section.span12
5
- = render 'form'