A Ruby library for accessing the Typekit API.
In your Gemfile:
gem 'typekit-client', require: 'typekit'In your terminal:
$ bundleHere are some typical use cases of the gem:
require 'typekit'
client = Typekit::Client.new(token: ENV['tk_token'])
# List all kits
kits = client::Kit.all
# Find a kit by id
kit = client::Kit.find('bas4cfe')
# Create a kit
kit = client::Kit.create(name: 'Megakit', domains: ['localhost'],
families: [{ id: 'vcsm', subset: 'all', variations: ['n4'] }])
# Update a kit
kit.update(name: 'Ultrakit', families: [{ id: 'vybr' }])
# Publish a kit
kit.publish
# Delete a kit
kit.delete
# Find a font family by id
family = client::Family.find('vybr')
# Find a font family by slug
family = client::Family.find('calluna')
# List all font libraries
libraries = client::Library.all
# Find a library by id and retrieve its first ten font families
library = client::Library.find('trial', page: 1, per_page: 10)The Typekit API provides four major resources: kits, font families, font
variations, and font libraries. The operations concerning kits require
authentication. To this end, one has to have a valid API token. Such a token
can be generated on Your API Tokens on
Typekit. For convenience, the examples on this page assume that a valid API
token is stored in an environment variable called tk_token.
The four resources are mapped to the following Ruby classes, respectively:
Typekit::Record::Kit,Typekit::Record::Family,Typekit::Record::Variation, andTypekit::Record::Library.
Each resource has its own set of permitted operations. The entire routing map is as follows:
resources :kits do
resources :families, only: [:show, :update, :delete]
show :published, on: :member
update :publish, on: :member
end
resources :families, only: :show do
show ':variation', on: :member
end
resources :libraries, only: [:index, :show]Here, the DSL of Apitizer is utilized, which is similar to the one of Rails.
Refer to the official documentation of the Typekit API to get a complete description of each endpoint.
The preferable way to work with the four Ruby classes given earlier is via
an instance of Typekit::Client as a module:
client::Kit,client::Family,client::Variation, andclient::Library.
The kits that are available under your account can be listed as follows:
kits = client::Kit.allEach kit is an instance of Typekit::Record::Kit, and it contains all
attributes that the Typekit API returns in response to the corresponding
API call. In the case of all, the Typekit API provides only two attribute,
namely, id and link; such kits will be referred to as incomplete.
Here is an example:
kit.complete?
# => false
kit.attributes
# =>
# {
# "id": "bas4cfe",
# "link": "/api/v1/json/kits/bas4cfe"
# }
kit.id
# => "bas4cfe"
kit.link
# => "/api/v1/json/kits/bas4cfe"A particular kit can be fetched using its id:
kit = client::Kit.find('bas4cfe') # or find! to raise an exception if failedIn the case of find, you get all information about the kit:
kit.complete?
# => true
kit.attributes
# =>
# {
# "id": "bas4cfe",
# "name": "Megakit",
# "analytics": false,
# "domains": [
# "localhost"
# ],
# "families": [
# ...
# ]
# }
kit.name
# => "Megakit"In order to reload a kit and/or retrieve missing data, call load:
kit.complete?
# => false
kit.load # or load! to raise an exception if failed
kit.complete?
# => trueIn order to change an attribute of a kit, assign a new value to that
attribute and call save:
kit.name = 'Ultrakit'
kit.save # or save! to raise an exception if failedSimilarly, the families attribute, containing the font families included in
the kit, can be changed as desired:
# Push a new instance of Typekit::Record::Family
kit.families << Typekit::Record::Family.new(id: 'vybr')
# Push a hash of attributes
kit.families << { id: 'vcsm', subset: 'all' }
# Replace with an font family found via client
kit.families = [client::Family.find('droid-sans')]
# Remove all font families
kit.families = []
kit.saveIf you want to browse the font families hosted on Typekit, you can do so via libraries. All libraries can be listed as follows:
libraries = client::Library.allA particular library can be fetched using:
library = client::Library.find('trial')In this case, along with some general information about the library itself, the Typekit API will return a subset of the font families included in the library according to its default pagination. The desired pagination can be specified as follows:
library = client::Library.find('trial', page: 1, per_page: 10)The font families are stored in the families attribute of the library.
An instance of Typekit::Client has a method called process that can be
used to perform arbitrary API calls. The signature of the method is
process(action, *enpoint, parameters = {}), and the arguments are as follows:
actionis one of:index,:show,:create,:update, and:delete;*endpointrefers to an arbitrary number of arguments needed to identify the endpoint of interest;parametersis a optional hash of parameters.
Each of the five actions has a shortcut: instead of calling
client.process(action, *endpoint, parameters), you can just call
client.action(*endpoint, parameters) replacing action with index, show,
create, update, or delete.
Here are some examples:
require 'typekit'
client = Typekit::Client.new(token: ENV['tk_token'])
# List all kits
kits = client.index(:kits)
# Find a kit by id
kit = client.show(:kits, 'bas4cfe')
# Create a kit
kit = client.create(:kits, name: 'Megakit', domains: ['localhost'],
families: [{ id: 'vcsm', subset: 'all', variations: ['n4'] }])
# Update a kit
client.update(:kits, 'bas4cfe', name: 'Ultrakit', families: [{ id: 'vybr' }])
# Publish a kit
client.update(:kits, 'bas4cfe', :publish)
# Delete a kit
client.delete(:kits, 'bas4cfe')
# Find a font family by id
family = client.show(:families, 'vybr')
# Find a font family by slug
family = client.show(:families, 'calluna')
# Show a font family in a kit by id
family = client.show(:kits, 'bas4cfe', :families, 'vcsm')
# Show a variation of a font family by id
variation = client.show(:families, 'vybr', 'i4')
# List all font libraries
libraries = client.index(:libraries)
# Find a library by id and retrieve its first ten font families
library = client.show(:libraries, 'trial', page: 1, per_page: 10)There is a command-line tool provided in order to interact with the Typekit
API without writing any code. The tool is called typekit-client, and
its capabilities directly reflect the low-level programming interface describe
earlier:
$ typekit-client -h
Usage: typekit-client [options] [command]
Required options:
-t, --token TOKEN Set the API token
Other options:
-h, --help Show this message
The tool has two modes: normal and interactive. If command is provided,
the tool executes only that particular command and terminates:
$ typekit-client -t $tk_token index kits
[
{
"id": "bas4cfe",
"link": "/api/v1/json/kits/bas4cfe"
},
...
]
$
If command is not provided, the tool gives a command prompt wherein one
can enter multiple commands:
$ typekit-client -t $tk_token
Type 'help' for help and 'exit' to exit.
> help
Usage: <action> <resource> [parameters]
<action> index, show, create, update, or delete
<endpoint> a list separated by whitespaces
[parameters] a JSON-encoded hash (optional)
Examples:
index kits
create kits { "name": "Megakit", domains: ["localhost"] }
show kits bas4cfe
update kits bas4cfe { families: [{ "id": "vybr" }] }
update kits bas4cfe publish
delete kits bas4cfe
show families vybr i4
show libraries trial { "page": 10, "per_page": 5 }
> index kits
[
{
"id": "bas4cfe",
"link": "/api/v1/json/kits/bas4cfe"
},
...
]
> exit
Bye.
$
There is another utility with the sole purpose of publishing kits. The tool
is called typekit-publisher:
$ typekit-publisher -h
Usage: typekit-publisher [options]
Required options:
-t, --token TOKEN Set the API token
Other options:
-h, --help Show this message
Using typekit-publisher, you can publish all your kits at once. Here is
an example:
$ typekit-publisher -t $tk_token
Which kit would you like to publish?
1. bas4cfe
2. sfh6bkj
3. kof8zcn
4. all
> 4
Publishing bas4cfe... Done.
Publishing sfh6bkj... Done.
Publishing kof8zcn... Done.
Bye.
$