qbrick 2.6.1 → 2.6.2
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/pages_controller.rb +1 -2
- data/app/helpers/qbrick/admin_helper.rb +6 -2
- data/app/models/qbrick/page.rb +24 -0
- data/db/migrate/24_localize_publish_column.rb +1 -1
- data/lib/qbrick/engine.rb +7 -1
- data/lib/qbrick/version.rb +1 -1
- data/spec/controllers/qbrick/pages_controller_spec.rb +1 -1
- data/spec/models/page_spec.rb +40 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4f3ceb72b5a03c06f602281f41bcc750f8d49ce
|
4
|
+
data.tar.gz: 4618b777f6e1a6151b95a1e17d6894aa158ac42c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c779195400c460314f4d37a8a6796637e043427dd6643c9d4aea53be22fa0c35914926e8177e10093cab10e9b28f3924e4746ce8147790196d04c3d51aad0383
|
7
|
+
data.tar.gz: bd0e378f688977977cb1dde7512f59ad11c6111a238fd56c1767343692be81f07d2fb6d7fb9332b9352b3321b77a948c38c4cafbbbf9aed4d8cd27a01dc0ad31
|
@@ -13,9 +13,8 @@ module Qbrick
|
|
13
13
|
|
14
14
|
def show
|
15
15
|
if redirect_page?
|
16
|
-
redirect_url = @page.redirect_url.sub(%r{\A\/+}, '') # remove all preceding slashes
|
17
16
|
session[:qbrick_referrer] = @page.id
|
18
|
-
redirect_to
|
17
|
+
redirect_to @page.redirect_url
|
19
18
|
elsif @page.present?
|
20
19
|
respond_with @page
|
21
20
|
elsif @page.blank? && respond_to?(:handle_404)
|
@@ -8,8 +8,12 @@ module Qbrick
|
|
8
8
|
#
|
9
9
|
def method_missing(method, *args, &block)
|
10
10
|
main_app.send(method, *args, &block)
|
11
|
-
rescue NoMethodError
|
12
|
-
|
11
|
+
rescue NoMethodError => exception
|
12
|
+
bc = ::ActiveSupport::BacktraceCleaner.new
|
13
|
+
bc.add_silencer { |l| l =~ /^#{__FILE__}.+#{__method__}'?$/ }
|
14
|
+
exception.set_backtrace bc.clean(exception.backtrace)
|
15
|
+
|
16
|
+
raise exception
|
13
17
|
end
|
14
18
|
|
15
19
|
def sublime_video_include_tag
|
data/app/models/qbrick/page.rb
CHANGED
@@ -27,6 +27,7 @@ module Qbrick
|
|
27
27
|
|
28
28
|
before_validation :create_slug, :create_path
|
29
29
|
after_save :update_child_paths
|
30
|
+
validate :remove_preceding_slashes, if: :redirect?
|
30
31
|
|
31
32
|
validates :title, presence: true
|
32
33
|
validates :slug, presence: true
|
@@ -81,6 +82,29 @@ module Qbrick
|
|
81
82
|
page_type == Qbrick::PageType::REDIRECT || page_type == Qbrick::PageType::CUSTOM
|
82
83
|
end
|
83
84
|
|
85
|
+
def internal_redirect?
|
86
|
+
return false unless redirect?
|
87
|
+
|
88
|
+
scheme = URI.parse(redirect_url).scheme
|
89
|
+
return true if scheme.nil?
|
90
|
+
|
91
|
+
internal_redirect = Qbrick::Engine.hosts.find do |h|
|
92
|
+
URI.parse("#{scheme}://#{h}").route_to(redirect_url).host.nil?
|
93
|
+
end
|
94
|
+
|
95
|
+
internal_redirect.present?
|
96
|
+
end
|
97
|
+
|
98
|
+
def external_redirect?
|
99
|
+
redirect? && !internal_redirect?
|
100
|
+
end
|
101
|
+
|
102
|
+
def remove_preceding_slashes
|
103
|
+
return if redirect_url.blank?
|
104
|
+
|
105
|
+
redirect_url.sub!(%r{^/+}, '/')
|
106
|
+
end
|
107
|
+
|
84
108
|
def navigation?
|
85
109
|
page_type == Qbrick::PageType::NAVIGATION
|
86
110
|
end
|
@@ -10,7 +10,7 @@ class LocalizePublishColumn < ActiveRecord::Migration
|
|
10
10
|
|
11
11
|
new_translations = Qbrick::Page.translated_columns_for(:published) - %w(published_en)
|
12
12
|
Qbrick::Page.all.each do |page|
|
13
|
-
page.
|
13
|
+
page.update_columns Hash[new_translations.zip([page.published_en] * new_translations.count)]
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
data/lib/qbrick/engine.rb
CHANGED
@@ -11,7 +11,7 @@ module Qbrick
|
|
11
11
|
isolate_namespace Qbrick
|
12
12
|
|
13
13
|
config.i18n.fallbacks = [:de]
|
14
|
-
config.i18n.load_path += Dir[Qbrick::Engine.root.join('config
|
14
|
+
config.i18n.load_path += Dir[Qbrick::Engine.root.join('config/locales/**/*.{yml}').to_s]
|
15
15
|
|
16
16
|
# defaults to nil
|
17
17
|
config.sublime_video_token = nil
|
@@ -23,5 +23,11 @@ module Qbrick
|
|
23
23
|
require 'action_view/dependency_tracker'
|
24
24
|
ActionView::DependencyTracker.register_tracker :haml, ActionView::DependencyTracker::ERBTracker
|
25
25
|
end
|
26
|
+
|
27
|
+
def hosts
|
28
|
+
[Socket.gethostname].tap do |result|
|
29
|
+
result.concat [Rails.application.config.hosts].flatten if Rails.application.config.respond_to? :hosts
|
30
|
+
end
|
31
|
+
end
|
26
32
|
end
|
27
33
|
end
|
data/lib/qbrick/version.rb
CHANGED
@@ -60,7 +60,7 @@ describe Qbrick::PagesController, type: :controller do
|
|
60
60
|
|
61
61
|
context 'when page is a redirect page' do
|
62
62
|
it 'redirects to the redirected url' do
|
63
|
-
page = FactoryGirl.create :page, page_type: 'redirect', slug: 'dumdidum', redirect_url: 'de/redirect_page'
|
63
|
+
page = FactoryGirl.create :page, page_type: 'redirect', slug: 'dumdidum', redirect_url: '/de/redirect_page'
|
64
64
|
get :show, url: page.slug
|
65
65
|
expect(response).to redirect_to('/de/redirect_page')
|
66
66
|
end
|
data/spec/models/page_spec.rb
CHANGED
@@ -537,4 +537,44 @@ describe Qbrick::Page, type: :model do
|
|
537
537
|
expect(child_page.create_path).to eq '/le_parent/le_child'
|
538
538
|
end
|
539
539
|
end
|
540
|
+
|
541
|
+
context 'when it is a redirect page' do
|
542
|
+
let(:page) { build :page, page_type: Qbrick::PageType::REDIRECT }
|
543
|
+
|
544
|
+
describe '#internal_redirect?' do
|
545
|
+
it 'returns false for non redirect pages' do
|
546
|
+
expect(build(:page).internal_redirect?).to be_falsey
|
547
|
+
end
|
548
|
+
|
549
|
+
it 'returns false for external redirects' do
|
550
|
+
page.redirect_url = 'http://google.de'
|
551
|
+
expect(page.internal_redirect?).to be_falsey
|
552
|
+
end
|
553
|
+
|
554
|
+
it 'returns true for internal redirects' do
|
555
|
+
page.redirect_url = '/huhu'
|
556
|
+
expect(page.internal_redirect?).to be_truthy
|
557
|
+
page.redirect_url = "http://#{Socket.gethostname}/huhu"
|
558
|
+
expect(page.internal_redirect?).to be_truthy
|
559
|
+
end
|
560
|
+
end
|
561
|
+
|
562
|
+
describe '#external_redirect?' do
|
563
|
+
it 'returns false for non redirect pages' do
|
564
|
+
expect(build(:page).external_redirect?).to be_falsey
|
565
|
+
end
|
566
|
+
|
567
|
+
it 'returns true for external redirects' do
|
568
|
+
page.redirect_url = 'http://google.de'
|
569
|
+
expect(page.external_redirect?).to be_truthy
|
570
|
+
end
|
571
|
+
|
572
|
+
it 'returns false for internal redirects' do
|
573
|
+
page.redirect_url = '/huhu'
|
574
|
+
expect(page.external_redirect?).to be_falsey
|
575
|
+
page.redirect_url = "http://#{Socket.gethostname}/huhu"
|
576
|
+
expect(page.external_redirect?).to be_falsey
|
577
|
+
end
|
578
|
+
end
|
579
|
+
end
|
540
580
|
end
|
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.6.
|
4
|
+
version: 2.6.2
|
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-06-
|
15
|
+
date: 2015-06-10 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rspec-rails
|