Repository files navigation

basecrm-ruby

BaseCRM Official API V2 library client for ruby

Installation

Make sure you have rubygems installed.

The gem is available via Rubygems. To install, use the following command:

geminstallbasecrm

If you use Bundler, put the line below in your Gemfile:

gem'basecrm'

To get the latest version, put this in your Gemfile:

gem'basecrm',:git=>'git://github.com/basecrm/basecrm-ruby.git'

Usage

require"basecrm"# Then we instantiate a client (as shown below)

Build a client

Using this api without authentication gives an error

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")

Client Options

The following options are available while instantiating a client:

  • access_token: Personal access token
  • base_url: Base url for the api
  • user_agent: Default user-agent for all requests
  • timeout: Request timeout
  • verbose: Verbose/debug mode
  • logger: Logger used in verbose mode

Architecture

The library follows few architectural principles you should understand before digging deeper.

  1. Interactions with resources are done via service objects.
  2. Service objects are exposed as methods on client instances.
  3. Service objects expose resource-oriented actions.
  4. Actions return Plain Old Ruby Objects.

For example, to interact with deals API you will use DealsService, which you can get if you call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

When you want to fetch all resources you will use #all method which returns paginated resource (which implements Enumerable):

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.all.map{ |deal| deal.name}# => Array<String>

To retrieve list of resources and use filtering you will call #where method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.where(organization_id: google.id,hot: true)# => Array<BaseCRM::Deal>

To find a resource by it's unique identifier use #find method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.find(id)# => BaseCRM::Deal

When you'd like to create a resource, or update it's attributes you want to use either #create or #update methods. Both of them can take either Hash or a model class e.g. Deal instance. For example if you want to create a new deal you will call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")coffeeshop=client.contacts.where(name: "Coffee Shop")deal=client.deals.create(name: "Website redesign",contact_id: coffeeshop.id)deal.value=BigDecimal("1000.99")deal.currency="USD"client.deals.update(deal)# => BaseCRM::Deal

To destroy a resource use #destroy method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.destroy(id)# => true

There other non-CRUD operations supported as well. Please contact corresponding service files for in-depth documentation.

Full example

Create a new organization and after that change it's attributes (website).

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")lead=client.leads.create(organization_name: "Design service company")lead.website="http://www.designservices.com"client.leads.update(lead)

Sync API

The following sample code shows how to perform a full synchronization flow using high-level wrapper.

First of all you need an instance of BaseCRM::Client. High-level BaseCRM::Sync wrapper is using BaseCRM::SyncService to interact with the Sync API. In addition to the client instance, you must provide a device’s UUID within device_uuid parameter. The device’s UUID must not change between synchronization sessions, otherwise the sync service will not recognize the device and will send all the data again.

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")sync=BaseCRM::Sync.new(client: client,device_uuid: "<YOUR_DEVICES_UUID>")

Now all you have to do is to call #fetch method and pass a block that you might use to store fetched data to a database.

sync.fetchdo |meta,resource|
options={table: meta.type,statement: meta.sync.event_type,properties: resource}DB.execute(options) ? meta.sync.ack : meta.sync.nackend

Notice that you must call either #ack or #nack method on an instance of BaseCRM::SyncMeta.

Resources and actions

Documentation for every action can be found in corresponding service files under lib/basecrm/services directory.

Account

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.accounts# => BaseCRM::AccountsService

Actions:

  • Retrieve account details - client.accounts.self

AssociatedContact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.associated_contacts# => BaseCRM::AssociatedContactsService

Actions:

  • Retrieve deal's associated contacts - client.associated_contacts.all
  • Create an associated contact - client.associated_contacts.create
  • Remove an associated contact - client.associated_contacts.destroy

Call

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.calls# => BaseCRM::CallsService

Actions:

  • Retrieve all calls - client.calls.all
  • Create a call - client.calls.create
  • Retrieve a single call - client.calls.find
  • Update a call - client.calls.update
  • Delete a call - client.calls.destroy

CallOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.call_outcomes# => BaseCRM::CallOutcomesService

Actions:

  • Retrieve all call outcomes - client.call_outcomes.all

Contact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.contacts# => BaseCRM::ContactsService

Actions:

  • Retrieve all contacts - client.contacts.all
  • Create a contact - client.contacts.create
  • Retrieve a single contact - client.contacts.find
  • Update a contact - client.contacts.update
  • Delete a contact - client.contacts.destroy

Deal

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

Actions:

  • Retrieve all deals - client.deals.all
  • Create a deal - client.deals.create
  • Retrieve a single deal - client.deals.find
  • Update a deal - client.deals.update
  • Delete a deal - client.deals.destroy

A note about deal value

It is prefered to use a BigDecimal when creating or modyfing a deal value. This guarantees correct precision

deal.value = BigDecimal("1000.98")

You should not be using floats as it may result in precision loss.

deal.value = 1000.98

DealSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_sources# => BaseCRM::DealSourcesService

Actions:

  • Retrieve all sources - client.deal_sources.all
  • Create a new source - client.deal_sources.create
  • Retrieve a single source - client.deal_sources.find
  • Update a source - client.deal_sources.update
  • Delete a source - client.deal_sources.destroy

DealUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_unqualified_reasons# => BaseCRM::DealUnqualifiedReasonsService

Actions:

  • Retrieve all deal unqualified reasons - client.deal_unqualified_reasons.all
  • Create a deal unqualified reason - client.deal_unqualified_reasons.create
  • Retrieve a single deal unqualified reason - client.deal_unqualified_reasons.find
  • Update a deal unqualified reason - client.deal_unqualified_reasons.update
  • Delete a deal unqualified reason - client.deal_unqualified_reasons.destroy

Lead

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.leads# => BaseCRM::LeadsService

Actions:

  • Retrieve all leads - client.leads.all
  • Create a lead - client.leads.create
  • Retrieve a single lead - client.leads.find
  • Update a lead - client.leads.update
  • Delete a lead - client.leads.destroy

LeadSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_sources# => BaseCRM::LeadSourcesService

Actions:

  • Retrieve all sources - client.lead_sources.all
  • Create a new source - client.lead_sources.create
  • Retrieve a single source - client.lead_sources.find
  • Update a source - client.lead_sources.update
  • Delete a source - client.lead_sources.destroy

LeadUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_unqualified_reasons# => BaseCRM::LeadUnqualifiedReasonsService

Actions:

  • Retrieve all lead unqualified reasons - client.lead_unqualified_reasons.all

LineItem

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.line_items# => BaseCRM::LineItemsService

Actions:

  • Retrieve order's line items - client.line_items.all
  • Create a line item - client.line_items.create
  • Retrieve a single line item - client.line_items.find
  • Delete a line item - client.line_items.destroy

LossReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.loss_reasons# => BaseCRM::LossReasonsService

Actions:

  • Retrieve all reasons - client.loss_reasons.all
  • Create a loss reason - client.loss_reasons.create
  • Retrieve a single reason - client.loss_reasons.find
  • Update a loss reason - client.loss_reasons.update
  • Delete a reason - client.loss_reasons.destroy

Note

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.notes# => BaseCRM::NotesService

Actions:

  • Retrieve all notes - client.notes.all
  • Create a note - client.notes.create
  • Retrieve a single note - client.notes.find
  • Update a note - client.notes.update
  • Delete a note - client.notes.destroy

Order

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.orders# => BaseCRM::OrdersService

Actions:

  • Retrieve all orders - client.orders.all
  • Create an order - client.orders.create
  • Retrieve a single order - client.orders.find
  • Update an order - client.orders.update
  • Delete an order - client.orders.destroy

Pipeline

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.pipelines# => BaseCRM::PipelinesService

Actions:

  • Retrieve all pipelines - client.pipelines.all

Product

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.products# => BaseCRM::ProductsService

Actions:

  • Retrieve all products - client.products.all
  • Create a product - client.products.create
  • Retrieve a single product - client.products.find
  • Update a product - client.products.update
  • Delete a product - client.products.destroy

Source (Deprecated, use LeadSource or DealSource instead)

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.sources# => BaseCRM::SourcesService

Actions:

  • Retrieve all sources - client.sources.all
  • Create a source - client.sources.create
  • Retrieve a single source - client.sources.find
  • Update a source - client.sources.update
  • Delete a source - client.sources.destroy

Stage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.stages# => BaseCRM::StagesService

Actions:

  • Retrieve all stages - client.stages.all

Tag

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tags# => BaseCRM::TagsService

Actions:

  • Retrieve all tags - client.tags.all
  • Create a tag - client.tags.create
  • Retrieve a single tag - client.tags.find
  • Update a tag - client.tags.update
  • Delete a tag - client.tags.destroy

Task

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tasks# => BaseCRM::TasksService

Actions:

  • Retrieve all tasks - client.tasks.all
  • Create a task - client.tasks.create
  • Retrieve a single task - client.tasks.find
  • Update a task - client.tasks.update
  • Delete a task - client.tasks.destroy

TextMessage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.text_messages# => BaseCRM::TextMessagesService

Actions:

  • Retrieve text messages - client.text_messages.all
  • Retrieve a single text message - client.text_messages.find

User

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.users# => BaseCRM::UsersService

Actions:

  • Retrieve all users - client.users.all
  • Retrieve a single user - client.users.find
  • Retrieve an authenticating user - client.users.self

Visit

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visits# => BaseCRM::VisitsService

Actions:

  • Retrieve visits - client.visits.all

VisitOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visit_outcomes# => BaseCRM::VisitOutcomesService

Actions:

  • Retrieve visit outcomes - client.visit_outcomes.all

License

MIT

Bug Reports

Report here.

Contact

BaseCRM developers (developers@getbase.com)

About

Base CRM API Client

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

