module RubyJmeter::Parser

Public Instance Methods

files(params) click to toggle source
# File lib/ruby-jmeter/helpers/parser.rb, line 88
def files(params)
  files = params.delete(:files)
  return if files.empty?
  x = Nokogiri::XML::Builder.new do |b|
    b.elementProp(name: "HTTPsampler.Files", elementType: "HTTPFileArgs") {
      b.collectionProp(name: "HTTPFileArgs.files") {
        files.each do |f|
          b.elementProp(name: f[:path], elementType: "HTTPFileArg") {
            b.stringProp f[:path] || '' , name: "File.path"
            b.stringProp f[:paramname] || '' , name: "File.paramname"
            b.stringProp f[:mimetype] || '' , name: "File.mimetype"
          }
        end
      }
    }
  end
  params[:update_at_xpath] ||= []
  params[:update_at_xpath] << {
    :xpath => '//HTTPSamplerProxy',
    :value => x.doc.root
  }
end
fill_in(params) click to toggle source
# File lib/ruby-jmeter/helpers/parser.rb, line 44
    def fill_in(params)
      params[:update_at_xpath] ||= []
      params[:update_at_xpath] = params[:fill_in].
        each_with_object(params[:update_at_xpath]) do |(name, values), memo|
           Array(values).each do |value|
            memo << {
              :xpath => '//collectionProp',
              :value => Nokogiri::XML(<<-EOF.strip_heredoc).children
                <elementProp name="#{name}" elementType="HTTPArgument">
                  <boolProp name="HTTPArgument.always_encode">#{params[:always_encode] ? 'true' : false}</boolProp>
                  <stringProp name="Argument.value">#{value}</stringProp>
                  <stringProp name="Argument.metadata">=</stringProp>
                  <boolProp name="HTTPArgument.use_equals">true</boolProp>
                  <stringProp name="Argument.name">#{name}</stringProp>
                </elementProp>
                EOF
            }
          end
        end
      params.delete(:fill_in)
    end
parse_http_request(params) click to toggle source
# File lib/ruby-jmeter/helpers/parser.rb, line 4
def parse_http_request(params)
  if params[:raw_path]
    params[:path] = params[:url]
    parse_url(params)
  else
    parse_url(params)
    params[:fill_in] ||= {}
    params[:params] && params[:params].split('&').each do |param|
      name,value = param.split('=')
      params[:fill_in][name] ||= []
      params[:fill_in][name] << value
    end
  end

  fill_in(params) if params.has_key?(:fill_in)
  raw_body(params) if params.has_key?(:raw_body)
  files(params) if params.has_key?(:files)
end
parse_test_type(params) click to toggle source
# File lib/ruby-jmeter/helpers/parser.rb, line 111
def parse_test_type(params)
  case params.keys.first.to_s
  when 'contains'
    2
  when 'not-contains'
    6
  when 'matches'
    1
  when 'not-matches'
    5
  when 'equals'
    8
  when 'not-equals'
    12
  when 'substring'
    16
  when 'not-substring'
    20
  else
    2
  end
end
parse_uri(uri) click to toggle source
# File lib/ruby-jmeter/helpers/parser.rb, line 38
def parse_uri(uri)
  URI.parse(URI::encode(uri)).scheme.nil? ?
    URI.parse(URI::encode("http://#{uri}")) :
    URI.parse(URI::encode(uri))
end
parse_url(params) click to toggle source
# File lib/ruby-jmeter/helpers/parser.rb, line 23
def parse_url(params)
  return if params[:url].empty?
  if params[:url] =~ /https?:\/\/\$/ || params[:url][0] == '$'
    params[:path] = params[:url] # special case for named expressions
  else
    uri = parse_uri(params[:url])
    params[:port]     ||= uri.port unless URI.parse(URI::encode(params[:url])).scheme.nil?
    params[:protocol] ||= uri.scheme unless URI.parse(URI::encode(params[:url])).scheme.nil?
    params[:domain]   ||= uri.host
    params[:path]     ||= uri.path && URI::decode(uri.path)
    params[:params]   ||= uri.query && URI::decode(uri.query)
  end
  params.delete(:url)
end
raw_body(params) click to toggle source
# File lib/ruby-jmeter/helpers/parser.rb, line 66
    def raw_body(params)
      params[:update_at_xpath] ||= []
      params[:update_at_xpath] << {
        :xpath => '//HTTPSamplerProxy',
        :value => Nokogiri::XML(<<-EOF.strip_heredoc).children
          <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
          EOF
      }

      params[:update_at_xpath] << {
        :xpath => '//collectionProp',
        :value => Nokogiri::XML(<<-EOF.strip_heredoc).children
          <elementProp name="" elementType="HTTPArgument">
            <boolProp name="HTTPArgument.always_encode">false</boolProp>
            <stringProp name="Argument.value">#{params[:raw_body].encode(:xml => :text)}</stringProp>
            <stringProp name="Argument.metadata">=</stringProp>
          </elementProp>
          EOF
      }
      params.delete(:raw_body)
    end