class ActsInRelation::Roles::Source

Public Instance Methods

define() click to toggle source
# File lib/acts_in_relation/roles/source.rb, line 4
      def define
        actions.each do |action|
          @class.class_eval <<-RUBY
            has_many :"#{action.pluralize}",
              foreign_key: :"#{source}_id",
              dependent: :destroy

            has_many :"#{progressize(action)}",
              through: :"#{action.pluralize}",
              source: :"target_#{target}"

            def #{action}(target)
              return if #{progressize(action)}?(target) || (self == target)

              #{action.pluralize}.create(target_#{target}_id: target.id)
            end

            def un#{action}(target)
              return unless #{progressize(action)}?(target)

              #{action.pluralize}.find_by(target_#{target}_id: target.id).destroy
            end

            def #{progressize(action)}?(target)
              #{action.pluralize}.exists?(target_#{target}_id: target.id)
            end
          RUBY
        end
      end