basecrm-ruby

BaseCRM Official API V2 library client for ruby

Installation

Make sure you have rubygems installed.

The gem is available via Rubygems. To install, use the following command:

geminstallbasecrm

If you use Bundler, put the line below in your Gemfile:

gem'basecrm'

To get the latest version, put this in your Gemfile:

gem'basecrm',:git=>'git://github.com/basecrm/basecrm-ruby.git'

Usage

require"basecrm"# Then we instantiate a client (as shown below)

Build a client

Using this api without authentication gives an error

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")

Client Options

The following options are available while instantiating a client:

  • access_token: Personal access token
  • base_url: Base url for the api
  • user_agent: Default user-agent for all requests
  • timeout: Request timeout
  • verbose: Verbose/debug mode
  • logger: Logger used in verbose mode

Architecture

The library follows few architectural principles you should understand before digging deeper.

  1. Interactions with resources are done via service objects.
  2. Service objects are exposed as methods on client instances.
  3. Service objects expose resource-oriented actions.
  4. Actions return Plain Old Ruby Objects.

For example, to interact with deals API you will use DealsService, which you can get if you call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

When you want to fetch all resources you will use #all method which returns paginated resource (which implements Enumerable):

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.all.map{ |deal| deal.name}# => Array<String>

To retrieve list of resources and use filtering you will call #where method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.where(organization_id: google.id,hot: true)# => Array<BaseCRM::Deal>

To find a resource by it's unique identifier use #find method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.find(id)# => BaseCRM::Deal

When you'd like to create a resource, or update it's attributes you want to use either #create or #update methods. Both of them can take either Hash or a model class e.g. Deal instance. For example if you want to create a new deal you will call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")coffeeshop=client.contacts.where(name: "Coffee Shop")deal=client.deals.create(name: "Website redesign",contact_id: coffeeshop.id)deal.value=BigDecimal("1000.99")deal.currency="USD"client.deals.update(deal)# => BaseCRM::Deal

To destroy a resource use #destroy method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.destroy(id)# => true

There other non-CRUD operations supported as well. Please contact corresponding service files for in-depth documentation.

Full example

Create a new organization and after that change it's attributes (website).

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")lead=client.leads.create(organization_name: "Design service company")lead.website="http://www.designservices.com"client.leads.update(lead)

Sync API

The following sample code shows how to perform a full synchronization flow using high-level wrapper.

First of all you need an instance of BaseCRM::Client. High-level BaseCRM::Sync wrapper is using BaseCRM::SyncService to interact with the Sync API. In addition to the client instance, you must provide a device’s UUID within device_uuid parameter. The device’s UUID must not change between synchronization sessions, otherwise the sync service will not recognize the device and will send all the data again.

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")sync=BaseCRM::Sync.new(client: client,device_uuid: "<YOUR_DEVICES_UUID>")

Now all you have to do is to call #fetch method and pass a block that you might use to store fetched data to a database.

sync.fetchdo |meta,resource|
options={table: meta.type,statement: meta.sync.event_type,properties: resource}DB.execute(options) ? meta.sync.ack : meta.sync.nackend

Notice that you must call either #ack or #nack method on an instance of BaseCRM::SyncMeta.

Resources and actions

Documentation for every action can be found in corresponding service files under lib/basecrm/services directory.

Account

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.accounts# => BaseCRM::AccountsService

Actions:

  • Retrieve account details - client.accounts.self

AssociatedContact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.associated_contacts# => BaseCRM::AssociatedContactsService

Actions:

  • Retrieve deal's associated contacts - client.associated_contacts.all
  • Create an associated contact - client.associated_contacts.create
  • Remove an associated contact - client.associated_contacts.destroy

Call

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.calls# => BaseCRM::CallsService

Actions:

  • Retrieve all calls - client.calls.all
  • Create a call - client.calls.create
  • Retrieve a single call - client.calls.find
  • Update a call - client.calls.update
  • Delete a call - client.calls.destroy

CallOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.call_outcomes# => BaseCRM::CallOutcomesService

Actions:

  • Retrieve all call outcomes - client.call_outcomes.all

Contact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.contacts# => BaseCRM::ContactsService

Actions:

  • Retrieve all contacts - client.contacts.all
  • Create a contact - client.contacts.create
  • Retrieve a single contact - client.contacts.find
  • Update a contact - client.contacts.update
  • Delete a contact - client.contacts.destroy

Deal

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

Actions:

  • Retrieve all deals - client.deals.all
  • Create a deal - client.deals.create
  • Retrieve a single deal - client.deals.find
  • Update a deal - client.deals.update
  • Delete a deal - client.deals.destroy

A note about deal value

It is prefered to use a BigDecimal when creating or modyfing a deal value. This guarantees correct precision

deal.value = BigDecimal("1000.98")

You should not be using floats as it may result in precision loss.

deal.value = 1000.98

DealSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_sources# => BaseCRM::DealSourcesService

Actions:

  • Retrieve all sources - client.deal_sources.all
  • Create a new source - client.deal_sources.create
  • Retrieve a single source - client.deal_sources.find
  • Update a source - client.deal_sources.update
  • Delete a source - client.deal_sources.destroy

DealUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_unqualified_reasons# => BaseCRM::DealUnqualifiedReasonsService

Actions:

  • Retrieve all deal unqualified reasons - client.deal_unqualified_reasons.all
  • Create a deal unqualified reason - client.deal_unqualified_reasons.create
  • Retrieve a single deal unqualified reason - client.deal_unqualified_reasons.find
  • Update a deal unqualified reason - client.deal_unqualified_reasons.update
  • Delete a deal unqualified reason - client.deal_unqualified_reasons.destroy

Lead

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.leads# => BaseCRM::LeadsService

Actions:

  • Retrieve all leads - client.leads.all
  • Create a lead - client.leads.create
  • Retrieve a single lead - client.leads.find
  • Update a lead - client.leads.update
  • Delete a lead - client.leads.destroy

LeadSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_sources# => BaseCRM::LeadSourcesService

Actions:

  • Retrieve all sources - client.lead_sources.all
  • Create a new source - client.lead_sources.create
  • Retrieve a single source - client.lead_sources.find
  • Update a source - client.lead_sources.update
  • Delete a source - client.lead_sources.destroy

LeadUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_unqualified_reasons# => BaseCRM::LeadUnqualifiedReasonsService

Actions:

  • Retrieve all lead unqualified reasons - client.lead_unqualified_reasons.all

LineItem

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.line_items# => BaseCRM::LineItemsService

Actions:

  • Retrieve order's line items - client.line_items.all
  • Create a line item - client.line_items.create
  • Retrieve a single line item - client.line_items.find
  • Delete a line item - client.line_items.destroy

LossReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.loss_reasons# => BaseCRM::LossReasonsService

Actions:

  • Retrieve all reasons - client.loss_reasons.all
  • Create a loss reason - client.loss_reasons.create
  • Retrieve a single reason - client.loss_reasons.find
  • Update a loss reason - client.loss_reasons.update
  • Delete a reason - client.loss_reasons.destroy

Note

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.notes# => BaseCRM::NotesService

Actions:

  • Retrieve all notes - client.notes.all
  • Create a note - client.notes.create
  • Retrieve a single note - client.notes.find
  • Update a note - client.notes.update
  • Delete a note - client.notes.destroy

Order

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.orders# => BaseCRM::OrdersService

Actions:

  • Retrieve all orders - client.orders.all
  • Create an order - client.orders.create
  • Retrieve a single order - client.orders.find
  • Update an order - client.orders.update
  • Delete an order - client.orders.destroy

Pipeline

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.pipelines# => BaseCRM::PipelinesService

Actions:

  • Retrieve all pipelines - client.pipelines.all

Product

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.products# => BaseCRM::ProductsService

Actions:

  • Retrieve all products - client.products.all
  • Create a product - client.products.create
  • Retrieve a single product - client.products.find
  • Update a product - client.products.update
  • Delete a product - client.products.destroy

Source (Deprecated, use LeadSource or DealSource instead)

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.sources# => BaseCRM::SourcesService

Actions:

  • Retrieve all sources - client.sources.all
  • Create a source - client.sources.create
  • Retrieve a single source - client.sources.find
  • Update a source - client.sources.update
  • Delete a source - client.sources.destroy

Stage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.stages# => BaseCRM::StagesService

Actions:

  • Retrieve all stages - client.stages.all

Tag

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tags# => BaseCRM::TagsService

Actions:

  • Retrieve all tags - client.tags.all
  • Create a tag - client.tags.create
  • Retrieve a single tag - client.tags.find
  • Update a tag - client.tags.update
  • Delete a tag - client.tags.destroy

Task

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tasks# => BaseCRM::TasksService

Actions:

  • Retrieve all tasks - client.tasks.all
  • Create a task - client.tasks.create
  • Retrieve a single task - client.tasks.find
  • Update a task - client.tasks.update
  • Delete a task - client.tasks.destroy

TextMessage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.text_messages# => BaseCRM::TextMessagesService

Actions:

  • Retrieve text messages - client.text_messages.all
  • Retrieve a single text message - client.text_messages.find

User

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.users# => BaseCRM::UsersService

Actions:

  • Retrieve all users - client.users.all
  • Retrieve a single user - client.users.find
  • Retrieve an authenticating user - client.users.self

Visit

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visits# => BaseCRM::VisitsService

Actions:

  • Retrieve visits - client.visits.all

VisitOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visit_outcomes# => BaseCRM::VisitOutcomesService

Actions:

  • Retrieve visit outcomes - client.visit_outcomes.all

License

MIT

Bug Reports

Report here.

Contact

BaseCRM developers (developers@getbase.com)

About

Base CRM API Client

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

basecrm-ruby

