Indieweb::PostTypes is a Ruby gem for performing post type discovery for Microformats 2 JSON data.
Add this line to your application's Gemfile:
And then execute:
Or install it yourself as:
$ gem install indieweb-post_types
post_type = Indieweb::PostTypes.type_from(data)
This will return a string containing the post type, such as
The following identifiers are built-in to the gem, and used in the order shown, returning the type specified.
It is also possible to write your own identifier to be used by the gem. All that is required for a new identifier is to create a new module with a class method called
type_from, which takes as it's only parameter the data that should the checked, and returns as it's only response either
nil (when it can't identify the post type), or a string containing the post type. You can perform any checks you require in the module, such as validating that certain fields are provided, or certain values set.
A simple example, which merely checks for the presence of a category called "chicken" might be...
module PostType module Chicken extend Indieweb::PostTypes::Identifier::Base class << self def identifier_from(data) return unless data.key?('category') return unless data['category'].include?('chicken') 'chicken' end end end end
The identifiers listed above are always available, however it is possible to add other identifiers into the list of possible identifiers.
Assuming you have a new post type identifier you'd like to add (such as the "chicken" example above), you can configure
Indieweb::PostTypes before using it as follows:
Indieweb::PostTypes.configure do |config| config.insert_identifier(klass: PostType::Chicken, before: Indieweb::PostTypes::Identifier::Article) end
klass refers to the new post type module you wish to add, whereas
before refers to the module this should be added before. No new post type identifier may be added after
Indieweb::PostTypes::Identifier::Note as that is the fallback option within post type discovery, and any unidentified entry will be identified as a
You can include multiple
insert_identifier entries within the
configure section, for cases where you wish to add more than one new post type.
Bug reports can be added at https://code.deeden.co.uk/indieweb-post_types/issues, while patches are welcome at https://code.deeden.co.uk/indieweb-post_types/patches.
The gem is available as open source under the terms of the MIT License.
This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
A number of the spec example files are from...