Halumi
 
One of the patterns in Rails development I find usefull are query objects. They are essantialy service objects returning a ActiveRecord Relation. Using them results in less code cluttering your controllers and models. Plus you can easily unit test each of your queries.
This Gem adds simple DSL allowing you to build query objects and than merge them into one query (ActiveRecord::Relation)
One of the cool patterns in Rails development are query objects. They are essantialy service objects returning a ActiveRecord Relation. Using them results in less code cluttering your controllers and models. Plus you can easily unit test each of your queries.
This Gem adds simple DSL allowing you to build query objects and than combining them into one query that will be executed against your database
Example usage
Define your 'super' query combining 3 subqueries
class ArticlesQuery < Halumi::Query
  model Article
  merge PaginationQuery
  merge PublishedArticlesQuery
  merge OrderArticlesQuery
end
class PaginationQuery < Halumi::Query
  param :per_page
  param :page
  def execute
    relation.page(page).per(per_page)
  end
end
class PublishedArticlesQuery
  def execute
    relation.where(published: true)
  end
end
class OrderArticlesQuery < Halumi::Query
  def execute
    relation.order(:created_at)
  end
end
Run your query
This will return published articles, paginated and sorted by creation time
  params = { page: 2, per_page: 10 }
    ArticlesQuery.new(params).call