BaseCRM Official API V2 library client for ruby

Installation

Make sure you have rubygems installed.

The gem is available via Rubygems. To install, use the following command:

geminstallbasecrm

If you use Bundler, put the line below in your Gemfile:

gem'basecrm'

To get the latest version, put this in your Gemfile:

gem'basecrm',:git=>'git://github.com/basecrm/basecrm-ruby.git'

Usage

require"basecrm"# Then we instantiate a client (as shown below)

Build a client

Using this api without authentication gives an error

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")

Client Options

The following options are available while instantiating a client:

  • access_token: Personal access token
  • base_url: Base url for the api
  • user_agent: Default user-agent for all requests
  • timeout: Request timeout
  • verbose: Verbose/debug mode
  • logger: Logger used in verbose mode

Architecture

The library follows few architectural principles you should understand before digging deeper.

  1. Interactions with resources are done via service objects.
  2. Service objects are exposed as methods on client instances.
  3. Service objects expose resource-oriented actions.
  4. Actions return Plain Old Ruby Objects.

For example, to interact with deals API you will use DealsService, which you can get if you call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

When you want to fetch all resources you will use #all method which returns paginated resource (which implements Enumerable):

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.all.map{ |deal| deal.name}# => Array<String>

To retrieve list of resources and use filtering you will call #where method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.where(organization_id: google.id,hot: true)# => Array<BaseCRM::Deal>

To find a resource by it's unique identifier use #find method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.find(id)# => BaseCRM::Deal

When you'd like to create a resource, or update it's attributes you want to use either #create or #update methods. Both of them can take either Hash or a model class e.g. Deal instance. For example if you want to create a new deal you will call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")coffeeshop=client.contacts.where(name: "Coffee Shop")deal=client.deals.create(name: "Website redesign",contact_id: coffeeshop.id)deal.value=BigDecimal("1000.99")deal.currency="USD"client.deals.update(deal)# => BaseCRM::Deal

To destroy a resource use #destroy method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.destroy(id)# => true

There other non-CRUD operations supported as well. Please contact corresponding service files for in-depth documentation.

Full example

Create a new organization and after that change it's attributes (website).

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")lead=client.leads.create(organization_name: "Design service company")lead.website="http://www.designservices.com"client.leads.update(lead)

Sync API

The following sample code shows how to perform a full synchronization flow using high-level wrapper.

First of all you need an instance of BaseCRM::Client. High-level BaseCRM::Sync wrapper is using BaseCRM::SyncService to interact with the Sync API. In addition to the client instance, you must provide a device’s UUID within device_uuid parameter. The device’s UUID must not change between synchronization sessions, otherwise the sync service will not recognize the device and will send all the data again.

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")sync=BaseCRM::Sync.new(client: client,device_uuid: "<YOUR_DEVICES_UUID>")

Now all you have to do is to call #fetch method and pass a block that you might use to store fetched data to a database.

sync.fetchdo |meta,resource|
options={table: meta.type,statement: meta.sync.event_type,properties: resource}DB.execute(options) ? meta.sync.ack : meta.sync.nackend

Notice that you must call either #ack or #nack method on an instance of BaseCRM::SyncMeta.

Resources and actions

Documentation for every action can be found in corresponding service files under lib/basecrm/services directory.

Account

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.accounts# => BaseCRM::AccountsService

Actions:

  • Retrieve account details - client.accounts.self

AssociatedContact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.associated_contacts# => BaseCRM::AssociatedContactsService

Actions:

  • Retrieve deal's associated contacts - client.associated_contacts.all
  • Create an associated contact - client.associated_contacts.create
  • Remove an associated contact - client.associated_contacts.destroy

Call

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.calls# => BaseCRM::CallsService

Actions:

  • Retrieve all calls - client.calls.all
  • Create a call - client.calls.create
  • Retrieve a single call - client.calls.find
  • Update a call - client.calls.update
  • Delete a call - client.calls.destroy

CallOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.call_outcomes# => BaseCRM::CallOutcomesService

Actions:

  • Retrieve all call outcomes - client.call_outcomes.all

Contact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.contacts# => BaseCRM::ContactsService

Actions:

  • Retrieve all contacts - client.contacts.all
  • Create a contact - client.contacts.create
  • Retrieve a single contact - client.contacts.find
  • Update a contact - client.contacts.update
  • Delete a contact - client.contacts.destroy

Deal

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

Actions:

  • Retrieve all deals - client.deals.all
  • Create a deal - client.deals.create
  • Retrieve a single deal - client.deals.find
  • Update a deal - client.deals.update
  • Delete a deal - client.deals.destroy

A note about deal value

It is prefered to use a BigDecimal when creating or modyfing a deal value. This guarantees correct precision

deal.value = BigDecimal("1000.98")

You should not be using floats as it may result in precision loss.

deal.value = 1000.98

DealSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_sources# => BaseCRM::DealSourcesService

Actions:

  • Retrieve all sources - client.deal_sources.all
  • Create a new source - client.deal_sources.create
  • Retrieve a single source - client.deal_sources.find
  • Update a source - client.deal_sources.update
  • Delete a source - client.deal_sources.destroy

DealUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_unqualified_reasons# => BaseCRM::DealUnqualifiedReasonsService

Actions:

  • Retrieve all deal unqualified reasons - client.deal_unqualified_reasons.all
  • Create a deal unqualified reason - client.deal_unqualified_reasons.create
  • Retrieve a single deal unqualified reason - client.deal_unqualified_reasons.find
  • Update a deal unqualified reason - client.deal_unqualified_reasons.update
  • Delete a deal unqualified reason - client.deal_unqualified_reasons.destroy

Lead

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.leads# => BaseCRM::LeadsService

Actions:

  • Retrieve all leads - client.leads.all
  • Create a lead - client.leads.create
  • Retrieve a single lead - client.leads.find
  • Update a lead - client.leads.update
  • Delete a lead - client.leads.destroy

LeadSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_sources# => BaseCRM::LeadSourcesService

Actions:

  • Retrieve all sources - client.lead_sources.all
  • Create a new source - client.lead_sources.create
  • Retrieve a single source - client.lead_sources.find
  • Update a source - client.lead_sources.update
  • Delete a source - client.lead_sources.destroy

LeadUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_unqualified_reasons# => BaseCRM::LeadUnqualifiedReasonsService

Actions:

  • Retrieve all lead unqualified reasons - client.lead_unqualified_reasons.all

LineItem

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.line_items# => BaseCRM::LineItemsService

Actions:

  • Retrieve order's line items - client.line_items.all
  • Create a line item - client.line_items.create
  • Retrieve a single line item - client.line_items.find
  • Delete a line item - client.line_items.destroy

LossReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.loss_reasons# => BaseCRM::LossReasonsService

Actions:

  • Retrieve all reasons - client.loss_reasons.all
  • Create a loss reason - client.loss_reasons.create
  • Retrieve a single reason - client.loss_reasons.find
  • Update a loss reason - client.loss_reasons.update
  • Delete a reason - client.loss_reasons.destroy

Note

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.notes# => BaseCRM::NotesService

Actions:

  • Retrieve all notes - client.notes.all
  • Create a note - client.notes.create
  • Retrieve a single note - client.notes.find
  • Update a note - client.notes.update
  • Delete a note - client.notes.destroy

Order

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.orders# => BaseCRM::OrdersService

Actions:

  • Retrieve all orders - client.orders.all
  • Create an order - client.orders.create
  • Retrieve a single order - client.orders.find
  • Update an order - client.orders.update
  • Delete an order - client.orders.destroy

Pipeline

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.pipelines# => BaseCRM::PipelinesService

Actions:

  • Retrieve all pipelines - client.pipelines.all

Product

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.products# => BaseCRM::ProductsService

Actions:

  • Retrieve all products - client.products.all
  • Create a product - client.products.create
  • Retrieve a single product - client.products.find
  • Update a product - client.products.update
  • Delete a product - client.products.destroy

Source (Deprecated, use LeadSource or DealSource instead)

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.sources# => BaseCRM::SourcesService

Actions:

  • Retrieve all sources - client.sources.all
  • Create a source - client.sources.create
  • Retrieve a single source - client.sources.find
  • Update a source - client.sources.update
  • Delete a source - client.sources.destroy

Stage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.stages# => BaseCRM::StagesService

Actions:

  • Retrieve all stages - client.stages.all

Tag

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tags# => BaseCRM::TagsService

Actions:

  • Retrieve all tags - client.tags.all
  • Create a tag - client.tags.create
  • Retrieve a single tag - client.tags.find
  • Update a tag - client.tags.update
  • Delete a tag - client.tags.destroy

Task

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tasks# => BaseCRM::TasksService

Actions:

  • Retrieve all tasks - client.tasks.all
  • Create a task - client.tasks.create
  • Retrieve a single task - client.tasks.find
  • Update a task - client.tasks.update
  • Delete a task - client.tasks.destroy

TextMessage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.text_messages# => BaseCRM::TextMessagesService

Actions:

  • Retrieve text messages - client.text_messages.all
  • Retrieve a single text message - client.text_messages.find

User

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.users# => BaseCRM::UsersService

Actions:

  • Retrieve all users - client.users.all
  • Retrieve a single user - client.users.find
  • Retrieve an authenticating user - client.users.self

Visit

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visits# => BaseCRM::VisitsService

Actions:

  • Retrieve visits - client.visits.all

VisitOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visit_outcomes# => BaseCRM::VisitOutcomesService

Actions:

  • Retrieve visit outcomes - client.visit_outcomes.all

License

MIT

Bug Reports

Report here.

Contact

BaseCRM developers (developers@getbase.com)

About

Base CRM API Client

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

basecrm-ruby

BaseCRM Official API V2 library client for ruby

