locomotivecms_solid 0.2.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.
- data/.gitignore +4 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/.travis.yml +9 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/README.md +152 -0
- data/Rakefile +7 -0
- data/lib/locomotivecms_solid.rb +2 -0
- data/lib/solid/arguments.rb +28 -0
- data/lib/solid/block.rb +13 -0
- data/lib/solid/conditional_block.rb +35 -0
- data/lib/solid/context_error.rb +2 -0
- data/lib/solid/default_security_rules.rb +24 -0
- data/lib/solid/element.rb +51 -0
- data/lib/solid/engine.rb +4 -0
- data/lib/solid/extensions.rb +17 -0
- data/lib/solid/iterable.rb +18 -0
- data/lib/solid/liquid_extensions/assign_tag.rb +21 -0
- data/lib/solid/liquid_extensions/for_tag.rb +102 -0
- data/lib/solid/liquid_extensions/if_tag.rb +44 -0
- data/lib/solid/liquid_extensions/unless_tag.rb +13 -0
- data/lib/solid/liquid_extensions/variable.rb +34 -0
- data/lib/solid/liquid_extensions.rb +87 -0
- data/lib/solid/method_whitelist.rb +56 -0
- data/lib/solid/model_drop.rb +119 -0
- data/lib/solid/parser.rb +265 -0
- data/lib/solid/tag.rb +11 -0
- data/lib/solid/template.rb +24 -0
- data/lib/solid/version.rb +3 -0
- data/lib/solid.rb +48 -0
- data/locomotivecms_solid.gemspec +25 -0
- data/spec/solid/arguments_spec.rb +310 -0
- data/spec/solid/block_spec.rb +39 -0
- data/spec/solid/conditional_block_spec.rb +39 -0
- data/spec/solid/default_security_rules_spec.rb +180 -0
- data/spec/solid/element_examples.rb +67 -0
- data/spec/solid/liquid_extensions/assign_tag_spec.rb +27 -0
- data/spec/solid/liquid_extensions/for_tag_spec.rb +48 -0
- data/spec/solid/liquid_extensions/if_tag_spec.rb +64 -0
- data/spec/solid/liquid_extensions/unless_tag_spec.rb +54 -0
- data/spec/solid/liquid_extensions/variable_spec.rb +25 -0
- data/spec/solid/model_drop_spec.rb +26 -0
- data/spec/solid/tag_spec.rb +26 -0
- data/spec/solid/template_spec.rb +37 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/support/class_highjacker_examples.rb +33 -0
- data/spec/support/method_whitelist_matchers.rb +17 -0
- data/spec/support/tag_highjacker_examples.rb +33 -0
- metadata +201 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
# FIXME: disabled for now
|
|
4
|
+
|
|
5
|
+
# describe Solid::LiquidExtensions::ForTag do
|
|
6
|
+
# it_should_behave_like 'a tag highjacker'
|
|
7
|
+
|
|
8
|
+
# context 'when Liquid::For is replaced' do
|
|
9
|
+
|
|
10
|
+
# before :each do
|
|
11
|
+
# described_class.load!
|
|
12
|
+
# end
|
|
13
|
+
|
|
14
|
+
# after :each do
|
|
15
|
+
# described_class.unload!
|
|
16
|
+
# end
|
|
17
|
+
|
|
18
|
+
# it 'should allow complex expression inside a for tag' do
|
|
19
|
+
# template = Solid::Template.parse(%(
|
|
20
|
+
# {% for foo in foos.concat(foos.reverse).flatten %}
|
|
21
|
+
# {{ foo }}
|
|
22
|
+
# {% endfor %}
|
|
23
|
+
# ))
|
|
24
|
+
# output = template.render('foos' => [1, 2, 3]).gsub(/[^\d]/, '')
|
|
25
|
+
# output.should be == '123321'
|
|
26
|
+
# end
|
|
27
|
+
|
|
28
|
+
# it 'should still provide the "forloop" object' do
|
|
29
|
+
# template = Solid::Template.parse(%(
|
|
30
|
+
# {% for foo in foos %}{{ forloop.first }},{{ forloop.index0 }}/{{ forloop.length }},{{ forloop.last }}|{% endfor %}
|
|
31
|
+
# ))
|
|
32
|
+
# output = template.render('foos' => [1, 2, 3]).strip
|
|
33
|
+
# output.should be == "true,0/3,false|false,1/3,false|false,2/3,true|"
|
|
34
|
+
# end
|
|
35
|
+
|
|
36
|
+
# it 'should consider all non iterable objects as empty arrays' do
|
|
37
|
+
# template = Solid::Template.parse(%(
|
|
38
|
+
# {% for foo in foos %}
|
|
39
|
+
# {{ foo }}
|
|
40
|
+
# {% endfor %}
|
|
41
|
+
# ))
|
|
42
|
+
# output = template.render('foos' => nil).strip
|
|
43
|
+
# output.should be == ''
|
|
44
|
+
# end
|
|
45
|
+
|
|
46
|
+
# end
|
|
47
|
+
|
|
48
|
+
# end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Solid::LiquidExtensions::IfTag do
|
|
4
|
+
it_should_behave_like 'a tag highjacker'
|
|
5
|
+
|
|
6
|
+
context 'when Liquid::If is replaced' do
|
|
7
|
+
|
|
8
|
+
before :each do
|
|
9
|
+
described_class.load!
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
after :each do
|
|
13
|
+
described_class.unload!
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'should allow complex expression inside an if tag' do
|
|
17
|
+
template = Solid::Template.parse(%(
|
|
18
|
+
{% if foo.include?('bar') %}
|
|
19
|
+
Hello !
|
|
20
|
+
{% endif %}
|
|
21
|
+
))
|
|
22
|
+
output = template.render('foo' => ' bar ').strip
|
|
23
|
+
output.should be == 'Hello !'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'should render nothing if the predicate return false' do
|
|
27
|
+
template = Solid::Template.parse(%(
|
|
28
|
+
{% if foo.include?('bar') %}
|
|
29
|
+
Hello !
|
|
30
|
+
{% endif %}
|
|
31
|
+
))
|
|
32
|
+
output = template.render('foo' => ' plop ').strip
|
|
33
|
+
output.should be == ''
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'should still accept an else tag' do
|
|
37
|
+
template = Solid::Template.parse(%(
|
|
38
|
+
{% if foo.include?('bar') %}
|
|
39
|
+
Hello !
|
|
40
|
+
{% else %}
|
|
41
|
+
Failed
|
|
42
|
+
{% endif %}
|
|
43
|
+
))
|
|
44
|
+
output = template.render('foo' => ' spam ').strip
|
|
45
|
+
output.should be == 'Failed'
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'should still accept some elsif tags' do
|
|
49
|
+
template = Solid::Template.parse(%(
|
|
50
|
+
{% if foo.include?('bar') %}
|
|
51
|
+
Hello !
|
|
52
|
+
{% elsif foo.include?('spam') %}
|
|
53
|
+
World !
|
|
54
|
+
{% else %}
|
|
55
|
+
Failed
|
|
56
|
+
{% endif %}
|
|
57
|
+
))
|
|
58
|
+
output = template.render('foo' => ' spam ').strip
|
|
59
|
+
output.should be == 'World !'
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Solid::LiquidExtensions::UnlessTag do
|
|
4
|
+
it_should_behave_like 'a tag highjacker'
|
|
5
|
+
|
|
6
|
+
context 'when Liquid::Unless is replaced' do
|
|
7
|
+
|
|
8
|
+
before :each do
|
|
9
|
+
described_class.load!
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
after :each do
|
|
13
|
+
described_class.unload!
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'should allow complex expression inside an unless tag' do
|
|
17
|
+
template = Solid::Template.parse(%(
|
|
18
|
+
{% unless foo.include?('bar') %}
|
|
19
|
+
Hello !
|
|
20
|
+
{% endunless %}
|
|
21
|
+
))
|
|
22
|
+
output = template.render('foo' => ' spam ').strip
|
|
23
|
+
output.should be == 'Hello !'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'should still accept an else tag' do
|
|
27
|
+
template = Solid::Template.parse(%(
|
|
28
|
+
{% unless foo.include?('bar') %}
|
|
29
|
+
Hello !
|
|
30
|
+
{% else %}
|
|
31
|
+
Failed
|
|
32
|
+
{% endunless %}
|
|
33
|
+
))
|
|
34
|
+
output = template.render('foo' => ' bar ').strip
|
|
35
|
+
output.should be == 'Failed'
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'should still accept some elsif tags' do
|
|
39
|
+
template = Solid::Template.parse(%(
|
|
40
|
+
{% unless foo.include?('spam') %}
|
|
41
|
+
Hello !
|
|
42
|
+
{% elsif foo.include?('spam') %}
|
|
43
|
+
World !
|
|
44
|
+
{% else %}
|
|
45
|
+
Failed
|
|
46
|
+
{% endunless %}
|
|
47
|
+
))
|
|
48
|
+
output = template.render('foo' => ' spam ').strip
|
|
49
|
+
output.should be == 'World !'
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Solid::LiquidExtensions::Variable do
|
|
4
|
+
it_should_behave_like 'a class highjacker'
|
|
5
|
+
|
|
6
|
+
context 'real world example' do
|
|
7
|
+
|
|
8
|
+
before :each do
|
|
9
|
+
described_class.load!
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
after :each do
|
|
13
|
+
described_class.unload!
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
let(:template) { template = Solid::Template.parse('{{ foo.include?("bar") | upcase }}') }
|
|
17
|
+
|
|
18
|
+
it 'should allow method call with arguments in variables brackets' do
|
|
19
|
+
template.render('foo' => 'egg bar spam').should be == 'TRUE'
|
|
20
|
+
template.render('foo' => '').should be == 'FALSE'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'active_support/core_ext'
|
|
3
|
+
require 'ostruct'
|
|
4
|
+
Rails = OpenStruct.new(env: OpenStruct.new(test?: true))
|
|
5
|
+
require 'solid/model_drop'
|
|
6
|
+
|
|
7
|
+
describe Solid::ModelDrop do
|
|
8
|
+
describe "array methods" do
|
|
9
|
+
|
|
10
|
+
it "work on a drop" do
|
|
11
|
+
drop = described_class.new([1, 2, 3])
|
|
12
|
+
drop.reverse.should be == [3, 2, 1]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "go through #each" do
|
|
16
|
+
klass = Class.new(described_class) do
|
|
17
|
+
def each
|
|
18
|
+
super.select(&:odd?)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
drop = klass.new([1, 2, 3])
|
|
22
|
+
drop.reverse.should be == [3, 1]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class DummyTag < Solid::Tag
|
|
4
|
+
|
|
5
|
+
def display(*args)
|
|
6
|
+
args.inspect
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe Solid::Tag do
|
|
12
|
+
|
|
13
|
+
it_behaves_like "a Solid element"
|
|
14
|
+
|
|
15
|
+
subject{ DummyTag.new('dummy', '1, "foo", myvar, myopts: false', 'token') }
|
|
16
|
+
|
|
17
|
+
it 'should works' do
|
|
18
|
+
subject.render('myvar' => 'bar').should be == '[1, "foo", "bar", {:myopts=>false}]'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'should send all parsed arguments do #display' do
|
|
22
|
+
subject.should_receive(:display).with(1, 'foo', 'bar', :myopts => false).and_return('result')
|
|
23
|
+
subject.render('myvar' => 'bar').should be == 'result'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Solid::Template do
|
|
4
|
+
|
|
5
|
+
let(:liquid) { %{first_string{% comment %}
|
|
6
|
+
{% if foo %}ifcontent{% endif %}
|
|
7
|
+
{% if foo %}ifsecondcontent{% endif %}
|
|
8
|
+
{% endcomment %}
|
|
9
|
+
{% unless foo %}unlesscontent{% endunless %}
|
|
10
|
+
|
|
11
|
+
} }
|
|
12
|
+
|
|
13
|
+
let(:template) { Solid::Template.parse(liquid) }
|
|
14
|
+
|
|
15
|
+
specify { subject.should be_an(Enumerable) }
|
|
16
|
+
|
|
17
|
+
describe '#each' do
|
|
18
|
+
|
|
19
|
+
let(:yielded_nodes) do
|
|
20
|
+
[].tap do |nodes|
|
|
21
|
+
template.each{ |node| nodes << node }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
let(:yielded_classes) { yielded_nodes.map(&:class) }
|
|
26
|
+
|
|
27
|
+
it 'should yield parent nodes before child nodes' do
|
|
28
|
+
yielded_classes.index(Liquid::Comment).should be < yielded_classes.index(Liquid::If)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'should yield first sibling first (No ! really ? ...)' do
|
|
32
|
+
yielded_classes.index(Liquid::Comment).should be < yielded_classes.index(Liquid::Unless)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
require 'rspec'
|
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'solid'))
|
|
3
|
+
|
|
4
|
+
RSpec.configure do |c|
|
|
5
|
+
c.mock_with :rspec
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
Dir[File.join(File.dirname(__FILE__), '/**/*_examples.rb'), File.join(File.dirname(__FILE__), '/**/*_matchers.rb')].each{ |f| require f }
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
shared_examples "a class highjacker" do
|
|
2
|
+
|
|
3
|
+
context 'class highjacking' do
|
|
4
|
+
|
|
5
|
+
let(:highjacked_class_name) { "Liquid::#{described_class.demodulized_name}" }
|
|
6
|
+
|
|
7
|
+
def highjacked_class
|
|
8
|
+
highjacked_class_name.split('::').inject(Object) { |klass, const_name| klass.const_get(const_name) }
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
after :each do
|
|
12
|
+
described_class.unload!
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
let!(:original_class_id) { highjacked_class.object_id }
|
|
16
|
+
|
|
17
|
+
it 'should be able to replace original class' do
|
|
18
|
+
expect{
|
|
19
|
+
described_class.load!
|
|
20
|
+
}.to change{ highjacked_class.object_id }.from(original_class_id).to(described_class.object_id)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should be able to restore original class' do
|
|
24
|
+
described_class.load!
|
|
25
|
+
expect{
|
|
26
|
+
described_class.unload!
|
|
27
|
+
}.to change{ highjacked_class.object_id }.from(described_class.object_id).to(original_class_id)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
RSpec::Matchers.define :safely_respond_to do |method_name|
|
|
2
|
+
match do |object|
|
|
3
|
+
Solid::MethodWhitelist.safely_respond_to?(object, method_name)
|
|
4
|
+
end
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def it_should_safely_respond_to(*methods)
|
|
8
|
+
methods.each do |method|
|
|
9
|
+
it { should safely_respond_to method }
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def it_should_not_safely_respond_to(*methods)
|
|
14
|
+
methods.each do |method|
|
|
15
|
+
it { should_not safely_respond_to method }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
shared_examples "a tag highjacker" do
|
|
2
|
+
|
|
3
|
+
context 'tag highjacking' do
|
|
4
|
+
|
|
5
|
+
let(:highjacked_tag_name) { described_class.tag_name.to_s }
|
|
6
|
+
|
|
7
|
+
def highjacked_tag
|
|
8
|
+
Liquid::Template.tags[highjacked_tag_name]
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
after :each do
|
|
12
|
+
described_class.unload!
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
let!(:original_tag_id) { highjacked_tag.object_id }
|
|
16
|
+
|
|
17
|
+
it 'should be able to replace original tag class' do
|
|
18
|
+
expect{
|
|
19
|
+
described_class.load!
|
|
20
|
+
}.to change{ highjacked_tag.object_id }.from(original_tag_id).to(described_class.object_id)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'should be able to restore original tag class' do
|
|
24
|
+
described_class.load!
|
|
25
|
+
expect{
|
|
26
|
+
described_class.unload!
|
|
27
|
+
}.to change{ highjacked_tag.object_id }.from(described_class.object_id).to(original_tag_id)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: locomotivecms_solid
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.2.1
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Jean Boussier
|
|
9
|
+
- Yannick François
|
|
10
|
+
- Didier Lafforgue
|
|
11
|
+
autorequire:
|
|
12
|
+
bindir: bin
|
|
13
|
+
cert_chain: []
|
|
14
|
+
date: 2013-08-19 00:00:00.000000000 Z
|
|
15
|
+
dependencies:
|
|
16
|
+
- !ruby/object:Gem::Dependency
|
|
17
|
+
name: rspec
|
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
|
19
|
+
none: false
|
|
20
|
+
requirements:
|
|
21
|
+
- - ! '>='
|
|
22
|
+
- !ruby/object:Gem::Version
|
|
23
|
+
version: '0'
|
|
24
|
+
type: :development
|
|
25
|
+
prerelease: false
|
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
27
|
+
none: false
|
|
28
|
+
requirements:
|
|
29
|
+
- - ! '>='
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '0'
|
|
32
|
+
- !ruby/object:Gem::Dependency
|
|
33
|
+
name: rake
|
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
|
35
|
+
none: false
|
|
36
|
+
requirements:
|
|
37
|
+
- - ! '>='
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
40
|
+
type: :development
|
|
41
|
+
prerelease: false
|
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
43
|
+
none: false
|
|
44
|
+
requirements:
|
|
45
|
+
- - ! '>='
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
- !ruby/object:Gem::Dependency
|
|
49
|
+
name: i18n
|
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
|
51
|
+
none: false
|
|
52
|
+
requirements:
|
|
53
|
+
- - ! '>='
|
|
54
|
+
- !ruby/object:Gem::Version
|
|
55
|
+
version: '0'
|
|
56
|
+
type: :development
|
|
57
|
+
prerelease: false
|
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
59
|
+
none: false
|
|
60
|
+
requirements:
|
|
61
|
+
- - ! '>='
|
|
62
|
+
- !ruby/object:Gem::Version
|
|
63
|
+
version: '0'
|
|
64
|
+
- !ruby/object:Gem::Dependency
|
|
65
|
+
name: activesupport
|
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
|
67
|
+
none: false
|
|
68
|
+
requirements:
|
|
69
|
+
- - ~>
|
|
70
|
+
- !ruby/object:Gem::Version
|
|
71
|
+
version: '3'
|
|
72
|
+
type: :development
|
|
73
|
+
prerelease: false
|
|
74
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
75
|
+
none: false
|
|
76
|
+
requirements:
|
|
77
|
+
- - ~>
|
|
78
|
+
- !ruby/object:Gem::Version
|
|
79
|
+
version: '3'
|
|
80
|
+
- !ruby/object:Gem::Dependency
|
|
81
|
+
name: locomotive_liquid
|
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
|
83
|
+
none: false
|
|
84
|
+
requirements:
|
|
85
|
+
- - ~>
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: 2.4.2
|
|
88
|
+
type: :runtime
|
|
89
|
+
prerelease: false
|
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
91
|
+
none: false
|
|
92
|
+
requirements:
|
|
93
|
+
- - ~>
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: 2.4.2
|
|
96
|
+
description: The Solid gem from the TigerLily team but modified to work with LocomotiveCMS
|
|
97
|
+
email:
|
|
98
|
+
- jean.boussier@tigerlilyapps.com
|
|
99
|
+
- yannick@tigerlilyapps.com
|
|
100
|
+
- didier.lafforgue@gmail.com
|
|
101
|
+
executables: []
|
|
102
|
+
extensions: []
|
|
103
|
+
extra_rdoc_files: []
|
|
104
|
+
files:
|
|
105
|
+
- .gitignore
|
|
106
|
+
- .rspec
|
|
107
|
+
- .rvmrc
|
|
108
|
+
- .travis.yml
|
|
109
|
+
- Gemfile
|
|
110
|
+
- LICENSE
|
|
111
|
+
- README.md
|
|
112
|
+
- Rakefile
|
|
113
|
+
- lib/locomotivecms_solid.rb
|
|
114
|
+
- lib/solid.rb
|
|
115
|
+
- lib/solid/arguments.rb
|
|
116
|
+
- lib/solid/block.rb
|
|
117
|
+
- lib/solid/conditional_block.rb
|
|
118
|
+
- lib/solid/context_error.rb
|
|
119
|
+
- lib/solid/default_security_rules.rb
|
|
120
|
+
- lib/solid/element.rb
|
|
121
|
+
- lib/solid/engine.rb
|
|
122
|
+
- lib/solid/extensions.rb
|
|
123
|
+
- lib/solid/iterable.rb
|
|
124
|
+
- lib/solid/liquid_extensions.rb
|
|
125
|
+
- lib/solid/liquid_extensions/assign_tag.rb
|
|
126
|
+
- lib/solid/liquid_extensions/for_tag.rb
|
|
127
|
+
- lib/solid/liquid_extensions/if_tag.rb
|
|
128
|
+
- lib/solid/liquid_extensions/unless_tag.rb
|
|
129
|
+
- lib/solid/liquid_extensions/variable.rb
|
|
130
|
+
- lib/solid/method_whitelist.rb
|
|
131
|
+
- lib/solid/model_drop.rb
|
|
132
|
+
- lib/solid/parser.rb
|
|
133
|
+
- lib/solid/tag.rb
|
|
134
|
+
- lib/solid/template.rb
|
|
135
|
+
- lib/solid/version.rb
|
|
136
|
+
- locomotivecms_solid.gemspec
|
|
137
|
+
- spec/solid/arguments_spec.rb
|
|
138
|
+
- spec/solid/block_spec.rb
|
|
139
|
+
- spec/solid/conditional_block_spec.rb
|
|
140
|
+
- spec/solid/default_security_rules_spec.rb
|
|
141
|
+
- spec/solid/element_examples.rb
|
|
142
|
+
- spec/solid/liquid_extensions/assign_tag_spec.rb
|
|
143
|
+
- spec/solid/liquid_extensions/for_tag_spec.rb
|
|
144
|
+
- spec/solid/liquid_extensions/if_tag_spec.rb
|
|
145
|
+
- spec/solid/liquid_extensions/unless_tag_spec.rb
|
|
146
|
+
- spec/solid/liquid_extensions/variable_spec.rb
|
|
147
|
+
- spec/solid/model_drop_spec.rb
|
|
148
|
+
- spec/solid/tag_spec.rb
|
|
149
|
+
- spec/solid/template_spec.rb
|
|
150
|
+
- spec/spec_helper.rb
|
|
151
|
+
- spec/support/class_highjacker_examples.rb
|
|
152
|
+
- spec/support/method_whitelist_matchers.rb
|
|
153
|
+
- spec/support/tag_highjacker_examples.rb
|
|
154
|
+
homepage: ''
|
|
155
|
+
licenses: []
|
|
156
|
+
post_install_message:
|
|
157
|
+
rdoc_options: []
|
|
158
|
+
require_paths:
|
|
159
|
+
- lib
|
|
160
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
|
+
none: false
|
|
162
|
+
requirements:
|
|
163
|
+
- - ! '>='
|
|
164
|
+
- !ruby/object:Gem::Version
|
|
165
|
+
version: '0'
|
|
166
|
+
segments:
|
|
167
|
+
- 0
|
|
168
|
+
hash: -2528832747906395320
|
|
169
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
|
+
none: false
|
|
171
|
+
requirements:
|
|
172
|
+
- - ! '>='
|
|
173
|
+
- !ruby/object:Gem::Version
|
|
174
|
+
version: '0'
|
|
175
|
+
segments:
|
|
176
|
+
- 0
|
|
177
|
+
hash: -2528832747906395320
|
|
178
|
+
requirements: []
|
|
179
|
+
rubyforge_project:
|
|
180
|
+
rubygems_version: 1.8.23
|
|
181
|
+
signing_key:
|
|
182
|
+
specification_version: 3
|
|
183
|
+
summary: Helpers for easily creating custom Liquid tags and block
|
|
184
|
+
test_files:
|
|
185
|
+
- spec/solid/arguments_spec.rb
|
|
186
|
+
- spec/solid/block_spec.rb
|
|
187
|
+
- spec/solid/conditional_block_spec.rb
|
|
188
|
+
- spec/solid/default_security_rules_spec.rb
|
|
189
|
+
- spec/solid/element_examples.rb
|
|
190
|
+
- spec/solid/liquid_extensions/assign_tag_spec.rb
|
|
191
|
+
- spec/solid/liquid_extensions/for_tag_spec.rb
|
|
192
|
+
- spec/solid/liquid_extensions/if_tag_spec.rb
|
|
193
|
+
- spec/solid/liquid_extensions/unless_tag_spec.rb
|
|
194
|
+
- spec/solid/liquid_extensions/variable_spec.rb
|
|
195
|
+
- spec/solid/model_drop_spec.rb
|
|
196
|
+
- spec/solid/tag_spec.rb
|
|
197
|
+
- spec/solid/template_spec.rb
|
|
198
|
+
- spec/spec_helper.rb
|
|
199
|
+
- spec/support/class_highjacker_examples.rb
|
|
200
|
+
- spec/support/method_whitelist_matchers.rb
|
|
201
|
+
- spec/support/tag_highjacker_examples.rb
|