module Fakecrm::Contacts

Public Class Methods

included(base) click to toggle source
# File lib/fakecrm/server/contacts.rb, line 64
def self.included(base)
  base.class_eval do

    get '/crm/api/contacts.?:format?' do |format|
      fetch_many(Contact)
    end

    get '/crm/api/contacts/search.?:format?' do |format|
      search(Contact, [:account_id, :email, :login], [:first_name, :last_name, :job_title],
             params.fetch("sort_by", :updated_at).to_sym,
             params.fetch("sort_order", 'asc').to_s)
    end

    get '/crm/api/contacts/:id.?:format?' do |id, format|
      fetch_one(Contact, id.to_i)
    end

    put '/crm/api/contacts/:id.?:format?' do |id, format|
      update_one(Contact, id.to_i, params["contact"])
    end

    post '/crm/api/contacts.?:format?' do |format|
      contact = params["contact"]
      contact.delete("title") # workaround for silly connector tests
      create_one(Contact, contact)
    end

    delete '/crm/api/contacts/:id.?:format?' do |id, format|
      # TODO: role check ~> 422
      destroy_one(Contact, id.to_i)
    end

    # --- password ---
    post '/crm/api/contacts/:id/password_clear.?:format?' do |id, format|
      password_clear(id.to_i)
    end

    post '/crm/api/contacts/:id/password_request.?:format?' do |id, format|
      password_request(id.to_i)
    end

    post '/crm/api/contacts/password_set.?:format?' do |format|
      password_set
    end

    post '/crm/api/contacts/authenticate.?:format?' do |format|
      authenticate
    end
  end
end

Public Instance Methods

authenticate() click to toggle source
# File lib/fakecrm/server/contacts.rb, line 49
def authenticate
  contact = Contact.first(:login => params['login'])
  if !contact.nil?
    password = Password.first(:contact => contact)

    if !password.nil?
      status 200
      return body({:id => contact.id}.to_json)
    end
  end

  status 422
  body({'error' => "Authentication failed."}.to_json)
end
password_clear(primary_key) click to toggle source
# File lib/fakecrm/server/contacts.rb, line 25
def password_clear(primary_key)
  contact = Contact.get!(primary_key)
  Password.all(:contact => contact).destroy
  status 200
rescue ::DataMapper::ObjectNotFoundError => e
  status 404
end
password_request(primary_key) click to toggle source
# File lib/fakecrm/server/contacts.rb, line 4
def password_request(primary_key)
  contact = Contact.get!(primary_key)
  if contact.email.nil? || contact.email.empty?
    status 422
  else
    Password.all(:contact => contact).destroy
    password = Password.create(:contact => contact)
    if params["only_get_token"].to_s == 'true'
      status 200
      body password.token.to_json
    else
      # TODO: send email?
      ::Fakecrm.logger.info("Sending email with password change token (not really)")
      status 200
      body ''.to_json
    end
  end
rescue ::DataMapper::ObjectNotFoundError => e
  status 404
end
password_set() click to toggle source
# File lib/fakecrm/server/contacts.rb, line 33
def password_set
  password = Password.first(:token => params["token"])

  if password.nil?
    status 404
  else
    password.password = params['password']
    if password.save
      status 200
      body ''.to_json
    else
      status 422
    end
  end
end