Installation

Make sure you have rubygems installed.

The gem is available via Rubygems. To install, use the following command:

geminstallbasecrm

If you use Bundler, put the line below in your Gemfile:

gem'basecrm'

To get the latest version, put this in your Gemfile:

gem'basecrm',:git=>'git://github.com/basecrm/basecrm-ruby.git'

Usage

require"basecrm"# Then we instantiate a client (as shown below)

Build a client

Using this api without authentication gives an error

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")

Client Options

The following options are available while instantiating a client:

  • access_token: Personal access token
  • base_url: Base url for the api
  • user_agent: Default user-agent for all requests
  • timeout: Request timeout
  • verbose: Verbose/debug mode
  • logger: Logger used in verbose mode

Architecture

The library follows few architectural principles you should understand before digging deeper.

  1. Interactions with resources are done via service objects.
  2. Service objects are exposed as methods on client instances.
  3. Service objects expose resource-oriented actions.
  4. Actions return Plain Old Ruby Objects.

For example, to interact with deals API you will use DealsService, which you can get if you call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

When you want to fetch all resources you will use #all method which returns paginated resource (which implements Enumerable):

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.all.map{ |deal| deal.name}# => Array<String>

To retrieve list of resources and use filtering you will call #where method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.where(organization_id: google.id,hot: true)# => Array<BaseCRM::Deal>

To find a resource by it's unique identifier use #find method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.find(id)# => BaseCRM::Deal

When you'd like to create a resource, or update it's attributes you want to use either #create or #update methods. Both of them can take either Hash or a model class e.g. Deal instance. For example if you want to create a new deal you will call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")coffeeshop=client.contacts.where(name: "Coffee Shop")deal=client.deals.create(name: "Website redesign",contact_id: coffeeshop.id)deal.value=BigDecimal("1000.99")deal.currency="USD"client.deals.update(deal)# => BaseCRM::Deal

To destroy a resource use #destroy method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.destroy(id)# => true

There other non-CRUD operations supported as well. Please contact corresponding service files for in-depth documentation.

Full example

Create a new organization and after that change it's attributes (website).

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")lead=client.leads.create(organization_name: "Design service company")lead.website="http://www.designservices.com"client.leads.update(lead)

Sync API

The following sample code shows how to perform a full synchronization flow using high-level wrapper.

First of all you need an instance of BaseCRM::Client. High-level BaseCRM::Sync wrapper is using BaseCRM::SyncService to interact with the Sync API. In addition to the client instance, you must provide a device’s UUID within device_uuid parameter. The device’s UUID must not change between synchronization sessions, otherwise the sync service will not recognize the device and will send all the data again.

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")sync=BaseCRM::Sync.new(client: client,device_uuid: "<YOUR_DEVICES_UUID>")

Now all you have to do is to call #fetch method and pass a block that you might use to store fetched data to a database.

sync.fetchdo |meta,resource|
options={table: meta.type,statement: meta.sync.event_type,properties: resource}DB.execute(options) ? meta.sync.ack : meta.sync.nackend

Notice that you must call either #ack or #nack method on an instance of BaseCRM::SyncMeta.

Resources and actions

Documentation for every action can be found in corresponding service files under lib/basecrm/services directory.

Account

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.accounts# => BaseCRM::AccountsService

Actions:

  • Retrieve account details - client.accounts.self

AssociatedContact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.associated_contacts# => BaseCRM::AssociatedContactsService

Actions:

  • Retrieve deal's associated contacts - client.associated_contacts.all
  • Create an associated contact - client.associated_contacts.create
  • Remove an associated contact - client.associated_contacts.destroy

Call

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.calls# => BaseCRM::CallsService

Actions:

  • Retrieve all calls - client.calls.all
  • Create a call - client.calls.create
  • Retrieve a single call - client.calls.find
  • Update a call - client.calls.update
  • Delete a call - client.calls.destroy

CallOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.call_outcomes# => BaseCRM::CallOutcomesService

Actions:

  • Retrieve all call outcomes - client.call_outcomes.all

Contact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.contacts# => BaseCRM::ContactsService

Actions:

  • Retrieve all contacts - client.contacts.all
  • Create a contact - client.contacts.create
  • Retrieve a single contact - client.contacts.find
  • Update a contact - client.contacts.update
  • Delete a contact - client.contacts.destroy

Deal

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

Actions:

  • Retrieve all deals - client.deals.all
  • Create a deal - client.deals.create
  • Retrieve a single deal - client.deals.find
  • Update a deal - client.deals.update
  • Delete a deal - client.deals.destroy

A note about deal value

It is prefered to use a BigDecimal when creating or modyfing a deal value. This guarantees correct precision

deal.value = BigDecimal("1000.98")

You should not be using floats as it may result in precision loss.

deal.value = 1000.98

DealSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_sources# => BaseCRM::DealSourcesService

Actions:

  • Retrieve all sources - client.deal_sources.all
  • Create a new source - client.deal_sources.create
  • Retrieve a single source - client.deal_sources.find
  • Update a source - client.deal_sources.update
  • Delete a source - client.deal_sources.destroy

DealUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_unqualified_reasons# => BaseCRM::DealUnqualifiedReasonsService

Actions:

  • Retrieve all deal unqualified reasons - client.deal_unqualified_reasons.all
  • Create a deal unqualified reason - client.deal_unqualified_reasons.create
  • Retrieve a single deal unqualified reason - client.deal_unqualified_reasons.find
  • Update a deal unqualified reason - client.deal_unqualified_reasons.update
  • Delete a deal unqualified reason - client.deal_unqualified_reasons.destroy

Lead

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.leads# => BaseCRM::LeadsService

Actions:

  • Retrieve all leads - client.leads.all
  • Create a lead - client.leads.create
  • Retrieve a single lead - client.leads.find
  • Update a lead - client.leads.update
  • Delete a lead - client.leads.destroy

LeadSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_sources# => BaseCRM::LeadSourcesService

Actions:

  • Retrieve all sources - client.lead_sources.all
  • Create a new source - client.lead_sources.create
  • Retrieve a single source - client.lead_sources.find
  • Update a source - client.lead_sources.update
  • Delete a source - client.lead_sources.destroy

LeadUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_unqualified_reasons# => BaseCRM::LeadUnqualifiedReasonsService

Actions:

  • Retrieve all lead unqualified reasons - client.lead_unqualified_reasons.all

LineItem

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.line_items# => BaseCRM::LineItemsService

Actions:

  • Retrieve order's line items - client.line_items.all
  • Create a line item - client.line_items.create
  • Retrieve a single line item - client.line_items.find
  • Delete a line item - client.line_items.destroy

LossReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.loss_reasons# => BaseCRM::LossReasonsService

Actions:

  • Retrieve all reasons - client.loss_reasons.all
  • Create a loss reason - client.loss_reasons.create
  • Retrieve a single reason - client.loss_reasons.find
  • Update a loss reason - client.loss_reasons.update
  • Delete a reason - client.loss_reasons.destroy

Note

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.notes# => BaseCRM::NotesService

Actions:

  • Retrieve all notes - client.notes.all
  • Create a note - client.notes.create
  • Retrieve a single note - client.notes.find
  • Update a note - client.notes.update
  • Delete a note - client.notes.destroy

Order

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.orders# => BaseCRM::OrdersService

Actions:

  • Retrieve all orders - client.orders.all
  • Create an order - client.orders.create
  • Retrieve a single order - client.orders.find
  • Update an order - client.orders.update
  • Delete an order - client.orders.destroy

Pipeline

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.pipelines# => BaseCRM::PipelinesService

Actions:

  • Retrieve all pipelines - client.pipelines.all

Product

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.products# => BaseCRM::ProductsService

Actions:

  • Retrieve all products - client.products.all
  • Create a product - client.products.create
  • Retrieve a single product - client.products.find
  • Update a product - client.products.update
  • Delete a product - client.products.destroy

Source (Deprecated, use LeadSource or DealSource instead)

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.sources# => BaseCRM::SourcesService

Actions:

  • Retrieve all sources - client.sources.all
  • Create a source - client.sources.create
  • Retrieve a single source - client.sources.find
  • Update a source - client.sources.update
  • Delete a source - client.sources.destroy

Stage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.stages# => BaseCRM::StagesService

Actions:

  • Retrieve all stages - client.stages.all

Tag

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tags# => BaseCRM::TagsService

Actions:

  • Retrieve all tags - client.tags.all
  • Create a tag - client.tags.create
  • Retrieve a single tag - client.tags.find
  • Update a tag - client.tags.update
  • Delete a tag - client.tags.destroy

Task

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tasks# => BaseCRM::TasksService

Actions:

  • Retrieve all tasks - client.tasks.all
  • Create a task - client.tasks.create
  • Retrieve a single task - client.tasks.find
  • Update a task - client.tasks.update
  • Delete a task - client.tasks.destroy

TextMessage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.text_messages# => BaseCRM::TextMessagesService

Actions:

  • Retrieve text messages - client.text_messages.all
  • Retrieve a single text message - client.text_messages.find

User

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.users# => BaseCRM::UsersService

Actions:

  • Retrieve all users - client.users.all
  • Retrieve a single user - client.users.find
  • Retrieve an authenticating user - client.users.self

Visit

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visits# => BaseCRM::VisitsService

Actions:

  • Retrieve visits - client.visits.all

VisitOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visit_outcomes# => BaseCRM::VisitOutcomesService

Actions:

  • Retrieve visit outcomes - client.visit_outcomes.all

License

MIT

Bug Reports

Report here.

Contact

BaseCRM developers (developers@getbase.com)

About

Base CRM API Client

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

basecrm-ruby

BaseCRM Official API V2 library client for ruby

Installation

Make sure you have rubygems installed.

