module Siresta
Constants
- DATE
- DEFAULT_API_YAML
- VERSION
Public Class Methods
api(opts = {})
click to toggle source
generate an API
(Sinatra::Base subclass) based on a YAML description
# File lib/siresta/api.rb, line 163 def self.api(opts = {}) api = Class.new ApiBase Spec.walk api_spec(opts), { root: -> (info) { api.class_eval do enable :sessions if info[:sessions] # TODO set :name , info[:name] set :version, info[:version] end api }, resource: -> (info) { api.class_eval do info[:methods].each do |m| formats = info[:specs][m][:formats] symfmts = Hash[formats.map { |k,v| [k,v.map(&:to_sym)] }] _gen_route m.to_sym, info[:path], symfmts, info[:specs][m]['pipeline'], info[:specs][m][m].to_sym end end nil }, subresource: -> (_) {}, parametrized_subresource: -> (_) {}, } end
api_spec(opts = {})
click to toggle source
get (cached) API
spec @param [Hash] opts options @option opts [String] :data YAML data, or: @option opts [String] :file file name
# File lib/siresta/spec.rb, line 69 def self.api_spec(opts = {}) if opts[:data] YAML.load opts[:data] else file = opts[:file] || DEFAULT_API_YAML (@api_spec ||= {})[file] ||= api_spec data: File.read(file) end end
client(opts = {})
click to toggle source
generate a client (Excon wrapper) based on a YAML description
# File lib/siresta/client.rb, line 29 def self.client(opts = {}) opts_ = opts.dup http_client = opts_.delete(:http_client) || Excon Spec.walk api_spec(opts_), { root: -> (info) { info[:res].class_eval do define_method(:name) { info[:name] } define_method(:version) { info[:version] } end info[:res] }, resource: -> (info) { res = Class.new Client::Resource res.class_eval do info[:methods].map(&:to_sym).each do |m| # resource.{get,post,put,delete} define_method(m) do |*params, &b| # TODO: quoting http_client.send m, url, *params, &b end end end res }, subresource: -> (info) { info[:res].class_eval do # resource.some_route define_method(info[:route].to_sym) do info[:sub].new url, info[:route] end end }, parametrized_subresource: -> (info) { info[:res].class_eval do # resource[some_param] define_method(:[]) { |param| info[:sub].new url, param } end }, } end
env()
click to toggle source
environment
# File lib/siresta/env.rb, line 3 def self.env ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development' end
routes(opts = {})
click to toggle source
get routes from YAML description
# File lib/siresta/routes.rb, line 16 def self.routes(opts = {}) routes = [] Spec.walk api_spec(opts), { resource: -> (info) { info[:methods].each do |m| routes << [m.upcase, info[:path], info[:specs][m]['desc']] end nil }, root: -> (_) {}, subresource: -> (_) {}, parametrized_subresource: -> (_) {}, } routes end