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