class Barthes::Action
Public Class Methods
new(env)
click to toggle source
# File lib/barthes/action.rb, line 7 def initialize(env) @env = env.dup client_class = @env['client_class'] ? @env['client_class'].constantize : Barthes::Client::HTTParty @client = client_class.new(evaluate_params env) end
Public Instance Methods
action(action)
click to toggle source
# File lib/barthes/action.rb, line 17 def action(action) begin @env.update(action['env']) if action['env'] params = evaluate_params(action['params']) if action['expectations'] if action['max_loop'] action['max_loop'].to_i.times do sleep action['sleep'].to_i/1000 if action['sleep'] response = @client.action(params) action['expectations'].each do |expectation| result = @client.compare(response, evaluate_params(expectation)) expectation.update(result) end if action['expectations'].all? {|e| e['result'] == true } break end end end end sleep action['sleep'].to_i/1000 if action['sleep'] action['request'] = params action['response'] = response = @client.action(params) if action['expectations'] && !action['expectations'].empty? action['expectations'].each do |expectation| result = @client.compare(response, evaluate_params(expectation)) expectation.update(result) end if !action['expectations'].all? {|e| e['result'] == true } action['status'] = 'failure' else action['status'] = 'success' end else action['status'] = 'success' end if cache_config = action['cache'] value = @client.extract(evaluate_params(cache_config), response) action['cache']['value'] = value Barthes::Cache[cache_config['key']] = value end rescue StandardError => e action['status'] = 'error' action['error'] = { 'class' => e.class, 'message' => e.message, 'backtrace' => e.backtrace } end action end
evaluate_params(params)
click to toggle source
# File lib/barthes/action.rb, line 74 def evaluate_params(params) new_params = {} params.each do |k, v| if v.class == String new_v = v.gsub(/\$\{time:(.+?):(.+?)\}/) { Chronic.parse($1).strftime($2) } new_v = new_v.gsub(/^\$\{base64:(.+)\}$/m) do match = $1 match = match.gsub(/\$\{(.+?)\}/) { @env[$1] } match = match.gsub(/\@\{(.+?)\}/) { Barthes::Cache[$1] } Base64.encode64(match) end new_v = new_v.gsub(/\$\{(.+?)\}/) { @env[$1] } new_v = new_v.gsub(/\@\{(.+?)\}/) { Barthes::Cache[$1] } else new_v = v end new_params[k] = new_v end new_params end
indent(size, string)
click to toggle source
# File lib/barthes/action.rb, line 13 def indent(size, string) string.split("\n").map {|line| "\t" * size + "#{line}\n" } end