When using ActiveModelSerializers, filter out attributes values instead of writing a ton of conditionals to change them.
class ProductSerializer < ApplicationSerializer
include ActiveModelSerializers::FilterableAttributes
attributes :id, :price_in_cents
filter_attribute :price_in_cents, unless: :user_signed_in? do
"Sign in to see the price"
end
private
def user_signed_in?
scope.nil?
end
end
product = Product.find(params[:id])
render json: ProductSerializer.new(product, scope: current_user).to_json
Add this line to your application's Gemfile:
gem 'filterable_attributes'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install filterable_attributes
- Add
include ActiveModelSerializers::FilterableAttributes
to your serializer - Use
filter_attribute :price_in_cents
orfilter_attributes :price_in_cents, :tax_in_cents
followed by options - Enjoy not having a mess of conditionals
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/joshmn/filterable_attributes. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
The gem is available as open source under the terms of the MIT License.