Class: ColumnSifter::Base

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/column_sifter/base.rb,
lib/column_sifter/base/lexer.rb,
lib/column_sifter/base/parser.rb,
lib/column_sifter/base/result.rb,
lib/column_sifter/base/compiler.rb

Defined Under Namespace

Classes: Compiler, Lexer, ParseError, Parser, Result

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBase

Returns a new instance of Base.



13
14
15
# File 'lib/column_sifter/base.rb', line 13

def initialize
  @result = Result.new
end

Class Method Details

.model(model = nil) ⇒ Object



30
31
32
33
# File 'lib/column_sifter/base.rb', line 30

def model(model = nil)
  @model = model if model
  @model ||= Object.const_get(name.split('::').last.delete_suffix('Sifter'))
end

.searchable_columns(*columns) ⇒ Object



35
36
37
38
# File 'lib/column_sifter/base.rb', line 35

def searchable_columns(*columns)
  @searchable_columns = columns.map(&:to_s).freeze if columns.any?
  @searchable_columns || raise(NotImplementedError, "#{self}.searchable_columns must be declared")
end

Instance Method Details

#sift!(input) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/column_sifter/base.rb', line 17

def sift!(input)
  tokens = Lexer.new(input).tokenize
  ast = Parser.new(tokens).parse
  sql_template, *binds = Compiler.new(self.class.searchable_columns, self.class.model).compile(ast)
  @result.input = input
  @result.sql_template = sql_template
  @result.binds = binds
rescue ParseError => e
  @result.input = input
  @result.error = e.message
end