module ReeDao::DSL::ClassMethods
def dao(name, &proc)
def dao(name, &proc) if !block_given? raise Ree::Error.new("dao requires block to link specific db connection as :db => link :some_db, as: :db", :invalid_dsl_usage) end dsl = Ree::ObjectDsl.new( Ree.container.packages_facade, name, self, :object ) dsl.instance_exec(&proc) db_link = dsl.object.links.detect { _1.as == :db } if !db_link raise Ree::Error.new("dao should link specific db connection as :db => link :some_db, as: :db", :invalid_dsl_usage) end if dsl.object.factory? && dsl.object.factory != :build raise Ree::Error.new("dao DSL automatically assigns `factory :build` to object. Custom factory methods are not supported", :invalid_dsl_usage) end dsl.link(:build_dao, from: :ree_dao) dsl.factory(:build) dsl.singleton # automatically assign table name from object class table( ReeString::Underscore.new .call(self.name.split("::").last.gsub(/dao$/i, '')) .to_sym ) Ree.container.compile(dsl.package, name) end
def default_select_columns(columns)
def default_select_columns(columns) @default_select_columns = columns nil end
def filter(name, proc)
def filter(name, proc) filters = self.instance_variable_get(:@filters) if filters.nil? filters = [] self.instance_variable_set(:@filters, filters) end filters.push(DaoFilter.new(name, proc)) nil end
def primary_key(primary_key)
def primary_key(primary_key) @primary_key = primary_key nil end
def schema(dto_class, &proc)
def schema(dto_class, &proc) mapper_factory = ReeMapper.get_mapper_factory( Object.const_get(self.name.split('::').first) ) mapper = mapper_factory .call .use(:db_dump) .use(:db_load, dto: dto_class, &proc) self.instance_variable_set(:@schema_mapper, mapper) nil end
def table(table_name)
def table(table_name) @table = table_name end