Class: TocDoc::Availability

Inherits:
Resource show all
Extended by:
UriUtils
Defined in:
lib/toc_doc/models/availability.rb,
lib/toc_doc/models/availability/collection.rb

Overview

Represents a single availability date entry returned by the Doctolib API.

Examples:

avail = TocDoc::Availability.new('date' => '2026-02-28', 'slots' => ['2026-02-28T10:00:00.000+01:00'])
avail.date       #=> #<Date: 2026-02-28>
avail['date']    #=> "2026-02-28"
avail.slots      #=> [#<DateTime: 2026-02-28T10:00:00.000+01:00>]
avail['slots']   #=> ["2026-02-28T10:00:00.000+01:00"]

Defined Under Namespace

Classes: Collection

Constant Summary collapse

PATH =

API path for the availabilities endpoint.

Returns:

  • (String)
'/availabilities.json'

Instance Attribute Summary collapse

Attributes inherited from Resource

#attrs

Class Method Summary collapse

Instance Method Summary collapse

Methods included from UriUtils

dashed_ids

Methods inherited from Resource

#==, #[], #[]=, #attribute_names, #inspect, main_attrs, #method_missing, normalize_attrs, #to_h, #to_json

Constructor Details

#initialize(*attrs) ⇒ Availability

Returns a new instance of Availability.

Parameters:

  • attrs (Hash)

    raw attributes from the API response; expected to include a +date+ key (ISO 8601 date string) and a +slots+ key (Array of ISO 8601 datetime strings)



100
101
102
103
104
105
106
# File 'lib/toc_doc/models/availability.rb', line 100

def initialize(*attrs)
  super
  raw = build_raw(@attrs)

  @date = Date.parse(raw['date']) if raw['date']
  @slots = raw['slots'].map { |s| DateTime.parse(s) }
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class TocDoc::Resource

Instance Attribute Details

#dateDate? (readonly)

Returns the parsed availability date.

Returns:

  • (Date, nil)

    the parsed availability date



21
22
23
# File 'lib/toc_doc/models/availability.rb', line 21

def date
  @date
end

#slotsArray<DateTime> (readonly)

Returns the parsed slot datetimes.

Returns:

  • (Array<DateTime>)

    the parsed slot datetimes



24
25
26
# File 'lib/toc_doc/models/availability.rb', line 24

def slots
  @slots
end

Class Method Details

.where(visit_motive_ids:, agenda_ids:, start_date: Date.today, limit: TocDoc.per_page, **options) ⇒ TocDoc::Availability::Collection

Fetches availabilities from the API and returns an Collection.

When the API response contains a +next_slot+ key — indicating that no date in the current window has available slots — a second request is made automatically from that date before the collection is returned.

Examples:

TocDoc::Availability.where(
  visit_motive_ids: 7_767_829,
  agenda_ids: [1_101_600],
  start_date: Date.today
).each { |avail| puts avail.date }

Parameters:

  • visit_motive_ids (Integer, String, Array<Integer>)

    one or more visit-motive IDs (dash-joined for the API)

  • agenda_ids (Integer, String, Array<Integer>)

    one or more agenda IDs (dash-joined for the API)

  • start_date (Date, String) (defaults to: Date.today)

    earliest date to search from (default: +Date.today+)

  • limit (Integer) (defaults to: TocDoc.per_page)

    maximum availability dates per page (default: +TocDoc.per_page+)

  • options (Hash)

    additional query params forwarded verbatim to the API

Returns:



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/toc_doc/models/availability.rb', line 55

def where(visit_motive_ids:, agenda_ids:, start_date: Date.today,
          limit: TocDoc.per_page, **options)
  client = TocDoc.client
  depth  = TocDoc.pagination_depth
  query  = build_query(visit_motive_ids, agenda_ids, start_date, limit, options)
  data   = client.get(PATH, query: query)

  depth.times do
    break unless data['next_slot']

    merge_next_page(client, query, data)
  end

  Collection.new(data, query: query, path: PATH, client: client)
end