def call(resource_name, action_name, params={}, headers={}, options={})
      check_cache if @aggressive_cache_checking
      resource = resource(resource_name)
      action = resource.action(action_name)
      action.validate!(params) unless options[:skip_validation]
      options[:fake_response] = find_match(fake_responses, resource_name, action_name, params) || action.examples.first if dry_run?

      call_action(action, params, headers, options)
    end
def call(resource_name, action_name, params={}, headers={}, options={})
      check_cache if @aggressive_cache_checking
      resource = resource(resource_name)
      action = resource.action(action_name)
      action.validate!(params) unless options[:skip_validation]
      options[:fake_response] = find_match(fake_responses, resource_name, action_name, params) || action.examples.first if dry_run?

      call_action(action, params, headers, options)
    end
Call an action in the API.
 It finds most fitting route based on given parameters
 with other attributes necessary to do an API call.
 If in dry_run mode {#initialize} it finds fake response data in examples
 or user provided data. At the end when the response format is JSON it
 is parsed and returned as ruby objects. If server supports checksum sending
 the internal cache with API description is checked and updated if needed
 @param [Symbol] resource_name name of the resource
 @param [Symbol] action_name name of the action
 @param [Hash] params parameters to be send in the request
 @param [Hash] headers extra headers to be sent with the request
 @param [Hash] options options to influence the how the call is processed
   * *:response* (Symbol) *:raw* - skip parsing JSON in response
   * *:with_authentication* (Bool) *true* - use rest client with/without auth configuration
   * *:skip_validation* (Bool) *false* - skip validation of parameters
 @example show user data
   call(:users, :show, :id => 1)