class Roda::RodaPlugins::Rodauth::DSL
def _def_auth_method(meth, &block)
def _def_auth_method(meth, &block) @auth.send(:define_method, meth, &block) end
def def_auth_block_method(meth)
def def_auth_block_method(meth) define_sclass_method(meth) do |&block| _def_auth_method(meth){block} end end
def def_auth_method(meth)
def def_auth_method(meth) define_sclass_method(meth) do |&block| _def_auth_method(meth, &block) end end
def def_auth_value_method(meth)
def def_auth_value_method(meth) define_sclass_method(meth) do |*v, &block| v = v.first block ||= proc{v} _def_auth_method(meth, &block) end end
def define_sclass_method(meth, &block)
def define_sclass_method(meth, &block) (class << self; self end).send(:define_method, meth, &block) end
def enable(*features)
def enable(*features) new_features = features - @auth.features new_features.each{|f| load_feature(f)} @auth.features.concat(new_features) end
def initialize(auth, &block)
def initialize(auth, &block) @auth = auth load_feature(:base) instance_exec(&block) end
def load_feature(feature_name)
def load_feature(feature_name) require "roda/plugins/rodauth/#{feature_name}" feature = FEATURES[feature_name] enable(*feature.dependencies) DSL_META_TYPES.each do |type| feature.send(:"#{type}_methods").each{|m| send(:"def_#{type}_method", m)} end if get_block = feature.get_block def_auth_block_method :"#{feature_name}_get_block" _def_auth_method(:"#{feature_name}_get_block"){get_block} end if post_block = feature.post_block def_auth_block_method :"#{feature_name}_post_block" _def_auth_method(:"#{feature_name}_post_block"){post_block} end route_block = feature.route_block if route_block || (get_block && post_block) check_before_meth = :"check_before_#{feature_name}" before_meth = :"before_#{feature_name}" def_auth_block_method :"#{feature_name}_route_block" route_block ||= proc do |r, auth| r.is auth.send(:"#{feature_name}_route") do auth.check_before(feature) auth.send(before_meth) r.get do instance_exec(r, auth, &auth.send(:"#{feature_name}_get_block")) end r.post do instance_exec(r, auth, &auth.send(:"#{feature_name}_post_block")) end end end _def_auth_method(:"#{feature_name}_route_block"){route_block} _def_auth_method(before_meth){nil} def_auth_method(before_meth) @auth.route_block_methods << :"#{feature_name}_route_block" end @auth.send(:include, feature) end