class Sukremore::Client

Attributes

endpoint_name[R]

Public Class Methods

new(url, config) click to toggle source
# File lib/sukremore/client.rb, line 22
def initialize url, config
  @url= url
  @config= config
  @endpoint_name= @config['endpoint_name'] || 'Web'
end

Public Instance Methods

find_user_by_name(name) click to toggle source

GET Get the first user named with the name arg. Returns nil if not found.

# File lib/sukremore/client.rb, line 57
def find_user_by_name name
  users= find_users_by_name name
  users.first
end
find_users_by_name(name) click to toggle source

GET Get the users named with the name arg.

# File lib/sukremore/client.rb, line 65
def find_users_by_name name
  sugar_resp = sugar_do_rest_call(
    @url, 
    'get_entry_list',
    { :session => @session_id, 
      :module_name => "Users", 
      :query => "user_name='#{name}'",#"email_address IN ('#{email}')", # the SQL WHERE clause without the word “where”.
      :order_by => '', # the SQL ORDER BY clause without the phrase “order by”.
      :offset => '0', # the record offset from which to start.
      :select_fields => ['email_address'],
      :max_results => '1',
      #:link_name_to_fields_array => [{:name => 'id'}, {:value => ['id', 'name']}],
      :deleted => 0, # exclude deleted records
      :favorites => false # if only records marked as favorites should be returned.
    }
  )
  return sugar_resp["entry_list"]
end
from_accounts() click to toggle source
# File lib/sukremore/client.rb, line 45
def from_accounts
  Modules::Account.new(self)
end
from_emails() click to toggle source
# File lib/sukremore/client.rb, line 49
def from_emails
  Modules::Email.new(self)
end
from_leads() click to toggle source
# File lib/sukremore/client.rb, line 41
def from_leads
  Modules::Lead.new(self)
end
get_entry_list(module_name, params={}) click to toggle source
# File lib/sukremore/client.rb, line 109
def get_entry_list module_name, params={}
  sugar_rs= sugar_do_rest_call(
    @url,
    'get_entry_list',
    { :session => @session_id,
      :module_name => module_name, 
    }.merge(params)
  )
  sugar_rs
end
import_sugar_entity(sugar_entity) click to toggle source

Converts a Sugar Entity into a simple Ruby hash.

# File lib/sukremore/client.rb, line 139
def import_sugar_entity sugar_entity
  entity= {}
  sugar_entity['name_value_list'].values.each do |field|
    entity[field['name']]= field['value']
  end
  entity
end
set_entry(module_name, entry) click to toggle source

SET ENTRY Creates or updates an entity

# File lib/sukremore/client.rb, line 86
def set_entry module_name, entry
  names_values = []
  names_values << {:name => "id", :value => entry[:id]} if entry[:id].present?
  names_values << {:name => "date_entered", :value => Time.now} if entry[:id].blank?
  names_values << {:name => "created_by", :value => @logged_user['id']}  if entry[:id].blank?
  names_values << {:name => "date_modified", :value => Time.now}
  names_values << {:name => "modified_user_id", :value => @logged_user['id']}
  entry.entries.each do |field, value|
    names_values << {:name => field, :value => value}
  end

  sugar_resp= sugar_do_rest_call(
    @url,
    'set_entry',
    {
      :session => @session_id,
      :module_name => module_name,
      :name_value_list => names_values
    }
  )
  sugar_resp['id']
end
set_relationship(src_module_name, src_module_id, link_field_name, related_ids) click to toggle source

SET Insert relation between modules

# File lib/sukremore/client.rb, line 121
def set_relationship src_module_name, src_module_id, link_field_name, related_ids
  sugar_resp = sugar_do_rest_call(
    @url,
    'set_relationship',
    {
      :session => @session_id,
      :module_name => src_module_name,
      :module_id => src_module_id,
      :link_field_name => link_field_name,
      :related_ids => related_ids,
    }
  )
  sugar_resp["id"]
end
user_auth() click to toggle source

Authenticates with the given SugarCRM Returns true if succeeded, false otherwise.

# File lib/sukremore/client.rb, line 30
def user_auth
  sugar_resp = sugar_do_rest_call(
    @url, 
    'login', 
    :user_auth => {:user_name => @config['username'], :password => Digest::MD5.hexdigest(@config['password']), :version => @config['api_version']}
  )
  @session_id = sugar_resp['id']
  @logged_user= find_user_by_name @config['username']
  raise "Error performing login to SugarCRM, returned session_id is nil" if @session_id.blank?
end

Private Instance Methods

sugar_do_rest_call(url, method, params = {}) click to toggle source

Do a POST to SugarCRM

NOTE: Order of params IS important.

# File lib/sukremore/client.rb, line 156
def sugar_do_rest_call(url, method, params = {})
  uri = URI(url)
  http = Net::HTTP.new uri.host, uri.port
  http.open_timeout = 30
  # Uncoment this two lines for use SSL
  # http.use_ssl = true
  # http.verify_mode = OpenSSL::SSL::VERIFY_NONE

  json_params= params.to_json
  logger.debug "rest_call request method: #{method} params:#{json_params}"
  post_data = {
    :method => method,
    :input_type => 'JSON',
    :response_type => 'JSON',
    :rest_data => json_params,
  }
  http_resp = Net::HTTP.post_form(uri, post_data)
  logger.debug "rest_call response:::#{http_resp}=#{http_resp.body}"
  json_rs= JSON.parse(http_resp.body)
  if json_rs['number'] == 11
    # 11=> Invalid Session ID
    raise http_respt.body
  end
  json_rs
end