Class: TocDoc::Search::Result

Inherits:
Object
  • Object
show all
Defined in:
lib/toc_doc/models/search/result.rb

Overview

Envelope returned by where when no type: filter is given.

Wraps the raw API response and exposes typed collections for profiles and specialities. Unlike Availability::Collection this class does NOT include Enumerable — the dual-type nature of the result does not lend itself to a single iteration interface.

Examples:

result = TocDoc::Search.where(query: 'dentiste')
result.profiles      #=> [#<TocDoc::Profile::Practitioner>, ...]
result.specialities  #=> [#<TocDoc::Speciality>, ...]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data) ⇒ Result

Returns a new instance of Result.

Parameters:

  • data (Hash)

    raw parsed response body from the autocomplete endpoint



21
22
23
24
# File 'lib/toc_doc/models/search/result.rb', line 21

def initialize(data)
  @profiles     = build_profiles(data['profiles'])
  @specialities = build_specialities(data['specialities'])
end

Instance Attribute Details

#profilesArray<TocDoc::Profile::Practitioner, TocDoc::Profile::Organization> (readonly)

All profile results, typed as Profile::Practitioner or Profile::Organization via Profile.build.



30
31
32
# File 'lib/toc_doc/models/search/result.rb', line 30

def profiles
  @profiles
end

#specialitiesArray<TocDoc::Speciality> (readonly)

All speciality results as TocDoc::Speciality instances.

Returns:



35
36
37
# File 'lib/toc_doc/models/search/result.rb', line 35

def specialities
  @specialities
end

Instance Method Details

#filter_by_type(type) ⇒ Array<TocDoc::Profile>, Array<TocDoc::Speciality>

Returns a subset of results narrowed to the given type.

Parameters:

  • type (String)

    one of 'profile', 'practitioner', 'organization', 'speciality'

Returns:



41
42
43
44
45
46
47
48
# File 'lib/toc_doc/models/search/result.rb', line 41

def filter_by_type(type)
  case type
  when 'profile'      then profiles
  when 'practitioner' then profiles.select(&:practitioner?)
  when 'organization' then profiles.select(&:organization?)
  when 'speciality'   then specialities
  end
end