The gem is available via Rubygems. To install, use the following command:

geminstallbasecrm

If you use Bundler, put the line below in your Gemfile:

gem'basecrm'

To get the latest version, put this in your Gemfile:

gem'basecrm',:git=>'git://github.com/basecrm/basecrm-ruby.git'

Usage

require"basecrm"# Then we instantiate a client (as shown below)

Build a client

Using this api without authentication gives an error

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")

Client Options

The following options are available while instantiating a client:

  • access_token: Personal access token
  • base_url: Base url for the api
  • user_agent: Default user-agent for all requests
  • timeout: Request timeout
  • verbose: Verbose/debug mode
  • logger: Logger used in verbose mode

Architecture

The library follows few architectural principles you should understand before digging deeper.

  1. Interactions with resources are done via service objects.
  2. Service objects are exposed as methods on client instances.
  3. Service objects expose resource-oriented actions.
  4. Actions return Plain Old Ruby Objects.

For example, to interact with deals API you will use DealsService, which you can get if you call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

When you want to fetch all resources you will use #all method which returns paginated resource (which implements Enumerable):

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.all.map{ |deal| deal.name}# => Array<String>

To retrieve list of resources and use filtering you will call #where method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.where(organization_id: google.id,hot: true)# => Array<BaseCRM::Deal>

To find a resource by it's unique identifier use #find method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.find(id)# => BaseCRM::Deal

When you'd like to create a resource, or update it's attributes you want to use either #create or #update methods. Both of them can take either Hash or a model class e.g. Deal instance. For example if you want to create a new deal you will call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")coffeeshop=client.contacts.where(name: "Coffee Shop")deal=client.deals.create(name: "Website redesign",contact_id: coffeeshop.id)deal.value=BigDecimal("1000.99")deal.currency="USD"client.deals.update(deal)# => BaseCRM::Deal

To destroy a resource use #destroy method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.destroy(id)# => true

There other non-CRUD operations supported as well. Please contact corresponding service files for in-depth documentation.

Full example

Create a new organization and after that change it's attributes (website).

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")lead=client.leads.create(organization_name: "Design service company")lead.website="http://www.designservices.com"client.leads.update(lead)

Sync API

The following sample code shows how to perform a full synchronization flow using high-level wrapper.

First of all you need an instance of BaseCRM::Client. High-level BaseCRM::Sync wrapper is using BaseCRM::SyncService to interact with the Sync API. In addition to the client instance, you must provide a device’s UUID within device_uuid parameter. The device’s UUID must not change between synchronization sessions, otherwise the sync service will not recognize the device and will send all the data again.

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")sync=BaseCRM::Sync.new(client: client,device_uuid: "<YOUR_DEVICES_UUID>")

Now all you have to do is to call #fetch method and pass a block that you might use to store fetched data to a database.

sync.fetchdo |meta,resource|
options={table: meta.type,statement: meta.sync.event_type,properties: resource}DB.execute(options) ? meta.sync.ack : meta.sync.nackend

Notice that you must call either #ack or #nack method on an instance of BaseCRM::SyncMeta.

Resources and actions

Documentation for every action can be found in corresponding service files under lib/basecrm/services directory.

Account

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.accounts# => BaseCRM::AccountsService

Actions:

  • Retrieve account details - client.accounts.self

AssociatedContact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.associated_contacts# => BaseCRM::AssociatedContactsService

Actions:

  • Retrieve deal's associated contacts - client.associated_contacts.all
  • Create an associated contact - client.associated_contacts.create
  • Remove an associated contact - client.associated_contacts.destroy

Call

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.calls# => BaseCRM::CallsService

Actions:

  • Retrieve all calls - client.calls.all
  • Create a call - client.calls.create
  • Retrieve a single call - client.calls.find
  • Update a call - client.calls.update
  • Delete a call - client.calls.destroy

CallOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.call_outcomes# => BaseCRM::CallOutcomesService

Actions:

  • Retrieve all call outcomes - client.call_outcomes.all

Contact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.contacts# => BaseCRM::ContactsService

Actions:

  • Retrieve all contacts - client.contacts.all
  • Create a contact - client.contacts.create
  • Retrieve a single contact - client.contacts.find
  • Update a contact - client.contacts.update
  • Delete a contact - client.contacts.destroy

Deal

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

Actions:

  • Retrieve all deals - client.deals.all
  • Create a deal - client.deals.create
  • Retrieve a single deal - client.deals.find
  • Update a deal - client.deals.update
  • Delete a deal - client.deals.destroy

A note about deal value

It is prefered to use a BigDecimal when creating or modyfing a deal value. This guarantees correct precision

deal.value = BigDecimal("1000.98")

You should not be using floats as it may result in precision loss.

deal.value = 1000.98

DealSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_sources# => BaseCRM::DealSourcesService

Actions:

  • Retrieve all sources - client.deal_sources.all
  • Create a new source - client.deal_sources.create
  • Retrieve a single source - client.deal_sources.find
  • Update a source - client.deal_sources.update
  • Delete a source - client.deal_sources.destroy

DealUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_unqualified_reasons# => BaseCRM::DealUnqualifiedReasonsService

Actions:

  • Retrieve all deal unqualified reasons - client.deal_unqualified_reasons.all
  • Create a deal unqualified reason - client.deal_unqualified_reasons.create
  • Retrieve a single deal unqualified reason - client.deal_unqualified_reasons.find
  • Update a deal unqualified reason - client.deal_unqualified_reasons.update
  • Delete a deal unqualified reason - client.deal_unqualified_reasons.destroy

Lead

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.leads# => BaseCRM::LeadsService

Actions:

  • Retrieve all leads - client.leads.all
  • Create a lead - client.leads.create
  • Retrieve a single lead - client.leads.find
  • Update a lead - client.leads.update
  • Delete a lead - client.leads.destroy

LeadSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_sources# => BaseCRM::LeadSourcesService

Actions:

  • Retrieve all sources - client.lead_sources.all
  • Create a new source - client.lead_sources.create
  • Retrieve a single source - client.lead_sources.find
  • Update a source - client.lead_sources.update
  • Delete a source - client.lead_sources.destroy

LeadUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_unqualified_reasons# => BaseCRM::LeadUnqualifiedReasonsService

Actions:

  • Retrieve all lead unqualified reasons - client.lead_unqualified_reasons.all

LineItem

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.line_items# => BaseCRM::LineItemsService

Actions:

  • Retrieve order's line items - client.line_items.all
  • Create a line item - client.line_items.create
  • Retrieve a single line item - client.line_items.find
  • Delete a line item - client.line_items.destroy

LossReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.loss_reasons# => BaseCRM::LossReasonsService

Actions:

  • Retrieve all reasons - client.loss_reasons.all
  • Create a loss reason - client.loss_reasons.create
  • Retrieve a single reason - client.loss_reasons.find
  • Update a loss reason - client.loss_reasons.update
  • Delete a reason - client.loss_reasons.destroy

Note

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.notes# => BaseCRM::NotesService

Actions:

  • Retrieve all notes - client.notes.all
  • Create a note - client.notes.create
  • Retrieve a single note - client.notes.find
  • Update a note - client.notes.update
  • Delete a note - client.notes.destroy

Order

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.orders# => BaseCRM::OrdersService

Actions:

  • Retrieve all orders - client.orders.all
  • Create an order - client.orders.create
  • Retrieve a single order - client.orders.find
  • Update an order - client.orders.update
  • Delete an order - client.orders.destroy

Pipeline

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.pipelines# => BaseCRM::PipelinesService

Actions:

  • Retrieve all pipelines - client.pipelines.all

Product

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.products# => BaseCRM::ProductsService

Actions:

  • Retrieve all products - client.products.all
  • Create a product - client.products.create
  • Retrieve a single product - client.products.find
  • Update a product - client.products.update
  • Delete a product - client.products.destroy

Source (Deprecated, use LeadSource or DealSource instead)

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.sources# => BaseCRM::SourcesService

Actions:

  • Retrieve all sources - client.sources.all
  • Create a source - client.sources.create
  • Retrieve a single source - client.sources.find
  • Update a source - client.sources.update
  • Delete a source - client.sources.destroy

Stage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.stages# => BaseCRM::StagesService

Actions:

  • Retrieve all stages - client.stages.all

Tag

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tags# => BaseCRM::TagsService

Actions:

  • Retrieve all tags - client.tags.all
  • Create a tag - client.tags.create
  • Retrieve a single tag - client.tags.find
  • Update a tag - client.tags.update
  • Delete a tag - client.tags.destroy

Task

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tasks# => BaseCRM::TasksService

Actions:

  • Retrieve all tasks - client.tasks.all
  • Create a task - client.tasks.create
  • Retrieve a single task - client.tasks.find
  • Update a task - client.tasks.update
  • Delete a task - client.tasks.destroy

TextMessage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.text_messages# => BaseCRM::TextMessagesService

Actions:

  • Retrieve text messages - client.text_messages.all
  • Retrieve a single text message - client.text_messages.find

User

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.users# => BaseCRM::UsersService

Actions:

  • Retrieve all users - client.users.all
  • Retrieve a single user - client.users.find
  • Retrieve an authenticating user - client.users.self

Visit

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visits# => BaseCRM::VisitsService

Actions:

  • Retrieve visits - client.visits.all

VisitOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visit_outcomes# => BaseCRM::VisitOutcomesService

Actions:

  • Retrieve visit outcomes - client.visit_outcomes.all

License

MIT

Bug Reports

Report here.

Contact

BaseCRM developers (developers@getbase.com)

About

Base CRM API Client

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

basecrm-ruby

BaseCRM Official API V2 library client for ruby

Installation

Make sure you have rubygems installed.

