module Siresta::Spec

Constants

METHODS

Public Class Methods

walk(spec, opts) click to toggle source

walk spec

# File lib/siresta/spec.rb, line 21
def self.walk(spec, opts)
  name      = spec['name']
  version   = spec['version']
  sessions  = spec['sessions']
  formats   = { request:  spec['request_formats']   || [],
                response: spec['response_formats']  || [] }
  res       = walk_resource spec['api'], '/', opts, formats
  opts[:root][{
    res: res, name: name, version: version, sessions: sessions
  }]
end
walk_resource(specs, path, opts, formats) click to toggle source

process resource when walking spec

# File lib/siresta/spec.rb, line 34
def self.walk_resource(specs, path, opts, formats)
  ms, ss = specs.inject([[],{}]) do |(ms,ss), spec|
    chs = formats.merge({ request: spec['request_formats'],
                          response: spec['response_formats'] }
                        .reject { |k,v| !v })
    (m = (METHODS & spec.keys).first) ?
      [ms + [m], ss.merge(m => spec.merge(formats: chs))] : [ms,ss]
  end
  opts[:resource][{ methods: ms, specs: ss, path: path }] \
    .tap { |res| walk_subresources res, specs, path, opts, formats }
end
walk_subresources(res, specs, path, opts, formats) click to toggle source

process subresources when walking spec

# File lib/siresta/spec.rb, line 47
def self.walk_subresources(res, specs, path, opts, formats)
  specs.each do |spec|
    if (r = spec['resource'])
      r_s = (p = Symbol === r) ? ":#{r}" : r
      chs = formats.merge({ request: spec['request_formats'],
                            response: spec['response_formats'] }
                          .reject { |k,v| !v })
      pth = (path == '/' ? '' : path) + '/' + r_s
      sub = walk_resource spec['contains'], pth, opts, chs
      opts[p ? :parametrized_subresource : :subresource][
        { res: res, sub: sub, parametrized: p, route: r,
          route_s: r_s, path: path }
      ]
    end
  end
end