module ReeDao::DSL::InstanceMethods

def build

def build
  dataset_class = db.dataset_class
  klass = self.class.const_set(:Dao, Class.new(dataset_class))
  filters = self.class.instance_variable_get(:@filters) || []
  filters.each do |filter|
    klass.define_method(filter.name, &filter.proc)
  end
  db.dataset_class = klass
  dao = build_dao(
    connection: db,
    table_name: self.class.instance_variable_get(:@table),
    mapper: get_schema_mapper,
    primary_key: self.class.instance_variable_get(:@primary_key),
    default_select_columns: self.class.instance_variable_get(:@default_select_columns),
  )
  db.dataset_class = dataset_class
  dao
end

def get_schema_mapper

def get_schema_mapper
  mapper = self
    .class
    .instance_variable_get(:@schema_mapper)
  if mapper.nil?
    raise Ree::Error.new("Dao schema mapper is not set. Use `schema` DSL to define it", :invalid_dsl_usage)
  end
  mapper
end