The gem is available via Rubygems. To install, use the following command:

geminstallbasecrm

If you use Bundler, put the line below in your Gemfile:

gem'basecrm'

To get the latest version, put this in your Gemfile:

gem'basecrm',:git=>'git://github.com/basecrm/basecrm-ruby.git'

Usage

require"basecrm"# Then we instantiate a client (as shown below)

Build a client

Using this api without authentication gives an error

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")

Client Options

The following options are available while instantiating a client:

  • access_token: Personal access token
  • base_url: Base url for the api
  • user_agent: Default user-agent for all requests
  • timeout: Request timeout
  • verbose: Verbose/debug mode
  • logger: Logger used in verbose mode

Architecture

The library follows few architectural principles you should understand before digging deeper.

  1. Interactions with resources are done via service objects.
  2. Service objects are exposed as methods on client instances.
  3. Service objects expose resource-oriented actions.
  4. Actions return Plain Old Ruby Objects.

For example, to interact with deals API you will use DealsService, which you can get if you call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

When you want to fetch all resources you will use #all method which returns paginated resource (which implements Enumerable):

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.all.map{ |deal| deal.name}# => Array<String>

To retrieve list of resources and use filtering you will call #where method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.where(organization_id: google.id,hot: true)# => Array<BaseCRM::Deal>

To find a resource by it's unique identifier use #find method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.find(id)# => BaseCRM::Deal

When you'd like to create a resource, or update it's attributes you want to use either #create or #update methods. Both of them can take either Hash or a model class e.g. Deal instance. For example if you want to create a new deal you will call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")coffeeshop=client.contacts.where(name: "Coffee Shop")deal=client.deals.create(name: "Website redesign",contact_id: coffeeshop.id)deal.value=BigDecimal("1000.99")deal.currency="USD"client.deals.update(deal)# => BaseCRM::Deal

To destroy a resource use #destroy method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.destroy(id)# => true

There other non-CRUD operations supported as well. Please contact corresponding service files for in-depth documentation.

Full example

Create a new organization and after that change it's attributes (website).

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")lead=client.leads.create(organization_name: "Design service company")lead.website="http://www.designservices.com"client.leads.update(lead)

Sync API

The following sample code shows how to perform a full synchronization flow using high-level wrapper.

First of all you need an instance of BaseCRM::Client. High-level BaseCRM::Sync wrapper is using BaseCRM::SyncService to interact with the Sync API. In addition to the client instance, you must provide a device’s UUID within device_uuid parameter. The device’s UUID must not change between synchronization sessions, otherwise the sync service will not recognize the device and will send all the data again.

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")sync=BaseCRM::Sync.new(client: client,device_uuid: "<YOUR_DEVICES_UUID>")

Now all you have to do is to call #fetch method and pass a block that you might use to store fetched data to a database.

sync.fetchdo |meta,resource|
options={table: meta.type,statement: meta.sync.event_type,properties: resource}DB.execute(options) ? meta.sync.ack : meta.sync.nackend

Notice that you must call either #ack or #nack method on an instance of BaseCRM::SyncMeta.

Resources and actions

Documentation for every action can be found in corresponding service files under lib/basecrm/services directory.

Account

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.accounts# => BaseCRM::AccountsService

Actions:

  • Retrieve account details - client.accounts.self

AssociatedContact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.associated_contacts# => BaseCRM::AssociatedContactsService

Actions:

  • Retrieve deal's associated contacts - client.associated_contacts.all
  • Create an associated contact - client.associated_contacts.create
  • Remove an associated contact - client.associated_contacts.destroy

Call

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.calls# => BaseCRM::CallsService

Actions:

  • Retrieve all calls - client.calls.all
  • Create a call - client.calls.create
  • Retrieve a single call - client.calls.find
  • Update a call - client.calls.update
  • Delete a call - client.calls.destroy

CallOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.call_outcomes# => BaseCRM::CallOutcomesService

Actions:

  • Retrieve all call outcomes - client.call_outcomes.all

Contact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.contacts# => BaseCRM::ContactsService

Actions:

  • Retrieve all contacts - client.contacts.all
  • Create a contact - client.contacts.create
  • Retrieve a single contact - client.contacts.find
  • Update a contact - client.contacts.update
  • Delete a contact - client.contacts.destroy

Deal

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

Actions:

  • Retrieve all deals - client.deals.all
  • Create a deal - client.deals.create
  • Retrieve a single deal - client.deals.find
  • Update a deal - client.deals.update
  • Delete a deal - client.deals.destroy

A note about deal value

It is prefered to use a BigDecimal when creating or modyfing a deal value. This guarantees correct precision

deal.value = BigDecimal("1000.98")

You should not be using floats as it may result in precision loss.

deal.value = 1000.98

DealSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_sources# => BaseCRM::DealSourcesService

Actions:

  • Retrieve all sources - client.deal_sources.all
  • Create a new source - client.deal_sources.create
  • Retrieve a single source - client.deal_sources.find
  • Update a source - client.deal_sources.update
  • Delete a source - client.deal_sources.destroy

DealUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_unqualified_reasons# => BaseCRM::DealUnqualifiedReasonsService

Actions:

  • Retrieve all deal unqualified reasons - client.deal_unqualified_reasons.all
  • Create a deal unqualified reason - client.deal_unqualified_reasons.create
  • Retrieve a single deal unqualified reason - client.deal_unqualified_reasons.find
  • Update a deal unqualified reason - client.deal_unqualified_reasons.update
  • Delete a deal unqualified reason - client.deal_unqualified_reasons.destroy

Lead

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.leads# => BaseCRM::LeadsService

Actions:

  • Retrieve all leads - client.leads.all
  • Create a lead - client.leads.create
  • Retrieve a single lead - client.leads.find
  • Update a lead - client.leads.update
  • Delete a lead - client.leads.destroy

LeadSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_sources# => BaseCRM::LeadSourcesService

Actions:

  • Retrieve all sources - client.lead_sources.all
  • Create a new source - client.lead_sources.create
  • Retrieve a single source - client.lead_sources.find
  • Update a source - client.lead_sources.update
  • Delete a source - client.lead_sources.destroy

LeadUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_unqualified_reasons# => BaseCRM::LeadUnqualifiedReasonsService

Actions:

  • Retrieve all lead unqualified reasons - client.lead_unqualified_reasons.all

LineItem

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.line_items# => BaseCRM::LineItemsService

Actions:

  • Retrieve order's line items - client.line_items.all
  • Create a line item - client.line_items.create
  • Retrieve a single line item - client.line_items.find
  • Delete a line item - client.line_items.destroy

LossReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.loss_reasons# => BaseCRM::LossReasonsService

Actions:

  • Retrieve all reasons - client.loss_reasons.all
  • Create a loss reason - client.loss_reasons.create
  • Retrieve a single reason - client.loss_reasons.find
  • Update a loss reason - client.loss_reasons.update
  • Delete a reason - client.loss_reasons.destroy

Note

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.notes# => BaseCRM::NotesService

Actions:

  • Retrieve all notes - client.notes.all
  • Create a note - client.notes.create
  • Retrieve a single note - client.notes.find
  • Update a note - client.notes.update
  • Delete a note - client.notes.destroy

Order

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.orders# => BaseCRM::OrdersService

Actions:

  • Retrieve all orders - client.orders.all
  • Create an order - client.orders.create
  • Retrieve a single order - client.orders.find
  • Update an order - client.orders.update
  • Delete an order - client.orders.destroy

Pipeline

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.pipelines# => BaseCRM::PipelinesService

Actions:

  • Retrieve all pipelines - client.pipelines.all

Product

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.products# => BaseCRM::ProductsService

Actions:

  • Retrieve all products - client.products.all
  • Create a product - client.products.create
  • Retrieve a single product - client.products.find
  • Update a product - client.products.update
  • Delete a product - client.products.destroy

Source (Deprecated, use LeadSource or DealSource instead)

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.sources# => BaseCRM::SourcesService

Actions:

  • Retrieve all sources - client.sources.all
  • Create a source - client.sources.create
  • Retrieve a single source - client.sources.find
  • Update a source - client.sources.update
  • Delete a source - client.sources.destroy

Stage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.stages# => BaseCRM::StagesService

Actions:

  • Retrieve all stages - client.stages.all

Tag

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tags# => BaseCRM::TagsService

Actions:

  • Retrieve all tags - client.tags.all
  • Create a tag - client.tags.create
  • Retrieve a single tag - client.tags.find
  • Update a tag - client.tags.update
  • Delete a tag - client.tags.destroy

Task

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tasks# => BaseCRM::TasksService

Actions:

  • Retrieve all tasks - client.tasks.all
  • Create a task - client.tasks.create
  • Retrieve a single task - client.tasks.find
  • Update a task - client.tasks.update
  • Delete a task - client.tasks.destroy

TextMessage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.text_messages# => BaseCRM::TextMessagesService

Actions:

  • Retrieve text messages - client.text_messages.all
  • Retrieve a single text message - client.text_messages.find

User

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.users# => BaseCRM::UsersService

Actions:

  • Retrieve all users - client.users.all
  • Retrieve a single user - client.users.find
  • Retrieve an authenticating user - client.users.self

Visit

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visits# => BaseCRM::VisitsService

Actions:

  • Retrieve visits - client.visits.all

VisitOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visit_outcomes# => BaseCRM::VisitOutcomesService

Actions:

  • Retrieve visit outcomes - client.visit_outcomes.all

License

MIT

Bug Reports

Report here.

Contact

BaseCRM developers (developers@getbase.com)

About

Base CRM API Client

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

basecrm-ruby

BaseCRM Official API V2 library client for ruby

Installation

Make sure you have rubygems installed.

The gem is available via Rubygems. To install, use the following command:

