qbrick 2.5.2 → 2.6.0
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.
- 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.
|