From 0d199258adb23fe0ab08cc3c560e48f7bc6eaafb Mon Sep 17 00:00:00 2001 From: Andrew Myers Date: Thu, 10 May 2018 16:28:11 -0600 Subject: [PATCH] MultiValue gets values from object methods and attributes Closes #152. --- app/inputs/multi_value_input.rb | 2 +- spec/inputs/multi_value_input_spec.rb | 26 +++++++++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/inputs/multi_value_input.rb b/app/inputs/multi_value_input.rb index eeb4fdd..81871cd 100644 --- a/app/inputs/multi_value_input.rb +++ b/app/inputs/multi_value_input.rb @@ -75,7 +75,7 @@ def input_dom_id def collection @collection ||= begin - val = object[attribute_name] + val = object.send(attribute_name) col = val.respond_to?(:to_ary) ? val.to_ary : val col.reject { |value| value.to_s.strip.blank? } + [''] end diff --git a/spec/inputs/multi_value_input_spec.rb b/spec/inputs/multi_value_input_spec.rb index 75365ee..f27ad6a 100644 --- a/spec/inputs/multi_value_input_spec.rb +++ b/spec/inputs/multi_value_input_spec.rb @@ -3,19 +3,31 @@ describe 'MultiValueInput', type: :input do class Foo < ActiveFedora::Base property :bar, predicate: ::RDF::URI('http://example.com/bar') + + def double_bar + bar.map { |b| b+ b } + end end context 'happy case' do - let(:foo) { Foo.new } + let(:foo) do + Foo.new.tap { |f| f.bar = bar } + end let(:bar) { ['bar1', 'bar2'] } - subject do - foo.bar = bar - input_for(foo, :bar, as: :multi_value, required: true) + + context "for values from a property on the object" do + subject { input_for(foo, :bar, as: :multi_value, required: true) } + it 'renders multi-value' do + expect(subject).to have_selector('.form-group.foo_bar.multi_value label.required[for=foo_bar]', text: '* Bar') + expect(subject).to have_selector('.form-group.foo_bar.multi_value ul.listing li input.foo_bar', count: 3) + end end - it 'renders multi-value' do - expect(subject).to have_selector('.form-group.foo_bar.multi_value label.required[for=foo_bar]', text: '* Bar') - expect(subject).to have_selector('.form-group.foo_bar.multi_value ul.listing li input.foo_bar', count: 3) + context 'for values from a method on the object' do + subject { input_for(foo, :double_bar, as: :multi_value) } + it 'renders multi-value' do + expect(subject).to have_selector('.form-group.foo_double_bar.multi_value ul.listing li input.foo_double_bar', count: 3) + end end end