Grape::Entities, how to expose property only for writing

1.1k Views Asked by At

how can i expose revision property of VehicleDetails that will not appear on GET request, but will be obligatory on PATCH/POST (only writing operations)?

class VehicleDetails < Grape::Entity
  expose :id
  expose :name
  expose :type
  expose :revision
end
1

There are 1 best solutions below

0
On
vehicle = { id: 1, name: 'LADA', type: 'washbowl', revision: 15 }

class VehicleDetails < Grape::Entity
  expose :id
  expose :name
  expose :type
  expose :revision, if: lambda { |vehicle, options| options[:show_rev] }
end

VehicleDetails.represent(vehicle, show_rev: true).as_json
# => {:id=>1, :name=>"LADA", :type=>"washbowl", :revision=>15}

VehicleDetails.represent(vehicle).as_json
# => {:id=>1, :name=>"LADA", :type=>"washbowl"}

VehicleDetails.represent(vehicle, show_rev: false).as_json
# => {:id=>1, :name=>"LADA", :type=>"washbowl"}

# # or
# present vehicle with: VehicleDetails, show_rev: true