Sha256: ab57a34b4cd0a1a68dd6e5b9e05bfac618001fbf3b2668554c0fa7e4928dde1a
Contents?: true
Size: 1.73 KB
Versions: 2
Compression:
Stored size: 1.73 KB
Contents
# frozen_string_literal: true package_require("ree_mapper/errors/type_error") package_require("ree_mapper/errors/coercion_error") module ReeActions module DSL def self.included(base) base.extend(ClassMethods) base.include(ReeMapper::DSL) base.include(Ree::Inspectable) end def self.extended(base) base.extend(ClassMethods) base.include(ReeMapper::DSL) end module ClassMethods include Ree::Contracts::Core include Ree::Contracts::ArgContracts def action(name, &proc) dsl = Ree::ObjectDsl.new( Ree.container.packages_facade, name, self, :fn ) dsl.instance_exec(&proc) if block_given? dsl.tags(["action"]) dsl.freeze(false) dsl.object.set_as_compiled(false) Ree.container.compile(dsl.package, name) end def method_added(method_name) return super if method_name != :call if @__original_call_defined remove_instance_variable(:@__original_call_defined) return end @__original_call_defined = true alias_method(:__original_call, :call) define_method :call do |user_access, attrs| if self.class.const_defined?(:ActionCaster) caster = self.class.const_get(:ActionCaster) if !caster.respond_to?(:cast) raise ArgumentError.new("ActionCaster does not respond to `cast` method") end attrs = begin caster.cast(attrs) rescue ReeMapper::TypeError, ReeMapper::CoercionError => e raise ReeActions::ParamError, e.message end end __original_call(user_access, attrs) end nil end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ree_lib-1.0.92 | lib/ree_lib/packages/ree_actions/package/ree_actions/dsl.rb |
ree_lib-1.0.91 | lib/ree_lib/packages/ree_actions/package/ree_actions/dsl.rb |