class PgObjects::Parser

Reads directives from SQL-comments

--!depends_on [name_of_dependency]

name_of_dependency: short or full name of object as well as object_name

Constants

ROUTES

Public Class Methods

fetch_directives(text) click to toggle source
# File lib/pg_objects/parser.rb, line 25
def fetch_directives(text)
  {
    depends_on: fetch_dependencies(text)
  }
end
fetch_object_name(text) click to toggle source
# File lib/pg_objects/parser.rb, line 31
def fetch_object_name(text)
  parsed = PgQuery.parse(text).tree.dig(0, 'RawStmt', 'stmt')
  ROUTES.map { |route| parsed.dig(*route) }.compact[0]
rescue PgQuery::ParseError, NoMethodError
  nil
end

Private Class Methods

fetch_dependencies(text) click to toggle source
# File lib/pg_objects/parser.rb, line 40
def fetch_dependencies(text)
  text.split("\n").select { |ln| ln =~ /^(--|#)!/ }.map { |ln| ln.split[1] if ln =~ /!depends_on/ }.compact
end