spec/praxis-blueprints/view_spec.rb in praxis-blueprints-1.3.1 vs spec/praxis-blueprints/view_spec.rb in praxis-blueprints-2.0

- old
+ new

@@ -10,14 +10,14 @@ attribute :name attribute :alive attribute :address, view: :state end end + let(:dumping_options){ {} } + subject(:output) { view.to_hash(person, dumping_options ) } - subject(:output) { view.to_hash(person) } - it 'can generate examples' do view.example.should have_key(:name) end context 'swanky rendering options' do @@ -51,24 +51,37 @@ output.key?(:name).should be(true) output.key?(:email).should_not be(true) output.key?(:age).should_not be(true) output.key?(:address).should_not be(true) end + + context 'and custom field rendering' do + let(:data) { {name: 'Bob', email: 'bob@acme.org', age: 50 } } + + context 'renders only the specified fields that have values' do + let(:dumping_options){ { fields: {name: nil, email: nil} } } + its(:keys){ should == [:name, :email] } + end + + context 'renders only the specified fields excluding nil valued ones' do + let(:dumping_options){ { fields: {name: nil, address: nil} } } + its(:keys){ should == [:name] } + end + end end + context 'with include_nil: true' do let(:view) do Praxis::View.new(:info, Person, include_nil: true) do attribute :name attribute :email attribute :age attribute :address end end - subject(:output) { view.to_hash(person) } - it 'includes attributes with nil values' do output.key?(:email).should be(true) output[:email].should be(nil) output.key?(:address).should be(true) @@ -76,13 +89,20 @@ output.key?(:age).should be(true) output[:age].should be(nil) end + context 'and custom field rendering' do + let(:data) { {name: 'Bob', email: 'bob@acme.org', age: 50 } } + + context 'renders only the specified fields including nil valued' do + let(:dumping_options){ { fields: {name: nil, address: nil}} } + its(:keys){ should == [:name,:address] } + end + end end - end context 'direct attributes' do @@ -198,10 +218,25 @@ end it { should eq expected_output } + context 'using the fields option' do + let(:dumping_options){ { fields: {name: nil, address: {state: nil} } } } + + let(:expected_output) do + { + :name => person.name, + :address => { + :state => address.state + } + } + end + + it { should eq expected_output } + end + end context 'specifying a view' do let(:view) do @@ -281,11 +316,11 @@ end let(:expected_output) do { :name => person.name, - :prior_addresses => person.prior_addresses.collect { |a| a.to_hash(:default)} + :prior_addresses => person.prior_addresses.collect { |a| a.to_hash(view: :default)} } end it { should eq expected_output } end @@ -300,10 +335,10 @@ end let(:expected_output) do { :name => person.name, - :prior_addresses => person.prior_addresses.collect { |a| a.to_hash(:state)} + :prior_addresses => person.prior_addresses.collect { |a| a.to_hash(view: :state)} } end it { should eq expected_output } end