class EngagingNetworks::Action

Public Instance Methods

create(action_hash, additional_options = {}) click to toggle source
# File lib/engaging_networks/action.rb, line 16
def create(action_hash, additional_options = {})
  # accept either hashes or objects as input
  action = if action_hash.is_a?(Hash)
             ActionCreateAction.new(action_hash)
           else
             action_hash
           end

  if action.valid?
    # parameters required for fake ajax form submission
    ajax_form_params = {
      'ea.AJAX.submit' => true,
      'ea.submitted.page' => 1,
      'ea_requested_action' => 'ea_submit_user_form',
      'ea_javascript_enabled' => true,
      'ea.campaign.mode' => 'DEMO',
      'ea.retain.account.session.error' => true,
      'ea.clear.campaign.session.id' => true,
      'v' => 'c%3AshowBuild'
    }

    # clientId, campaignId, formId
    client_params = {'ea.client.id' => action.client_id,
                     'ea.campaign.id' => action.campaign_id,
                     'ea.form.id' => action.form_id}

    # merge params hashes
    post_params = {}
    post_params = post_params.merge(ajax_form_params)
    post_params = post_params.merge(client_params)
    post_params = post_params.merge(action.to_params)
    post_params = post_params.merge(additional_options)

    # call post request, with get param ?format=json
    rsp = client.post_request_with_get_params(action_path, {'format'=>'json'}, post_params)
    action.raw_response = rsp
    body = rsp.body
    begin
      json_body = JSON.parse(body)
    rescue JSON::ParserError => e
      raise EngagingNetworks::InvalidJsonResponseError.new("Unable to parse JSON, Engaging Networks responded with: #{ body }; json: #{e.message} headers: #{rsp.headers} status: #{rsp.status}")
    end

    # parse json for first form field, apisuccess div
    if json_body['messages'].empty? || body =~ /apisuccess/
      if body =~ /apisuccess/
        success_div = json_body['pages'][0]['form']['fields'][0]['value']

        # TODO, this seems really fragile...
        action.result = Nokogiri::HTML(success_div).css('#apisuccess').text == "success"
      else
        action.result = true
      end
    else
      raise EngagingNetworks::InvalidActionError.new("Engaging Networks responded with: #{ body }")
    end

    action
  else
    action
  end
end
export(startDate) click to toggle source

individual get unavailable need to export and search actions

# File lib/engaging_networks/action.rb, line 11
def export(startDate)
  client.get_request(data_path, {startDate: startDate,
      token_type: EngagingNetworks::Request::MultiTokenAuthentication::PRIVATE})
end