locomotivecms_wagon 1.3.2 → 1.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/locomotive/wagon/liquid/tags/consume.rb +10 -13
- data/lib/locomotive/wagon/liquid/tags/link_to.rb +4 -72
- data/lib/locomotive/wagon/liquid/tags/nav.rb +1 -1
- data/lib/locomotive/wagon/liquid/tags/path_helper.rb +98 -0
- data/lib/locomotive/wagon/liquid/tags/path_to.rb +36 -0
- data/lib/locomotive/wagon/liquid.rb +1 -0
- data/lib/locomotive/wagon/server/renderer.rb +3 -2
- data/lib/locomotive/wagon/version.rb +1 -1
- data/locomotivecms_wagon.gemspec +1 -1
- data/spec/fixtures/default/app/views/pages/music.liquid.haml +2 -0
- data/spec/integration/server/liquid_spec.rb +3 -2
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ddf389fd19683084ab7f2c71ceb20bba27a863a8
|
4
|
+
data.tar.gz: 7fb14dffa20d08c0df5bcf5a887f84803de98e5d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a65598dd4dd41faddc22c6b358d06e0b821f8d212eea46f03977eded9cc3aad65a92de840b2302151719ffdeb8b8e329ed1212baf2e724f1d37703214b1927e1
|
7
|
+
data.tar.gz: 37eb257956b84207ac3bb598a4e24e739b99082540d9626234ac02e6b1f8a5050a66f780dd25e16bc88f3ed6ce1932e348a8b67d62e9dc739eb7f133979b6cd3
|
@@ -26,28 +26,25 @@ module Locomotive
|
|
26
26
|
raise ::Liquid::SyntaxError.new(options[:locale].t("errors.syntax.consume"), options[:line])
|
27
27
|
end
|
28
28
|
|
29
|
-
@cache_key = Digest::SHA1.hexdigest(@target)
|
30
29
|
@local_cache_key = self.hash
|
31
30
|
|
32
31
|
super
|
33
32
|
end
|
34
33
|
|
35
34
|
def render(context)
|
36
|
-
if
|
37
|
-
@url = context[@
|
35
|
+
if instance_variable_defined? :@variable_name
|
36
|
+
@url = context[@variable_name]
|
38
37
|
end
|
39
38
|
render_all_without_cache(context)
|
40
39
|
end
|
41
40
|
|
42
41
|
protected
|
43
42
|
|
44
|
-
def prepare_url(
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
@
|
49
|
-
elsif @url.match(::Liquid::VariableSignature)
|
50
|
-
@is_var = true
|
43
|
+
def prepare_url(token)
|
44
|
+
if token.match(::Liquid::QuotedString)
|
45
|
+
@url = token.gsub(/['"]/, '')
|
46
|
+
elsif token.match(::Liquid::VariableSignature)
|
47
|
+
@variable_name = token
|
51
48
|
else
|
52
49
|
raise ::Liquid::SyntaxError.new("Syntax Error in 'consume' - Valid syntax: consume <var> from \"<url>\" [username: value, password: value]")
|
53
50
|
end
|
@@ -77,14 +74,14 @@ module Locomotive
|
|
77
74
|
begin
|
78
75
|
context.scopes.last[@target.to_s] = Locomotive::Wagon::Httparty::Webservice.consume(@url, @options.symbolize_keys)
|
79
76
|
self.cached_response = context.scopes.last[@target.to_s]
|
80
|
-
# rescue Errno::ECONNREFUSED
|
81
|
-
# raise ConnectionRefused.new(@markup)
|
82
77
|
rescue Timeout::Error
|
83
78
|
context.scopes.last[@target.to_s] = self.cached_response
|
84
79
|
rescue ::Liquid::Error => e
|
85
80
|
raise e
|
86
81
|
rescue => e
|
87
|
-
|
82
|
+
liquid_e = ::Liquid::Error.new(e.message, line)
|
83
|
+
liquid_e.set_backtrace(e.backtrace)
|
84
|
+
raise liquid_e
|
88
85
|
end
|
89
86
|
|
90
87
|
render_all(@nodelist, context)
|
@@ -6,6 +6,8 @@ module Locomotive
|
|
6
6
|
|
7
7
|
Syntax = /(#{::Liquid::Expression}+)(#{::Liquid::TagAttributes}?)/
|
8
8
|
|
9
|
+
include PathHelper
|
10
|
+
|
9
11
|
def initialize(tag_name, markup, tokens, options)
|
10
12
|
if markup =~ Syntax
|
11
13
|
@handle = $1
|
@@ -21,9 +23,8 @@ module Locomotive
|
|
21
23
|
end
|
22
24
|
|
23
25
|
def render(context)
|
24
|
-
|
25
|
-
label =
|
26
|
-
path = self.public_page_url(context, page)
|
26
|
+
render_path(context) do |page, path|
|
27
|
+
label = label_from_page(page)
|
27
28
|
|
28
29
|
if @render_as_block
|
29
30
|
context.scopes.last['target'] = page
|
@@ -31,54 +32,11 @@ module Locomotive
|
|
31
32
|
end
|
32
33
|
|
33
34
|
%{<a href="#{path}">#{label}</a>}
|
34
|
-
else
|
35
|
-
raise Liquid::PageNotTranslated.new(%{[link_to] Unable to find a page for the #{@handle}. Wrong handle or missing template for your content.})
|
36
35
|
end
|
37
36
|
end
|
38
37
|
|
39
38
|
protected
|
40
39
|
|
41
|
-
def retrieve_page_from_handle(context)
|
42
|
-
mounting_point = context.registers[:mounting_point]
|
43
|
-
|
44
|
-
context.scopes.reverse_each do |scope|
|
45
|
-
handle = scope[@handle] || @handle
|
46
|
-
|
47
|
-
page = case handle
|
48
|
-
when Locomotive::Mounter::Models::Page then handle
|
49
|
-
when Liquid::Drops::Page then handle.instance_variable_get(:@_source)
|
50
|
-
when String then fetch_page(mounting_point, handle)
|
51
|
-
when Liquid::Drops::ContentEntry then fetch_page(mounting_point, handle.instance_variable_get(:@_source), true)
|
52
|
-
when Locomotive::Mounter::Models::ContentEntry then fetch_page(mounting_point, handle, true)
|
53
|
-
else
|
54
|
-
nil
|
55
|
-
end
|
56
|
-
|
57
|
-
return page unless page.nil?
|
58
|
-
end
|
59
|
-
|
60
|
-
nil
|
61
|
-
end
|
62
|
-
|
63
|
-
def fetch_page(mounting_point, handle, templatized = false)
|
64
|
-
::Locomotive::Mounter.with_locale(@_options['locale']) do
|
65
|
-
if templatized
|
66
|
-
page = mounting_point.pages.values.find do |_page|
|
67
|
-
_page.templatized? &&
|
68
|
-
!_page.templatized_from_parent &&
|
69
|
-
_page.content_type.slug == handle.content_type.slug &&
|
70
|
-
(@_options['with'].nil? || _page.handle == @_options['with'])
|
71
|
-
end
|
72
|
-
|
73
|
-
page.content_entry = handle if page
|
74
|
-
|
75
|
-
page
|
76
|
-
else
|
77
|
-
mounting_point.pages.values.find { |_page| _page.handle == handle }
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
40
|
def label_from_page(page)
|
83
41
|
::Locomotive::Mounter.with_locale(@_options['locale']) do
|
84
42
|
if page.templatized?
|
@@ -89,32 +47,6 @@ module Locomotive
|
|
89
47
|
end
|
90
48
|
end
|
91
49
|
|
92
|
-
def public_page_url(context, page)
|
93
|
-
mounting_point = context.registers[:mounting_point]
|
94
|
-
locale = @_options['locale'] || ::I18n.locale
|
95
|
-
|
96
|
-
if !page.translated_in?(locale)
|
97
|
-
title = page.title_translations.values.compact.first
|
98
|
-
raise Liquid::PageNotTranslated.new(%{the "#{title}" page is not translated in #{locale.upcase}})
|
99
|
-
end
|
100
|
-
|
101
|
-
fullpath = ::Locomotive::Mounter.with_locale(locale) do
|
102
|
-
page.fullpath.clone
|
103
|
-
end
|
104
|
-
|
105
|
-
fullpath = "#{::I18n.locale}/#{fullpath}" if ::I18n.locale.to_s != mounting_point.default_locale.to_s
|
106
|
-
|
107
|
-
if page.templatized?
|
108
|
-
if page.content_entry._slug.nil?
|
109
|
-
title = %{#{page.content_entry.content_type.name.singularize} "#{page.content_entry.send(page.content_entry.content_type.label_field_name)}"}
|
110
|
-
raise Liquid::ContentEntryNotTranslated.new(%{the #{title} slug is not translated in #{locale.upcase}})
|
111
|
-
end
|
112
|
-
fullpath.gsub!(/(content[_-]type[_-]template|template)/, page.content_entry._slug)
|
113
|
-
end
|
114
|
-
|
115
|
-
File.join('/', fullpath)
|
116
|
-
end
|
117
|
-
|
118
50
|
end
|
119
51
|
|
120
52
|
::Liquid::Template.register_tag('link_to', LinkTo)
|
@@ -0,0 +1,98 @@
|
|
1
|
+
module Locomotive
|
2
|
+
module Wagon
|
3
|
+
module Liquid
|
4
|
+
module Tags
|
5
|
+
|
6
|
+
module PathHelper
|
7
|
+
|
8
|
+
def render_path(context, &block)
|
9
|
+
site = context.registers[:site]
|
10
|
+
|
11
|
+
if page = self.retrieve_page_from_handle(context)
|
12
|
+
path = self.public_page_fullpath(context, page)
|
13
|
+
|
14
|
+
if block_given?
|
15
|
+
block.call page, path
|
16
|
+
else
|
17
|
+
path
|
18
|
+
end
|
19
|
+
else
|
20
|
+
raise Liquid::PageNotTranslated.new(%{[link_to] Unable to find a page for the #{@handle}. Wrong handle or missing template for your content.})
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def retrieve_page_from_handle(context)
|
27
|
+
mounting_point = context.registers[:mounting_point]
|
28
|
+
|
29
|
+
context.scopes.reverse_each do |scope|
|
30
|
+
handle = scope[@handle] || @handle
|
31
|
+
|
32
|
+
page = case handle
|
33
|
+
when Locomotive::Mounter::Models::Page then handle
|
34
|
+
when Liquid::Drops::Page then handle.instance_variable_get(:@_source)
|
35
|
+
when String then fetch_page(mounting_point, handle)
|
36
|
+
when Liquid::Drops::ContentEntry then fetch_page(mounting_point, handle.instance_variable_get(:@_source), true)
|
37
|
+
when Locomotive::Mounter::Models::ContentEntry then fetch_page(mounting_point, handle, true)
|
38
|
+
else
|
39
|
+
nil
|
40
|
+
end
|
41
|
+
|
42
|
+
return page unless page.nil?
|
43
|
+
end
|
44
|
+
|
45
|
+
nil
|
46
|
+
end
|
47
|
+
|
48
|
+
def fetch_page(mounting_point, handle, templatized = false)
|
49
|
+
::Locomotive::Mounter.with_locale(@_options['locale']) do
|
50
|
+
if templatized
|
51
|
+
page = mounting_point.pages.values.find do |_page|
|
52
|
+
_page.templatized? &&
|
53
|
+
!_page.templatized_from_parent &&
|
54
|
+
_page.content_type.slug == handle.content_type.slug &&
|
55
|
+
(@_options['with'].nil? || _page.handle == @_options['with'])
|
56
|
+
end
|
57
|
+
|
58
|
+
page.content_entry = handle if page
|
59
|
+
|
60
|
+
page
|
61
|
+
else
|
62
|
+
mounting_point.pages.values.find { |_page| _page.handle == handle }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def public_page_fullpath(context, page)
|
68
|
+
mounting_point = context.registers[:mounting_point]
|
69
|
+
locale = @_options['locale'] || ::I18n.locale
|
70
|
+
|
71
|
+
if !page.translated_in?(locale)
|
72
|
+
title = page.title_translations.values.compact.first
|
73
|
+
raise Liquid::PageNotTranslated.new(%{the "#{title}" page is not translated in #{locale.upcase}})
|
74
|
+
end
|
75
|
+
|
76
|
+
fullpath = ::Locomotive::Mounter.with_locale(locale) do
|
77
|
+
page.fullpath.clone
|
78
|
+
end
|
79
|
+
|
80
|
+
fullpath = "#{::I18n.locale}/#{fullpath}" if ::I18n.locale.to_s != mounting_point.default_locale.to_s
|
81
|
+
|
82
|
+
if page.templatized?
|
83
|
+
if page.content_entry._slug.nil?
|
84
|
+
title = %{#{page.content_entry.content_type.name.singularize} "#{page.content_entry.send(page.content_entry.content_type.label_field_name)}"}
|
85
|
+
raise Liquid::ContentEntryNotTranslated.new(%{the #{title} slug is not translated in #{locale.upcase}})
|
86
|
+
end
|
87
|
+
fullpath.gsub!(/(content[_-]type[_-]template|template)/, page.content_entry._slug)
|
88
|
+
end
|
89
|
+
|
90
|
+
File.join('/', fullpath)
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Locomotive
|
2
|
+
module Wagon
|
3
|
+
module Liquid
|
4
|
+
module Tags
|
5
|
+
|
6
|
+
class PathTo < ::Liquid::Tag
|
7
|
+
|
8
|
+
include PathHelper
|
9
|
+
|
10
|
+
Syntax = /(#{::Liquid::Expression}+)(#{::Liquid::TagAttributes}?)/
|
11
|
+
|
12
|
+
def initialize(tag_name, markup, tokens, context)
|
13
|
+
if markup =~ Syntax
|
14
|
+
@handle = $1
|
15
|
+
@_options = {}
|
16
|
+
markup.scan(::Liquid::TagAttributes) do |key, value|
|
17
|
+
@_options[key] = value
|
18
|
+
end
|
19
|
+
else
|
20
|
+
raise SyntaxError.new("Syntax Error in 'path_to' - Valid syntax: path_to <page|page_handle|content_entry>(, locale: [fr|de|...], with: <page_handle>")
|
21
|
+
end
|
22
|
+
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
26
|
+
def render(context)
|
27
|
+
render_path(context)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
::Liquid::Template.register_tag('path_to', PathTo)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -3,6 +3,7 @@ require 'locomotive/mounter'
|
|
3
3
|
require 'locomotive/wagon/liquid/scopeable'
|
4
4
|
require 'locomotive/wagon/liquid/drops/base'
|
5
5
|
require 'locomotive/wagon/liquid/tags/hybrid'
|
6
|
+
require 'locomotive/wagon/liquid/tags/path_helper'
|
6
7
|
|
7
8
|
%w{. drops tags filters}.each do |dir|
|
8
9
|
Dir[File.join(File.dirname(__FILE__), 'liquid', dir, '*.rb')].each { |lib| require lib }
|
@@ -32,7 +32,7 @@ module Locomotive::Wagon
|
|
32
32
|
raise RendererException.new(e, self.page.title, self.page.template, context)
|
33
33
|
end
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
def render_404
|
37
37
|
if self.page = self.mounting_point.pages['404']
|
38
38
|
self.render_page
|
@@ -92,7 +92,8 @@ module Locomotive::Wagon
|
|
92
92
|
'locales' => self.mounting_point.locales.map(&:to_s),
|
93
93
|
'current_user' => {},
|
94
94
|
'session' => Locomotive::Wagon::Liquid::Drops::SessionProxy.new,
|
95
|
-
'wagon' => true
|
95
|
+
'wagon' => true,
|
96
|
+
'editing' => false
|
96
97
|
}
|
97
98
|
end
|
98
99
|
|
data/locomotivecms_wagon.gemspec
CHANGED
@@ -34,7 +34,7 @@ Gem::Specification.new do |gem|
|
|
34
34
|
|
35
35
|
gem.add_dependency 'httmultiparty', '0.3.10'
|
36
36
|
gem.add_dependency 'will_paginate', '~> 3.0.3'
|
37
|
-
gem.add_dependency 'locomotivecms_mounter', '~> 1.3.
|
37
|
+
gem.add_dependency 'locomotivecms_mounter', '~> 1.3.3'
|
38
38
|
|
39
39
|
gem.add_dependency 'faker', '~> 0.9.5'
|
40
40
|
|
@@ -34,6 +34,8 @@ position: 2
|
|
34
34
|
{% endwith_scope %}
|
35
35
|
{% for s in selected_songs %}
|
36
36
|
%p.scoped_song {{ s._label }}
|
37
|
+
%p.scoped_song_link
|
38
|
+
%a{ href: "{% path_to s %}" } {{ s._label }}
|
37
39
|
{% endfor %}
|
38
40
|
%p.collection_equality {{ contents.songs.all.size }}={{ contents.songs.size }}
|
39
41
|
|
@@ -71,15 +71,16 @@ describe Locomotive::Wagon::Server do
|
|
71
71
|
it "evaluates collection when called all inside of scope" do
|
72
72
|
get '/music'
|
73
73
|
last_response.body.should =~ /<p class=.scoped_song.>Song #3/
|
74
|
+
last_response.body.should =~ /<p class=.scoped_song_link.>\s+<a href=.\/songs\/song-3.>Song #3/m
|
74
75
|
end
|
75
76
|
|
76
|
-
it "size of evaluated unscoped collection
|
77
|
+
it "size of evaluated unscoped collection equal to unevaluated one" do
|
77
78
|
get '/music'
|
78
79
|
last_response.body.should =~ /class=.collection_equality.>8=8/
|
79
80
|
end
|
80
81
|
|
81
82
|
end
|
82
|
-
|
83
|
+
|
83
84
|
describe 'html helpers' do
|
84
85
|
it 'bypass url for css resource' do
|
85
86
|
get '/'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: locomotivecms_wagon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Didier Lafforgue
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-11-
|
12
|
+
date: 2013-11-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -213,14 +213,14 @@ dependencies:
|
|
213
213
|
requirements:
|
214
214
|
- - ~>
|
215
215
|
- !ruby/object:Gem::Version
|
216
|
-
version: 1.3.
|
216
|
+
version: 1.3.3
|
217
217
|
type: :runtime
|
218
218
|
prerelease: false
|
219
219
|
version_requirements: !ruby/object:Gem::Requirement
|
220
220
|
requirements:
|
221
221
|
- - ~>
|
222
222
|
- !ruby/object:Gem::Version
|
223
|
-
version: 1.3.
|
223
|
+
version: 1.3.3
|
224
224
|
- !ruby/object:Gem::Dependency
|
225
225
|
name: faker
|
226
226
|
requirement: !ruby/object:Gem::Requirement
|
@@ -516,6 +516,8 @@ files:
|
|
516
516
|
- lib/locomotive/wagon/liquid/tags/locale_switcher.rb
|
517
517
|
- lib/locomotive/wagon/liquid/tags/nav.rb
|
518
518
|
- lib/locomotive/wagon/liquid/tags/paginate.rb
|
519
|
+
- lib/locomotive/wagon/liquid/tags/path_helper.rb
|
520
|
+
- lib/locomotive/wagon/liquid/tags/path_to.rb
|
519
521
|
- lib/locomotive/wagon/liquid/tags/seo.rb
|
520
522
|
- lib/locomotive/wagon/liquid/tags/session_assign.rb
|
521
523
|
- lib/locomotive/wagon/liquid/tags/snippet.rb
|