class Idcf::JsonHyperSchema::Expands::LinkInfoBase

Link Info Base json schema v4

Constants

BIND_PARAMS_REGEXP
FULL_HREF_REGEXP
PARAMS_REGEXP
QUERY_PARAMS_REGEXP

Attributes

data[R]

Public Class Methods

new(data) click to toggle source
# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 13
def initialize(data)
  @data = data
end

Public Instance Methods

description() click to toggle source

description

@return String

# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 20
def description
  @data.description.nil? ? '' : @data.description
end
href() click to toggle source

href string

@return String

# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 48
def href
  href_str = @data.href
  return '' if href_str.nil?
  l = []
  href_str.split('/').each do |v|
    next if v.empty?
    l << v.gsub(PARAMS_REGEXP, '%s').gsub(QUERY_PARAMS_REGEXP, '')
  end
  href_head = href_str =~ FULL_HREF_REGEXP ? "#{l.shift}/" : base_href
  "#{href_head}/#{l.join('/')}"
end
make_params(args) click to toggle source

make params The price of the rest except for a query parameter

@param args @return Hash

# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 130
def make_params(args)
  {}.tap do |result|
    param = args.deep_dup
    next unless param.class == Hash
    param = param.stringify_keys
    make_query_params(args).each_key do |qk|
      param.delete(qk)
    end
    properties.each_key do |pk|
      result[pk] = param[pk] if param.key?(pk)
    end
  end
end
make_uri(url_params, params, host = nil) click to toggle source

make uri

@param url_params [Array] @param params [Hash] @param host [String] @return String

# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 115
def make_uri(url_params, params, host = nil)
  uri          = URI(make_url(url_params, host))
  query_params = []
  [uri.query, make_query_params(params).to_param].each do |param|
    query_params << param if param.present?
  end
  uri.query = query_params.join('&')
  uri.to_s
end
method() click to toggle source

method

@return String

# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 34
def method
  @data.method.nil? ? 'get' : @data.method.to_s.downcase
end
method?(val) click to toggle source

is_method

@return String

# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 41
def method?(val)
  method == val.to_s.downcase
end
properties() click to toggle source

properties

@return Hash

# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 94
def properties
  d = @data.schema
  return {} if d.nil? || d.properties.nil?
  d.properties.deep_dup
end
query_param_names() click to toggle source

http query params ex) /hoge/{id}/{sec}{?name} : [“name”]

@return Array

# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 79
def query_param_names
  result = [].tap do |list|
    href = @data.href
    next if href.nil?
    params = href =~ QUERY_PARAMS_REGEXP
    next if params.nil?
    list.concat(Regexp.last_match(1).split(','))
  end
  result.concat(properties.keys) if method?('get')
  result.uniq
end
required() click to toggle source

required

@return Array

# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 103
def required
  d = @data.schema
  return [] if d.nil? || d.required.nil?
  d.required.deep_dup
end
title() click to toggle source

title

@return String

# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 27
def title
  @data.title.nil? ? '' : @data.title
end
url_param_names() click to toggle source

url params ex) /hoge/{id}/{sec}{?name} : [“id”, “sec”]

@return Array

# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 64
def url_param_names
  [].tap do |result|
    href = @data.href
    next if href.nil?
    href.split('/').each do |v|
      str = url_param_str(v)
      result << str unless str.empty?
    end
  end
end

Protected Instance Methods

base_href() click to toggle source
# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 176
def base_href
  list = []
  parent_base_urls(@data.parent).each do |base|
    list << base.gsub(%r{\A/+}, '').gsub(%r{\Z/+}, '')
    break if base =~ FULL_HREF_REGEXP
  end
  list.reverse.join('/')
end
make_query_params(param) click to toggle source
# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 157
def make_query_params(param)
  {}.tap do |result|
    next unless param.class == Hash
    query_param_names.each do |k|
      result[k] = param[k] if param.key?(k)
    end
  end
end
make_url(args, host = nil) click to toggle source
# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 146
def make_url(args, host = nil)
  result   = href
  r_params = []
  url_param_names.each_index do |index|
    r_params << CGI.escape(args[index])
  end
  result = result % r_params unless r_params.empty?
  result = URI.join(host, result).to_s unless host.nil?
  result
end
parent_base_urls(schema) click to toggle source
# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 185
def parent_base_urls(schema)
  [].tap do |result|
    next if schema.nil?
    result << schema.data['base'] unless schema.data['base'].nil?
    result.concat(parent_base_urls(schema.parent))
  end
end
url_param_name(name) click to toggle source
# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 193
def url_param_name(name)
  return nil if name[0] == '?'
  return name unless name =~ BIND_PARAMS_REGEXP
  name.split('/').pop
end
url_param_str(piece) click to toggle source
# File lib/idcf/json_hyper_schema/expands/link_info_base.rb, line 166
def url_param_str(piece)
  return '' unless piece =~ PARAMS_REGEXP
  (1..2).each do |num|
    next if Regexp.last_match(num).nil?
    p_name = url_param_name(Regexp.last_match(num))
    return p_name unless p_name.nil?
  end
  ''
end