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