AkidoLib

Short description and motivation.

Usage

How to use my plugin.

Installation

Add this line to your application's Gemfile:

gem 'akido_lib'

And then execute:

$ bundle

Or install it yourself as:

$ gem install akido_lib

Extra Classes/Methods

AkidoLib::Bundle

We're liable to add some utility methods to AkidoLib::Bundle, since it's the main entry point into what comes back from the server.

Methods

  • #to_a

Bundle#to_a works exactly as you'd expect: the full bundle is read from the server, and then turned into an array. Useful for when you want to call #map or #select on what gets returned in a bundle.

AkidoLib::Query

Query exists to bridge the gap between FHIR::Client and ActiveRecord-y syntax, which most Rails developers seem to think in. Its syntax should be familiar to those familiar with ActiveRecord::Relation, specifically #all and #where.

Methods

Class Methods
  • .set_base_url!(base_url)

Ordinarily, new Queries reach back to FHIR::Model.client to get their base URL, but if it isn't set, or if you just want to overwrite it, you can do so.

  • .new(resource, base_url)

You probably won't call this method — most Queries will be created using methods on FHIR::Model.

When a Query is created, it needs two things to be meaningful: a base URL to hit, and the name of a FHIR resource. This method takes both as arguments. The resource name is required, but base_url is optional — if base_url is set on AkidoLib::Query, that will be used, otherwise it will default to the base URL set on AkidoLib::Model.client.

Instance Methods
  • #where(conditions)

The where method is the main entry point for adding constraints to the query. It accepts all of the parameters for FHIR searching, with the caveat that parameter names should be written as Ruby-style symbols, without the leading underscore and in snake_case instead of camelCase — e.g. _lastUpdated becomes :last_updated.

  • #last_updated(date)

#where has the advantage of being able to set more than one property at a time, but the disadvantage that it doesn't cast any of the values to be more palatable to the server. Because of how precise FHIR servers can be about their date requirements, #last_updated is a convenience method that lets you pass a date, then sets _lastUpdated to the XML-encoded version of that date.

  • #include(relation)

Shorthand for adding _include=[Relation] to your query. Takes a sting, e.g. 'Encounter:Patient'. Can take option after the name of the relation to include. There is currenlty one option implemented: passing :rev => true will insert the relation as a _revinclude instead of an _include.

  AkidoLib::Encounter.where(:last_updated =>2.weeks.ago).include("Encounter:Patient")
  • #custom(key, value)

#where is prescriptive — it has opinions about how query keys should looks (i.e. they should be preceded with an underscore, they should be camelCase, etc.). #custom has no such prescriptions: whatever you pass in will be assigned to the query as a key and a value.

  • #fetch!

Intended to be the last method called on a chain of queries. Will execute the query to which it is attached, and return the AkidoLib::Bundle that comes back from the server.

Note: one of two Query methods that doesn't itself return a Query (returns an AkidoLab::Bundle).

  • #url

Sometimes you just need to peer into the inner workings of Query and see what it's doing, maybe to paste a URL into Postman or curl. This is precisely that utility method.

Note: the second of two Query methods that doesn't return a Query (returns a string).

AkidoLib::Model

AkidoLib::Model is another one of those classes that we'll periodically open up to add new functionality. For now, the main thing is adding methods that return AkidoLib::Query objects.

Methods

  • #all

When called on a FHIR model, #all will return an AkidoLib::Query object pointed at the base level of that resource — e.g. FHIR::Encounter.all will return a Query with a URL of <BaseURL>/Encounter

Contributing

Contribution directions go here.

License

The gem is available as open source under the terms of the MIT License.