geminstallbasecrm

If you use Bundler, put the line below in your Gemfile:

gem'basecrm'

To get the latest version, put this in your Gemfile:

gem'basecrm',:git=>'git://github.com/basecrm/basecrm-ruby.git'

Usage

require"basecrm"# Then we instantiate a client (as shown below)

Build a client

Using this api without authentication gives an error

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")

Client Options

The following options are available while instantiating a client:

  • access_token: Personal access token
  • base_url: Base url for the api
  • user_agent: Default user-agent for all requests
  • timeout: Request timeout
  • verbose: Verbose/debug mode
  • logger: Logger used in verbose mode

Architecture

The library follows few architectural principles you should understand before digging deeper.

  1. Interactions with resources are done via service objects.
  2. Service objects are exposed as methods on client instances.
  3. Service objects expose resource-oriented actions.
  4. Actions return Plain Old Ruby Objects.

For example, to interact with deals API you will use DealsService, which you can get if you call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

When you want to fetch all resources you will use #all method which returns paginated resource (which implements Enumerable):

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.all.map{ |deal| deal.name}# => Array<String>

To retrieve list of resources and use filtering you will call #where method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.where(organization_id: google.id,hot: true)# => Array<BaseCRM::Deal>

To find a resource by it's unique identifier use #find method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.find(id)# => BaseCRM::Deal

When you'd like to create a resource, or update it's attributes you want to use either #create or #update methods. Both of them can take either Hash or a model class e.g. Deal instance. For example if you want to create a new deal you will call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")coffeeshop=client.contacts.where(name: "Coffee Shop")deal=client.deals.create(name: "Website redesign",contact_id: coffeeshop.id)deal.value=BigDecimal("1000.99")deal.currency="USD"client.deals.update(deal)# => BaseCRM::Deal

To destroy a resource use #destroy method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.destroy(id)# => true

There other non-CRUD operations supported as well. Please contact corresponding service files for in-depth documentation.

Full example

Create a new organization and after that change it's attributes (website).

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")lead=client.leads.create(organization_name: "Design service company")lead.website="http://www.designservices.com"client.leads.update(lead)

Sync API

The following sample code shows how to perform a full synchronization flow using high-level wrapper.

First of all you need an instance of BaseCRM::Client. High-level BaseCRM::Sync wrapper is using BaseCRM::SyncService to interact with the Sync API. In addition to the client instance, you must provide a device’s UUID within device_uuid parameter. The device’s UUID must not change between synchronization sessions, otherwise the sync service will not recognize the device and will send all the data again.

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")sync=BaseCRM::Sync.new(client: client,device_uuid: "<YOUR_DEVICES_UUID>")

Now all you have to do is to call #fetch method and pass a block that you might use to store fetched data to a database.

sync.fetchdo |meta,resource|
options={table: meta.type,statement: meta.sync.event_type,properties: resource}DB.execute(options) ? meta.sync.ack : meta.sync.nackend

Notice that you must call either #ack or #nack method on an instance of BaseCRM::SyncMeta.

Resources and actions

Documentation for every action can be found in corresponding service files under lib/basecrm/services directory.

Account

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.accounts# => BaseCRM::AccountsService

Actions:

  • Retrieve account details - client.accounts.self

AssociatedContact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.associated_contacts# => BaseCRM::AssociatedContactsService

Actions:

  • Retrieve deal's associated contacts - client.associated_contacts.all
  • Create an associated contact - client.associated_contacts.create
  • Remove an associated contact - client.associated_contacts.destroy

Call

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.calls# => BaseCRM::CallsService

Actions:

  • Retrieve all calls - client.calls.all
  • Create a call - client.calls.create
  • Retrieve a single call - client.calls.find
  • Update a call - client.calls.update
  • Delete a call - client.calls.destroy

CallOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.call_outcomes# => BaseCRM::CallOutcomesService

Actions:

  • Retrieve all call outcomes - client.call_outcomes.all

Contact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.contacts# => BaseCRM::ContactsService

Actions:

  • Retrieve all contacts - client.contacts.all
  • Create a contact - client.contacts.create
  • Retrieve a single contact - client.contacts.find
  • Update a contact - client.contacts.update
  • Delete a contact - client.contacts.destroy

Deal

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

Actions:

  • Retrieve all deals - client.deals.all
  • Create a deal - client.deals.create
  • Retrieve a single deal - client.deals.find
  • Update a deal - client.deals.update
  • Delete a deal - client.deals.destroy

A note about deal value

It is prefered to use a BigDecimal when creating or modyfing a deal value. This guarantees correct precision

deal.value = BigDecimal("1000.98")

You should not be using floats as it may result in precision loss.

deal.value = 1000.98

DealSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_sources# => BaseCRM::DealSourcesService

Actions:

  • Retrieve all sources - client.deal_sources.all
  • Create a new source - client.deal_sources.create
  • Retrieve a single source - client.deal_sources.find
  • Update a source - client.deal_sources.update
  • Delete a source - client.deal_sources.destroy

DealUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_unqualified_reasons# => BaseCRM::DealUnqualifiedReasonsService

Actions:

  • Retrieve all deal unqualified reasons - client.deal_unqualified_reasons.all
  • Create a deal unqualified reason - client.deal_unqualified_reasons.create
  • Retrieve a single deal unqualified reason - client.deal_unqualified_reasons.find
  • Update a deal unqualified reason - client.deal_unqualified_reasons.update
  • Delete a deal unqualified reason - client.deal_unqualified_reasons.destroy

Lead

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.leads# => BaseCRM::LeadsService

Actions:

  • Retrieve all leads - client.leads.all
  • Create a lead - client.leads.create
  • Retrieve a single lead - client.leads.find
  • Update a lead - client.leads.update
  • Delete a lead - client.leads.destroy

LeadSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_sources# => BaseCRM::LeadSourcesService

Actions:

  • Retrieve all sources - client.lead_sources.all
  • Create a new source - client.lead_sources.create
  • Retrieve a single source - client.lead_sources.find
  • Update a source - client.lead_sources.update
  • Delete a source - client.lead_sources.destroy

LeadUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_unqualified_reasons# => BaseCRM::LeadUnqualifiedReasonsService

Actions:

  • Retrieve all lead unqualified reasons - client.lead_unqualified_reasons.all

LineItem

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.line_items# => BaseCRM::LineItemsService

Actions:

  • Retrieve order's line items - client.line_items.all
  • Create a line item - client.line_items.create
  • Retrieve a single line item - client.line_items.find
  • Delete a line item - client.line_items.destroy

LossReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.loss_reasons# => BaseCRM::LossReasonsService

Actions:

  • Retrieve all reasons - client.loss_reasons.all
  • Create a loss reason - client.loss_reasons.create
  • Retrieve a single reason - client.loss_reasons.find
  • Update a loss reason - client.loss_reasons.update
  • Delete a reason - client.loss_reasons.destroy

Note

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.notes# => BaseCRM::NotesService

Actions:

  • Retrieve all notes - client.notes.all
  • Create a note - client.notes.create
  • Retrieve a single note - client.notes.find
  • Update a note - client.notes.update
  • Delete a note - client.notes.destroy

Order

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.orders# => BaseCRM::OrdersService

Actions:

  • Retrieve all orders - client.orders.all
  • Create an order - client.orders.create
  • Retrieve a single order - client.orders.find
  • Update an order - client.orders.update
  • Delete an order - client.orders.destroy

Pipeline

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.pipelines# => BaseCRM::PipelinesService

Actions:

  • Retrieve all pipelines - client.pipelines.all

Product

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.products# => BaseCRM::ProductsService

Actions:

  • Retrieve all products - client.products.all
  • Create a product - client.products.create
  • Retrieve a single product - client.products.find
  • Update a product - client.products.update
  • Delete a product - client.products.destroy

Source (Deprecated, use LeadSource or DealSource instead)

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.sources# => BaseCRM::SourcesService

Actions:

  • Retrieve all sources - client.sources.all
  • Create a source - client.sources.create
  • Retrieve a single source - client.sources.find
  • Update a source - client.sources.update
  • Delete a source - client.sources.destroy

Stage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.stages# => BaseCRM::StagesService

Actions:

  • Retrieve all stages - client.stages.all

Tag

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tags# => BaseCRM::TagsService

Actions:

  • Retrieve all tags - client.tags.all
  • Create a tag - client.tags.create
  • Retrieve a single tag - client.tags.find
  • Update a tag - client.tags.update
  • Delete a tag - client.tags.destroy

Task

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tasks# => BaseCRM::TasksService

Actions:

  • Retrieve all tasks - client.tasks.all
  • Create a task - client.tasks.create
  • Retrieve a single task - client.tasks.find
  • Update a task - client.tasks.update
  • Delete a task - client.tasks.destroy

TextMessage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.text_messages# => BaseCRM::TextMessagesService

Actions:

  • Retrieve text messages - client.text_messages.all
  • Retrieve a single text message - client.text_messages.find

User

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.users# => BaseCRM::UsersService

Actions:

  • Retrieve all users - client.users.all
  • Retrieve a single user - client.users.find
  • Retrieve an authenticating user - client.users.self

Visit

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visits# => BaseCRM::VisitsService

Actions:

  • Retrieve visits - client.visits.all

VisitOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visit_outcomes# => BaseCRM::VisitOutcomesService

Actions:

  • Retrieve visit outcomes - client.visit_outcomes.all

License

MIT

Bug Reports

Report here.

Contact

BaseCRM developers (developers@getbase.com)

About

Base CRM API Client

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

basecrm-ruby

BaseCRM Official API V2 library client for ruby

Installation

Make sure you have rubygems installed.

The gem is available via Rubygems. To install, use the following command:

geminstallbasecrm

If you use Bundler, put the line below in your Gemfile:

gem'basecrm'

To get the latest version, put this in your Gemfile:

gem'basecrm',:git=>'git://github.com/basecrm/basecrm-ruby.git'

Usage

require"basecrm"# Then we instantiate a client (as shown below)

Build a client

Using this api without authentication gives an error

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")

Client Options

The following options are available while instantiating a client:

  • access_token: Personal access token
  • base_url: Base url for the api
  • user_agent: Default user-agent for all requests
  • timeout: Request timeout
  • verbose: Verbose/debug mode
  • logger: Logger used in verbose mode

Architecture

The library follows few architectural principles you should understand before digging deeper.

  1. Interactions with resources are done via service objects.
  2. Service objects are exposed as methods on client instances.
  3. Service objects expose resource-oriented actions.
  4. Actions return Plain Old Ruby Objects.

For example, to interact with deals API you will use DealsService, which you can get if you call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

When you want to fetch all resources you will use #all method which returns paginated resource (which implements Enumerable):

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.all.map{ |deal| deal.name}# => Array<String>

To retrieve list of resources and use filtering you will call #where method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.where(organization_id: google.id,hot: true)# => Array<BaseCRM::Deal>

To find a resource by it's unique identifier use #find method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.find(id)# => BaseCRM::Deal

When you'd like to create a resource, or update it's attributes you want to use either #create or #update methods. Both of them can take either Hash or a model class e.g. Deal instance. For example if you want to create a new deal you will call:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")coffeeshop=client.contacts.where(name: "Coffee Shop")deal=client.deals.create(name: "Website redesign",contact_id: coffeeshop.id)deal.value=BigDecimal("1000.99")deal.currency="USD"client.deals.update(deal)# => BaseCRM::Deal

To destroy a resource use #destroy method:

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals.destroy(id)# => true

There other non-CRUD operations supported as well. Please contact corresponding service files for in-depth documentation.

Full example

Create a new organization and after that change it's attributes (website).

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")lead=client.leads.create(organization_name: "Design service company")lead.website="http://www.designservices.com"client.leads.update(lead)

Sync API

The following sample code shows how to perform a full synchronization flow using high-level wrapper.

First of all you need an instance of BaseCRM::Client. High-level BaseCRM::Sync wrapper is using BaseCRM::SyncService to interact with the Sync API. In addition to the client instance, you must provide a device’s UUID within device_uuid parameter. The device’s UUID must not change between synchronization sessions, otherwise the sync service will not recognize the device and will send all the data again.

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")sync=BaseCRM::Sync.new(client: client,device_uuid: "<YOUR_DEVICES_UUID>")

Now all you have to do is to call #fetch method and pass a block that you might use to store fetched data to a database.

sync.fetchdo |meta,resource|
options={table: meta.type,statement: meta.sync.event_type,properties: resource}DB.execute(options) ? meta.sync.ack : meta.sync.nackend

Notice that you must call either #ack or #nack method on an instance of BaseCRM::SyncMeta.

Resources and actions

Documentation for every action can be found in corresponding service files under lib/basecrm/services directory.

Account

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.accounts# => BaseCRM::AccountsService

Actions:

  • Retrieve account details - client.accounts.self

AssociatedContact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.associated_contacts# => BaseCRM::AssociatedContactsService

Actions:

  • Retrieve deal's associated contacts - client.associated_contacts.all
  • Create an associated contact - client.associated_contacts.create
  • Remove an associated contact - client.associated_contacts.destroy

Call

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.calls# => BaseCRM::CallsService

Actions:

  • Retrieve all calls - client.calls.all
  • Create a call - client.calls.create
  • Retrieve a single call - client.calls.find
  • Update a call - client.calls.update
  • Delete a call - client.calls.destroy

CallOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.call_outcomes# => BaseCRM::CallOutcomesService

Actions:

  • Retrieve all call outcomes - client.call_outcomes.all

Contact

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.contacts# => BaseCRM::ContactsService

Actions:

  • Retrieve all contacts - client.contacts.all
  • Create a contact - client.contacts.create
  • Retrieve a single contact - client.contacts.find
  • Update a contact - client.contacts.update
  • Delete a contact - client.contacts.destroy

Deal

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deals# => BaseCRM::DealsService

Actions:

  • Retrieve all deals - client.deals.all
  • Create a deal - client.deals.create
  • Retrieve a single deal - client.deals.find
  • Update a deal - client.deals.update
  • Delete a deal - client.deals.destroy

A note about deal value

It is prefered to use a BigDecimal when creating or modyfing a deal value. This guarantees correct precision

deal.value = BigDecimal("1000.98")

You should not be using floats as it may result in precision loss.

deal.value = 1000.98

DealSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_sources# => BaseCRM::DealSourcesService

Actions:

  • Retrieve all sources - client.deal_sources.all
  • Create a new source - client.deal_sources.create
  • Retrieve a single source - client.deal_sources.find
  • Update a source - client.deal_sources.update
  • Delete a source - client.deal_sources.destroy

DealUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.deal_unqualified_reasons# => BaseCRM::DealUnqualifiedReasonsService

Actions:

  • Retrieve all deal unqualified reasons - client.deal_unqualified_reasons.all
  • Create a deal unqualified reason - client.deal_unqualified_reasons.create
  • Retrieve a single deal unqualified reason - client.deal_unqualified_reasons.find
  • Update a deal unqualified reason - client.deal_unqualified_reasons.update
  • Delete a deal unqualified reason - client.deal_unqualified_reasons.destroy

Lead

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.leads# => BaseCRM::LeadsService

Actions:

  • Retrieve all leads - client.leads.all
  • Create a lead - client.leads.create
  • Retrieve a single lead - client.leads.find
  • Update a lead - client.leads.update
  • Delete a lead - client.leads.destroy

LeadSource

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_sources# => BaseCRM::LeadSourcesService

Actions:

  • Retrieve all sources - client.lead_sources.all
  • Create a new source - client.lead_sources.create
  • Retrieve a single source - client.lead_sources.find
  • Update a source - client.lead_sources.update
  • Delete a source - client.lead_sources.destroy

LeadUnqualifiedReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.lead_unqualified_reasons# => BaseCRM::LeadUnqualifiedReasonsService

Actions:

  • Retrieve all lead unqualified reasons - client.lead_unqualified_reasons.all

LineItem

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.line_items# => BaseCRM::LineItemsService

Actions:

  • Retrieve order's line items - client.line_items.all
  • Create a line item - client.line_items.create
  • Retrieve a single line item - client.line_items.find
  • Delete a line item - client.line_items.destroy

LossReason

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.loss_reasons# => BaseCRM::LossReasonsService

Actions:

  • Retrieve all reasons - client.loss_reasons.all
  • Create a loss reason - client.loss_reasons.create
  • Retrieve a single reason - client.loss_reasons.find
  • Update a loss reason - client.loss_reasons.update
  • Delete a reason - client.loss_reasons.destroy

Note

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.notes# => BaseCRM::NotesService

Actions:

  • Retrieve all notes - client.notes.all
  • Create a note - client.notes.create
  • Retrieve a single note - client.notes.find
  • Update a note - client.notes.update
  • Delete a note - client.notes.destroy

Order

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.orders# => BaseCRM::OrdersService

Actions:

  • Retrieve all orders - client.orders.all
  • Create an order - client.orders.create
  • Retrieve a single order - client.orders.find
  • Update an order - client.orders.update
  • Delete an order - client.orders.destroy

Pipeline

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.pipelines# => BaseCRM::PipelinesService

Actions:

  • Retrieve all pipelines - client.pipelines.all

Product

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.products# => BaseCRM::ProductsService

Actions:

  • Retrieve all products - client.products.all
  • Create a product - client.products.create
  • Retrieve a single product - client.products.find
  • Update a product - client.products.update
  • Delete a product - client.products.destroy

Source (Deprecated, use LeadSource or DealSource instead)

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.sources# => BaseCRM::SourcesService

Actions:

  • Retrieve all sources - client.sources.all
  • Create a source - client.sources.create
  • Retrieve a single source - client.sources.find
  • Update a source - client.sources.update
  • Delete a source - client.sources.destroy

Stage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.stages# => BaseCRM::StagesService

Actions:

  • Retrieve all stages - client.stages.all

Tag

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tags# => BaseCRM::TagsService

Actions:

  • Retrieve all tags - client.tags.all
  • Create a tag - client.tags.create
  • Retrieve a single tag - client.tags.find
  • Update a tag - client.tags.update
  • Delete a tag - client.tags.destroy

Task

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.tasks# => BaseCRM::TasksService

Actions:

  • Retrieve all tasks - client.tasks.all
  • Create a task - client.tasks.create
  • Retrieve a single task - client.tasks.find
  • Update a task - client.tasks.update
  • Delete a task - client.tasks.destroy

TextMessage

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.text_messages# => BaseCRM::TextMessagesService

Actions:

  • Retrieve text messages - client.text_messages.all
  • Retrieve a single text message - client.text_messages.find

User

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.users# => BaseCRM::UsersService

Actions:

  • Retrieve all users - client.users.all
  • Retrieve a single user - client.users.find
  • Retrieve an authenticating user - client.users.self

Visit

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visits# => BaseCRM::VisitsService

Actions:

  • Retrieve visits - client.visits.all

VisitOutcome

client=BaseCRM::Client.new(access_token: "<YOUR_PERSONAL_ACCESS_TOKEN>")client.visit_outcomes# => BaseCRM::VisitOutcomesService

Actions:

  • Retrieve visit outcomes - client.visit_outcomes.all

License

MIT

Bug Reports

Report here.

Contact

BaseCRM developers (developers@getbase.com)

About

Base CRM API Client

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages