class Webspicy::Web::Specification
Public Class Methods
info(raw)
click to toggle source
# File lib/webspicy/web/specification.rb, line 6 def info(raw) new(raw) end
singleservice(raw)
click to toggle source
# File lib/webspicy/web/specification.rb, line 10 def singleservice(raw) converted = { name: raw[:name], url: raw[:url], services: [ Webspicy::Web.service(raw.reject{|k| k==:url or k==:name }, Webspicy.current_scope) ] } info(converted) end
Public Instance Methods
instantiate_url(params)
click to toggle source
# File lib/webspicy/web/specification.rb, line 34 def instantiate_url(params) url, rest = self.url, params.dup url_placeholders.each do |placeholder| value, rest = extract_placeholder_value(rest, placeholder) url = url.gsub("{#{placeholder}}", value.to_s) end [ url, rest ] end
to_singleservice()
click to toggle source
# File lib/webspicy/web/specification.rb, line 43 def to_singleservice raise NotImplementedError end
url()
click to toggle source
# File lib/webspicy/web/specification.rb, line 22 def url @raw[:url] end
url_pattern()
click to toggle source
# File lib/webspicy/web/specification.rb, line 26 def url_pattern @url_pattern ||= Mustermann.new(url, type: :template) end
url_placeholders()
click to toggle source
# File lib/webspicy/web/specification.rb, line 30 def url_placeholders url.scan(/\{([a-zA-Z]+(\.[a-zA-Z]+)*)\}/).map{|x| x.first } end
Private Instance Methods
extract_placeholder_value(params, placeholder, split = nil)
click to toggle source
# File lib/webspicy/web/specification.rb, line 49 def extract_placeholder_value(params, placeholder, split = nil) return extract_placeholder_value(params, placeholder, placeholder.split(".")) unless split key = [ split.first, split.first.to_sym ].find{|k| params.has_key?(k) } raise "Missing URL parameter `#{placeholder}`" unless key if split.size == 1 [ params[key], params.dup.delete_if{|k| k == key } ] else value, rest = extract_placeholder_value(params[key], placeholder, split[1..-1]) [ value, params.merge(key => rest) ] end end