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