From daa807f2b02dbe32eec12b3110b90f40cde42fda Mon Sep 17 00:00:00 2001 From: Marin Martinic Date: Mon, 27 Nov 2017 10:19:03 +0000 Subject: [PATCH] add data attributes accessors --- lib/intercom.rb | 2 ++ lib/intercom/client.rb | 4 +++ lib/intercom/company.rb | 2 ++ lib/intercom/contact.rb | 2 ++ lib/intercom/data_attribute.rb | 7 ++++ .../data_attributes.rb | 23 ++++++++++++ lib/intercom/service/data_attribute.rb | 14 ++++++++ .../traits/data_attribute_accessors.rb | 36 +++++++++++++++++++ lib/intercom/user.rb | 2 ++ lib/intercom/visitor.rb | 2 ++ 10 files changed, 94 insertions(+) create mode 100644 lib/intercom/data_attribute.rb create mode 100644 lib/intercom/extended_api_operations/data_attributes.rb create mode 100644 lib/intercom/service/data_attribute.rb create mode 100644 lib/intercom/traits/data_attribute_accessors.rb diff --git a/lib/intercom.rb b/lib/intercom.rb index 0277c208..fe735e3e 100644 --- a/lib/intercom.rb +++ b/lib/intercom.rb @@ -14,6 +14,7 @@ require 'intercom/service/tag' require 'intercom/service/user' require 'intercom/service/visitor' +require 'intercom/service/data_attribute' require 'intercom/options' require 'intercom/client' require "intercom/contact" @@ -33,6 +34,7 @@ require "intercom/subscription" require "intercom/errors" require "intercom/visitor" +require "intercom/data_attribute" require "json" ## diff --git a/lib/intercom/client.rb b/lib/intercom/client.rb index 00e2b02c..9f28bacc 100644 --- a/lib/intercom/client.rb +++ b/lib/intercom/client.rb @@ -107,6 +107,10 @@ def jobs Intercom::Service::Job.new(self) end + def data_attributes + Intercom::Service::DataAttribute.new(self) + end + def get(path, params) execute_request Intercom::Request.get(path, params) end diff --git a/lib/intercom/company.rb b/lib/intercom/company.rb index ddf3d549..8adf7fa4 100644 --- a/lib/intercom/company.rb +++ b/lib/intercom/company.rb @@ -1,10 +1,12 @@ require 'intercom/traits/incrementable_attributes' require 'intercom/traits/api_resource' +require 'intercom/traits/data_attribute_accessors' module Intercom class Company include Traits::IncrementableAttributes include Traits::ApiResource + include Traits::DataAttributeAccessors def identity_vars ; [:id, :company_id] ; end def flat_store_attributes ; [:custom_attributes] ; end diff --git a/lib/intercom/contact.rb b/lib/intercom/contact.rb index 97ee2ed9..b1ead6ea 100644 --- a/lib/intercom/contact.rb +++ b/lib/intercom/contact.rb @@ -1,8 +1,10 @@ require 'intercom/traits/api_resource' +require 'intercom/traits/data_attribute_accessors' module Intercom class Contact include Traits::ApiResource + include Traits::DataAttributeAccessors def identity_vars ; [:email, :user_id] ; end def flat_store_attributes ; [:custom_attributes] ; end diff --git a/lib/intercom/data_attribute.rb b/lib/intercom/data_attribute.rb new file mode 100644 index 00000000..7a083aa6 --- /dev/null +++ b/lib/intercom/data_attribute.rb @@ -0,0 +1,7 @@ +require 'intercom/traits/api_resource' + +module Intercom + class DataAttribute + include Traits::ApiResource + end +end \ No newline at end of file diff --git a/lib/intercom/extended_api_operations/data_attributes.rb b/lib/intercom/extended_api_operations/data_attributes.rb new file mode 100644 index 00000000..78f37381 --- /dev/null +++ b/lib/intercom/extended_api_operations/data_attributes.rb @@ -0,0 +1,23 @@ +require 'intercom/client_collection_proxy' +require 'intercom/utils' + +module Intercom + module ExtendedApiOperations + module DataAttributes + def customer + list_data_attributes("customer") + end + + def company + list_data_attributes("company") + end + + private + + def list_data_attributes(model) + collection_name = "data_attributes" + ClientCollectionProxy.new(collection_name, finder_details: {url: "/#{collection_name}/#{model}"}, client: @client) + end + end + end +end diff --git a/lib/intercom/service/data_attribute.rb b/lib/intercom/service/data_attribute.rb new file mode 100644 index 00000000..f367f671 --- /dev/null +++ b/lib/intercom/service/data_attribute.rb @@ -0,0 +1,14 @@ +require 'intercom/service/base_service' +require 'intercom/extended_api_operations/data_attributes' + +module Intercom + module Service + class DataAttribute < BaseService + include ExtendedApiOperations::DataAttributes + + def collection_class + Intercom::DataAttribute + end + end + end +end diff --git a/lib/intercom/traits/data_attribute_accessors.rb b/lib/intercom/traits/data_attribute_accessors.rb new file mode 100644 index 00000000..7a99d27a --- /dev/null +++ b/lib/intercom/traits/data_attribute_accessors.rb @@ -0,0 +1,36 @@ +module Intercom + module Traits + module DataAttributeAccessors + + def attribute_value(data_attribute) + if data_attribute.custom + custom_attributes[data_attribute.name] + elsif location_data_attribute?(data_attribute) + location_data.send(data_attribute.name.to_sym) + elsif avatar_attribute?(data_attribute) + avatar.send(data_attribute.name.to_sym) + elsif plan_attribute?(data_attribute) + plan.send(data_attribute.name.to_sym) + else + send(data_attribute.name.to_sym) + end + rescue + nil + end + + private + + def location_data_attribute?(data_attribute) + data_attribute.full_name.start_with?('location_data.') + end + + def avatar_attribute?(data_attribute) + data_attribute.full_name.start_with?('avatar.') + end + + def plan_attribute?(data_attribute) + data_attribute.full_name.start_with?('plan.') + end + end + end +end \ No newline at end of file diff --git a/lib/intercom/user.rb b/lib/intercom/user.rb index a559d9d5..77bc2f9a 100644 --- a/lib/intercom/user.rb +++ b/lib/intercom/user.rb @@ -1,10 +1,12 @@ require 'intercom/traits/incrementable_attributes' require 'intercom/traits/api_resource' +require 'intercom/traits/data_attribute_accessors' module Intercom class User include Traits::IncrementableAttributes include Traits::ApiResource + include Traits::DataAttributeAccessors def identity_vars ; [:id, :email, :user_id] ; end def flat_store_attributes ; [:custom_attributes] ; end diff --git a/lib/intercom/visitor.rb b/lib/intercom/visitor.rb index 1b6ab6eb..948c0fe7 100644 --- a/lib/intercom/visitor.rb +++ b/lib/intercom/visitor.rb @@ -1,10 +1,12 @@ require 'intercom/traits/incrementable_attributes' require 'intercom/traits/api_resource' +require 'intercom/traits/data_attribute_accessors' module Intercom class Visitor include Traits::IncrementableAttributes include Traits::ApiResource + include Traits::DataAttributeAccessors def identity_vars ; [:id, :email, :user_id] ; end def flat_store_attributes ; [:custom_attributes] ; end