def flag!(flaggable, reason = nil)
      check_flaggable(flaggable)

      if (flaggable_options[:flag_once] && fetch_flaggings(flaggable).try(:first))
        raise MakeFlaggable::Exceptions::AlreadyFlaggedError.new
      end

      Flagging.create(:flaggable => flaggable, :flagger => self, :reason => reason)
    end
def flag!(flaggable, reason = nil)
      check_flaggable(flaggable)

      if (flaggable_options[:flag_once] && fetch_flaggings(flaggable).try(:first))
        raise MakeFlaggable::Exceptions::AlreadyFlaggedError.new
      end

      Flagging.create(:flaggable => flaggable, :flagger => self, :reason => reason)
    end
Flag a +flaggable+ using the provided +reason+.
 Raises an +AlreadyFlaggedError+ if the flagger already flagged the flaggable and +:flag_once+ option is set.
 Raises an +InvalidFlaggableError+ if the flaggable is not a valid flaggable.