landable 1.11.1 → 1.12.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -1
- data/app/controllers/landable/api/pages_controller.rb +1 -18
- data/app/controllers/landable/api/templates_controller.rb +21 -1
- data/app/controllers/landable/api_controller.rb +21 -0
- data/app/decorators/landable/page_decorator.rb +2 -4
- data/app/models/landable/page.rb +1 -1
- data/app/models/landable/template.rb +2 -0
- data/app/models/landable/theme.rb +4 -0
- data/app/serializers/landable/template_serializer.rb +2 -0
- data/config/routes.rb +1 -0
- data/db/migrate/20141217171816_add_counter_for_themes_pages.rb +13 -0
- data/doc/schema/template.json +5 -0
- data/lib/landable/liquid/tags.rb +3 -0
- data/lib/landable/version.rb +1 -1
- data/spec/controllers/landable/api/templates_controller_spec.rb +43 -0
- data/spec/models/landable/theme_spec.rb +19 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e388115c83b9777fbb1f77c0e3d0cc81b25449f
|
4
|
+
data.tar.gz: d0afa913ce591d46f56b782d73e55e422051a1cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e861cf8d4c43e405298c592ec75b147c7b7075b92863e74b63d24d1889079df741cd1c0a43628135d1c151771b70996da323f053b54fe83fed2de089980c6c6
|
7
|
+
data.tar.gz: ed5f727a8d7b71ac73d15b1d39ba24ea0896d65b268a7d32ee33c66e8247084c31f3dd82c7ada7645e5b0c5fe4cb5a594e0bd94e2fc9f952ebb5e98ccdddecf0
|
data/CHANGELOG.md
CHANGED
@@ -2,7 +2,13 @@
|
|
2
2
|
|
3
3
|
See README.md before updating this file.
|
4
4
|
|
5
|
-
## Unreleased [#](https://github.com/enova/landable/compare/v1.
|
5
|
+
## Unreleased [#](https://github.com/enova/landable/compare/v1.12.1...master)
|
6
|
+
|
7
|
+
## 1.12.1 [#](https://github.com/enova/landable/compare/v1.11.1...v1.12.1)
|
8
|
+
* Feature: Preview For Templates [#44]
|
9
|
+
* Refactor: Clean Up MetaTags Decorator [#41]
|
10
|
+
* Feature: Show which Pages a Template Lives On [#43]
|
11
|
+
* BugFix: Deleted templates not rendered in page [#42]
|
6
12
|
|
7
13
|
## 1.11.1 [#](https://github.com/enova/landable/compare/v1.11.0...v1.11.1)
|
8
14
|
* Adding PageName [#39]
|
@@ -58,13 +58,7 @@ module Landable
|
|
58
58
|
|
59
59
|
# run the validators and render
|
60
60
|
if page.valid?
|
61
|
-
|
62
|
-
content = with_format(:html) do
|
63
|
-
render_to_string text: RenderService.call(page), layout: layout
|
64
|
-
end
|
65
|
-
else
|
66
|
-
content = RenderService.call(page, preview: true)
|
67
|
-
end
|
61
|
+
content = generate_preview_for(page)
|
68
62
|
end
|
69
63
|
|
70
64
|
respond_to do |format|
|
@@ -98,17 +92,6 @@ module Landable
|
|
98
92
|
hash[:search] || {}
|
99
93
|
end
|
100
94
|
end
|
101
|
-
|
102
|
-
def with_format(format, &block)
|
103
|
-
old_formats = formats
|
104
|
-
|
105
|
-
begin
|
106
|
-
self.formats = [format]
|
107
|
-
return block.call
|
108
|
-
ensure
|
109
|
-
self.formats = old_formats
|
110
|
-
end
|
111
|
-
end
|
112
95
|
|
113
96
|
def page_params
|
114
97
|
params[:page][:audit_flags] ||= []
|
@@ -4,7 +4,7 @@ module Landable
|
|
4
4
|
module Api
|
5
5
|
class TemplatesController < ApiController
|
6
6
|
# filters
|
7
|
-
before_filter :load_template, except: [:create, :index]
|
7
|
+
before_filter :load_template, except: [:create, :index, :preview]
|
8
8
|
|
9
9
|
# RESTful methods
|
10
10
|
def create
|
@@ -48,6 +48,26 @@ module Landable
|
|
48
48
|
respond_with @template
|
49
49
|
end
|
50
50
|
|
51
|
+
# custom methods
|
52
|
+
def preview
|
53
|
+
template = Template.new(template_params)
|
54
|
+
theme = Theme.most_used_on_pages
|
55
|
+
|
56
|
+
page = Page.example(theme: theme, body: template.body)
|
57
|
+
|
58
|
+
content = generate_preview_for(page)
|
59
|
+
|
60
|
+
respond_to do |format|
|
61
|
+
format.html do
|
62
|
+
render text: content, layout: false, content_type: 'text/html'
|
63
|
+
end
|
64
|
+
|
65
|
+
format.json do
|
66
|
+
render json: { template: { preview: content } }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
51
71
|
private
|
52
72
|
def template_params
|
53
73
|
params.require(:template).permit(:id, :name, :body, :description, :thumbnail_url,
|
@@ -64,6 +64,27 @@ module Landable
|
|
64
64
|
head :unauthorized if current_author.nil?
|
65
65
|
end
|
66
66
|
|
67
|
+
def with_format(format, &block)
|
68
|
+
old_formats = formats
|
69
|
+
|
70
|
+
begin
|
71
|
+
self.formats = [format]
|
72
|
+
return block.call
|
73
|
+
ensure
|
74
|
+
self.formats = old_formats
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def generate_preview_for(page)
|
79
|
+
if layout = page.theme.try(:file) || false
|
80
|
+
with_format(:html) do
|
81
|
+
render_to_string text: RenderService.call(page), layout: layout
|
82
|
+
end
|
83
|
+
else
|
84
|
+
RenderService.call(page, preview: true)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
67
88
|
def current_author
|
68
89
|
return @current_author if @current_author
|
69
90
|
authenticate_with_http_basic do |username, token|
|
@@ -28,11 +28,9 @@ module Landable
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def meta_tags
|
31
|
-
return unless
|
32
|
-
Rails.logger.info "Meta tags string: #{tags}" if tags.is_a? String
|
33
|
-
return if tags.empty? or !tags.is_a? Hash
|
31
|
+
return nil unless page.meta_tags?
|
34
32
|
|
35
|
-
|
33
|
+
page.meta_tags.map { |name, value|
|
36
34
|
tag('meta', name: name, content: value) if value.present?
|
37
35
|
}.compact.join("\n").html_safe
|
38
36
|
end
|
data/app/models/landable/page.rb
CHANGED
@@ -30,7 +30,7 @@ module Landable
|
|
30
30
|
validates :redirect_url, url: true, allow_blank: true
|
31
31
|
validate :hero_asset_existence
|
32
32
|
|
33
|
-
belongs_to :theme, class_name: 'Landable::Theme', inverse_of: :pages
|
33
|
+
belongs_to :theme, class_name: 'Landable::Theme', inverse_of: :pages, counter_cache: true
|
34
34
|
belongs_to :published_revision, class_name: 'Landable::PageRevision'
|
35
35
|
belongs_to :category, class_name: 'Landable::Category'
|
36
36
|
belongs_to :updated_by_author, class_name: 'Landable::Author'
|
@@ -19,6 +19,8 @@ module Landable
|
|
19
19
|
|
20
20
|
has_and_belongs_to_many :pages, join_table: Page.templates_join_table_name
|
21
21
|
|
22
|
+
delegate :count, to: :pages, prefix: true # Returns how many Pages a Template lives in!
|
23
|
+
|
22
24
|
before_save -> template {
|
23
25
|
template.is_publishable = true unless template.published_revision_id_changed?
|
24
26
|
}
|
data/config/routes.rb
CHANGED
@@ -27,6 +27,7 @@ Landable::Engine.routes.draw do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
resources :templates, only: [:index, :show, :create, :update, :destroy, :reactivate] do
|
30
|
+
post 'preview', on: :collection
|
30
31
|
post 'publish', on: :member
|
31
32
|
put 'reactivate', on: :member
|
32
33
|
resources :audits, only: [:create]
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class AddCounterForThemesPages < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
add_column "#{Landable.configuration.database_schema_prefix}landable.themes", :pages_count, :integer, default: 0, null: false
|
4
|
+
|
5
|
+
Landable::Theme.all.each do |t|
|
6
|
+
Landable::Theme.reset_counters(t.id, :pages)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def down
|
11
|
+
remove_column "#{Landable.configuration.database_schema_prefix}landable.themes", :pages_count
|
12
|
+
end
|
13
|
+
end
|
data/doc/schema/template.json
CHANGED
data/lib/landable/liquid/tags.rb
CHANGED
@@ -73,6 +73,9 @@ module Landable
|
|
73
73
|
def render(context)
|
74
74
|
template = Landable::Template.find_by_slug @template_slug
|
75
75
|
|
76
|
+
# Handle Templates that are deleted (don't render anything)
|
77
|
+
return if template && template.deleted_at?
|
78
|
+
|
76
79
|
# Handle Templates that are Partials
|
77
80
|
if template && template.partial?
|
78
81
|
responder = context.registers[:responder]
|
data/lib/landable/version.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Landable::Api
|
4
|
+
describe TemplatesController, json: true do
|
5
|
+
routes { Landable::Engine.routes }
|
6
|
+
|
7
|
+
describe '#preview', json: false do
|
8
|
+
include_examples 'Authenticated API controller', :make_request
|
9
|
+
render_views
|
10
|
+
|
11
|
+
let(:theme) { create :theme, body: '<html><head>{% head_content %}</head><body>Theme content; page content: {{body}}</body></html>' }
|
12
|
+
|
13
|
+
before do
|
14
|
+
request.env['HTTP_ACCEPT'] = 'text/html'
|
15
|
+
end
|
16
|
+
|
17
|
+
def make_request(attributes = attributes_for(:template, theme_id: theme.id))
|
18
|
+
post :preview, template: attributes
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'renders JSON' do
|
22
|
+
request.env['HTTP_ACCEPT'] = 'application/json'
|
23
|
+
make_request
|
24
|
+
response.status.should == 200
|
25
|
+
last_json['template']['preview'].should be_present
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'renders the layout without content if the body is not present' do
|
29
|
+
request.env['HTTP_ACCEPT'] = 'application/json'
|
30
|
+
make_request attributes_for(:page, body: nil)
|
31
|
+
response.status.should == 200
|
32
|
+
last_json['template']['preview'].should include('body')
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'renders without a layout if no theme is present' do
|
36
|
+
request.env['HTTP_ACCEPT'] = 'application/json'
|
37
|
+
make_request attributes_for(:page, body: 'raw content')
|
38
|
+
response.status.should == 200
|
39
|
+
last_json['template']['preview'].should include('raw content')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -4,5 +4,24 @@ module Landable
|
|
4
4
|
describe Theme do
|
5
5
|
it { should have_valid(:thumbnail_url).when(nil) }
|
6
6
|
it { should be_a HasAssets }
|
7
|
+
|
8
|
+
describe '#most_used_theme' do
|
9
|
+
it 'returns the most used theme' do
|
10
|
+
t = create :theme
|
11
|
+
t2 = create :theme
|
12
|
+
t3 = create :theme
|
13
|
+
create :page, theme: t
|
14
|
+
create :page, theme: t
|
15
|
+
create :page, theme: t2
|
16
|
+
create :page, theme: t
|
17
|
+
|
18
|
+
Theme.most_used_on_pages.should == t
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'return nil when there are no themes' do
|
22
|
+
Theme.destroy_all # Remove all themes!
|
23
|
+
Theme.most_used_on_pages.should be_nil
|
24
|
+
end
|
25
|
+
end
|
7
26
|
end
|
8
27
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: landable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.12.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Team Trogdor
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -463,6 +463,7 @@ files:
|
|
463
463
|
- db/migrate/20140522202332_join_table_templates_pages.rb
|
464
464
|
- db/migrate/20140602213937_path_response_time_view.rb
|
465
465
|
- db/migrate/20141211200012_add_page_name_to_page.rb
|
466
|
+
- db/migrate/20141217171816_add_counter_for_themes_pages.rb
|
466
467
|
- db/test/landable.access_tokens.sql
|
467
468
|
- db/test/landable.assets.sql
|
468
469
|
- db/test/landable.authors.sql
|
@@ -569,6 +570,7 @@ files:
|
|
569
570
|
- spec/controllers/landable/api/page_revisions_controller_spec.rb
|
570
571
|
- spec/controllers/landable/api/pages_controller_spec.rb
|
571
572
|
- spec/controllers/landable/api/template_revisions_controller_spec.rb
|
573
|
+
- spec/controllers/landable/api/templates_controller_spec.rb
|
572
574
|
- spec/controllers/landable/api_controller_spec.rb
|
573
575
|
- spec/controllers/public/preview/page_revisions_controller_spec.rb
|
574
576
|
- spec/controllers/public/preview/pages_controller_spec.rb
|
@@ -727,6 +729,7 @@ test_files:
|
|
727
729
|
- spec/controllers/landable/api/page_revisions_controller_spec.rb
|
728
730
|
- spec/controllers/landable/api/pages_controller_spec.rb
|
729
731
|
- spec/controllers/landable/api/template_revisions_controller_spec.rb
|
732
|
+
- spec/controllers/landable/api/templates_controller_spec.rb
|
730
733
|
- spec/controllers/landable/api_controller_spec.rb
|
731
734
|
- spec/controllers/public/preview/page_revisions_controller_spec.rb
|
732
735
|
- spec/controllers/public/preview/pages_controller_spec.rb
|