lib/arel/extensions/table.rb in arel_toolkit-0.3.0 vs lib/arel/extensions/table.rb in arel_toolkit-0.4.0
- old
+ new
@@ -1,20 +1,19 @@
# rubocop:disable Naming/MethodName
# rubocop:disable Naming/UncommunicativeMethodParamName
# rubocop:disable Metrics/ParameterLists
module Arel
- module Nodes
- Arel::Table.class_eval do
+ class Table
+ module TableExtension
# postgres only: https://www.postgresql.org/docs/9.5/sql-select.html
attr_accessor :only
- # postgres only: https://www.postgresql.org/docs/9.5/ddl-schemas.html
+ # postgres only: https://www.postgresql.org/docs/10/ddl-schemas.html
attr_accessor :schema_name
# postgres only: https://www.postgresql.org/docs/9.1/catalog-pg-class.html
attr_accessor :relpersistence
- alias_method :old_initialize, :initialize
def initialize(
name,
as: nil,
type_caster: nil,
only: false,
@@ -23,24 +22,58 @@
)
@only = only
@schema_name = schema_name
@relpersistence = relpersistence
- old_initialize(name, as: as, type_caster: type_caster)
+ super(name, as: as, type_caster: type_caster)
end
end
+
+ prepend TableExtension
end
module Visitors
class ToSql
- alias old_visit_Arel_Table visit_Arel_Table
- def visit_Arel_Table(o, collector)
- collector << 'ONLY ' if o.only
+ module TableExtension
+ def visit_Arel_Table(o, collector)
+ collector << 'ONLY ' if o.only
- collector << "\"#{o.schema_name}\"." if o.schema_name
+ case o.relpersistence
+ when 'p'
+ collector << ''
- old_visit_Arel_Table(o, collector)
+ when 'u'
+ collector << 'UNLOGGED '
+
+ when 't'
+ collector << 'TEMPORARY '
+
+ else
+ raise "Unknown relpersistence `#{o.relpersistence}`"
+ end
+
+ collector << "\"#{o.schema_name}\"." if o.schema_name
+
+ super
+ end
end
+
+ prepend TableExtension
+ end
+
+ class Dot
+ module TableExtension
+ def visit_Arel_Table(o)
+ super
+
+ visit_edge o, 'only'
+ visit_edge o, 'schema_name'
+ visit_edge o, 'relpersistence'
+ visit_edge o, 'type_caster'
+ end
+ end
+
+ prepend TableExtension
end
end
end
# rubocop:enable Naming/MethodName