fix issue locomotivecms/engine#1154

did committed Jul 12, 2016
commit 72d1cf521cd4dbdc2d50efd34a3f5358671b3599
Showing 4 changed files with 44 additions and 10 deletions
locomotive/steam/liquid/drops/metafields.rb b/lib/locomotive/steam/liquid/drops/metafields.rb +8 -3
@@ @@ -22,7 +22,7 @@ module Locomotive
def find_value(name)
if field = fields[name]
- safe_value(t(values[name], field['localized']))
+ safe_value(t(values[name], field['localized']), field['type'])
else
Locomotive::Common::Logger.warn "[Liquid template] unknown site metafield \"#{name}\" under #{@namespace['name']}"
nil
@@ @@ -66,8 +66,13 @@ module Locomotive
value[key]
end
- def safe_value(value)
- value.blank? ? nil : value
+ def safe_value(value, type = 'string')
+ case type
+ when 'boolean'
+ ['1', 'true', true].include?(value) ? true : false
+ else
+ value.blank? ? nil : value
+ end
end
end
locomotive/steam/server.rb b/lib/locomotive/steam/server.rb +0 -1
@@ @@ -1,4 +1,3 @@
- # require 'haml'
require 'mimetype_fu'
require 'mime-types'
require 'mime/types'
spec/unit/decorators/template_decorator_spec.rb +1 -0
@@ @@ -1,4 +1,5 @@
require 'spec_helper'
+ require 'haml'
describe Locomotive::Steam::Decorators::TemplateDecorator do
spec/unit/liquid/drops/metafields_spec.rb +35 -6
@@ @@ -2,8 +2,8 @@ require 'spec_helper'
describe Locomotive::Steam::Liquid::Drops::Metafields do
- let(:metafields) { { 'my_namespace' => { 'analytics_id' => { 'default' => '42' }, 'street' => { 'en' => '7 Albert Camus Alley', 'fr' => '7 allée Albert Camus' } } } }
- let(:schema) { [ { 'name' => 'my_namespace', fields: [{ name: 'analytics_id', position: 1 }, { name: 'street', localized: true, position: 0 }, { name: 'country', :position => 2 }] }].as_json }
+ let(:metafields) { { 'my_namespace' => { 'visible' => { 'default' => '1' }, 'analytics_id' => { 'default' => '42' }, 'street' => { 'en' => '7 Albert Camus Alley', 'fr' => '7 allée Albert Camus' } } } }
+ let(:schema) { [ { 'name' => 'my_namespace', fields: [{ name: 'analytics_id', position: 1 }, { name: 'street', localized: true, position: 0 }, { name: 'country', :position => 2 }, { name: 'visible', type: 'boolean', position: 3 }] }].as_json }
let(:site) { instance_double('Site', metafields: metafields, metafields_schema: schema) }
let(:context) { ::Liquid::Context.new({}, {}, { locale: 'en' }) }
let(:drop) { described_class.new(site).tap { |d| d.context = context } }
@@ @@ -13,13 +13,13 @@ describe Locomotive::Steam::Liquid::Drops::Metafields do
let(:namespace) { drop.before_method(:my_namespace).tap { |d| d.context = context } }
it 'gives the number of the fields' do
- expect(namespace.size).to eq 3
+ expect(namespace.size).to eq 4
end
it 'iterates over the fields and keeps the order' do
list = []
namespace.each { |el| list << el['name'] }
- expect(list).to eq(['street', 'analytics_id', 'country'])
+ expect(list).to eq(['street', 'analytics_id', 'country', 'visible'])
end
end
@@ @@ -46,6 +46,37 @@ describe Locomotive::Steam::Liquid::Drops::Metafields do
end
+ context 'the field is a boolean' do
+
+ let(:boolean) { true }
+ let(:metafields) { { 'my_namespace' => { 'visible' => { 'default' => boolean } } } }
+
+ subject { namespace.before_method(:visible) }
+
+ it { is_expected.to eq true }
+
+ context '"true" is considered as true' do
+ let(:boolean) { 'true' }
+ it { is_expected.to eq true }
+ end
+
+ context '"1" is considered as true' do
+ let(:boolean) { '1' }
+ it { is_expected.to eq true }
+ end
+
+ context '"false" is considered as false' do
+ let(:boolean) { 'false' }
+ it { is_expected.to eq false }
+ end
+
+ context '"0" is considered as false' do
+ let(:boolean) { '0' }
+ it { is_expected.to eq false }
+ end
+
+ end
+
context 'not a localized field' do
context 'the value exists' do
@@ @@ -63,8 +94,6 @@ describe Locomotive::Steam::Liquid::Drops::Metafields do
end
-
-
context "the value doesn't exist" do
subject { namespace.before_method(:country) }