Esse Jbuilder Plugin
Extends the esse search to use jbuilder as the default template engine.
Installation
Add this line to your application's Gemfile:
gem 'esse-jbuilder'
And then execute:
$ bundle install
Configuration
This gem adds the search_view_path
configuration option to the Esse::Config
class.
Esse.configure do |config|
config.search_view_path = 'app/searches'
end
This options is used to set the default path where the search templates are located. The default value is app/searches
.
Usage
The block passed to the search
method will be evaluated in the context of a JbuilderTemplate
instance.
# Single index
@search = UsersIndex.search(params[:q]) do |json|
json.query do
json.match do
json.set! 'name', params[:q]
end
end
end
# Multiple indexes
@search = Esse.cluster.search(CitiesIndex, CountiesIndex) do |json|
json.query do
json.match do
json.set! 'name', params[:q]
end
end
end
example using partials
CitiesIndex.search do |json|
json.query do
json.bool do
json.must do
json.child! do
json.match do
json.set! 'name', params[:q]
end
end
if (states = params[:state_abbr])
json.child! do
json.partial! 'shared/terms_field', field: 'state_abbr', values: state_abbr
end
end
end
end
end
json.aggs do
json.states do
json.partial! 'shared/field_aggregation', field: 'state_abbr'
end
end
end
Rendering
For more advanced rendering, you can also use the standalone Esse::Jbuilder::Template
or Esse::Jbuilder::ViewTemplate
classes.
- Esse::Jbuilder::Template - This class is used to render a template block.
- Esse::Jbuilder::ViewTemplate - This class is used to render a template from a file. Note that you must have the
jbuilder
template handler registered in your Rails application.
This brings a very powerful to create searcher classes. Example:
class Searchers::CitiesSearcher
extend Forwardable
def_delegators :search, :results
def initialize(params)
@params = params.transform_keys(&:to_sym)
end
private
attr_reader :params
def search
CitiesIndex.search(body: body).limit(params[:limit] || 10).offset(params[:offset] || 0)
end
def body
Esse::Jbuilder::ViewTemplate.call('cities/search', **params)
end
end
Searchers::CitiesSearcher.new(params).results
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake none
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 the created tag, and push the .gem
file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/marcosgz/esse-jbuilder.
License
The gem is available as open source under the terms of the MIT License.