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) } | |