# CalInvite::Providers::BaseProvider

Base class for calendar providers that implements common functionality
and defines the interface that all providers must implement.

@abstract Subclass and override {#generate} to implement a calendar provider

_class_ defined in `lib/cal_invite/providers/base_provider.rb`

Superclass: `Object`

## Constants

### `NO_RSVP_METHODS`

Value: `%i[reply counter decline_counter].freeze`

### `PARTSTAT_VALUES`

Value: `{
        accepted: "ACCEPTED",
        declined: "DECLINED",
        tentative: "TENTATIVE",
        needs_action: "NEEDS-ACTION",
        delegated: "DELEGATED"
      }.freeze`

### `VISIBILITY_VALUES`

Value: `%w[PUBLIC PRIVATE CONFIDENTIAL].freeze`

### `IMPORTANCE_VALUES`

Value: `{ low: ["9", "0"], normal: ["5", "1"], high: ["1", "2"] }.freeze`

## Attributes

### `event` (R)

### `method` (R)

## Class methods

### `new(event, method: :publish)`

Initialize a new calendar provider

@param event [CalInvite::Event] The event to generate a calendar URL for
@param method [Symbol] The iCalendar METHOD (:publish or :request). Only
  meaningful to the ics-family providers; URL-based providers ignore it.

## Instance methods

### `generate()`

Generate a calendar URL or content for the event.
This method must be implemented by all provider subclasses.

@abstract
@return [String] The generated calendar URL or content
@raise [NotImplementedError] if the provider class doesn't implement this method
