liquid-rails 0.1.0 → 0.1.1
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/.ruby-version +1 -1
- data/.travis.yml +8 -3
- data/CHANGELOG.md +28 -0
- data/Gemfile +4 -4
- data/README.md +6 -2
- data/Rakefile +2 -2
- data/gemfiles/rails_32.gemfile +3 -3
- data/gemfiles/rails_40.gemfile +3 -3
- data/gemfiles/rails_41.gemfile +3 -3
- data/gemfiles/rails_42.gemfile +11 -0
- data/lib/liquid-rails/drops/collection_drop.rb +2 -2
- data/lib/liquid-rails/file_system.rb +3 -4
- data/lib/liquid-rails/filters/misc_filter.rb +0 -18
- data/lib/liquid-rails/filters/paginate_filter.rb +59 -0
- data/lib/liquid-rails/filters/text_filter.rb +0 -1
- data/lib/liquid-rails/filters/translate_filter.rb +4 -3
- data/lib/liquid-rails/rspec/view_controller_context.rb +3 -2
- data/lib/liquid-rails/tags/content_for_tag.rb +13 -4
- data/lib/liquid-rails/tags/paginate_tag.rb +2 -1
- data/lib/liquid-rails/version.rb +1 -1
- data/liquid-rails.gemspec +1 -1
- data/spec/dummy/app/controllers/foospace/bar_controller.rb +5 -0
- data/spec/dummy/app/views/foospace/bar/_partial.liquid +1 -0
- data/spec/dummy/app/views/foospace/bar/index_partial.liquid +3 -0
- data/spec/dummy/config/locales/en.yml +1 -0
- data/spec/dummy/config/locales/km.yml +1 -0
- data/spec/dummy/config/routes.rb +3 -1
- data/spec/lib/liquid-rails/filters/translate_filter_spec.rb +6 -2
- data/spec/lib/liquid-rails/tags/content_for_tag_spec.rb +7 -1
- data/spec/lib/liquid-rails/tags/csrf_meta_tag_spec.rb +11 -2
- data/spec/lib/liquid-rails/tags/paginate_tag_spec.rb +68 -4
- data/spec/lib/liquid-rails/template_handler_spec.rb +7 -1
- data/spec/spec_helper.rb +0 -2
- data/spec/support/delegate_matcher.rb +7 -7
- metadata +16 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60effe936f0e73722ccb5017936e8ebd3194225a
|
4
|
+
data.tar.gz: 5184c687fab2ae2966cce49ca46d78576936889e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc4fbd79de3c6d0f6529bc597184553dfb2abdce2a195f48d641f1179ab52c5a7ad8401cb71b2131306409252173e6a573beb4a4bd64f95b90c78e60b0a872a3
|
7
|
+
data.tar.gz: bba6ac533ec927f2619948a5761e7ed3230080133f551774371b0e7aaa9b67d564946831452a0f7b73a70d9bd6280142bf9a2b92212e55061f8db40f5c3ebc4b
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.
|
1
|
+
ruby-2.2.0
|
data/.travis.yml
CHANGED
@@ -2,16 +2,21 @@ language: ruby
|
|
2
2
|
script: "bundle exec rake spec"
|
3
3
|
rvm:
|
4
4
|
- 2.0.0
|
5
|
-
- 2.1.
|
6
|
-
- 2.
|
7
|
-
- 2.1.2
|
5
|
+
- 2.1.5
|
6
|
+
- 2.2.0
|
8
7
|
env:
|
9
8
|
- CODECLIMATE_REPO_TOKEN=891d362268d07d6ff0f5534f92252b6195f6be8795054d3627643eb6314a8c9e
|
10
9
|
gemfile:
|
10
|
+
- gemfiles/rails_32.gemfile
|
11
11
|
- gemfiles/rails_40.gemfile
|
12
12
|
- gemfiles/rails_41.gemfile
|
13
|
+
- gemfiles/rails_42.gemfile
|
13
14
|
notifications:
|
14
15
|
email: false
|
16
|
+
matrix:
|
17
|
+
exclude:
|
18
|
+
- rvm: 2.2.0
|
19
|
+
gemfile: gemfiles/rails_32.gemfile
|
15
20
|
addons:
|
16
21
|
code_climate:
|
17
22
|
repo_token: 891d362268d07d6ff0f5534f92252b6195f6be8795054d3627643eb6314a8c9e
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# Overview
|
2
|
+
|
3
|
+
## 0.1.1 - Not released
|
4
|
+
|
5
|
+
### New Features
|
6
|
+
|
7
|
+
* Add `bootstrap_pagination` filter. (Radin Reth)
|
8
|
+
|
9
|
+
* Allow `translate` filter with interpolation. (Tomasz Stachewicz, Chamnap Chhorn)
|
10
|
+
|
11
|
+
* Support `rails` 4.2 and `ruby` 2.2. (Chamnap Chhorn)
|
12
|
+
|
13
|
+
* Support `scope` on collection drop. (Radin Reth)
|
14
|
+
|
15
|
+
|
16
|
+
### Resolved Issues
|
17
|
+
|
18
|
+
* Add `rel="prev"` and `rel="next"` to `default_pagination` filter. (Radin Reth)
|
19
|
+
|
20
|
+
* Fix `content_for` and `yield` tag on `rails` 3.2. (Chamnap Chhorn)
|
21
|
+
|
22
|
+
* \#4 Makes partial template work in namespaced controller. (Tomasz Stachewicz)
|
23
|
+
|
24
|
+
* `truncate` filter now forwards to the standard filters. (Radin Reth)
|
25
|
+
|
26
|
+
## 0.1.0
|
27
|
+
|
28
|
+
* Initial Release
|
data/Gemfile
CHANGED
@@ -3,10 +3,10 @@ source 'https://rubygems.org'
|
|
3
3
|
# Specify your gem's dependencies in liquid-rails.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
-
gem 'rails', '~> 4.0.
|
7
|
-
gem 'rspec-rails', '~> 2.
|
6
|
+
gem 'rails', '~> 4.0.13'
|
7
|
+
gem 'rspec-rails', '~> 3.2.0'
|
8
|
+
gem 'guard-rspec', '~> 4.5.0'
|
8
9
|
gem 'capybara', '~> 2.4.1'
|
9
10
|
gem 'pry-rails'
|
10
11
|
gem 'coveralls'
|
11
|
-
gem 'simplecov'
|
12
|
-
gem 'guard-rspec'
|
12
|
+
gem 'simplecov'
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[](https://travis-ci.org/yoolk/liquid-rails)[](https://coveralls.io/r/yoolk/liquid-rails?branch=master)
|
1
|
+
[](https://travis-ci.org/yoolk/liquid-rails)[](https://coveralls.io/r/yoolk/liquid-rails?branch=master)[](http://badge.fury.io/rb/liquid-rails)
|
2
2
|
# Liquid-Rails
|
3
3
|
|
4
4
|
It allows you to render `.liquid` templates with layout and partial support. It also provides filters, tags, drops class to be used inside your liquid template.
|
@@ -135,6 +135,10 @@ describe CommentDrop do
|
|
135
135
|
end
|
136
136
|
```
|
137
137
|
|
138
|
+
## Contributors
|
139
|
+
|
140
|
+
* [Radin Reth](https://github.com/radin-reth/)
|
141
|
+
|
138
142
|
## Authors
|
139
143
|
|
140
|
-
* [Chamnap Chhorn](https://github.com/chamnap)
|
144
|
+
* [Chamnap Chhorn](https://github.com/chamnap)
|
data/Rakefile
CHANGED
@@ -9,7 +9,7 @@ end
|
|
9
9
|
task default: 'spec:all'
|
10
10
|
|
11
11
|
namespace :spec do
|
12
|
-
%w(rails_41 rails_40 rails_32).each do |gemfile|
|
12
|
+
%w(rails_42 rails_41 rails_40 rails_32).each do |gemfile|
|
13
13
|
desc "Run Tests against #{gemfile}"
|
14
14
|
task gemfile do
|
15
15
|
sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle --quiet"
|
@@ -19,7 +19,7 @@ namespace :spec do
|
|
19
19
|
|
20
20
|
desc "Run Tests against rails versions"
|
21
21
|
task :all do
|
22
|
-
%w(rails_41 rails_40 rails_32).each do |gemfile|
|
22
|
+
%w(rails_42 rails_41 rails_40 rails_32).each do |gemfile|
|
23
23
|
sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle --quiet"
|
24
24
|
sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle exec rake spec"
|
25
25
|
end
|
data/gemfiles/rails_32.gemfile
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem 'rails', '~> 3.2.
|
4
|
-
gem 'rspec-rails', '~> 2.
|
3
|
+
gem 'rails', '~> 3.2.21'
|
4
|
+
gem 'rspec-rails', '~> 3.2.0'
|
5
|
+
gem 'guard-rspec', '~> 4.5.0'
|
5
6
|
gem 'capybara', '~> 2.4.1'
|
6
7
|
gem 'pry-rails'
|
7
8
|
gem 'coveralls'
|
8
9
|
gem 'simplecov'
|
9
|
-
gem 'guard-rspec'
|
10
10
|
|
11
11
|
gemspec path: '../'
|
data/gemfiles/rails_40.gemfile
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem 'rails', '~> 4.0.
|
4
|
-
gem 'rspec-rails', '~> 2.
|
3
|
+
gem 'rails', '~> 4.0.13'
|
4
|
+
gem 'rspec-rails', '~> 3.2.0'
|
5
|
+
gem 'guard-rspec', '~> 4.5.0'
|
5
6
|
gem 'capybara', '~> 2.4.1'
|
6
7
|
gem 'pry-rails'
|
7
8
|
gem 'coveralls'
|
8
9
|
gem 'simplecov'
|
9
|
-
gem 'guard-rspec'
|
10
10
|
|
11
11
|
gemspec path: '../'
|
data/gemfiles/rails_41.gemfile
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem 'rails', '~> 4.1.
|
4
|
-
gem 'rspec-rails', '~> 2.
|
3
|
+
gem 'rails', '~> 4.1.9'
|
4
|
+
gem 'rspec-rails', '~> 3.2.0'
|
5
|
+
gem 'guard-rspec', '~> 4.5.0'
|
5
6
|
gem 'capybara', '~> 2.4.1'
|
6
7
|
gem 'pry-rails'
|
7
8
|
gem 'coveralls'
|
8
9
|
gem 'simplecov'
|
9
|
-
gem 'guard-rspec'
|
10
10
|
|
11
11
|
gemspec path: '../'
|
@@ -29,9 +29,9 @@ module Liquid
|
|
29
29
|
delegate :total_count, :total_pages, to: :objects
|
30
30
|
|
31
31
|
def initialize(objects, options={})
|
32
|
-
options.assert_valid_keys(:with)
|
32
|
+
options.assert_valid_keys(:with, :scope)
|
33
33
|
|
34
|
-
@objects = objects
|
34
|
+
@objects = options[:scope].nil? ? objects : objects.send(options[:scope])
|
35
35
|
@drop_class_name = options[:with]
|
36
36
|
end
|
37
37
|
|
@@ -4,11 +4,10 @@ module Liquid
|
|
4
4
|
module Rails
|
5
5
|
class FileSystem < ::Liquid::LocalFileSystem
|
6
6
|
def read_template_file(template_path, context)
|
7
|
-
|
8
|
-
template_path = "#{
|
9
|
-
|
7
|
+
controller_path = context.registers[:controller].controller_path
|
8
|
+
template_path = "#{controller_path}/#{template_path}" unless template_path.include?('/')
|
10
9
|
super
|
11
10
|
end
|
12
11
|
end
|
13
12
|
end
|
14
|
-
end
|
13
|
+
end
|
@@ -22,24 +22,6 @@ module Liquid
|
|
22
22
|
def toggle_class_name(class_name, condition)
|
23
23
|
condition ? class_name : nil
|
24
24
|
end
|
25
|
-
|
26
|
-
def default_pagination(paginate)
|
27
|
-
html = []
|
28
|
-
html << %(<span class="prev">#{link_to(paginate['previous']['title'], paginate['previous']['url'])}</span>) if paginate['previous']
|
29
|
-
|
30
|
-
for part in paginate['parts']
|
31
|
-
if part['is_link']
|
32
|
-
html << %(<span class="page">#{link_to(part['title'], part['url'])}</span>)
|
33
|
-
elsif part['title'].to_i == paginate['current_page'].to_i
|
34
|
-
html << %(<span class="page current">#{part['title']}</span>)
|
35
|
-
else
|
36
|
-
html << %(<span class="deco">#{part['title']}</span>)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
html << %(<span class="next">#{link_to(paginate['next']['title'], paginate['next']['url'])}</span>) if paginate['next']
|
41
|
-
html.join(' ')
|
42
|
-
end
|
43
25
|
end
|
44
26
|
end
|
45
27
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Liquid
|
2
|
+
module Rails
|
3
|
+
module PaginateFilter
|
4
|
+
def default_pagination(paginate)
|
5
|
+
html = []
|
6
|
+
html << %(<span class="prev"><a href="#{paginate['previous']['url']}" rel="prev">#{paginate['previous']['title']}</a></span>) if paginate['previous']
|
7
|
+
|
8
|
+
for part in paginate['parts']
|
9
|
+
if part['is_link']
|
10
|
+
html << %(<span class="page">#{link_to(part['title'], part['url'])}</span>)
|
11
|
+
elsif part['title'].to_i == paginate['current_page'].to_i
|
12
|
+
html << %(<span class="page current">#{part['title']}</span>)
|
13
|
+
else
|
14
|
+
html << %(<span class="deco">#{part['title']}</span>)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
html << %(<span class="next"><a href="#{paginate['next']['url']}" rel="next">#{paginate['next']['title']}</a></span>) if paginate['next']
|
19
|
+
html.join(' ')
|
20
|
+
end
|
21
|
+
|
22
|
+
# Bootstrap pagination filter
|
23
|
+
#
|
24
|
+
# @param [ paginate ]
|
25
|
+
# @param [ size ]: .pagination-lg, .pagination-sm
|
26
|
+
def bootstrap_pagination(paginate, size='')
|
27
|
+
html = []
|
28
|
+
html << %{<nav><ul class="pagination #{size}">}
|
29
|
+
|
30
|
+
if paginate['previous']
|
31
|
+
html << %(<li><a href="#{paginate['previous']['url']}" aria-label="Previous"><span aria-hidden="true">#{paginate['previous']['title']}</span></a></li>)
|
32
|
+
else
|
33
|
+
html << %(<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">« Previous</span></a></li>)
|
34
|
+
end
|
35
|
+
|
36
|
+
for part in paginate['parts']
|
37
|
+
if part['is_link']
|
38
|
+
html << %(<li><a href="#{part['url']}">#{part['title']}</a></li>)
|
39
|
+
elsif part['title'].to_i == paginate['current_page'].to_i
|
40
|
+
html << %(<li class="active"><span>#{part['title']}</span></li>)
|
41
|
+
else
|
42
|
+
html << %(<li class="disabled"><span>#{part['title']}</span></li>)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
if paginate['next']
|
47
|
+
html << %(<li><a href="#{paginate['next']['url']}" aria-label="Next"><span aria-hidden="true">#{paginate['next']['title']}</span></a></li>)
|
48
|
+
else
|
49
|
+
html << %(<li class="disabled"><a href="#" aria-label="Next"><span aria-hidden="true">Next »</span></a></li>)
|
50
|
+
end
|
51
|
+
|
52
|
+
html << '</nav></ul>'
|
53
|
+
html.join(' ')
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
Liquid::Template.register_filter(Liquid::Rails::PaginateFilter)
|
@@ -1,11 +1,12 @@
|
|
1
1
|
module Liquid
|
2
2
|
module Rails
|
3
3
|
module TranslateFilter
|
4
|
-
def translate(key,
|
5
|
-
locale
|
4
|
+
def translate(key, options={})
|
5
|
+
options = { 'locale' => ::I18n.locale.to_s }.merge(options)
|
6
6
|
|
7
|
-
@context.registers[:view].translate(key.to_s,
|
7
|
+
@context.registers[:view].translate(key.to_s, options.with_indifferent_access)
|
8
8
|
end
|
9
|
+
alias_method :t, :translate
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
@@ -7,7 +7,7 @@ module Liquid
|
|
7
7
|
def setup_view_and_controller
|
8
8
|
@view = ActionView::Base.new
|
9
9
|
@controller = ApplicationController.new
|
10
|
-
@request = ActionController::TestRequest.new
|
10
|
+
@request = ActionController::TestRequest.new('PATH_INFO' => '/')
|
11
11
|
@response = ActionController::TestResponse.new
|
12
12
|
@response.request = @request
|
13
13
|
@controller.request = @request
|
@@ -15,6 +15,7 @@ module Liquid
|
|
15
15
|
@controller.params = {}
|
16
16
|
@view.assign_controller(@controller)
|
17
17
|
@view.class.send(:include, @controller._helpers)
|
18
|
+
@view.class.send(:include, ::Rails.application.routes.url_helpers)
|
18
19
|
end
|
19
20
|
|
20
21
|
def view
|
@@ -36,7 +37,7 @@ module Liquid
|
|
36
37
|
end
|
37
38
|
|
38
39
|
actual = Liquid::Template.parse(template).render!(context)
|
39
|
-
expect(actual).to eq(expected)
|
40
|
+
expect(actual.strip).to eq(expected.strip)
|
40
41
|
end
|
41
42
|
end
|
42
43
|
end
|
@@ -22,8 +22,8 @@ module Liquid
|
|
22
22
|
super
|
23
23
|
|
24
24
|
if markup =~ Syntax
|
25
|
-
@identifier = $1.to_s
|
26
25
|
@flush = $3
|
26
|
+
@identifier = $1.gsub('\'', '')
|
27
27
|
else
|
28
28
|
raise SyntaxError.new("Syntax Error - Valid syntax: {% content_for [name] %}")
|
29
29
|
end
|
@@ -31,9 +31,18 @@ module Liquid
|
|
31
31
|
|
32
32
|
def render(context)
|
33
33
|
@context = context
|
34
|
+
content = super.html_safe
|
34
35
|
|
35
|
-
|
36
|
-
|
36
|
+
if ::Rails::VERSION::MAJOR == 3 && ::Rails::VERSION::MINOR == 2
|
37
|
+
if @flush == 'true'
|
38
|
+
@context.registers[:view].view_flow.set(@identifier, content) if content
|
39
|
+
else
|
40
|
+
@context.registers[:view].view_flow.append(@identifier, content) if content
|
41
|
+
end
|
42
|
+
else
|
43
|
+
options = @flush == 'true' ? { flush: true } : {}
|
44
|
+
@context.registers[:view].content_for(@identifier, content, options)
|
45
|
+
end
|
37
46
|
''
|
38
47
|
end
|
39
48
|
end
|
@@ -49,7 +58,7 @@ module Liquid
|
|
49
58
|
super
|
50
59
|
|
51
60
|
if markup =~ Syntax
|
52
|
-
@identifier = $1
|
61
|
+
@identifier = $1.gsub('\'', '')
|
53
62
|
else
|
54
63
|
raise SyntaxError.new("Syntax Error - Valid syntax: {% yield [name] %}")
|
55
64
|
end
|
@@ -50,11 +50,12 @@ module Liquid
|
|
50
50
|
pagination = {}
|
51
51
|
pagination['collection'] = paginated_collection
|
52
52
|
pagination['current_offset'] = (current_page-1) * @page_size
|
53
|
+
pagination['current_page'] = current_page
|
53
54
|
pagination['page_size'] = @page_size
|
54
55
|
pagination['pages'] = page_count
|
55
56
|
pagination['items'] = paginated_collection.total_count
|
56
57
|
pagination['previous'] = link('« Previous'.html_safe, current_page-1 ) unless 1 >= current_page
|
57
|
-
pagination['next'] = link('Next »'.html_safe, current_page+1 ) unless page_count
|
58
|
+
pagination['next'] = link('Next »'.html_safe, current_page+1 ) unless page_count < current_page+1
|
58
59
|
pagination['parts'] = []
|
59
60
|
|
60
61
|
hellip_break = false
|
data/lib/liquid-rails/version.rb
CHANGED
data/liquid-rails.gemspec
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
Bar Partial
|
data/spec/dummy/config/routes.rb
CHANGED
@@ -14,11 +14,15 @@ module Liquid
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'translate with specified locale' do
|
17
|
-
expect(::Liquid::Variable.new("'welcome' | translate: 'km'").render(context)).to eq('សូមស្វាគមន៍')
|
17
|
+
expect(::Liquid::Variable.new("'welcome' | translate: locale: 'km'").render(context)).to eq('សូមស្វាគមន៍')
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'translate with scope' do
|
21
|
-
expect(::Liquid::Variable.new("'home' | translate: 'km', 'links'").render(context)).to eq('ទំព័រដើម')
|
21
|
+
expect(::Liquid::Variable.new("'home' | translate: locale: 'km', scope: 'links'").render(context)).to eq('ទំព័រដើម')
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'translate with interpolation' do
|
25
|
+
expect(::Liquid::Variable.new("'welcome_name' | translate: locale: 'en', name: 'Jeremy'").render(context)).to eq('Welcome, Jeremy')
|
22
26
|
end
|
23
27
|
end
|
24
28
|
end
|
@@ -3,7 +3,13 @@ require 'spec_helper'
|
|
3
3
|
module Liquid
|
4
4
|
module Rails
|
5
5
|
describe ContentForTag, type: :tag do
|
6
|
-
it 'content_for and yield' do
|
6
|
+
it 'content_for and yield with non-quoted key' do
|
7
|
+
Liquid::Template.parse(%|{% content_for not_authorized0 %}alert('You are not authorized to do that!');{% endcontent_for %}|).render(context)
|
8
|
+
|
9
|
+
expect_template_result(%|{% yield not_authorized0 %}|, "alert('You are not authorized to do that!');")
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'content_for and yield with quoted key' do
|
7
13
|
Liquid::Template.parse(%|{% content_for 'not_authorized1' %}alert('You are not authorized to do that!');{% endcontent_for %}|).render(context)
|
8
14
|
|
9
15
|
expect_template_result(%|{% yield 'not_authorized1' %}|, "alert('You are not authorized to do that!');")
|
@@ -6,10 +6,19 @@ module Liquid
|
|
6
6
|
let(:context) { ::Liquid::Context.new({}, {}, { view: view }) }
|
7
7
|
|
8
8
|
it '#crsf_meta_tags' do
|
9
|
-
view.
|
9
|
+
allow(view).to receive(:protect_against_forgery?).and_return(true)
|
10
|
+
allow(view).to receive(:form_authenticity_token).and_return('rails_form_authenticity_token')
|
10
11
|
|
11
12
|
result = Liquid::Template.parse('{% csrf_meta_tags %}').render(context)
|
12
|
-
|
13
|
+
metas = result.split("\n").map { |item| Nokogiri::XML(item).children.first }
|
14
|
+
expect(metas.length).to eq(2)
|
15
|
+
expect(metas[0].name).to eq('meta')
|
16
|
+
expect(metas[0]['name']).to eq('csrf-param')
|
17
|
+
expect(metas[0]['content']).to eq('authenticity_token')
|
18
|
+
|
19
|
+
expect(metas[1].name).to eq('meta')
|
20
|
+
expect(metas[1]['name']).to eq('csrf-token')
|
21
|
+
expect(metas[1]['content']).to eq('rails_form_authenticity_token')
|
13
22
|
end
|
14
23
|
end
|
15
24
|
end
|
@@ -27,6 +27,10 @@ module Liquid
|
|
27
27
|
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.current_offset }}{% endpaginate %}", '0', { 'post' => @post_drop })
|
28
28
|
end
|
29
29
|
|
30
|
+
it '#current_page' do
|
31
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.current_page }}{% endpaginate %}", '1', { 'post' => @post_drop })
|
32
|
+
end
|
33
|
+
|
30
34
|
it '#page_size' do
|
31
35
|
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.page_size }}{% endpaginate %}", '2', { 'post' => @post_drop })
|
32
36
|
end
|
@@ -44,16 +48,34 @@ module Liquid
|
|
44
48
|
end
|
45
49
|
|
46
50
|
it '#next' do
|
47
|
-
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.next }}{% endpaginate %}", %|{"title"=>"Next »", "url"=>"
|
51
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.next }}{% endpaginate %}", %|{"title"=>"Next »", "url"=>"/?page=2", "is_link"=>true}|, { 'post' => @post_drop })
|
48
52
|
end
|
49
53
|
|
50
54
|
it '#parts' do
|
51
|
-
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.parts }}{% endpaginate %}", %|{"title"=>1, "is_link"=>false, "hellip_break"=>false}{"title"=>2, "url"=>"
|
55
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.parts }}{% endpaginate %}", %|{"title"=>1, "is_link"=>false, "hellip_break"=>false}{"title"=>2, "url"=>"/?page=2", "is_link"=>true}{"title"=>3, "url"=>"/?page=3", "is_link"=>true}|, { 'post' => @post_drop })
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'second_page' do
|
60
|
+
before(:all) { controller.params[:page] = 2 }
|
61
|
+
after(:all) { controller.params[:page] = nil }
|
62
|
+
|
63
|
+
it '#current_page' do
|
64
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.current_page }}{% endpaginate %}", '2', { 'post' => @post_drop })
|
65
|
+
end
|
66
|
+
|
67
|
+
it '#previous' do
|
68
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.previous }}{% endpaginate %}", %|{"title"=>"« Previous", "url"=>"/?page=1", "is_link"=>true}|, { 'post' => @post_drop })
|
69
|
+
end
|
70
|
+
|
71
|
+
it '#next' do
|
72
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.next }}{% endpaginate %}", %|{"title"=>"Next »", "url"=>"/?page=3", "is_link"=>true}|, { 'post' => @post_drop })
|
52
73
|
end
|
53
74
|
end
|
54
75
|
|
55
76
|
context 'last_page' do
|
56
77
|
before(:all) { controller.params[:page] = 3 }
|
78
|
+
after(:all) { controller.params[:page] = nil }
|
57
79
|
|
58
80
|
it 'returns the page size' do
|
59
81
|
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.collection | size }}{% endpaginate %}", '1', { 'post' => @post_drop })
|
@@ -67,6 +89,10 @@ module Liquid
|
|
67
89
|
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.current_offset }}{% endpaginate %}", '4', { 'post' => @post_drop })
|
68
90
|
end
|
69
91
|
|
92
|
+
it '#current_page' do
|
93
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.current_page }}{% endpaginate %}", '3', { 'post' => @post_drop })
|
94
|
+
end
|
95
|
+
|
70
96
|
it '#page_size' do
|
71
97
|
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.page_size }}{% endpaginate %}", '2', { 'post' => @post_drop })
|
72
98
|
end
|
@@ -80,7 +106,7 @@ module Liquid
|
|
80
106
|
end
|
81
107
|
|
82
108
|
it '#previous' do
|
83
|
-
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.previous }}{% endpaginate %}", %|{"title"=>"« Previous", "url"=>"
|
109
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.previous }}{% endpaginate %}", %|{"title"=>"« Previous", "url"=>"/?page=2", "is_link"=>true}|, { 'post' => @post_drop })
|
84
110
|
end
|
85
111
|
|
86
112
|
it '#next' do
|
@@ -88,7 +114,45 @@ module Liquid
|
|
88
114
|
end
|
89
115
|
|
90
116
|
it '#parts' do
|
91
|
-
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.parts }}{% endpaginate %}", %|{"title"=>1, "url"=>"
|
117
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.parts }}{% endpaginate %}", %|{"title"=>1, "url"=>"/?page=1", "is_link"=>true}{"title"=>2, "url"=>"/?page=2", "is_link"=>true}{"title"=>3, "is_link"=>false, "hellip_break"=>false}|, { 'post' => @post_drop })
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context 'default_pagination' do
|
122
|
+
after(:all) { controller.params[:page] = nil }
|
123
|
+
|
124
|
+
it 'is in the first_page' do
|
125
|
+
controller.params[:page] = 1
|
126
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate | default_pagination }}{% endpaginate %}", %|<span class=\"page current\">1</span> <span class=\"page\"><a href=\"/?page=2\">2</a></span> <span class=\"page\"><a href=\"/?page=3\">3</a></span> <span class=\"next\"><a href=\"/?page=2\" rel=\"next\">Next »</a></span>|, { 'post' => @post_drop })
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'is in the second_page' do
|
130
|
+
controller.params[:page] = 2
|
131
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate | default_pagination }}{% endpaginate %}", %|<span class=\"prev\"><a href=\"/?page=1\" rel=\"prev\">« Previous</a></span> <span class=\"page\"><a href=\"/?page=1\">1</a></span> <span class=\"page current\">2</span> <span class=\"page\"><a href=\"/?page=3\">3</a></span> <span class=\"next\"><a href=\"/?page=3\" rel=\"next\">Next »</a></span>|, { 'post' => @post_drop })
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'is in the last_page' do
|
135
|
+
controller.params[:page] = 3
|
136
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate | default_pagination }}{% endpaginate %}", %|<span class=\"prev\"><a href=\"/?page=2\" rel=\"prev\">« Previous</a></span> <span class=\"page\"><a href=\"/?page=1\">1</a></span> <span class=\"page\"><a href=\"/?page=2\">2</a></span> <span class=\"page current\">3</span>|, { 'post' => @post_drop })
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
context 'bootstrap_pagination' do
|
141
|
+
after(:all) { controller.params[:page] = nil }
|
142
|
+
|
143
|
+
it 'is in the first_page' do
|
144
|
+
controller.params[:page] = 1
|
145
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate | bootstrap_pagination }}{% endpaginate %}", %|<nav><ul class="pagination "> <li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">« Previous</span></a></li> <li class="active"><span>1</span></li> <li><a href="/?page=2">2</a></li> <li><a href="/?page=3">3</a></li> <li><a href="/?page=2" aria-label="Next"><span aria-hidden="true">Next »</span></a></li> </nav></ul>|, { 'post' => @post_drop })
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'is in the second_page' do
|
149
|
+
controller.params[:page] = 2
|
150
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate | bootstrap_pagination }}{% endpaginate %}", %|<nav><ul class="pagination "> <li><a href="/?page=1" aria-label="Previous"><span aria-hidden="true">« Previous</span></a></li> <li><a href="/?page=1">1</a></li> <li class="active"><span>2</span></li> <li><a href="/?page=3">3</a></li> <li><a href="/?page=3" aria-label="Next"><span aria-hidden="true">Next »</span></a></li> </nav></ul>|, { 'post' => @post_drop })
|
151
|
+
end
|
152
|
+
|
153
|
+
it 'is in the last_page' do
|
154
|
+
controller.params[:page] = 3
|
155
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate | bootstrap_pagination }}{% endpaginate %}", %|<nav><ul class="pagination "> <li><a href="/?page=2" aria-label="Previous"><span aria-hidden="true">« Previous</span></a></li> <li><a href="/?page=1">1</a></li> <li><a href="/?page=2">2</a></li> <li class="active"><span>3</span></li> <li class="disabled"><a href="#" aria-label="Next"><span aria-hidden="true">Next »</span></a></li> </nav></ul>|, { 'post' => @post_drop })
|
92
156
|
end
|
93
157
|
end
|
94
158
|
end
|
@@ -35,6 +35,12 @@ describe 'Request', type: :feature do
|
|
35
35
|
|
36
36
|
expect(page.body).to eq "Application Layout\nLiquid on Rails\n\nHome Partial\nShared Partial"
|
37
37
|
end
|
38
|
+
|
39
|
+
it 'respects namespace of original template for partials path' do
|
40
|
+
visit '/foospace/bar/index_partial'
|
41
|
+
expect(page.body.strip).to eq("Foospace::BarController\n\nBar Partial")
|
42
|
+
end
|
43
|
+
|
38
44
|
end
|
39
45
|
|
40
46
|
context 'render with filter' do
|
@@ -50,4 +56,4 @@ describe 'Request', type: :feature do
|
|
50
56
|
expect(page.body).to eq("Application Layout\nLiquid on Rails\nThis is a long section of text")
|
51
57
|
end
|
52
58
|
end
|
53
|
-
end
|
59
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -22,7 +22,6 @@ require File.expand_path('../dummy/config/environment.rb', __FILE__)
|
|
22
22
|
require 'pry'
|
23
23
|
require 'liquid-rails'
|
24
24
|
require 'rspec/rails'
|
25
|
-
require 'rspec/autorun'
|
26
25
|
require 'capybara/rspec'
|
27
26
|
require 'liquid-rails/matchers'
|
28
27
|
|
@@ -35,7 +34,6 @@ require 'fixtures/poro'
|
|
35
34
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
36
35
|
|
37
36
|
RSpec.configure do |config|
|
38
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
39
37
|
config.filter_run focus: true
|
40
38
|
config.run_all_when_everything_filtered = true
|
41
39
|
config.include Capybara::RSpecMatchers
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# RSpec matcher to spec delegations.
|
2
|
-
#
|
3
|
-
#
|
2
|
+
# Gist Version https://gist.github.com/joeytheman/0fe021821e4c62f552ce
|
3
|
+
#
|
4
4
|
#
|
5
5
|
# Usage:
|
6
6
|
#
|
@@ -30,7 +30,7 @@ RSpec::Matchers.define :delegate do |method|
|
|
30
30
|
unless [0,-1].include?(@delegator.method(@to).arity)
|
31
31
|
raise "#{@delegator}'s' #{@to} method does not have zero or -1 arity (it expects parameters)"
|
32
32
|
end
|
33
|
-
@delegator.
|
33
|
+
allow(@delegator).to receive(@to).and_return(receiver_double(method))
|
34
34
|
@delegator.send(@method) == :called
|
35
35
|
else
|
36
36
|
raise "#{@delegator} does not respond to #{@to}"
|
@@ -41,20 +41,20 @@ RSpec::Matchers.define :delegate do |method|
|
|
41
41
|
"delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}"
|
42
42
|
end
|
43
43
|
|
44
|
-
|
44
|
+
failure_message do |text|
|
45
45
|
"expected #{@delegator} to delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}"
|
46
46
|
end
|
47
47
|
|
48
|
-
|
48
|
+
failure_message_when_negated do |text|
|
49
49
|
"expected #{@delegator} not to delegate :#{@method} to its #{@to}#{@prefix ? ' with prefix' : ''}"
|
50
50
|
end
|
51
51
|
|
52
52
|
chain(:to) { |receiver| @to = receiver }
|
53
|
-
chain(:with_prefix) {
|
53
|
+
chain(:with_prefix) { |*prefix| @prefix = prefix.first || @to }
|
54
54
|
|
55
55
|
def receiver_double(method)
|
56
56
|
double('receiver').tap do |receiver|
|
57
|
-
receiver.
|
57
|
+
allow(receiver).to receive(method).and_return(:called)
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: liquid-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chamnap Chhorn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: liquid
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.0.0
|
33
|
+
version: 3.0.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 3.0.0
|
40
|
+
version: 3.0.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: kaminari
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- ".ruby-gemset"
|
67
67
|
- ".ruby-version"
|
68
68
|
- ".travis.yml"
|
69
|
+
- CHANGELOG.md
|
69
70
|
- Gemfile
|
70
71
|
- Guardfile
|
71
72
|
- LICENSE.txt
|
@@ -74,6 +75,7 @@ files:
|
|
74
75
|
- gemfiles/rails_32.gemfile
|
75
76
|
- gemfiles/rails_40.gemfile
|
76
77
|
- gemfiles/rails_41.gemfile
|
78
|
+
- gemfiles/rails_42.gemfile
|
77
79
|
- lib/liquid-rails.rb
|
78
80
|
- lib/liquid-rails/drops/collection_drop.rb
|
79
81
|
- lib/liquid-rails/drops/drop.rb
|
@@ -85,6 +87,7 @@ files:
|
|
85
87
|
- lib/liquid-rails/filters/google_static_map_url_filter.rb
|
86
88
|
- lib/liquid-rails/filters/misc_filter.rb
|
87
89
|
- lib/liquid-rails/filters/number_filter.rb
|
90
|
+
- lib/liquid-rails/filters/paginate_filter.rb
|
88
91
|
- lib/liquid-rails/filters/sanitize_filter.rb
|
89
92
|
- lib/liquid-rails/filters/text_filter.rb
|
90
93
|
- lib/liquid-rails/filters/translate_filter.rb
|
@@ -111,12 +114,15 @@ files:
|
|
111
114
|
- spec/dummy/app/assets/stylesheets/application.css
|
112
115
|
- spec/dummy/app/controllers/application_controller.rb
|
113
116
|
- spec/dummy/app/controllers/concerns/.keep
|
117
|
+
- spec/dummy/app/controllers/foospace/bar_controller.rb
|
114
118
|
- spec/dummy/app/controllers/home_controller.rb
|
115
119
|
- spec/dummy/app/controllers/pages_controller.rb
|
116
120
|
- spec/dummy/app/helpers/application_helper.rb
|
117
121
|
- spec/dummy/app/mailers/.keep
|
118
122
|
- spec/dummy/app/models/.keep
|
119
123
|
- spec/dummy/app/models/concerns/.keep
|
124
|
+
- spec/dummy/app/views/foospace/bar/_partial.liquid
|
125
|
+
- spec/dummy/app/views/foospace/bar/index_partial.liquid
|
120
126
|
- spec/dummy/app/views/home/_partial.liquid
|
121
127
|
- spec/dummy/app/views/home/index.liquid
|
122
128
|
- spec/dummy/app/views/home/index_partial.liquid
|
@@ -189,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
189
195
|
version: 1.8.11
|
190
196
|
requirements: []
|
191
197
|
rubyforge_project:
|
192
|
-
rubygems_version: 2.
|
198
|
+
rubygems_version: 2.4.5
|
193
199
|
signing_key:
|
194
200
|
specification_version: 4
|
195
201
|
summary: Renders liquid templates with layout and partial support
|
@@ -201,12 +207,15 @@ test_files:
|
|
201
207
|
- spec/dummy/app/assets/stylesheets/application.css
|
202
208
|
- spec/dummy/app/controllers/application_controller.rb
|
203
209
|
- spec/dummy/app/controllers/concerns/.keep
|
210
|
+
- spec/dummy/app/controllers/foospace/bar_controller.rb
|
204
211
|
- spec/dummy/app/controllers/home_controller.rb
|
205
212
|
- spec/dummy/app/controllers/pages_controller.rb
|
206
213
|
- spec/dummy/app/helpers/application_helper.rb
|
207
214
|
- spec/dummy/app/mailers/.keep
|
208
215
|
- spec/dummy/app/models/.keep
|
209
216
|
- spec/dummy/app/models/concerns/.keep
|
217
|
+
- spec/dummy/app/views/foospace/bar/_partial.liquid
|
218
|
+
- spec/dummy/app/views/foospace/bar/index_partial.liquid
|
210
219
|
- spec/dummy/app/views/home/_partial.liquid
|
211
220
|
- spec/dummy/app/views/home/index.liquid
|
212
221
|
- spec/dummy/app/views/home/index_partial.liquid
|