Class: XriResolver::ParseInputParameters

Inherits:
Object
  • Object
show all
Defined in:
lib/xri_resolver.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params = {}, accept_headers = "") ⇒ ParseInputParameters

Returns a new instance of ParseInputParameters.



999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
# File 'lib/xri_resolver.rb', line 999

def initialize(params={}, accept_headers="")
  if params.instance_of?(Hash)
    symparams = Hash.new
    params.each { |k,v| symparams[k.to_sym] = v }
    params = symparams
  end
  param_inputs = parse_query_params(params)
  header_inputs = parse_accept_headers(accept_headers)
  
  unless is_blank?(param_inputs[:res_media_type])
    @resolution_media_type = param_inputs[:res_media_type]
    @uric = has_true_value?(param_inputs[:uric]) ? true : false
    @sep = has_true_value?(param_inputs[:sep]) ? true : false
    @cid = has_false_value?(param_inputs[:cid]) ? false : true
    @nodefault_p = has_true_value?(param_inputs[:nodefault_p]) ? true : false
    @nodefault_t = has_true_value?(param_inputs[:nodefault_t]) ? true : false
    @nodefault_m = has_true_value?(param_inputs[:nodefault_m]) ? true : false
    @refs = has_false_value?(param_inputs[:refs]) ? 'false' : 'true'
    @https = has_true_value?(param_inputs[:https]) ? true : false
    @saml = has_true_value?(param_inputs[:saml]) ? true : false
  else
    @resolution_media_type = header_inputs[:res_media_type]
    @uric = has_true_value?(header_inputs[:uric]) ? true : false
    @sep = has_true_value?(header_inputs[:sep]) ? true : false
    @cid = has_false_value?(header_inputs[:cid]) ? false : true
    @nodefault_p = has_true_value?(header_inputs[:nodefault_p]) ? true : false
    @nodefault_t = has_true_value?(header_inputs[:nodefault_t]) ? true : false
    @nodefault_m = has_true_value?(header_inputs[:nodefault_m]) ? true : false
    @refs = has_false_value?(header_inputs[:refs]) ? 'false' : 'true'
    @https = has_true_value?(header_inputs[:https]) ? true : false
    @saml = has_true_value?(header_inputs[:saml]) ? true : false
  end
  
  @service_media_type = param_inputs[:service_media_type]
  @service_type = param_inputs[:service_type]
  
  ## force sep=true if RMT is text/uri-list or unspecified
  @sep = true if @resolution_media_type == 'text/uri-list' or is_blank?(@resolution_media_type)
end

Instance Attribute Details

#cidObject

Returns the value of attribute cid.



987
988
989
# File 'lib/xri_resolver.rb', line 987

def cid
  @cid
end

#httpsObject

Returns the value of attribute https.



987
988
989
# File 'lib/xri_resolver.rb', line 987

def https
  @https
end

#nodefault_mObject

Returns the value of attribute nodefault_m.



987
988
989
# File 'lib/xri_resolver.rb', line 987

def nodefault_m
  @nodefault_m
end

#nodefault_pObject

Returns the value of attribute nodefault_p.



987
988
989
# File 'lib/xri_resolver.rb', line 987

def nodefault_p
  @nodefault_p
end

#nodefault_tObject

Returns the value of attribute nodefault_t.



987
988
989
# File 'lib/xri_resolver.rb', line 987

def nodefault_t
  @nodefault_t
end

#refsObject

Returns the value of attribute refs.



987
988
989
# File 'lib/xri_resolver.rb', line 987

def refs
  @refs
end

#resolution_media_typeObject

Returns the value of attribute resolution_media_type.



987
988
989
# File 'lib/xri_resolver.rb', line 987

def resolution_media_type
  @resolution_media_type
end

#samlObject

Returns the value of attribute saml.



987
988
989
# File 'lib/xri_resolver.rb', line 987

def saml
  @saml
end

#sepObject

Returns the value of attribute sep.



987
988
989
# File 'lib/xri_resolver.rb', line 987

def sep
  @sep
end

#service_media_typeObject

Returns the value of attribute service_media_type.



987
988
989
# File 'lib/xri_resolver.rb', line 987

def service_media_type
  @service_media_type
end

#service_typeObject

Returns the value of attribute service_type.



987
988
989
# File 'lib/xri_resolver.rb', line 987

def service_type
  @service_type
end

#uricObject

Returns the value of attribute uric.



987
988
989
# File 'lib/xri_resolver.rb', line 987

def uric
  @uric
end

Instance Method Details

#has_false_value?(test) ⇒ Boolean

Returns:

  • (Boolean)


1087
1088
1089
# File 'lib/xri_resolver.rb', line 1087

def has_false_value?(test)
  test == 'false' or test == '0'
end

#has_true_value?(test) ⇒ Boolean

Returns:

  • (Boolean)


1083
1084
1085
# File 'lib/xri_resolver.rb', line 1083

def has_true_value?(test)
  test == 'true' or test == '1'
end

#is_blank?(test) ⇒ Boolean

Returns:

  • (Boolean)


1091
1092
1093
# File 'lib/xri_resolver.rb', line 1091

def is_blank?(test)
  test.empty? or test =~ /\A\s*\z/
end

#parse_accept_headers(accept_headers) ⇒ Object



1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
# File 'lib/xri_resolver.rb', line 1065

def parse_accept_headers(accept_headers)
  valid_headers = ['application/xrds+xml', 'application/xrd+xml', 'text/uri-list']
  res_inputs = {:res_media_type => ""}
  headers = accept_headers.split(',').map {|h| h.strip}
  headers.each do |hdr|
    hdr_parts = hdr.split(';')
    if valid_headers.include?(hdr_parts.first)
      res_inputs[:res_media_type] = hdr_parts.shift
      hdr_parts.each do |part|
        k,v = part.downcase.split('=')
        res_inputs["#{k}".to_sym] = v unless is_blank?(k)
      end
      break
    end
  end
  res_inputs
end

#parse_query_params(params) ⇒ Object



1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
# File 'lib/xri_resolver.rb', line 1039

def parse_query_params(params)
  ## remove any extra leading "?"s
  params.each do |k,v|
    if k =~ /^[\?]+(.*)$/
      params.delete(k)
      params[$1] = v
    end
  end
  inputs = {:res_media_type => ""}
  ## get Resolution Media type
  if params.has_key?(:_xrd_r)
    parsedrof = params[:_xrd_r].split(';') rescue []
    inputs[:res_media_type] = parsedrof.shift.tr(' ', '+') rescue ''
    parsedrof.each do |part|
      k,v = part.downcase.split('=')
      inputs["#{k}".to_sym] = v unless is_blank?(k)
    end
  end
  ## get Service Type selection element
  inputs[:service_type] = (params.has_key?(:_xrd_t)) ? params[:_xrd_t].tr(' ', '+') : nil
  ## get Service Media Type selection element
  inputs[:service_media_type] = (params.has_key?(:_xrd_m)) ? params[:_xrd_m].tr(' ', '+') : nil
  
  inputs
end