class Sentofu::Api

Attributes

credentials[RW]
spec[R]

Public Class Methods

new(name, spec) click to toggle source
Calls superclass method Sentofu::Resource::new
# File lib/sentofu/api.rb, line 147
    def initialize(name, spec)

      u = spec['servers'].first['url'] rescue nil
      unless u.is_a?(String) && u.match?(/\Ahttps?:\/\//)
#p name; pp spec; p u
        c = spec['code'] rescue -1
        m = spec['message'] rescue '(no message)'
        fail "cannot setup #{name.inspect} API - HTTP #{c} - #{m.inspect}"
      end

      super(nil, u)

      @name = name
      @spec = spec

      @credentials = nil
      @token = nil

      inflate_parameters

#puts "================== #{name}"
      spec['paths'].each do |path, point|

#p path
        re = self
        pas = path.split('/').collect { |s| s.gsub(/-/, '_') }
        pas.shift if pas.first == ''
        pas[0..-2].each do |pa|
          re = re.add_segment(pa)
        end
        re.add_leaf_segment(pas.last, point)
      end
    end

Public Instance Methods

modified() click to toggle source
# File lib/sentofu/api.rb, line 205
def modified

  Time.parse(@spec[:meta][:modified])
end
paths() click to toggle source
# File lib/sentofu/api.rb, line 190
def paths

  @spec['paths']
end
query(path, params={}) click to toggle source
# File lib/sentofu/api.rb, line 195
def query(path, params={})

  pa = server + path
  pa = pa + '?' + URI.encode_www_form(params) if params.any?

  return params.merge(path: pa) if params[:debug]

  get(pa)
end
token() click to toggle source
# File lib/sentofu/api.rb, line 181
def token

  if @token && @token.not_expired?
    @token
  else
    @token = Sentofu::Http.fetch_token(@credentials)
  end
end
version() click to toggle source
# File lib/sentofu/api.rb, line 210
def version

  @spec[:meta][:version]
end

Protected Instance Methods

inflate_parameters() click to toggle source
# File lib/sentofu/api.rb, line 222
def inflate_parameters

  pars = @spec['components']['parameters']
  return unless pars

  refs = pars
    .inject({}) { |h, (k, v)|
      h["#/components/parameters/#{k}"] = v
      h }

  @spec['paths'].each do |_, pa|
    pa.each do |_, me|
      next unless me['parameters']
      me['parameters'] = me['parameters']
        .collect { |pm|
          if ref = pm['$ref']
            refs[ref] || fail("found no $ref #{ref.inspect} in spec")
          else
            pm
          end }
    end
  end
end
server() click to toggle source
# File lib/sentofu/api.rb, line 217
def server

  @spec['servers'].first['url']
end