Extends the esse search to use jbuilder as the default template engine.
Add this line to your application's Gemfile:
gem 'esse-jbuilder'And then execute:
$ bundle installThis gem adds the search_view_path configuration option to the Esse::Config class.
Esse.configure do |config|
config.search_view_path = 'app/searches'
endThis options is used to set the default path where the search templates are located. The default value is app/searches.
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
endexample 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
endFor 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
jbuildertemplate 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).resultsAfter 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.
Bug reports and pull requests are welcome on GitHub at https://github.com/marcosgz/esse-jbuilder.
The gem is available as open source under the terms of the MIT License.