Sha256: 16ad054c4d90933c2fa1f17064eba457cbc835f04407a247367d6b5f4e832af5
Contents?: true
Size: 1.45 KB
Versions: 3
Compression:
Stored size: 1.45 KB
Contents
require 'httparty' ## # Linode API wrapper module LinodeAPI ## # Default API endpoint DEFAULT_ENDPOINT = 'https://api.linode.com/' SPEC_URL = 'https://api.linode.com/?api_action=api.spec' class << self def spec @spec ||= { type: :group, subs: fetch_spec } end private def fetch_spec raw = JSON.parse(HTTParty.get(SPEC_URL).body)['DATA']['METHODS'] raw.each_with_object({}) do |(method, info), spec| name, groups = parse_method(method) params = parse_params(info['PARAMETERS']) add_call(spec, groups, name, params, info) end end def add_call(spec, groups, name, params, info) subgroup = nest_spec(spec, groups) subgroup[name] = { type: :call, desc: info['DESCRIPTION'], throws: info['THROWS'].split(','), params: Hash[params] } end def nest_spec(spec, groups) groups.reduce(spec) do |layout, new| layout[new] ||= { type: :group, subs: {} } layout[new][:subs] end end def parse_method(method) keys = method.split('.').map(&:to_sym) [keys.pop, keys] end def parse_params(params) params.map do |k, v| [ k.downcase.to_sym, parse_args(v) ] end end def parse_args(args) { desc: args['DESCRIPTION'], type: args['TYPE'].to_sym, required: args['REQUIRED'] } end end end require 'linodeapi/raw'
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
linodeapi-1.0.0 | lib/linodeapi.rb |
linodeapi-0.2.2 | lib/linodeapi.rb |
linodeapi-0.2.1 | lib/linodeapi.rb |