qbrick 2.5.2 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/qbrick/api/pages_controller.rb +1 -0
- data/app/controllers/qbrick/cms/backend_controller.rb +9 -0
- data/app/controllers/qbrick/pages_controller.rb +13 -2
- data/app/controllers/qbrick/sitemaps_controller.rb +1 -0
- data/app/models/qbrick/page.rb +4 -4
- data/db/migrate/24_localize_publish_column.rb +25 -0
- data/lib/qbrick/translatable.rb +5 -1
- data/lib/qbrick/version.rb +1 -1
- data/spec/controllers/qbrick/api/pages_controller_spec.rb +8 -8
- data/spec/controllers/qbrick/pages_controller_spec.rb +15 -8
- data/spec/controllers/qbrick/sitemaps_controller_spec.rb +2 -2
- data/spec/models/brick_spec.rb +13 -9
- data/spec/models/page_spec.rb +6 -3
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c9cc5b026051806ef35cb0e40a3e8d7d2075802
|
4
|
+
data.tar.gz: aed46d071929a30222d47dd1c8a2b62da1a8532e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84f5765abf6f575c7f134983463b72dd46f5b5bd8ae96b5985b585ca444f9c48dc44072f45535b0c3a4a3504beca0f8990612e8b96e565457fc7ff4448aeccd3
|
7
|
+
data.tar.gz: a9a58904375ed0e74816d4123a2ae63fa3732e40455324c58f169ad2c567d62a2184a257a83b145cd04c03927f3778bb756dea4134eccf196b5b1cfcd8f85b88
|
@@ -4,6 +4,7 @@ module Qbrick
|
|
4
4
|
respond_to :html
|
5
5
|
layout 'qbrick/cms/application'
|
6
6
|
before_action :set_content_locale, :authenticate_admin!
|
7
|
+
after_action :reset_remembered_locale
|
7
8
|
|
8
9
|
def set_content_locale
|
9
10
|
# this was taken from: https://github.com/screenconcept/hieronymus_shop/pull/218/files
|
@@ -14,9 +15,17 @@ module Qbrick
|
|
14
15
|
new_locale = params[:content_locale] || session['backend_locale'] || I18n.locale
|
15
16
|
session['backend_locale'] = new_locale.to_s
|
16
17
|
return if I18n.locale == new_locale || !I18n.locale_available?(new_locale)
|
18
|
+
|
19
|
+
session['remembered_locale'] = I18n.locale
|
17
20
|
I18n.locale = new_locale
|
18
21
|
end
|
19
22
|
|
23
|
+
def reset_remembered_locale
|
24
|
+
return if session['remembered_locale'].blank?
|
25
|
+
|
26
|
+
I18n.locale = session.delete 'remembered_locale'
|
27
|
+
end
|
28
|
+
|
20
29
|
def default_url_options
|
21
30
|
{ content_locale: I18n.locale }.merge(super)
|
22
31
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Qbrick
|
2
2
|
class PagesController < ::ApplicationController
|
3
3
|
respond_to :html
|
4
|
+
before_action :set_locale
|
4
5
|
before_action :find_page_by_url, only: :show
|
5
6
|
|
6
7
|
def index
|
@@ -30,14 +31,24 @@ module Qbrick
|
|
30
31
|
|
31
32
|
private
|
32
33
|
|
34
|
+
def set_locale
|
35
|
+
new_locale = params[:locale] || session['frontend_locale'] || I18n.locale
|
36
|
+
|
37
|
+
return I18n.locale if I18n.locale == new_locale || !I18n.locale_available?(new_locale)
|
38
|
+
|
39
|
+
session['frontend_locale'] = new_locale.to_s
|
40
|
+
I18n.locale = new_locale
|
41
|
+
end
|
42
|
+
alias frontend_locale set_locale
|
43
|
+
|
33
44
|
def redirect_page?
|
34
45
|
@page.present? && @page.redirect? && @page.redirect_url.present?
|
35
46
|
end
|
36
47
|
|
37
48
|
def find_page_by_url
|
38
|
-
url =
|
49
|
+
url = frontend_locale.to_s
|
39
50
|
url += "/#{params[:url]}" if params[:url].present?
|
40
|
-
@page = Qbrick::Page.find_by_url(url)
|
51
|
+
@page = Qbrick::Page.published.find_by_url(url)
|
41
52
|
end
|
42
53
|
end
|
43
54
|
end
|
data/app/models/qbrick/page.rb
CHANGED
@@ -10,12 +10,12 @@ module Qbrick
|
|
10
10
|
acts_as_brick_list
|
11
11
|
|
12
12
|
translate :title, :page_title, :slug, :keywords, :description,
|
13
|
-
:body, :redirect_url, :url
|
13
|
+
:body, :redirect_url, :url, :published
|
14
14
|
|
15
15
|
default_scope { order 'position ASC' }
|
16
16
|
|
17
|
-
scope :published, -> { where published
|
18
|
-
scope :translated, -> { where
|
17
|
+
scope :published, -> { where locale_attr(:published) => Qbrick::PublishState::PUBLISHED }
|
18
|
+
scope :translated, -> { where.not locale_attr(:url) => nil }
|
19
19
|
|
20
20
|
scope :content_page, -> { where page_type: Qbrick::PageType::CONTENT }
|
21
21
|
|
@@ -62,7 +62,7 @@ module Qbrick
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def without_self
|
65
|
-
self.class.where
|
65
|
+
self.class.where.not id: id
|
66
66
|
end
|
67
67
|
|
68
68
|
def published?
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class LocalizePublishColumn < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
rename_column :qbrick_pages, :published, :published_en
|
4
|
+
add_column :qbrick_pages, :published_de, :integer, default: 0
|
5
|
+
|
6
|
+
I18n.available_locales.each do |locale|
|
7
|
+
column_name = :"published_#{locale.to_s.underscore}"
|
8
|
+
add_column :qbrick_pages, column_name, :integer, default: 0 unless column_exists? :qbrick_pages, column_name
|
9
|
+
end
|
10
|
+
|
11
|
+
new_translations = Qbrick::Page.translated_columns_for(:published) - %w(published_en)
|
12
|
+
Qbrick::Page.all.each do |page|
|
13
|
+
page.update Hash[new_translations.zip([page.published_en] * new_translations.count)]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def down
|
18
|
+
translated_columns = Qbrick::Page.translated_columns_for(:published) - %w(published_en)
|
19
|
+
rename_column :qbrick_pages, :published_en
|
20
|
+
|
21
|
+
translated_columns.each do |column|
|
22
|
+
remove_column :qbrick_pages, column
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/qbrick/translatable.rb
CHANGED
@@ -45,7 +45,11 @@ module Qbrick
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def locale_attr(attr_name)
|
48
|
-
"#{attr_name}_#{
|
48
|
+
"#{attr_name}_#{locale_for_attr_name}"
|
49
|
+
end
|
50
|
+
|
51
|
+
def translated_columns_for(attr_name)
|
52
|
+
column_names & I18n.available_locales.map { |l| "#{attr_name}_#{l.to_s.underscore}" }
|
49
53
|
end
|
50
54
|
end
|
51
55
|
|
data/lib/qbrick/version.rb
CHANGED
@@ -4,9 +4,9 @@ describe Qbrick::Api::PagesController, type: :controller do
|
|
4
4
|
describe '#index' do
|
5
5
|
before do
|
6
6
|
@pages = []
|
7
|
-
@pages << @page1 = create(:page,
|
7
|
+
@pages << @page1 = create(:page, published_de: true, published_en: true, title_de: 'foobar de',
|
8
8
|
url_de: 'de/foobar-de', title_en: 'foobar en', url_en: 'en/foobar-en')
|
9
|
-
@pages << @page2 = create(:page,
|
9
|
+
@pages << @page2 = create(:page, published_de: true, published_en: true, title_de: 'barfoo de',
|
10
10
|
url_de: 'de/barfoo-de', title_en: 'barfoo en', url_en: 'en/barfoo-en')
|
11
11
|
@pages << @unpublished = create(:page, published: false, title_de: 'unpublished de',
|
12
12
|
url_de: 'de/unpublished-de', title_en: 'unpublished en',
|
@@ -36,13 +36,13 @@ describe Qbrick::Api::PagesController, type: :controller do
|
|
36
36
|
|
37
37
|
describe 'expected json format of a page' do
|
38
38
|
before do
|
39
|
-
@pages = []
|
40
|
-
@pages << @page1 = create(:page, published: true, title_de: 'foobar de',
|
41
|
-
url_de: 'de/foobar-de', title_en: 'foobar en', url_en: 'en/foobar-en')
|
42
|
-
@pages << @page2 = create(:page, published: true, title_de: 'barfoo de',
|
43
|
-
url_de: 'de/barfoo-de', title_en: 'barfoo en', url_en: 'en/barfoo-en')
|
44
|
-
|
45
39
|
I18n.with_locale :de do
|
40
|
+
@pages = []
|
41
|
+
@pages << @page1 = create(:page, published: true, title_de: 'foobar de',
|
42
|
+
url_de: 'de/foobar-de', title_en: 'foobar en', url_en: 'en/foobar-en')
|
43
|
+
@pages << @page2 = create(:page, published: true, title_de: 'barfoo de',
|
44
|
+
url_de: 'de/barfoo-de', title_en: 'barfoo en', url_en: 'en/barfoo-en')
|
45
|
+
|
46
46
|
get :index, use_route: :qbrick
|
47
47
|
@json = JSON.parse(response.body)
|
48
48
|
@page_hash = @json.first
|
@@ -6,8 +6,8 @@ describe Qbrick::PagesController, type: :controller do
|
|
6
6
|
describe '#index' do
|
7
7
|
before do
|
8
8
|
@pages = [
|
9
|
-
create(:page,
|
10
|
-
create(:page,
|
9
|
+
create(:page, published_de: true, fulltext_de: 'foobar'),
|
10
|
+
create(:page, published_de: true, fulltext_de: 'barfoo')
|
11
11
|
]
|
12
12
|
end
|
13
13
|
|
@@ -22,16 +22,23 @@ describe Qbrick::PagesController, type: :controller do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
describe '#show' do
|
25
|
+
it "doesn't show unpublished pages" do
|
26
|
+
I18n.with_locale(:de) do
|
27
|
+
unpublished_page = FactoryGirl.create :page, url_de: 'de', published_de: false
|
28
|
+
expect { get :show, url: unpublished_page.slug, use_route: :qbrick }.to raise_error(ActionController::RoutingError)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
25
32
|
describe 'routing' do
|
26
33
|
context 'without url' do
|
27
34
|
before do
|
28
|
-
@page = FactoryGirl.create(:page, url_de: 'de')
|
35
|
+
@page = FactoryGirl.create(:page, url_de: 'de', published_de: true)
|
29
36
|
end
|
30
37
|
|
31
38
|
context 'with matching locale' do
|
32
39
|
it 'sets the corresponding page' do
|
33
40
|
I18n.with_locale(:de) do
|
34
|
-
get
|
41
|
+
get :show, use_route: :qbrick
|
35
42
|
end
|
36
43
|
expect(assigns(:page)).to eq(@page)
|
37
44
|
end
|
@@ -56,7 +63,7 @@ describe Qbrick::PagesController, type: :controller do
|
|
56
63
|
it 'responds with page' do
|
57
64
|
page = FactoryGirl.create(:page, slug: 'dumdidum',
|
58
65
|
url: 'de/dumdidum')
|
59
|
-
get :show,
|
66
|
+
get :show, url: page.slug, use_route: :qbrick
|
60
67
|
expect(assigns(:page)).to eq(page)
|
61
68
|
end
|
62
69
|
end
|
@@ -65,21 +72,21 @@ describe Qbrick::PagesController, type: :controller do
|
|
65
72
|
it 'redirects to the redirected url' do
|
66
73
|
page = FactoryGirl.create(:page, page_type: 'redirect', slug: 'dumdidum',
|
67
74
|
url: 'de/dumdidum', redirect_url: 'de/redirect_page')
|
68
|
-
get :show,
|
75
|
+
get :show, url: page.slug, use_route: :qbrick
|
69
76
|
expect(response).to redirect_to('/de/redirect_page')
|
70
77
|
end
|
71
78
|
|
72
79
|
it 'redirects to invalid redirect urls with too many preceding slashes' do
|
73
80
|
page = FactoryGirl.create(:page, page_type: 'redirect', slug: 'dumdidum',
|
74
81
|
url: 'de/dumdidum', redirect_url: '///de/redirect_page')
|
75
|
-
get :show,
|
82
|
+
get :show, url: page.slug, use_route: :qbrick
|
76
83
|
expect(response).to redirect_to('/de/redirect_page')
|
77
84
|
end
|
78
85
|
|
79
86
|
it 'redirects to root' do
|
80
87
|
page = FactoryGirl.create(:page, page_type: 'redirect', slug: 'dumdidum',
|
81
88
|
url: 'de/dumdidum', redirect_url: '/')
|
82
|
-
get :show,
|
89
|
+
get :show, url: page.slug, use_route: :qbrick
|
83
90
|
expect(response).to redirect_to('/')
|
84
91
|
end
|
85
92
|
end
|
@@ -3,11 +3,11 @@ require 'spec_helper'
|
|
3
3
|
describe Qbrick::SitemapsController, type: :controller do
|
4
4
|
describe '#index' do
|
5
5
|
before do
|
6
|
-
@page = FactoryGirl.create
|
6
|
+
@page = FactoryGirl.create :page
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'should be able to send a xml file' do
|
10
|
-
get
|
10
|
+
get :index, use_route: :qbrick, format: 'xml'
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
data/spec/models/brick_spec.rb
CHANGED
@@ -36,10 +36,12 @@ describe Qbrick::Brick, type: :model do
|
|
36
36
|
|
37
37
|
describe '#parents' do
|
38
38
|
it 'returns the chain of parents' do
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
grandparent = double
|
40
|
+
parent = double
|
41
|
+
child = Qbrick::Brick.new
|
42
|
+
allow(parent).to receive(:brick_list).and_return grandparent
|
43
|
+
allow(child).to receive(:brick_list).and_return parent
|
44
|
+
expect(child.parents).to eq [grandparent, parent]
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
@@ -56,11 +58,13 @@ describe Qbrick::Brick, type: :model do
|
|
56
58
|
end
|
57
59
|
|
58
60
|
it 'returns true if the brick has siblings' do
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
allow(
|
63
|
-
|
61
|
+
parent = double
|
62
|
+
sibling1 = double
|
63
|
+
sibling2 = Qbrick::Brick.new
|
64
|
+
allow(parent).to receive(:bricks).and_return([sibling1, sibling2])
|
65
|
+
allow(sibling1).to receive(:brick_list).and_return(parent)
|
66
|
+
allow(sibling2).to receive(:brick_list).and_return(parent)
|
67
|
+
expect(sibling2.has_siblings?).to be_truthy
|
64
68
|
end
|
65
69
|
end
|
66
70
|
|
data/spec/models/page_spec.rb
CHANGED
@@ -68,9 +68,12 @@ describe Qbrick::Page, type: :model do
|
|
68
68
|
|
69
69
|
describe '#published' do
|
70
70
|
it 'returns only published pages' do
|
71
|
-
|
72
|
-
|
73
|
-
|
71
|
+
unpublished_page = 3.times.map { create :page }.last
|
72
|
+
unpublished_page.update_attribute :published, Qbrick::PublishState::UNPUBLISHED
|
73
|
+
|
74
|
+
published_pages = Qbrick::Page.published
|
75
|
+
expect(published_pages).to be_all { |p| expect(p.published?).to be_truthy }
|
76
|
+
expect(published_pages).not_to include unpublished_page
|
74
77
|
end
|
75
78
|
end
|
76
79
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qbrick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Immanuel Häussermann
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2015-05-
|
15
|
+
date: 2015-05-20 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rspec-rails
|
@@ -202,14 +202,14 @@ dependencies:
|
|
202
202
|
requirements:
|
203
203
|
- - '='
|
204
204
|
- !ruby/object:Gem::Version
|
205
|
-
version: 0.
|
205
|
+
version: 0.31.0
|
206
206
|
type: :development
|
207
207
|
prerelease: false
|
208
208
|
version_requirements: !ruby/object:Gem::Requirement
|
209
209
|
requirements:
|
210
210
|
- - '='
|
211
211
|
- !ruby/object:Gem::Version
|
212
|
-
version: 0.
|
212
|
+
version: 0.31.0
|
213
213
|
- !ruby/object:Gem::Dependency
|
214
214
|
name: poltergeist
|
215
215
|
requirement: !ruby/object:Gem::Requirement
|
@@ -744,6 +744,7 @@ files:
|
|
744
744
|
- db/migrate/22_create_settings_collections.rb
|
745
745
|
- db/migrate/23_add_metadata_to_asset.rb
|
746
746
|
- db/migrate/23_devise_create_qbrick_admins.rb
|
747
|
+
- db/migrate/24_localize_publish_column.rb
|
747
748
|
- db/seeds.rb
|
748
749
|
- lib/generators/qbrick/assets/install_generator.rb
|
749
750
|
- lib/generators/qbrick/custom_model_generator.rb
|
@@ -884,7 +885,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
884
885
|
version: '0'
|
885
886
|
requirements: []
|
886
887
|
rubyforge_project: qbrick
|
887
|
-
rubygems_version: 2.
|
888
|
+
rubygems_version: 2.2.2
|
888
889
|
signing_key:
|
889
890
|
specification_version: 4
|
890
891
|
summary: A tool that helps you to manage your content within your app.
|