liquid-rails 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.coveralls.yml +2 -0
- data/.gitignore +24 -0
- data/.rspec +1 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +17 -0
- data/Gemfile +12 -0
- data/Guardfile +33 -0
- data/LICENSE.txt +22 -0
- data/README.md +140 -0
- data/Rakefile +27 -0
- data/gemfiles/rails_32.gemfile +11 -0
- data/gemfiles/rails_40.gemfile +11 -0
- data/gemfiles/rails_41.gemfile +11 -0
- data/lib/liquid-rails.rb +23 -0
- data/lib/liquid-rails/drops/collection_drop.rb +91 -0
- data/lib/liquid-rails/drops/drop.rb +114 -0
- data/lib/liquid-rails/drops/droppable.rb +22 -0
- data/lib/liquid-rails/file_system.rb +14 -0
- data/lib/liquid-rails/filters/asset_tag_filter.rb +25 -0
- data/lib/liquid-rails/filters/asset_url_filter.rb +37 -0
- data/lib/liquid-rails/filters/date_filter.rb +19 -0
- data/lib/liquid-rails/filters/google_static_map_url_filter.rb +30 -0
- data/lib/liquid-rails/filters/misc_filter.rb +47 -0
- data/lib/liquid-rails/filters/number_filter.rb +24 -0
- data/lib/liquid-rails/filters/sanitize_filter.rb +19 -0
- data/lib/liquid-rails/filters/text_filter.rb +47 -0
- data/lib/liquid-rails/filters/translate_filter.rb +13 -0
- data/lib/liquid-rails/filters/url_filter.rb +24 -0
- data/lib/liquid-rails/matchers.rb +5 -0
- data/lib/liquid-rails/railtie.rb +26 -0
- data/lib/liquid-rails/rspec/drop_example_group.rb +38 -0
- data/lib/liquid-rails/rspec/drop_matchers.rb +159 -0
- data/lib/liquid-rails/rspec/filter_example_group.rb +24 -0
- data/lib/liquid-rails/rspec/tag_example_group.rb +24 -0
- data/lib/liquid-rails/rspec/view_controller_context.rb +44 -0
- data/lib/liquid-rails/tags/content_for_tag.rb +68 -0
- data/lib/liquid-rails/tags/csrf_meta_tags.rb +11 -0
- data/lib/liquid-rails/tags/google_analytics_tag.rb +43 -0
- data/lib/liquid-rails/tags/javascript_tag.rb +22 -0
- data/lib/liquid-rails/tags/paginate_tag.rb +117 -0
- data/lib/liquid-rails/template_handler.rb +44 -0
- data/lib/liquid-rails/version.rb +5 -0
- data/liquid-rails.gemspec +26 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/images/.keep +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/concerns/.keep +0 -0
- data/spec/dummy/app/controllers/home_controller.rb +25 -0
- data/spec/dummy/app/controllers/pages_controller.rb +16 -0
- data/spec/dummy/app/helpers/application_helper.rb +5 -0
- data/spec/dummy/app/mailers/.keep +0 -0
- data/spec/dummy/app/models/.keep +0 -0
- data/spec/dummy/app/models/concerns/.keep +0 -0
- data/spec/dummy/app/views/home/_partial.liquid +1 -0
- data/spec/dummy/app/views/home/index.liquid +1 -0
- data/spec/dummy/app/views/home/index_partial.liquid +4 -0
- data/spec/dummy/app/views/home/index_partial_with_full_path.liquid +4 -0
- data/spec/dummy/app/views/home/index_with_filter.liquid +2 -0
- data/spec/dummy/app/views/home/index_with_layout.liquid +1 -0
- data/spec/dummy/app/views/layouts/application.liquid +2 -0
- data/spec/dummy/app/views/pages/index_without_filter.liquid +2 -0
- data/spec/dummy/app/views/shared/_partial.liquid +1 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +25 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +80 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +17 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +4 -0
- data/spec/dummy/config/locales/km.yml +4 -0
- data/spec/dummy/config/routes.rb +10 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/public/404.html +58 -0
- data/spec/dummy/public/422.html +58 -0
- data/spec/dummy/public/500.html +57 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/fixtures/poro.rb +58 -0
- data/spec/lib/liquid-rails/drops/drop_spec.rb +119 -0
- data/spec/lib/liquid-rails/filters/asset_tag_filter_spec.rb +22 -0
- data/spec/lib/liquid-rails/filters/asset_url_filter_spec.rb +34 -0
- data/spec/lib/liquid-rails/filters/google_static_map_url_filter_spec.rb +23 -0
- data/spec/lib/liquid-rails/filters/misc_filter_spec.rb +26 -0
- data/spec/lib/liquid-rails/filters/translate_filter_spec.rb +25 -0
- data/spec/lib/liquid-rails/railtie_spec.rb +9 -0
- data/spec/lib/liquid-rails/rspec/drop_matchers_spec.rb +34 -0
- data/spec/lib/liquid-rails/tags/content_for_tag_spec.rb +27 -0
- data/spec/lib/liquid-rails/tags/csrf_meta_tag_spec.rb +16 -0
- data/spec/lib/liquid-rails/tags/google_analtyics_tag_spec.rb +31 -0
- data/spec/lib/liquid-rails/tags/javascript_tag_spec.rb +14 -0
- data/spec/lib/liquid-rails/tags/paginate_tag_spec.rb +96 -0
- data/spec/lib/liquid-rails/template_handler_spec.rb +53 -0
- data/spec/spec_helper.rb +44 -0
- data/spec/support/delegate_matcher.rb +60 -0
- metadata +261 -0
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Liquid
|
4
|
+
module Rails
|
5
|
+
describe Drop do
|
6
|
+
let(:model) { ::Model.new }
|
7
|
+
let(:profile) { Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1') }
|
8
|
+
let(:profile_drop) { ProfileDrop.new(profile) }
|
9
|
+
|
10
|
+
context 'attributes' do
|
11
|
+
it '_attributes' do
|
12
|
+
expect(profile_drop.class._attributes).to eq([:name, :description])
|
13
|
+
end
|
14
|
+
|
15
|
+
it '#name and #description' do
|
16
|
+
expect(profile_drop.name).to eq('Name 1')
|
17
|
+
expect(profile_drop.description).to eq('Description 1')
|
18
|
+
end
|
19
|
+
|
20
|
+
it '#before_method' do
|
21
|
+
expect(profile_drop.before_method(:name)).to eq(profile_drop.name)
|
22
|
+
expect(profile_drop.before_method(:description)).to eq(profile_drop.description)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context '#dropify' do
|
27
|
+
context 'single' do
|
28
|
+
it "instantitates with its inferred drop class" do
|
29
|
+
drop = Liquid::Rails::Drop.dropify(profile)
|
30
|
+
|
31
|
+
expect(drop).to be_instance_of(ProfileDrop)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "instantitates with `Liquid::Rails::Drop` when its inferred drop class doesn't exist" do
|
35
|
+
drop = Liquid::Rails::Drop.dropify(Model.new)
|
36
|
+
|
37
|
+
expect(drop).to be_instance_of(Liquid::Rails::Drop)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "instantitates with the caller drop class" do
|
41
|
+
drop = ReProfileDrop.dropify(profile)
|
42
|
+
expect(drop).to be_instance_of(ReProfileDrop)
|
43
|
+
|
44
|
+
drop = ProfileDrop.dropify(profile)
|
45
|
+
expect(drop).to be_instance_of(ProfileDrop)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'array' do
|
50
|
+
it "instantitates with collection drop class" do
|
51
|
+
array = [1, 2, 3]
|
52
|
+
|
53
|
+
expect(Liquid::Rails::Drop.dropify(array)).to be_instance_of(Liquid::Rails::CollectionDrop)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'association' do
|
59
|
+
before(:each) do
|
60
|
+
@post = ::Post.new({ title: 'New Post', body: 'Body' })
|
61
|
+
@comment = ::Comment.new({ id: 1, body: 'ZOMG A COMMENT' })
|
62
|
+
@post.comments = [@comment]
|
63
|
+
@comment.post = @post
|
64
|
+
|
65
|
+
@post.recomments= [@comment]
|
66
|
+
@comment.repost = @post
|
67
|
+
|
68
|
+
@post_drop = ::PostDrop.new(@post)
|
69
|
+
@comment_drop = ::CommentDrop.new(@comment)
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'has_many' do
|
73
|
+
it '#has_many :comments' do
|
74
|
+
expect(@post_drop.class._associations[:comments]).to eq({:type=>:has_many, :options=>{}})
|
75
|
+
end
|
76
|
+
|
77
|
+
it '#comments returns as CollectionDrop object' do
|
78
|
+
expect(@post_drop.comments).to be_instance_of(Liquid::Rails::CollectionDrop)
|
79
|
+
end
|
80
|
+
|
81
|
+
it '#recomments returns as CommentsDrop object' do
|
82
|
+
expect(@post_drop.recomments).to be_instance_of(::CommentsDrop)
|
83
|
+
end
|
84
|
+
|
85
|
+
it '#recomments returns as ReCommentDrop object' do
|
86
|
+
expect(@post_drop.recomments[0]).to be_instance_of(::ReCommentDrop)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'belongs_to' do
|
91
|
+
it '#belongs_to' do
|
92
|
+
expect(@comment_drop.class._associations[:post]).to eq({:type=>:belongs_to, :options=>{}})
|
93
|
+
end
|
94
|
+
|
95
|
+
it '#post returns as PostDrop object' do
|
96
|
+
expect(@comment_drop.post).to be_instance_of(::PostDrop)
|
97
|
+
end
|
98
|
+
|
99
|
+
it '#repost returns as PostDrop object' do
|
100
|
+
expect(@comment_drop.repost).to be_instance_of(::RePostDrop)
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'returns nil when the source object is nil' do
|
104
|
+
@comment.post = nil
|
105
|
+
@comment_drop = ::CommentDrop.new(@comment)
|
106
|
+
|
107
|
+
expect(@comment_drop.post).to be_nil
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context '#to_json' do
|
112
|
+
it 'returns hash of attributes' do
|
113
|
+
expect(profile_drop.to_json).to eq(%|{"name":"Name 1","description":"Description 1"}|)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class AssetTagFilterKlass
|
4
|
+
include Liquid::Rails::AssetTagFilter
|
5
|
+
end
|
6
|
+
|
7
|
+
module Liquid
|
8
|
+
module Rails
|
9
|
+
describe AssetTagFilter do
|
10
|
+
subject { AssetTagFilterKlass.new }
|
11
|
+
|
12
|
+
it { should delegate(:audio_tag).to(:h) }
|
13
|
+
it { should delegate(:auto_discovery_link_tag).to(:h) }
|
14
|
+
it { should delegate(:favicon_link_tag).to(:h) }
|
15
|
+
it { should delegate(:image_alt).to(:h) }
|
16
|
+
it { should delegate(:image_tag).to(:h) }
|
17
|
+
it { should delegate(:javascript_include_tag).to(:h) }
|
18
|
+
it { should delegate(:stylesheet_link_tag).to(:h) }
|
19
|
+
it { should delegate(:video_tag).to(:h) }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class AssetUrlFilterKlass
|
4
|
+
include Liquid::Rails::AssetUrlFilter
|
5
|
+
end
|
6
|
+
|
7
|
+
module Liquid
|
8
|
+
module Rails
|
9
|
+
describe AssetUrlFilter do
|
10
|
+
subject { AssetUrlFilterKlass.new }
|
11
|
+
|
12
|
+
it { should delegate(:asset_path).to(:h) }
|
13
|
+
it { should delegate(:asset_url).to(:h) }
|
14
|
+
|
15
|
+
it { should delegate(:audio_path).to(:h) }
|
16
|
+
it { should delegate(:audio_url).to(:h) }
|
17
|
+
|
18
|
+
it { should delegate(:font_path).to(:h) }
|
19
|
+
it { should delegate(:font_url).to(:h) }
|
20
|
+
|
21
|
+
it { should delegate(:image_path).to(:h) }
|
22
|
+
it { should delegate(:image_url).to(:h) }
|
23
|
+
|
24
|
+
it { should delegate(:javascript_path).to(:h) }
|
25
|
+
it { should delegate(:javascript_url).to(:h) }
|
26
|
+
|
27
|
+
it { should delegate(:stylesheet_path).to(:h) }
|
28
|
+
it { should delegate(:stylesheet_url).to(:h) }
|
29
|
+
|
30
|
+
it { should delegate(:video_path).to(:h) }
|
31
|
+
it { should delegate(:video_url).to(:h) }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Liquid
|
4
|
+
module Rails
|
5
|
+
describe GoogleStaticMapUrlFilter, type: :filter do
|
6
|
+
it 'returns url with center' do
|
7
|
+
expect_template_result("{{ '600x300' | google_static_map_url: center: '40.714728,-73.998672' }}", 'https://maps.googleapis.com/maps/api/staticmap?center=40.714728%2C-73.998672&size=600x300')
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'returns url with zoom' do
|
11
|
+
expect_template_result("{{ '600x300' | google_static_map_url: zoom: 13 }}", 'https://maps.googleapis.com/maps/api/staticmap?size=600x300&zoom=13')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'returns url with maptype' do
|
15
|
+
expect_template_result("{{ '600x300' | google_static_map_url: maptype: 'hybrid' }}", 'https://maps.googleapis.com/maps/api/staticmap?maptype=hybrid&size=600x300')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'returns url with markers' do
|
19
|
+
expect_template_result("{{ '600x300' | google_static_map_url: markers: 'color:blue|label:S|40.702147,-74.015794;color:green|label:G|40.711614,-74.012318' }}", 'https://maps.googleapis.com/maps/api/staticmap?size=600x300&markers=color%3Ablue%7Clabel%3AS%7C40.702147%2C-74.015794&markers=color%3Agreen%7Clabel%3AG%7C40.711614%2C-74.012318')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Liquid
|
4
|
+
module Rails
|
5
|
+
describe MiscFilter do
|
6
|
+
let(:context) { ::Liquid::Context.new }
|
7
|
+
|
8
|
+
context '#index' do
|
9
|
+
it 'returns value at the specified index' do
|
10
|
+
context['array'] = [1, 2, 3]
|
11
|
+
expect(::Liquid::Variable.new("array | index: 0").render(context)).to eq(1)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'returns nil when outside range' do
|
15
|
+
context['array'] = [1, 2, 3]
|
16
|
+
expect(::Liquid::Variable.new("array | index: 5").render(context)).to eq(nil)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it '#jsonify' do
|
21
|
+
context['listing'] = { name: 'Listing A' }
|
22
|
+
expect(::Liquid::Variable.new("listing | jsonify").render(context)).to eq(%|{"name":"Listing A"}|)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Liquid
|
4
|
+
module Rails
|
5
|
+
describe TranslateFilter do
|
6
|
+
let(:context) { ::Liquid::Context.new }
|
7
|
+
|
8
|
+
before do
|
9
|
+
context.registers[:view] = ActionView::Base.new
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'translate with default locale' do
|
13
|
+
expect(::Liquid::Variable.new("'welcome' | translate").render(context)).to eq('Welcome everyone!')
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'translate with specified locale' do
|
17
|
+
expect(::Liquid::Variable.new("'welcome' | translate: 'km'").render(context)).to eq('សូមស្វាគមន៍')
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'translate with scope' do
|
21
|
+
expect(::Liquid::Variable.new("'home' | translate: 'km', 'links'").render(context)).to eq('ទំព័រដើម')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ProfileDrop, type: :drop do
|
4
|
+
include Liquid::Rails::Rspec::DropMatchers
|
5
|
+
|
6
|
+
it { should have_attribute(:name) }
|
7
|
+
it { should have_attribute(:description) }
|
8
|
+
it { should_not have_attribute(:not_found) }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe PostDrop, type: :drop do
|
12
|
+
include Liquid::Rails::Rspec::DropMatchers
|
13
|
+
|
14
|
+
it { should have_many(:comments) }
|
15
|
+
it { should_not have_many(:not_found) }
|
16
|
+
|
17
|
+
it { should have_many(:recomments).class_name('CommentsDrop') }
|
18
|
+
it { should have_many(:recomments).with('ReCommentDrop') }
|
19
|
+
it { should have_many(:recomments).class_name('CommentsDrop').with('ReCommentDrop') }
|
20
|
+
|
21
|
+
it { should_not have_many(:recomments).class_name('NotFound') }
|
22
|
+
it { should_not have_many(:recomments).with('NotFound') }
|
23
|
+
it { should_not have_many(:recomments).class_name('NotFound').with('NotFound') }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe CommentDrop, type: :drop do
|
27
|
+
include Liquid::Rails::Rspec::DropMatchers
|
28
|
+
|
29
|
+
it { should belongs_to(:post) }
|
30
|
+
it { should_not belongs_to(:not_found) }
|
31
|
+
|
32
|
+
it { should belongs_to(:repost).class_name('RePostDrop') }
|
33
|
+
it { should_not belongs_to(:repost).class_name('NotFound') }
|
34
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Liquid
|
4
|
+
module Rails
|
5
|
+
describe ContentForTag, type: :tag do
|
6
|
+
it 'content_for and yield' do
|
7
|
+
Liquid::Template.parse(%|{% content_for 'not_authorized1' %}alert('You are not authorized to do that!');{% endcontent_for %}|).render(context)
|
8
|
+
|
9
|
+
expect_template_result(%|{% yield 'not_authorized1' %}|, "alert('You are not authorized to do that!');")
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'invokes content_for with the same identifier multiple times' do
|
13
|
+
Liquid::Template.parse(%|{% content_for 'not_authorized2' %}alert('You are not authorized to do that 1!');{% endcontent_for %}|).render(context)
|
14
|
+
Liquid::Template.parse(%|{% content_for 'not_authorized2' %}alert('You are not authorized to do that 2!');{% endcontent_for %}|).render(context)
|
15
|
+
|
16
|
+
expect_template_result(%|{% yield 'not_authorized2' %}|, "alert('You are not authorized to do that 1!');alert('You are not authorized to do that 2!');")
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'invokes content_for with the same identifier multiple times and flush' do
|
20
|
+
Liquid::Template.parse(%|{% content_for 'not_authorized3' %}alert('You are not authorized to do that 1!');{% endcontent_for %}|).render(context)
|
21
|
+
Liquid::Template.parse(%|{% content_for 'not_authorized3' flush true %}alert('You are not authorized to do that 2!');{% endcontent_for %}|).render(context)
|
22
|
+
|
23
|
+
expect_template_result(%|{% yield 'not_authorized3' %}|, "alert('You are not authorized to do that 2!');")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Liquid
|
4
|
+
module Rails
|
5
|
+
describe CsrfMetaTags, type: :tag do
|
6
|
+
let(:context) { ::Liquid::Context.new({}, {}, { view: view }) }
|
7
|
+
|
8
|
+
it '#crsf_meta_tags' do
|
9
|
+
view.stub(:protect_against_forgery?).and_return(true)
|
10
|
+
|
11
|
+
result = Liquid::Template.parse('{% csrf_meta_tags %}').render(context)
|
12
|
+
expect(result).to eq(%|<meta content=\"authenticity_token\" name=\"csrf-param\" />\n<meta content=\"#{view.form_authenticity_token}\" name=\"csrf-token\" />|)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Liquid
|
4
|
+
module Rails
|
5
|
+
describe GoogleAnalyticsTag, type: :tag do
|
6
|
+
let(:context) { ::Liquid::Context.new({}, {}, { view: view }) }
|
7
|
+
|
8
|
+
it '#google_analytics' do
|
9
|
+
result = Liquid::Template.parse("{% google_analytics_tag 'UA-XXXXX-X' %}").render(context)
|
10
|
+
|
11
|
+
expect(result).to eq(
|
12
|
+
%{
|
13
|
+
<script type="text/javascript">
|
14
|
+
|
15
|
+
var _gaq = _gaq || [];
|
16
|
+
_gaq.push(['_setAccount', 'UA-XXXXX-X']);
|
17
|
+
_gaq.push(['_trackPageview']);
|
18
|
+
|
19
|
+
(function() {
|
20
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
21
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
22
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
23
|
+
})();
|
24
|
+
|
25
|
+
</script>
|
26
|
+
}
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Liquid
|
4
|
+
module Rails
|
5
|
+
describe JavascriptTag, type: :tag do
|
6
|
+
let(:context) { ::Liquid::Context.new({}, {}, { view: view }) }
|
7
|
+
|
8
|
+
it '#crsf_meta_tags' do
|
9
|
+
result = Liquid::Template.parse("{% javascript_tag %} alert('Hello Liquid-Rails!') {% endjavascript_tag %}").render(context)
|
10
|
+
expect(result).to eq(%|<script type=\"text/javascript\">\n//<![CDATA[\n alert('Hello Liquid-Rails!') \n//]]>\n</script>|)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Liquid
|
4
|
+
module Rails
|
5
|
+
describe PaginateTag, type: :tag do
|
6
|
+
before(:all) do
|
7
|
+
post = ::Post.new(title: 'New Post', body: 'Body')
|
8
|
+
comment1 = ::Comment.new(id: 1, body: 'COMMENT 1')
|
9
|
+
comment2 = ::Comment.new(id: 2, body: 'COMMENT 2')
|
10
|
+
comment3 = ::Comment.new(id: 3, body: 'COMMENT 3')
|
11
|
+
comment4 = ::Comment.new(id: 4, body: 'COMMENT 4')
|
12
|
+
comment5 = ::Comment.new(id: 5, body: 'COMMENT 5')
|
13
|
+
post.comments = [comment1, comment2, comment3, comment4, comment5]
|
14
|
+
@post_drop = ::PostDrop.new(post)
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'first_page' do
|
18
|
+
it 'returns the page size' do
|
19
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.collection | size }}{% endpaginate %}", '2', { 'post' => @post_drop })
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'returns the comments inside the collection' do
|
23
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.collection[0].body }},{{ paginate.collection[1].body }}{% endpaginate %}", 'COMMENT 1,COMMENT 2', { 'post' => @post_drop })
|
24
|
+
end
|
25
|
+
|
26
|
+
it '#current_offset' do
|
27
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.current_offset }}{% endpaginate %}", '0', { 'post' => @post_drop })
|
28
|
+
end
|
29
|
+
|
30
|
+
it '#page_size' do
|
31
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.page_size }}{% endpaginate %}", '2', { 'post' => @post_drop })
|
32
|
+
end
|
33
|
+
|
34
|
+
it '#pages' do
|
35
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.pages }}{% endpaginate %}", '3', { 'post' => @post_drop })
|
36
|
+
end
|
37
|
+
|
38
|
+
it '#items' do
|
39
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.items }}{% endpaginate %}", '5', { 'post' => @post_drop })
|
40
|
+
end
|
41
|
+
|
42
|
+
it '#previous' do
|
43
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.previous }}{% endpaginate %}", '', { 'post' => @post_drop })
|
44
|
+
end
|
45
|
+
|
46
|
+
it '#next' do
|
47
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.next }}{% endpaginate %}", %|{"title"=>"Next »", "url"=>"?page=2", "is_link"=>true}|, { 'post' => @post_drop })
|
48
|
+
end
|
49
|
+
|
50
|
+
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"=>"?page=2", "is_link"=>true}{"title"=>3, "url"=>"?page=3", "is_link"=>true}|, { 'post' => @post_drop })
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'last_page' do
|
56
|
+
before(:all) { controller.params[:page] = 3 }
|
57
|
+
|
58
|
+
it 'returns the page size' do
|
59
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.collection | size }}{% endpaginate %}", '1', { 'post' => @post_drop })
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'returns the comments inside the collection' do
|
63
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.collection[0].body }}{% endpaginate %}", 'COMMENT 5', { 'post' => @post_drop })
|
64
|
+
end
|
65
|
+
|
66
|
+
it '#current_offset' do
|
67
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.current_offset }}{% endpaginate %}", '4', { 'post' => @post_drop })
|
68
|
+
end
|
69
|
+
|
70
|
+
it '#page_size' do
|
71
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.page_size }}{% endpaginate %}", '2', { 'post' => @post_drop })
|
72
|
+
end
|
73
|
+
|
74
|
+
it '#pages' do
|
75
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.pages }}{% endpaginate %}", '3', { 'post' => @post_drop })
|
76
|
+
end
|
77
|
+
|
78
|
+
it '#items' do
|
79
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.items }}{% endpaginate %}", '5', { 'post' => @post_drop })
|
80
|
+
end
|
81
|
+
|
82
|
+
it '#previous' do
|
83
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.previous }}{% endpaginate %}", %|{"title"=>"« Previous", "url"=>"?page=2", "is_link"=>true}|, { 'post' => @post_drop })
|
84
|
+
end
|
85
|
+
|
86
|
+
it '#next' do
|
87
|
+
expect_template_result("{% paginate post.comments by 2 %}{{ paginate.next }}{% endpaginate %}", %||, { 'post' => @post_drop })
|
88
|
+
end
|
89
|
+
|
90
|
+
it '#parts' do
|
91
|
+
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 })
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|