0.0
The project is in a healthy, maintained state
Expressions evaluate into useful objects via a query builder like interface
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies
 Project Readme

Gem version

Expressions logo

Expressions

Expressions evaluate into useful objects via a query builder like interface.

Expressions provides an API for expression types. You can build your own Expression, or use expressions created via the gems below:

Type Expression

# Via method definition:
def method(my_var: MyType); end

# Via type() helper:
my_var = type MyType | fetch_my_object(id: 123)

my_var is now type checked to be of type MyType when assigned to.

ℹ️ Requires: LowType

Dependency Expression

def method(my_var: Dependency); end

my_var is now automatically assigned to via dependency injection.

ℹ️ Requires: LowType and Providers

Data Expression [UNRELEASED]

The table expression inverts the usual database query logic. Instead of building a query of what we want from the database, we build the table we want and let the expression build the query.

class PostsData < LowData
  def all
    Table[:username, :title, :body]
  end
end

This expression joins the posts table with the users table without any joins from the user's perspective.

class PostsData < LowData
  def all
    Users[:username] + Posts[:title, :body]
  end
end

The above expression generates SQL to join the user table with the posts table and results in a list of posts with the user's username included in each row.

ℹ️ Requires: LowData

API

Inherit from Expressions::Expression and define a hook/callback:

Hook / callback method Trigger
def union_expression(expression) MyExpression | MyExpression[]
def union_value(value) MyExpression | :my_value
def union_type(type) MyExpression | MyType
def gt_expression(expression) MyExpression > MyExpression[]
def gt_value(value) MyExpression > :my_value
def gt_type(type) MyExpression > MyType
def gt_or_et_expression(expression) MyExpression >= MyExpression[]
def gt_or_et_value(value) MyExpression >= :my_value
def gt_or_et_type(type) MyExpression >= MyType
def lt_expression(expression) MyExpression < MyExpression[]
def lt_value(value) MyExpression < :my_value
def lt_type(type) MyExpression < MyType
def lt_or_et_expression(expression) MyExpression <= MyExpression[]
def lt_or_et_value(value) MyExpression <= :my_value
def lt_or_et_type(type) MyExpression <= MyType

Installation

Gems using Expressions will do this step for you, but if you'd like to build your own expression then add gem 'expressions' to your Gemfile and run:

bundle install