diff --git a/lib/basecrm.rb b/lib/basecrm.rb index 57fd3bc..a02cb54 100644 --- a/lib/basecrm.rb +++ b/lib/basecrm.rb @@ -16,11 +16,13 @@ require 'basecrm/models/associated_contact' require 'basecrm/models/call' require 'basecrm/models/call_outcome' +require 'basecrm/models/choice' require 'basecrm/models/contact' require 'basecrm/models/deal' require 'basecrm/models/deal_source' require 'basecrm/models/deal_unqualified_reason' require 'basecrm/models/lead' +require 'basecrm/models/lead_custom_field' require 'basecrm/models/lead_source' require 'basecrm/models/lead_unqualified_reason' require 'basecrm/models/line_item' @@ -52,6 +54,7 @@ require 'basecrm/services/deal_sources_service' require 'basecrm/services/deal_unqualified_reasons_service' require 'basecrm/services/leads_service' +require 'basecrm/services/lead_custom_fields_service' require 'basecrm/services/lead_sources_service' require 'basecrm/services/lead_unqualified_reasons_service' require 'basecrm/services/line_items_service' @@ -181,6 +184,15 @@ def leads @leads ||= LeadsService.new(@http_client) end + # Access all LeadCustomField related actions. + # @see LeadCustomFieldsService + # @see LeadCustomField + # + # @return [LeadCustomFieldsService] Service object for resources. + def lead_custom_fields + @lead_custom_fields ||= LeadCustomFieldsService.new(@http_client) + end + # Access all LeadSources related actions. # @see LeadSourcesService # @see LeadSource diff --git a/lib/basecrm/models/choice.rb b/lib/basecrm/models/choice.rb new file mode 100644 index 0000000..04df676 --- /dev/null +++ b/lib/basecrm/models/choice.rb @@ -0,0 +1,5 @@ +module BaseCRM + class Choice < Model + end +end + diff --git a/lib/basecrm/models/lead_custom_field.rb b/lib/basecrm/models/lead_custom_field.rb new file mode 100644 index 0000000..d89ecf2 --- /dev/null +++ b/lib/basecrm/models/lead_custom_field.rb @@ -0,0 +1,4 @@ +module BaseCRM + class LeadCustomField < Model + end +end diff --git a/lib/basecrm/services/lead_custom_fields_service.rb b/lib/basecrm/services/lead_custom_fields_service.rb new file mode 100644 index 0000000..7783e7b --- /dev/null +++ b/lib/basecrm/services/lead_custom_fields_service.rb @@ -0,0 +1,26 @@ +module BaseCRM + class LeadCustomFieldsService + def initialize(client) + @client = client + end + + # Retrieve all lead custom fields + # + # get '/lead/custom_fields' + # + # If you want to use filtering or sorting (see #where). + # @return [Enumerable] Paginated resource you can use to iterate over all the resources. + def all + _, _, root = @client.get("/lead/custom_fields") + root[:items].map do |item| + LeadCustomField.new(item[:data]).tap do |custom_field| + if item[:data][:choices] + custom_field.choices = item[:data][:choices].map do |choice| + Choice.new(choice) + end + end + end + end + end + end +end diff --git a/lib/basecrm/services/leads_service.rb b/lib/basecrm/services/leads_service.rb index 6d9de0c..5a47246 100644 --- a/lib/basecrm/services/leads_service.rb +++ b/lib/basecrm/services/leads_service.rb @@ -2,7 +2,7 @@ module BaseCRM class LeadsService - OPTS_KEYS_TO_PERSIST = Set[:address, :custom_fields, :description, :email, :facebook, :fax, :first_name, :industry, :last_name, :linkedin, :mobile, :organization_name, :owner_id, :phone, :skype, :source_id, :status, :tags, :title, :twitter, :website] + OPTS_KEYS_TO_PERSIST = Set[:address, :custom_fields, :description, :email, :facebook, :fax, :first_name, :industry, :last_name, :linkedin, :mobile, :organization_name, :owner_id, :phone, :skype, :source_id, :status, :tags, :title, :twitter, :website, :unqualified_reason_id] def initialize(client) @client = client diff --git a/spec/services/lead_custom_fields_service_spec.rb b/spec/services/lead_custom_fields_service_spec.rb new file mode 100644 index 0000000..0a9f7d4 --- /dev/null +++ b/spec/services/lead_custom_fields_service_spec.rb @@ -0,0 +1,16 @@ +require 'spec_helper' + +describe BaseCRM::LeadCustomFieldsService do + describe 'Responds to' do + subject { client.lead_custom_fields } + + it { should respond_to :all } + end + + describe :all do + it "returns an array" do + expect(client.lead_custom_fields.all).to be_an Array + end + end +end +