Skip to content

teacherseat/querylet-rails

Repository files navigation

Querylet Rails

What is Querylet?

Querylet is a query template langauge for Postgres to ease working with complex queries eg.

Similar to handlebars but a much simpler langague and specfically designed for postgre queries.

{{#if count}}
{{> include 'admin.shared.paginate_select'}}
{{/else}}
{{> include 'admin.users.select'}}
{{/if}}
FROM users
WHERE true
AND 'customer' != ANY(users.role)
{{#if search}}
  AND (
    (coalesce(users.first_name, '') || ' ' || coalesce(users.last_name, '') ILIKE {{wild search}})
    OR users.email ILIKE {{wild search}}
  )
{{/if}}
{{#unless count}}
{{#if sort}}
ORDER BY {{sort}}
{{/else}}
ORDER BY users.id ASC
{{/if}}
{{> include 'admin.shared.paginate_offset'}}
{{/unless}}

What is Querylet Rails?

Querylet Rails helps configure querylet for use in a Rails application.

It contains two files:

  • querylet_rails/controller/queryable.rb (QueryletRails::Controller::Queryable)
  • querylet_rails/model/queryable.rb (QueryletRails::Model::Queryable)

QueryletRails::Controller::Queryable

This module is a Rails Controller Concerns to include your ApplicationController

It defines the following controller methods:

  • set_pagination_headers
  • render_paginated
  • render_paginated_json
  • index_params

QueryletRails::Model::Queryable

This module is a Rails Model Concerns to include your ApplicationRecord

It defines the following model methods:

  • select_value and self.select_value
  • select_values and self.select_values
  • select_object and self.select_object
  • select_array and self.select_array
  • select_all and self.select_all
  • select_paginate and self.select_paginate
  • self.query_root
  • self.query
  • self.query_compile_template
  • self.query_wrap_object
  • self.query_wrap_array

How to Install

Create a queries directory eg.

Create a directory to contain your queries

mkdir app/queries

Include QueryletRails::Controller::Queryable in your ApplicationController

require 'querylet_rails/controller/queryable'
class ApplicationController < ActionController::Base
  include QueryletRails::Controller::Queryable
end

Include QueryletRails::Model::Queryablek in your ApplicationRecord

require 'querylet_rails/model/queryable'
class ApplicationRecord < ActiveRecord::Base
  include QueryletRails::Model::Queryable
end

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages